Skip to main content

Driver Interface

Arm Driver Interface

This interface is a ROS package for arm control and state feedback. It defines multiple topics for publishing and subscribing to arm states, control commands, and related error codes. The following is a detailed description of each topic and its corresponding message type:

Topic Name I/O Description Message Type
/hdas/feedback_arm_left Output Left arm joint feedback sensor_msgs::msg::JointState
/hdas/feedback_arm_right Output Right arm joint feedback sensor_msgs::msg::JointState
/hdas/feedback_gripper_left Output Left gripper travel sensor_msgs::msg::JointState
/hdas/feedback_gripper_right Output Right gripper travel sensor_msgs::msg::JointState
/hdas/feedback_status_arm_left Output Left arm state feedback hdas_msg::msg::FeedbackStatus
/hdas/feedback_status_arm_right Output Right arm state feedback hdas_msg::msg::FeedbackStatus
/motion_control/control_arm_left Input Left arm motor control hdas_msg::msg::MotorControl
/motion_control/control_arm_right Input Right arm motor control hdas_msg::msg::MotorControl
/motion_control/control_gripper_left Input Left gripper motor control hdas_msg::msg::MotorControl
/motion_control/control_gripper_right Input Right gripper motor control hdas_msg::msg::MotorControl

The specific fields of the topics above and their detailed descriptions are shown in the table below:

Topic Name Field Description
/hdas/feedback_arm_left header Standard message header
position [Joint 1 position, Joint 2 position, Joint 3 position, Joint 4 position, Joint 5 position, Joint 6 position, gripper joint position]
velocity [Joint 1 velocity, Joint 2 velocity, Joint 3 velocity, Joint 4 velocity, Joint 5 velocity, Joint 6 velocity, gripper joint velocity]
effort [Joint 1 torque, Joint 2 torque, Joint 3 torque, Joint 4 torque, Joint 5 torque, Joint 6 torque, gripper joint torque]
/hdas/feedback_arm_right header Standard message header
position [Joint 1 position, Joint 2 position, Joint 3 position, Joint 4 position, Joint 5 position, Joint 6 position, gripper joint position]
velocity [Joint 1 velocity, Joint 2 velocity, Joint 3 velocity, Joint 4 velocity, Joint 5 velocity, Joint 6 velocity, gripper joint velocity]
effort [Joint 1 torque, Joint 2 torque, Joint 3 torque, Joint 4 torque, Joint 5 torque, Joint 6 torque, gripper joint torque]
/hdas/feedback_gripper_left header Standard message header
position Gripper travel (0-100mm)
velocity Not used for now
effort Not used for now
/hdas/feedback_gripper_right header Standard message header
position Gripper travel (0-100mm)
velocity Not used for now
effort Not used for now
/hdas/feedback_status_arm_left header Standard message header
name_id Joint names
errors Contains error codes and their corresponding error descriptions
/hdas/feedback_status_arm_right header Standard message header
name_id Joint names
errors Contains error codes and their corresponding error descriptions
/motion_control/control_arm_left
(MIT)
header Standard message header
name -
p_des [Joint 1 position, Joint 2 position, Joint 3 position, Joint 4 position, Joint 5 position, Joint 6 position, gripper joint position]
v_des [Joint 1 velocity, Joint 2 velocity, Joint 3 velocity, Joint 4 velocity, Joint 5 velocity, Joint 6 velocity, gripper joint velocity]
kp [Joint 1 kp, Joint 2 kp, Joint 3 kp, Joint 4 kp, Joint 5 kp, Joint 6 kp, gripper joint kp]
kd [Joint 1 kd, Joint 2 kd, Joint 3 kd, Joint 4 kd, Joint 5 kd, Joint 6 kd, gripper joint kd]
t_ff [Joint 1 torque, Joint 2 torque, Joint 3 torque, Joint 4 torque, Joint 5 torque, Joint 6 torque, gripper joint torque]
mode -
/motion_control/control_arm_left
(PID)
header Standard message header
name -
p_des [Joint 1 position, Joint 2 position, Joint 3 position, Joint 4 position, Joint 5 position, Joint 6 position, gripper joint position]
v_des -
t_ff -
mode -
/motion_control/control_arm_right
(MIT)
header Standard message header
name -
p_des [Joint 1 position, Joint 2 position, Joint 3 position, Joint 4 position, Joint 5 position, Joint 6 position, gripper joint position]
v_des [Joint 1 velocity, Joint 2 velocity, Joint 3 velocity, Joint 4 velocity, Joint 5 velocity, Joint 6 velocity, gripper joint velocity]
kp [Joint 1 kp, Joint 2 kp, Joint 3 kp, Joint 4 kp, Joint 5 kp, Joint 6 kp, gripper joint kp]
kd [Joint 1 kd, Joint 2 kd, Joint 3 kd, Joint 4 kd, Joint 5 kd, Joint 6 kd, gripper joint kd]
t_ff [Joint 1 torque, Joint 2 torque, Joint 3 torque, Joint 4 torque, Joint 5 torque, Joint 6 torque, gripper joint torque]
mode -
/motion_control/control_arm_right
(PID)
header Standard message header
name -
p_des [Joint 1 position, Joint 2 position, Joint 3 position, Joint 4 position, Joint 5 position, Joint 6 position, gripper joint position]
v_des [Joint 1 max velocity, Joint 2 max velocity, Joint 3 max velocity, Joint 4 max velocity, Joint 5 max velocity, Joint 6 max velocity, gripper joint max velocity]
t_ff [Joint 1 max torque, Joint 2 max torque, Joint 3 max torque, Joint 4 max torque, Joint 5 max torque, Joint 6 max torque, gripper joint max torque]
mode -
/motion_control/control_gripper_left header Standard message header
name -
p_des Gripper motor position
v_des Gripper motor velocity
kp Gripper motor kp
kd Gripper motor kd
t_ff Gripper torque
mode -
/motion_control/control_gripper_right header Standard message header
name -
p_des Gripper motor position
v_des Gripper motor velocity
kp Gripper motor kp
kd Gripper motor kd
t_ff Gripper torque
mode -

