Refactor and enhance XR-RM teleoperation functionality

This commit is contained in:
2026-05-31 20:06:07 +08:00
parent 3f48468f63
commit 948d50cab4
13 changed files with 409 additions and 354 deletions

View File

@ -44,7 +44,7 @@ class UdpControllerReceiver(Node):
self._quat_order = str(self.get_parameter("quat_order").value).lower()
# UDP 接收使用非阻塞模式,避免没有手柄数据时卡住 ROS2 定时器。
self._publishers = {
self._controller_publishers = {
"left": self.create_publisher(XrController, left_topic, 10),
"right": self.create_publisher(XrController, right_topic, 10),
}
@ -78,7 +78,7 @@ class UdpControllerReceiver(Node):
except (KeyError, TypeError, ValueError) as exc:
self.get_logger().warn(f"XR 手柄字段错误:{exc}", throttle_duration_sec=1.0)
continue
self._publishers[msg.hand].publish(msg)
self._controller_publishers[msg.hand].publish(msg)
def _iter_controller_payloads(self, payload: Any) -> Iterable[tuple[str, Mapping[str, Any]]]:
if isinstance(payload, list):
@ -214,9 +214,12 @@ def main(args: list[str] | None = None) -> None:
node = UdpControllerReceiver()
try:
rclpy.spin(node)
except KeyboardInterrupt:
pass
finally:
node.destroy_node()
rclpy.shutdown()
if rclpy.ok():
rclpy.shutdown()
if __name__ == "__main__":