ROS2 使用说明

启动与配置

启动命令

命令说明
ros2 launch wujihand_bringup wujihand.launch.py仅启动驱动
ros2 launch wujihand_bringup wujihand.launch.py rviz:=true启动驱动并通过 RViz 可视化
ros2 launch wujihand_bringup wujihand_dual.launch.py一键启动并自动连接左右两只手

可配置参数

左右手类型从硬件自动检测,无需手动指定。

参数默认值说明
hand_namehand_0命名空间,用于区分多手。
示例:ros2 launch wujihand_bringup wujihand.launch.py hand_name:=my_hand
serial_number""设备序列号(空则自动检测)
hand_side""无序列号时按左右手连接:""(唯一设备)、leftright
name_by_handednessfalse开启后话题与服务根命名空间使用硬件检测到的左右手(/hand_left//hand_right/),覆盖 hand_name。双手启动会自动开启
publish_rate1000.0关节状态发布频率 (Hz)
filter_cutoff_freq10.0低通滤波截止频率 (Hz)
diagnostics_rate10.0诊断信息发布频率 (Hz)
rvizfalse是否启动 RViz 可视化

多手配置

当需要同时控制多只灵巧手时,可通过序列号和命名空间区分。

查询已连接设备的序列号

列出当前 USB 上所有 WujiHand 设备的序列号,填入下方启动命令的 serial_number

ros2 run wujihand_driver wujihand_list

如果打开新终端,需要重新加载 ROS2 环境

# 加载 ROS2 环境,替换 <distro> 为实际安装的 ROS2 发行版
source /opt/ros/<distro>/setup.bash
# 如使用源码编译,请叠加工作空间(Deb 包安装可跳过)
# 将 <workspace> 替换为实际工作空间路径,如 ~/wujihandros2
source <workspace>/install/setup.bash
# 终端 1:启动左手
ros2 launch wujihand_bringup wujihand.launch.py \
    hand_name:=left_hand serial_number:=ABC123

# 终端 2:启动右手
ros2 launch wujihand_bringup wujihand.launch.py \
    hand_name:=right_hand serial_number:=DEF456

一键启动双手

一条命令自动发现并连接所有已插入的手,无需手动指定序列号。每只手按硬件检测到的左右手,话题发布在 /hand_left/*/hand_right/*

ros2 launch wujihand_bringup wujihand_dual.launch.py

可选可视化:

# 每只手一个 RViz 窗口
ros2 launch wujihand_bringup wujihand_dual.launch.py rviz:=true

# 单个 Foxglove Bridge
ros2 launch wujihand_bringup wujihand_dual.launch.py foxglove:=true

运行多手演示

多手环境下运行演示脚本时,通过 --ros-args -p hand_name:=<hand-name> 指定目标手:

# 对左手运行波浪演示
ros2 run wujihand_bringup wave_demo.py --ros-args -p hand_name:=left_hand

# 对右手运行波浪演示
ros2 run wujihand_bringup wave_demo.py --ros-args -p hand_name:=right_hand

hand_name 需与启动驱动时指定的名称一致。

话题命名空间

启动后,每只手会拥有独立的话题命名空间:

# 左手话题
/left_hand/joint_states
/left_hand/joint_commands
/left_hand/hand_diagnostics
/left_hand/robot_description
/left_hand/tf
/left_hand/tf_static

# 右手话题
/right_hand/joint_states
/right_hand/joint_commands
/right_hand/hand_diagnostics
/right_hand/robot_description
/right_hand/tf
/right_hand/tf_static

关节标识

灵巧手共有 20 个关节(5 根手指 × 4 个关节/手指)。

手指与关节编号

服务调用使用 finger_idjoint_id

参数值与含义
finger_id
  • 0:拇指
  • 1:食指
  • 2:中指
  • 3:无名指
  • 4:小指
  • 255:所有手指
joint_id
  • 0-3:各关节(0 → 3:近端 → 远端)
  • 255:所有关节

关节名格式

话题控制使用完整关节名:{handedness}_finger{1-5}_joint{1-4}

索引关节名 (handedness=right)手指
0-3right_finger1_joint1~4拇指
4-7right_finger2_joint1~4食指
8-11right_finger3_joint1~4中指
12-15right_finger4_joint1~4无名指
16-19right_finger5_joint1~4小指

索引计算

index = finger_id * 4 + joint_id

例如:食指(finger_id=1)第三个关节(joint_id=2)的索引为 1 * 4 + 2 = 6