接口参考:
数据与消息定义 自定义消息索引
| 类型 | 主要用途 | 关键字段 | 单位与限制 |
|---|---|---|---|
Encoderstate | 底盘编码器 | left_encoder, right_encoder | uint16 原始计数 0~5600;不等于米 |
RobotPower | 电池与分路电源 | total_voltage, current, remain_capacity, remain_percent, *_voltage | 电压 0.01 V;电流见 电压、电流与百分比;容量的实际换算要求现场协议 |
Camerastate | 各相机频率汇总 | camera_color_fps, camera_depth_fps | uint8[],单位 fps;数组索引不可凭空对应相机 |
BodyData | 腰与颈部高频数据 | header, joint_state, pose, neck_joint_state, neck_pose | JointState.position rad,位置 m,姿态四元数 |
ArmMasterData | 主臂数采 | header, joint_state | rad / rad/s;以消息定义与实机 schema 为准 |
ArmSlaveData | 从臂、位姿、力/触觉 | joint_state, pose, wrench_stamped, gripper_pos, rps_* | rad、m、N/N·m;gripper_pos 0~1;rps_* 缩放不在当前发布版本内推断 |
Rmplusbase / Rmplusstate | 末端执行器配置/状态 | 自由度、上下限、sys_state、dof_err、触觉数组 | angle_* 0.01°,force_* 0.001 N;操作协议仍为参考信息 |
Webdatacollect | 数采元数据 | type, sence_id, task_id, operator_id, device_id | 原始字段名为 sence_id。sence_id、task_id、operator_id 和 device_id 均不能为空,长度为 1~128 个字符,仅允许使用英文字母、数字、点(.)、下划线(_)和连字符(-);不得使用空格、中文、路径分隔符、控制字符或 Shell 特殊字符。 |
StringCmd | JSON/文本请求响应 | 请求 data,响应 data | 只是字符串容器;必须再做 JSON schema、大小、超时和业务错误校验 |
关节编号与单位
数组均以 J1...Jn 顺序解析,左/右臂 7 个、腰 5 个、头 2 个。严格校验数组长度,不自动补零或截断。
| 数据源 | 原始单位 | 转为度 | 转为 rad |
|---|---|---|---|
/robot_slave/states 的 position / REST moveJ.joint | 0.001° | degree = raw / 1000 | rad = raw / 1000 × π / 180 |
sensor_msgs/msg/JointState.position | rad | degree = rad × 180 / π | 原值 |
Rmplusbase.angle_up/angle_low | 0.01° | degree = raw / 100 | rad = raw / 100 × π / 180 |
例:5000 在 0.001° 编码中是 5°,不是 5000°,也不是 5 rad。转换后仍要同时校验实机驱动器限位、软限位和本次相对变化量。
状态与错误码
/robot_slave/states 的臂、腰、头分段通常包含 position、joint_en、joint_err 和 sys_err:
joint_err任一非 0:当前部位不允许继续自动运动;保留整个数组、时间戳和目标。sys_err非 0:发停止,停止本次任务,交由厂商错误码表或支持人员解码。joint_en不满足预期:不自动使能;先检查急停、模式、控制权和故障原因。- 字段缺失、JSON 无法解析、NaN/Inf 或自由度数不对:当作无效状态,不用上次值继续下发。
电压、电流与百分比
RobotPower.*_voltage 按基线旧证据用 0.01 V(即 10 mV);例如 2773 表示 27.73 V。
current 是 uint16 容器内的有符号百分一安培编码(0.01 A,即 10 mA):值大于 32767 时先减 65536,再乘 0.01 A;例如 65018 表示 -5.18 A。
该换算仅适用基线,新版本须先复核消息协议。
remain_percent 作 0~100 的百分数校验,超界则报数据异常。
时间戳、TF 与标定
ROS Header.stamp 是设备发布时间,平台还应记录本机接收时间和时钟偏差;不用文件拷贝时间代替消息时间。时长计算必须使用同一时间域的起止值。
/tf_static 的订阅者必须用 TRANSIENT_LOCAL。
当臂/头/腰无关节 TF,或相机子树与 base_link 断开时,应停止依赖统一 TF lookup:
- 机器人运动学改用版本匹配的 URDF + 关节角;
- 相机几何改用经校验的外参;
CameraInfo只解决相机内参,不能替代相机到本体的外参。
标定写入属高风险,需写前快照、校验数据集和已验证回滚。
MCAP 数据格式
MCAP 是容器,不会自动统一里面的 ROS2 schema。
每次交付至少保存:
- 唯一 run ID
- 软硬件版本
- Topic 名
- 消息类型
- schema/序列化格式
- 起止时间戳
- 消息数
- 文件 SHA-256
相机平均帧率用 count / duration,其中 duration > 0;不用单帧间隔代表整段。
解析失败时保留原始文件,不触发自动远程清理。

