ROS Integration
The DexHand package provides comprehensive ROS integration supporting both ROS1 and ROS2 environments through a unified API.
Setup and Launch
Start the ROS node with the default configuration:
# Launch the ROS node
python examples/ros_node/dexhand_ros.py
# For testing, run the demo publisher
python examples/ros_node/dexhand_ros_publisher_demo.py --hands right --cycle-time 3.0
# Or run the continuous motion publisher
python examples/ros_node/continuous_joint_publisher.py --pattern sine --amplitude 30 --period 5
Configuration Options
The ROS node behavior can be customized through config/config.yaml under the ROS_Node section:
Topic and Service Interface
Topics
Topic (default)  | 
Type  | 
Direction  | 
Description  | 
|---|---|---|---|
/left_hand/joint_commands  | 
sensor_msgs/JointState  | 
Input  | 
Left hand joint commands  | 
/right_hand/joint_commands  | 
sensor_msgs/JointState  | 
Input  | 
Right hand joint commands  | 
/left_hand/joint_states  | 
sensor_msgs/JointState  | 
Output  | 
Left hand joint feedback  | 
/right_hand/joint_states  | 
sensor_msgs/JointState  | 
Output  | 
Right hand joint feedback  | 
/left_hand/touch_sensors  | 
Float64MultiArray  | 
Output  | 
Left hand touch sensor data  | 
/right_hand/touch_sensors  | 
Float64MultiArray  | 
Output  | 
Right hand touch sensor data  | 
/left_hand/motor_feedback  | 
Float64MultiArray  | 
Output  | 
Left hand detailed motor data  | 
/right_hand/motor_feedback  | 
Float64MultiArray  | 
Output  | 
Right hand detailed motor data  | 
Services
Feedback Data Structure
Touch Sensor Data
Touch sensor data is published as Float64MultiArray with 40 values (8 values for each of the 5 fingers):
Format per finger:
[timestamp, normal_force, normal_force_delta, tangential_force, tangential_force_delta, direction, proximity, temperature]Direction is in degrees (0-359, fingertip is 0°) or -1 if invalid
Finger mapping: * Index 0: thumb (th) * Index 1: index finger (ff) * Index 2: middle finger (mf) * Index 3: ring finger (rf) * Index 4: little finger (lf)
Motor Feedback Data
Motor feedback is published as Float64MultiArray with 84 values (7 values for each of the 12 motors):
Format per motor:
[timestamp, angle, encoder_position, current, velocity, error_code, impedance]Impedance values: lower values indicate higher resistance to movement
Motor ordering follows joint names: th_dip, th_mcp, th_rot, ff_spr, etc.
Example Usage
Publishing Joint Commands
# Simple ROS1/ROS2 agnostic publisher
from ros_compat import create_ros_node, Publisher
from sensor_msgs.msg import JointState
# Create node and publisher
node = create_ros_node('hand_command_publisher')
pub = Publisher('/right_hand/joint_commands', JointState, queue_size=10)
# Create message
msg = JointState()
msg.name = ['r_f_joint1_2', 'r_f_joint2_2']  # URDF joint names
msg.position = [0.5, 0.5]  # Radians
# Publish
msg.header.stamp = node.get_time()
pub.publish(msg)