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 |