API Reference:
Data & Message Definitions Custom Message Index
| Type | Main Purpose | Key Fields | Units & Constraints |
|---|---|---|---|
Encoderstate | Chassis Encoders | left_encoder, right_encoder | uint16 raw counts 0–5600; NOT equal to meters |
RobotPower | Battery & Channelized Power | total_voltage, current, remain_capacity, remain_percent, *_voltage | Voltage in 0.01 V; current scaled per Voltage, Current & Percentage Conversions; capacity conversion requires on-site protocol specification |
Camerastate | Camera Frame Rate Aggregation | camera_color_fps, camera_depth_fps | uint8[] array in fps; array indices MUST NOT be arbitrarily mapped to cameras |
BodyData | Waist & Neck High-Frequency Data | header, joint_state, pose, neck_joint_state, neck_pose | JointState.position in rad, pose position in meters, orientation in quaternions |
ArmMasterData | Master Arm Teleoperation Data | header, joint_state | rad / rad/s; subject to message definition and physical device schema |
ArmSlaveData | Slave Arm, Pose, Force/Tactile Data | joint_state, pose, wrench_stamped, gripper_pos, rps_* | rad, m, N/N·m; gripper_pos 0–1; rps_* scaling factors NOT inferred in V1.1 release |
Rmplusbase / Rmplusstate | End-Effector Config / Status | DOFs, upper/lower limits, sys_state, dof_err, tactile array | angle_* in 0.01°, force_* in 0.001 N; operation protocol remains reference information |
Webdatacollect | Teleoperation Data Collection Metadata | type, sence_id, task_id, operator_id, device_id | The original field name is sence_id. The sence_id, task_id, operator_id, and device_id fields must not be empty. Each field must be 1–128 characters in length and contain only alphanumeric characters, dots (.), underscores (_), and hyphens (-). Spaces, Chinese characters, path separators, control characters, or Shell special characters are strictly prohibited. |
StringCmd | JSON / Text Request & Response | Request data, Response data | String container ONLY; JSON schema validation, payload size, timeout, and business error checks are mandatory |
Joint Indexing & Unit Conversions
Arrays are parsed in strict J1...Jn order: 7 DOFs for left/right arms, 5 for waist, 2 for head. Strict array length validation is required; auto-padding with zeros or truncating arrays is strictly prohibited.
| Data Source | Raw Unit | Conversion to Degrees | Conversion to Radians |
|---|---|---|---|
/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 / π | Raw value |
Rmplusbase.angle_up/angle_low | 0.01° | degree = raw / 100 | rad = raw / 100 × π / 180 |
Example: A raw value of
5000in 0.001° encoding represents 5°, NOT 5000°, and NOT 5 rad. Following conversion, physical driver limits, software limits, and relative displacement delta for the current move MUST be cross-validated simultaneously.
Status & Error Codes
The arm, waist, and head telemetry sections inside /robot_slave/states typically include position, joint_en, joint_err, and sys_err. V1.1 defines evaluation rules only and does not speculate on non-zero bit meanings without an official vendor error lookup table:
- Any non-zero element in
joint_err: Automated motion for the target body part is strictly PROHIBITED; retain full error array, timestamp, and target values. - Non-zero
sys_err: Issue immediate stop command, abort current task, and escalate to vendor error code lookup table or technical support for decoding. joint_enstate mismatch: Do NOT attempt automated enabling; check E-stop status, control mode, ownership tokens, and underlying fault causes first.- Missing fields, unparsable JSON, NaN/Inf values, or invalid DOF array lengths: Treat as INVALID state data and NEVER use previous state cache to continue motion dispatch.
Voltage, Current & Percentage Conversions
RobotPower.*_voltage fields are encoded in 0.01 V (10 mV) increments based on baseline verification; e.g., 2773 represents 27.73 V.
current is a signed hundredths-of-an-ampere integer (0.01 A / 10 mA) packed inside a uint16 container: if the raw value exceeds 32767, subtract 65536 before multiplying by 0.01 A; e.g., 65018 represents -5.18 A.
This conversion applies strictly to baseline builds; protocol definitions MUST be re-verified prior to deployment on newer software versions.
remain_percent must pass validation within the range 0–100; values exceeding bounds must be flagged as telemetry data anomalies.
Timestamps, TF Trees & Calibration
ROS Header.stamp records device publication time. The platform must also log local host reception time and clock drift; replacing message header timestamps with file copy timestamps is strictly prohibited. Duration calculations MUST use start and end timestamps originating from the same time domain.
Subscribers to /tf_static MUST use TRANSIENT_LOCAL durability QoS policy.
When joint TF trees are missing for arms/head/waist, or camera subtrees are disconnected from base_link, reliance on unified TF lookup MUST cease:
- Robot kinematics must fall back to version-matched URDF models combined with real-time joint angles.
- Camera geometry must fall back to verified extrinsic calibration parameters.
CameraInfotopics resolve camera intrinsic parameters ONLY and cannot replace camera-to-body extrinsic transforms.
Writing calibration parameters is classified as a high-risk operation requiring pre-write state snapshots, validation dataset checks, and verified rollback procedures.
MCAP Data Format Specifications
MCAP is a container format and does not automatically unify or sanitize internal ROS 2 schemas.
Every delivery recording package MUST retain:
- Unique run ID
- Hardware & software build versions
- Topic names
- Message types
- Schema / serialization formats
- Start and end timestamps
- Total message counts
- File SHA-256 hashes
Average camera frame rates MUST be calculated using count / duration where duration > 0; using single-frame inter-arrival intervals to represent overall stream frame rate is prohibited.
If parsing fails, original MCAP files MUST be retained, and automated remote cleanup must NOT be triggered.

