feat: MQTT bridge for iOS GPS on /saltybot/ios/gps (Issue #681) #723
@ -164,8 +164,8 @@ class MqttRos2BridgeNode(Node):
|
||||
self._mqtt_connect()
|
||||
|
||||
self.get_logger().info(
|
||||
"MQTT→ROS2 bridge started — broker=%s:%d use_phone_ts=%s",
|
||||
p["mqtt_host"], p["mqtt_port"], p["use_phone_timestamp"],
|
||||
f"MQTT→ROS2 bridge started — broker={p['mqtt_host']}:{p['mqtt_port']}"
|
||||
f" use_phone_ts={p['use_phone_ts']}"
|
||||
)
|
||||
|
||||
# ── Param helper ─────────────────────────────────────────────────────────
|
||||
@ -197,7 +197,7 @@ class MqttRos2BridgeNode(Node):
|
||||
)
|
||||
self._mqtt.loop_start()
|
||||
except Exception as e:
|
||||
self.get_logger().warning("MQTT initial connect error: %s", str(e))
|
||||
self.get_logger().warning(f"MQTT initial connect error: {e}")
|
||||
|
||||
def _on_mqtt_connect(self, client, userdata, flags, rc) -> None:
|
||||
if rc == 0:
|
||||
@ -206,17 +206,17 @@ class MqttRos2BridgeNode(Node):
|
||||
for topic in (_TOPIC_IMU, _TOPIC_GPS, _TOPIC_BATTERY, _TOPIC_IOS_GPS):
|
||||
client.subscribe(topic, qos=0)
|
||||
self.get_logger().info(
|
||||
"MQTT connected to %s:%d — subscribed to 4 phone topics",
|
||||
self._p["mqtt_host"], self._p["mqtt_port"],
|
||||
f"MQTT connected to {self._p['mqtt_host']}:{self._p['mqtt_port']}"
|
||||
" — subscribed to 4 phone topics"
|
||||
)
|
||||
else:
|
||||
self.get_logger().warning("MQTT connect failed rc=%d", rc)
|
||||
self.get_logger().warning(f"MQTT connect failed rc={rc}")
|
||||
|
||||
def _on_mqtt_disconnect(self, client, userdata, rc) -> None:
|
||||
self._mqtt_connected = False
|
||||
if rc != 0:
|
||||
self.get_logger().warning(
|
||||
"MQTT disconnected (rc=%d) — paho will reconnect", rc
|
||||
f"MQTT disconnected (rc={rc}) — paho will reconnect"
|
||||
)
|
||||
|
||||
def _on_mqtt_message(self, client, userdata, message) -> None:
|
||||
@ -228,7 +228,7 @@ class MqttRos2BridgeNode(Node):
|
||||
try:
|
||||
self._q.put_nowait((topic, message.payload))
|
||||
except queue.Full:
|
||||
self.get_logger().debug("MQTT queue full — dropping %s", topic)
|
||||
self.get_logger().debug(f"MQTT queue full — dropping {topic}")
|
||||
|
||||
# ── Queue drain (ROS2 executor thread) ────────────────────────────────────
|
||||
|
||||
@ -248,7 +248,7 @@ class MqttRos2BridgeNode(Node):
|
||||
self._err_count.get(topic, {}) # just access
|
||||
if topic in self._err_count:
|
||||
self._err_count[topic] += 1
|
||||
self.get_logger().debug("JSON decode error on %s: %s", topic, e)
|
||||
self.get_logger().debug(f"JSON decode error on {topic}: {e}")
|
||||
return
|
||||
|
||||
try:
|
||||
@ -263,7 +263,7 @@ class MqttRos2BridgeNode(Node):
|
||||
except (KeyError, TypeError, ValueError) as e:
|
||||
if topic in self._err_count:
|
||||
self._err_count[topic] += 1
|
||||
self.get_logger().debug("Payload error on %s: %s — %s", topic, e, data)
|
||||
self.get_logger().debug(f"Payload error on {topic}: {e} — {data}")
|
||||
|
||||
# ── Timestamp helper ──────────────────────────────────────────────────────
|
||||
|
||||
@ -285,8 +285,7 @@ class MqttRos2BridgeNode(Node):
|
||||
drift = abs(now_epoch - phone_ts)
|
||||
if drift > self._p["warn_drift_s"]:
|
||||
self.get_logger().warning(
|
||||
"Phone clock drift %.2f s (frame_id=%s) — using ROS2 clock",
|
||||
drift, frame_id,
|
||||
f"Phone clock drift {drift:.2f} s (frame_id={frame_id}) — using ROS2 clock"
|
||||
)
|
||||
hdr.stamp = self.get_clock().now().to_msg()
|
||||
else:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user