Arm Joint Motor Control Interface

/motion_control/control_arm_left
/motion_control/control_arm_right

MIT Force-Position Hybrid Control Mode Architecture

R1_Lite_arm_driver_mit_mode

The motor output torque formula is used to compute the torque value Tref tracked by the current loop, as follows:

$K_p(p_d - p_e) + K_d(v_d - v_e)+t_{ff} = T_{ref}$

Where: Kp and Kd are the proportional terms for position gain and velocity gain; p_des and v_des are the desired position and velocity; t_ff is the feedforward torque; p_e is the position fed back by the encoder, and v_e is the motor speed obtained by differentiation.

  • The input terms include: Kp, Kd, pd, vd, t_ff. The feedback terms pe and ve do not need to be entered manually.

Tips:

  • Feedforward torque: This value is mandatory. Since the position and velocity terms cannot compensate for large torque errors, the feedforward torque should at least compensate for the effect of the arm's own gravity.

  • Recommended gain settings: The following are the recommended kp and kd values for the A1X motor. Please adjust them with caution.

    A1X_kp = [ 140.0, 200.0, 120.0, 80.0, 80.0, 80.0 ]
    A1X_kd = [ 10.0, 30.0, 5.0, 10.0, 10.0, 10.0 ]

PID Servo Control Mode Architecture

R1_Lite_arm_driver_pid_mode

The servo control mode uses three-loop PID (position loop, velocity loop, current loop) control. This mode introduces an integral term and has a small steady-state error. To maintain interface consistency, its control data format is identical to that of the MIT interface.

Where: p_des: the target angle (rad); v_des: not meaningful; k_p, k_d: not meaningful; t_ff: not meaningful.

Torso Driver Interface

This interface is a ROS package for torso control and state feedback. It defines multiple topics for publishing and subscribing to the state and control commands of the torso motors. The following is a detailed description of each topic and its corresponding message type:

Topic Name I/O Description Message Type
/hdas/feedback_torso Output Torso joint feedback sensor_msgs::msg::JointState
/hdas/feedback_status_torso Output Torso state feedback hdas_msg::msg::FeedbackStatus
/motion_control/control_torso (this topic cannot actively publish messages) Input Torso motor control hdas_msg::msg::MotorControl

The specific fields of the topics above and their detailed descriptions are shown in the table below:

Topic Name Field Description
/hdas/feedback_torso header Standard message header
position [Joint 1 position, Joint 2 position, Joint 3 position, 0]
velocity [Joint 1 velocity, Joint 2 velocity, Joint 3 velocity, 0]
effort [Joint 1 torque, Joint 2 torque, Joint 3 torque, 0]
/hdas/feedback_status_torso header Standard message header
name_id Joint names
errors Contains error codes and their corresponding error descriptions
/motion_control/control_torso header Standard message header
name -
p_des [Joint 1 position, Joint 2 position, Joint 3 position, 0]
v_des [Joint 1 max velocity, Joint 2 max velocity, Joint 3 max velocity, 0]
kp [-, -, -, -]
kd [-, -, -, -]
t_ff [-, -, -, -]
mode -

