Custom message types#
This page documents the custom ROS 2 message types used by Honey Badger 5.0. All custom messages are defined in the hb50_commons package.
BridgeData — high-rate hardware frame#
Message type: hb50_commons/msg/BridgeData
Producer: bridge_node
Rate: 500 Hz
QoS: mabRT
Use case: Control applications requiring raw actuator data
Contains the high-frequency mainboard update with kinematics and IMU data. This is the primary topic for control loops and state estimation.
Fields#
Field |
Type |
Description |
|---|---|---|
|
|
Timestamp and frame ID |
|
|
IMU orientation (quaternion) |
|
|
Body angular velocity (rad/s) |
|
|
Body linear acceleration (m/s²) |
|
|
Names of actuators (e.g., |
|
|
Current position of each joint (rad) |
|
|
Current velocity of each joint (rad/s) |
|
|
Estimated torque of each joint (N·m) |
|
|
Temperature of each actuator (°C) |
|
|
Status flags for each joint |
BridgeState — power and diagnostic state#
Message type: hb50_commons/msg/BridgeState
Producer: bridge_node
Rate: 500 Hz (standard), 10 Hz (/bridge_state_10hz)
QoS: mabRT (500 Hz), Reliable (10 Hz)
Use case: Diagnostics, UI, monitoring
Contains power subsystem state, temperatures and hardware status. A low-frequency variant (/bridge_state_10hz) is provided for visualization and lossy networks.
Fields#
Field |
Type |
Description |
|---|---|---|
|
|
Battery charge state (0–100 %) |
|
|
Bus voltage (V) |
|
|
Bus current (A) |
|
|
Instantaneous bus power (W) |
|
|
Cumulative bus power transfer (kWh) |
|
|
Leg actuator supply voltage (V) |
|
|
Charger input voltage (V) |
|
|
Bridge board temperature (°C) |
|
|
Auxiliary sensor 1 temperature (°C) |
|
|
Auxiliary sensor 2 temperature (°C) |
|
|
Whether actuators are energized |
|
|
Hardware status strings (warnings, errors) |
|
|
System uptime (s) |
JointCommand — actuator control commands#
Message type: hb50_commons/msg/JointCommand
Producer: control_node, user nodes
Rate: 500 Hz (as needed)
QoS: mabRT
Use case: Control applications commanding joint motion
Commands the actuators with target position, velocity, torque and PD gains. Critical: actuators must be commanded in strict order defined in the robot configuration.
bridge_nodesubscribes only to/hb50/joint_commandtopic. Custom control programs can publishJointCommandmessages directly to this topic; if the custom publisher maintains at least 10 Hz,bridge_nodewill prioritize it over the defaultcontrol_nodepublisher.
Fields#
Field |
Type |
Description |
|---|---|---|
|
|
Timestamp and source |
|
|
Name of commanding node (e.g., |
|
|
Actuator identifiers (e.g., |
|
|
Position gain for each joint |
|
|
(Reserved) Integral gain |
|
|
Velocity damping gain for each joint |
|
|
Target position (rad) |
|
|
Target velocity (rad/s) |
|
|
Target torque (N·m) |
|
|
Enable brake for each joint |
Important: Array lengths must match the number of actuators. Order must correspond to the actuator ordering in the configuration.
RobotState — estimated state#
Message type: hb50_commons/msg/RobotState
Producer: control_node
Rate: 500 Hz (standard), 10 Hz (/robot_state_10hz)
QoS: mabRT (500 Hz), Reliable (10 Hz)
Use case: State machine, planning, visualization
Contains state estimation outputs, body kinematics and dynamics. A low-frequency variant (/robot_state_10hz) is provided for visualization and UI applications.
Fields#
Field |
Type |
Description |
|---|---|---|
|
|
Timestamp and frame ID |
|
|
Array of leg states (one entry per leg) |
|
|
Estimated body pose (position and orientation) |
|
|
Body velocity in body frame (m/s, rad/s) |
|
|
Body velocity in world frame (m/s, rad/s) |
|
|
Current motion mode (enum, see |
|
|
Motion type classification (enum) |
|
|
Current gait (Idle, Stand, Walk, Run, etc.) |
For motion mode and gait enums, refer to hb50_control/hb50_control.hpp in the source repository.
LegState — per-leg status#
Message type: hb50_commons/msg/LegState
Nested in: RobotState
Use case: Leg-specific diagnostics and control
Describes the estimated state of a single leg, including foot contact and forces.
Fields#
Field |
Type |
Description |
|---|---|---|
|
|
Leg identifier (e.g., |
|
|
Whether foot is in contact with ground |
|
|
Foot position in body frame (m) |
|
|
Foot velocity (m/s) |
|
|
Estimated ground reaction force (N) |
Status — event and status messages#
Message type: hb50_commons/msg/Status
Producers: All nodes (by heartbeat sub-node), bridge_node (hardware events), control_node (control events)
Rate: 1 Hz (heartbeat), as needed (events)
QoS: Reliable
Use case: Monitoring, logging, alarm handling
General‑purpose status message for reporting important events, warnings and errors.
Fields#
Field |
Type |
Description |
|---|---|---|
|
|
Timestamp and source frame |
|
|
Severity level: |
|
|
Name of the node sending the status |
|
|
Human-readable message |
|
|
Optional structured data (node‑specific) |
Level enum#
OK=1— normal operationWARN=2— warning conditionERROR=3— error conditionSTALE=4— stale/timeout condition
All nodes should publish a heartbeat Status message with level=OK at least every 1 second. Missing heartbeats indicate communication loss or node crash.
Velocity command interpretation#
The standard ROS geometry message /hb50/velocity_command (geometry_msgs/msg/Twist) is used for high‑level gait commands. Components are interpreted as:
Linear velocity#
x— forward velocity (normalized to[-1, 1])y— lateral velocity (normalized to[-1, 1])z— reference walking height (normalized to1)
Angular velocity#
x— roll command (normalized to[-1, 1])y— pitch command (normalized to[-1, 1])z— yaw rate (normalized to[-1, 1])
Normalization: All normalized commands are scaled by configuration parameters (cmd_vel_lin, cmd_vel_ang) to produce physical values in SI units (m/s, rad/s).
Message usage guide#
For control loop development#
Subscribe to:
/hb50/bridge_data(500 Hz) for raw actuator feedbackPublish to:
/hb50/joint_command(500 Hz) for actuator commandsMonitor:
/hb50/robot_state(500 Hz) for state estimationCheck:
/hb50/heartbeat(1 Hz) to detect stale nodes
For UI and visualization#
Subscribe to:
/hb50/robot_state_10hzand/hb50/bridge_state_10hz(10 Hz, Reliable QoS)Monitor:
/hb50/statusfor warnings and errorsListen to:
/tfand/tf_staticfor frame transforms
For diagnostics and logging#
Monitor:
/hb50/bridge_statefor power and temperature trendsWatch:
/hb50/statusand/hb50/heartbeatfor node healthCheck:
joint_temperatureandjoint_statusin/hb50/bridge_datafor actuator issues