ROS 2 适配

ROS 2 适配器只订阅信息中枢的 status 帧,消费其中的统一 MocapState;它不监听 IMU UDP 端口,也不复制校准、共同时间轴或 claw 解算。

启动

先启动信息中枢。若要以约 50 Hz 发布 IMU 和骨架,应把状态帧频率也设置为 50 Hz:

python3 SOFTWARE/信息中枢/mocap_ws_hub.py --status-hz 50

在已 source ROS 2 环境的终端运行:

source /opt/ros/<distro>/setup.bash
python3 -m pip install -r SOFTWARE/信息中枢/requirements.txt
python3 adapters/ros2/mocap_ros2_node.py

输出

  • /motion_tracker/state_json (std_msgs/String):完整 MocapState JSON。

  • /motion_tracker/control_json (std_msgs/String):yawrollpitchdistancezclaw、校准状态和同步质量。

  • /motion_tracker/imu/<node_id> (sensor_msgs/Imu):节点原始四元数;离线节点不发布。

  • /motion_tracker/skeleton/{shoulder,elbow,wrist,palm,fingertip} (geometry_msgs/PoseStamped):骨架点位。

  • tf2body_rh -> shoulder -> elbow -> wrist -> palm -> fingertip

所有 ImuPoseStamped 与 tf 的 header.stamp 都严格使用 frame_time_ns。当共同时间轴 无效、frame_time_ns=null 时,适配器只发布 JSON 状态和控制,不会使用 WebSocket 接收时刻或 solved_time_ns 伪造 ROS 时间戳。

body_rh 的轴语义保持不变:X 前、Y 左、Z 上;ROS 适配器不做坐标轴翻转。

ROS 1 边界

当前仓库没有必须兼容的 ROS 1 系统,因此不提供第二套 ROS 1 动捕核心。未来如确有 ROS 1 需求,应由 ROS 1 bridge 订阅本信息中枢的 JSON 状态,或桥接本 ROS 2 节点;不得重新监听 IMU UDP、复制人体校准或修改 MocapState 数值语义。