Chassis Driver Interface

This interface is a ROS package for chassis state feedback. It defines multiple topics to report the state of the chassis motors. The following is a detailed description of each topic and its associated message type:

Topic Name I/O Description Message Type
/hdas/feedback_chassis Output Chassis hub and steering motor feedback sensor_msgs::msg::JointState
/hdas/feedback_status_chassis Output Chassis state feedback hdas_msg::msg::FeedbackStatus
/motion_control/control_chassis Input Chassis hub and steering motor control hdas_msg::msg::MotorControl

The specific fields of the topics above and their detailed descriptions are shown in the table below:

Topic Name Field Description
/hdas/feedback_chassis header Standard message header
position [front-left wheel angle, front-right wheel angle, rear wheel angle]
velocity [front-left wheel linear velocity, front-right wheel linear velocity, rear wheel linear velocity]
[front-left wheel angular velocity, front-right wheel angular velocity, rear wheel angular velocity]
effort [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
/hdas/feedback_status_chassis header Standard message header
name_id Joint names
errors Contains error codes and their corresponding error descriptions
/motion_control/control_chassis header Standard message header
name -
p_des [front-left wheel angle, front-right wheel angle, rear wheel angle]
v_des [front-left wheel linear velocity, front-right wheel linear velocity, rear wheel linear velocity]
kp -
kd -
t_ff -
mode -

Camera Interface

Topic Name I/O Description Message Type
/hdas/camera_wrist_left/color/image_raw/compressed Output Left wrist camera RGB compressed image sensor_msgs::msg::CompressedImage
/hdas/camera_wrist_right/color/image_raw/compressed Output Right wrist camera RGB compressed image sensor_msgs::msg::CompressedImage
/hdas/camera_head/left_raw/image_raw_color/compressed Output Head camera left-eye RGB compressed image sensor_msgs::msg::CompressedImage
/hdas/camera_head/right_raw/image_raw_color/compressed Output Head camera right-eye RGB compressed image sensor_msgs::msg::CompressedImage
/hdas/camera_wrist_left/aligned_depth_to_color/image_raw Output Left wrist camera depth image sensor_msgs::msg::Image
/hdas/camera_wrist_right/aligned_depth_to_color/image_raw Output Right wrist camera depth image sensor_msgs::msg::Image

The specific fields of the topics above and their detailed descriptions are shown in the table below:

Topic Name Field Description
/hdas/camera_wrist_left/color/image_raw/compressed header Standard message header
format JPEG
data Image data
/hdas/camera_wrist_right/color/image_raw/compressed header Standard message header
format JPEG
data Image data
/hdas/camera_head/left_raw/image_raw_color/compressed header Standard message header
format JPEG format
data Image data
/hdas/camera_head/right_raw/image_raw_color/compressed header Standard message header
format JPEG format
data Image data
/hdas/camera_wrist_left/aligned_depth_to_color/image_raw header Standard message header
height Depends on the settings
width Depends on the settings
encoding 16UC1
is_bigendian 0
step Depends on the settings
data Image data
/hdas/camera_wrist_right/aligned_depth_to_color/image_raw header Standard message header
height Depends on the settings
width Depends on the settings
encoding 16UC1
is_bigendian 0
step Determined by the configuration
data Image data

IMU Interface

Topic Name I/O Description Message Type
/hdas/imu_chassis Output Chassis IMU feedback sensor_msgs::msg::Imu
/hdas/imu_torso Output Torso IMU feedback sensor_msgs::msg::Imu

The specific fields of the topics above and their detailed descriptions are shown in the table below:

Topic Name Field Description
/hdas/imu_chassis header Standard message header
orientation.x Quaternion x
orientation.y Quaternion y
orientation.z Quaternion z
orientation.w Quaternion w
angular_velocity.x Gyroscope angular velocity x
angular_velocity.y Gyroscope angular velocity y
angular_velocity.z Gyroscope angular velocity z
linear_acceleration.x Linear acceleration x
linear_acceleration.y Linear acceleration y
linear_acceleration.z Linear acceleration z
/hdas/imu_torso header Standard message header
orientation.x Quaternion x
orientation.y Quaternion y
orientation.z Quaternion z
orientation.w Quaternion w
angular_velocity.x Gyroscope angular velocity x
angular_velocity.y Gyroscope angular velocity y
angular_velocity.z Gyroscope angular velocity z
linear_acceleration.x Linear acceleration x
linear_acceleration.y Linear acceleration y
linear_acceleration.z Linear acceleration z

BMS Interface

Topic Name I/O Description Message Type
/hdas/bms Output Battery BMS message hdas_msg::msg::Bms

The specific fields of the topics above and their detailed descriptions are shown in the table below:

Topic Name Field Description
/hdas/bms header Standard message header
voltage Voltage (V)
current Current (I)
capital Remaining battery (%)

Remote Controller Interface

Topic Name I/O Description Message Type
/controller Output Remote controller signal hdas_msg::msg::ControllerSignalStamped

The specific fields of the topics above and their detailed descriptions are shown in the table below:

Topic Name Field Description
/controller header Standard message header
data.left_x_axis Left joystick x direction
data.left_y_axis Left joystick y direction
data.right_x_axis Right joystick x direction
data.right_y_axis Right joystick y direction
mode 2: remote controller control (chassis)
5: host computer control (chassis)
    <tr style="text-align: left;">
<td style="padding: 8px; border: 1px solid #ddd;" rowspan="11">/hdas/imu_torso</td>
<td style="padding: 8px; border: 1px solid #ddd;">header</td>
<td style="padding: 8px; border: 1px solid #ddd;">Standard message header</td>
</tr>
<tr style="text-align: left;">
<td style="padding: 8px; border: 1px solid #ddd;">orientation.x</td>
<td style="padding: 8px; border: 1px solid #ddd;">Quaternion x</td>
</tr>
<tr style="text-align: left;">
<td style="padding: 8px; border: 1px solid #ddd;">orientation.y</td>
<td style="padding: 8px; border: 1px solid #ddd;">Quaternion y</td>
</tr>
<tr style="text-align: left;">
<td style="padding: 8px; border: 1px solid #ddd;">orientation.z</td>
<td style="padding: 8px; border: 1px solid #ddd;">Quaternion z</td>
</tr>
<tr style="text-align: left;">
<td style="padding: 8px; border: 1px solid #ddd;">orientation.w</td>
<td style="padding: 8px; border: 1px solid #ddd;">Quaternion w</td>
</tr>
<tr style="text-align: left;">
<td style="padding: 8px; border: 1px solid #ddd;">angular_velocity.x</td>
<td style="padding: 8px; border: 1px solid #ddd;">Gyroscope angular velocity x</td>
</tr>
<tr style="text-align: left;">
<td style="padding: 8px; border: 1px solid #ddd;">angular_velocity.y</td>
<td style="padding: 8px; border: 1px solid #ddd;">Gyroscope angular velocity y</td>
</tr>
<tr style="text-align: left;">
<td style="padding: 8px; border: 1px solid #ddd;">angular_velocity.z</td>
<td style="padding: 8px; border: 1px solid #ddd;">Gyroscope angular velocity z</td>
</tr>
<tr style="text-align: left;">
<td style="padding: 8px; border: 1px solid #ddd;">linear_acceleration.x</td>
<td style="padding: 8px; border: 1px solid #ddd;">Linear acceleration x</td>
</tr>
<tr style="text-align: left;">
<td style="padding: 8px; border: 1px solid #ddd;">linear_acceleration.y</td>
<td style="padding: 8px; border: 1px solid #ddd;">Linear acceleration y</td>
</tr>
<tr style="text-align: left;">
<td style="padding: 8px; border: 1px solid #ddd;">linear_acceleration.z</td>
<td style="padding: 8px; border: 1px solid #ddd;">Linear acceleration z</td>
</tr>
</tbody>

BMS Interface

Topic Name I/O Description Message Type
/hdas/bms Output Battery BMS message hdas_msg::bms

The specific fields of the topics above and their detailed descriptions are shown in the table below:

Topic Name Field Description
/hdas/bms header Standard message header
voltage Voltage (V)
current Current (I)
capital Remaining battery (%)

Remote Controller Interface

Topic Name I/O Description Message Type
/controller Output Remote controller signal hdas_msg::controller_signal_stamped

The specific fields of the topics above and their detailed descriptions are shown in the table below:

Topic Name Field Description
/controller header Standard message header
data.left_x_axis Left joystick x direction
data.left_y_axis Left joystick y direction
data.right_x_axis Right joystick x direction
data.right_y_axis Right joystick y direction
mode 2: remote controller control (chassis)
5: host computer control (chassis)
-->