Skip to content

DDS Interface

The underlying communication provides data interaction between the client PC and the robot.

  • Subscribe to topic rt/lowstate (Type: pnd_adam.msg.dds_.LowState_) to get the current state of Adam.
  • Subscribe to topic rt/handstate (Type: pnd_adam.msg.dds_.HandState_) to get the current state of the fingers.
  • Publish to topic rt/lowcmd (Type: pnd_adam.msg.dds_.LowCmd_) to control whole-body joint motors (excluding dexterous hands), batteries, and other equipment.
  • Publish to topic rt/handcmd (Type: pnd_adam.msg.dds_.Handcmd_) to control finger joint motors.

Interface Description

Use the methods introduced in the DDS API to subscribe to or publish topics. Topic information is stored in structures defined by IDL. Common structures include:

Structure Name Description
_BatteryData_.py Battery status (voltage, current, power, etc.)
_HandCmd_.py Dexterous hand desired position control
_HandState_.py Dexterous hand actual status feedback
_IMUState_.py Adam IMU attitude and acceleration data
_LowCmd_.py Adam low-level whole-body control commands
_LowState_.py Adam low-level whole-body status summary
_MotorCmd_.py Single motor control parameters (position, velocity, torque, and gains)
_MotorState_.py Single motor status feedback

DDS Message Definitions

Published Message: rt/lowcmd (Desired Body Position)

Field Type Dimension Meaning
mode_pr uint8 1 Mode control
motor_cmd MotorCmd_ * Variable length[1]
reserve uint32 1 Reserved field

[1] motor_cmd description: The length depends on the robot model:

  • Adam Pro: 31-dimensional actuator data
  • Adam SP: 29-dimensional actuator data
  • Adam Lite: 23-dimensional actuator data

Subscribed Message: rt/lowstate (Actual Body State)

Field Type Dimension Meaning
mode_pr uint8 1 Current mode state
tick uint32 1 System timestamp/ticks
imu_state IMUState_ 9 IMU attitude data
motor_state MotorState_ * Variable length[1]
wireless_remote short 40 Wireless controller data[2]
battery_data BatteryData_ 1 Battery level and status information
reserve uint32 1 Reserved field

[1] motor_state description: The length depends on the robot model:

  • Adam Pro: 31-dimensional actuator data
  • Adam SP: 29-dimensional actuator data
  • Adam Lite: 23-dimensional actuator data

[2] wireless_remote description: Indices 20-40 are empty. 0-19 correspond to the controller buttons: "lx", "ly", "rx", "ry", "lt", "rt", "xx", "yy", "a", "b", "x", "y", "lb", "rb", "back", "start", "home", "lo", "ro".

Auxiliary Structure Definitions

Battery Status Type: BatteryData_

Field Type Meaning
timestamp_ms int64 Millisecond timestamp
voltage float32 Voltage (V)
current float32 Current (A)
power float32 Power (W)
wh_accumulated float32 Accumulated power consumption (Wh)
status string Battery status description

IMU Data Type: IMUState_

Field Type Dimension Meaning
quaternion float32 4 Quaternion [w, x, y, z]
gyroscope float32 3 Angular velocity [x, y, z]
accelerometer float32 3 Acceleration [x, y, z]
ypr float32 3 Attitude angles [yaw, pitch, roll]
temperature int16 1 Sensor temperature

Single Joint Control Type: MotorCmd_

Field Type Meaning
mode uint8 Mode (default is 0)
q float32 Desired position (rad)
dq float32 Desired velocity (rad/s)
tau float32 Desired torque (Nm)
kp float32 Proportional gain (Stiffness)
kd float32 Derivative gain (Damping)
ki float32 Integral gain
reserve uint32 Reserved field

Single Joint State Type: MotorState_

Field Type Meaning
mode uint8 Current mode
q float32 Actual position (rad)
dq float32 Actual velocity (rad/s)
ddq float32 Actual acceleration (\(\text{rad/s}^2\))
tau_est float32 Estimated torque (Nm)
state uint32 Motor operation status code
reserve uint32 Reserved field

Dexterous Hand Interface

Published Message: rt/handcmd (Desired Finger Position)

Field Type Dimension Meaning
position uint32 12 Desired hand position
reserve uint32 1 Reserved field

Subscribed Message: rt/handstate (Actual Finger State)

Field Type Dimension Meaning
position uint32 12 Actual hand position
reserve uint32 1 Reserved field