Skip to content

Latest commit

 

History

57 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LinkerHand Gesture Control Sim

使用普通 USB 摄像头体验 Linker Hand L30/O6 实时手势同步的 ROS 2 仿真项目

ROS 2 Ubuntu Python MediaPipe RViz 2 Gazebo Project Status Release Experience Tests License GitHub stars GitHub issues GitHub pull requests

简体中文 | English | 调试与运行手册 | 版本记录 | 提交问题

Linker Hand 双手手势同步演示

点击图片播放 MediaPipe → 角度重定向 → RViz 同步演示

项目简介

LinkerHand Gesture Control Sim 是一个可直接运行的视觉手势仿真项目。它让用户通过 普通 USB 摄像头快速体验 Linker Hand L30 和 O6 的实时手势同步、角度重定向与仿真 交互。

系统从摄像头获取画面,使用 MediaPipe 检测左右手关键点并计算人体关节角,再经过 左右手独立标定、角度重定向、One Euro、死区/迟滞、EMA 和速度限制,最终驱动 RViz 2 或 Gazebo Sim 中的 Linker Hand 模型。RViz 支持 L30/O6 单手,以及任意左右 型号组合;Gazebo 支持 L30/O6 单左手和单右手,并均已完成 GUI 动作验收。

项目以“优先体验 Linker Hand 实时手势同步”为核心定位。用户可以通过 RViz 2 和 Gazebo Sim 直观体验摄像头手势驱动灵巧手模型的完整过程,同时用于 ROS 2 学习、 角度映射调试和手势算法验证。项目完整覆盖摄像头采集、MediaPipe 感知、角度处理到 仿真显示的数据链路。

核心能力

  • 普通 USB 摄像头驱动的实时灵巧手仿真体验。
  • RViz 支持 L30/O6 单手和四种左右型号组合。
  • 参数式核心入口与常用组合快捷 launch 同时提供。
  • Gazebo 提供 L30/O6 单左手、单右手参数式和快捷入口。
  • 双手模式只打开一次摄像头,左右识别、标定、话题和 TF 完全隔离。
  • 左右手使用独立的实测输入范围与机械手角度映射。
  • Qt 个人标定上位机统一显示 MediaPipe 画面、检测状态和四姿态手动采样流程。
  • 标定采样支持取消、独立重采、有效率检查和基于 P90-P10 的稳定度检查。
  • 个人配置支持关节范围联合检查、默认目录保存、更新、另存为和外部 YAML 导入。
  • Qt 可使用当前个人配置一键启动单手 RViz/Gazebo 验证,并自动交接摄像头占用。
  • 调试画面支持镜像显示,不改变左右手判定和输出数据。
  • 3D 关键点短时退化时回退到图像关键点,避免控制链误判丢失。
  • One Euro、关节死区/迟滞、EMA 和关节速度限制。
  • 目标丢失后短暂保持,并平滑返回安全开掌姿态。
  • L30 左右手 URDF、mesh、RViz 2 和 Gazebo Sim 描述包。
  • O6 左右手官方 URDF、mesh、六主动自由度 profile 和 RViz/Gazebo 描述适配。
  • Gazebo 视觉同步与 60 Hz 实际关节状态反馈。
  • Gazebo 输入完整性检查、关节限速和左右手独立模型参数校正。
  • Gazebo 默认掌心近景、柔和环境光以及自定义 world 覆盖入口。
  • 中文源码注释、中文运行日志以及中英双语项目文档。

系统架构

flowchart LR
    CAM[USB Camera] --> IMG["/usb_camera/image_raw"]
    IMG --> MPL[MediaPipe Left]
    IMG --> MPR[MediaPipe Right]
    MPL --> FL[One Euro Filter]
    MPR --> FR[One Euro Filter]
    FL --> RL[Left Retargeting]
    FR --> RR[Right Retargeting]
    RL --> TL["/left/linkerhand/target_joint_states"]
    RR --> TR["/right/linkerhand/target_joint_states"]
    TL --> RVIZ[RViz 2 Adapter]
    TR --> RVIZ
    TL --> GZA[Gazebo Trajectory Adapter]
    TR --> GZA
    GZA --> GZP[Online Joint Plugin]
    GZP --> GZ[Gazebo Sim]
    GZ --> JS[60 Hz Joint States]
Loading
摄像头 -> MediaPipe -> One Euro -> 人体关节角 -> 左右手标定映射
       -> 死区/迟滞 + EMA + 限速 -> RViz 2 或 Gazebo Sim

快速开始

环境要求

  • Ubuntu 22.04
  • ROS 2 Humble
  • Python 3.10
  • MediaPipe、OpenCV、NumPy
  • 可用的 /dev/video* USB 摄像头
  • RViz 2
  • Gazebo Sim 6、ros_gz_simros_gz_bridge(运行 Gazebo 模式时)

获取与构建

git clone https://github.com/2303886347/linkerhand_gesture_control_sim.git \
  ~/linkerhand_ros2_ws
cd ~/linkerhand_ros2_ws
source /opt/ros/humble/setup.bash
rosdep install --from-paths src --ignore-src -r -y
python3 -m pip install 'mediapipe==0.10.9'
colcon build --symlink-install
source install/setup.bash

准备电脑、USB 摄像头和 ROS 2 图形环境后,即可运行完整手势仿真链路。

支持的运行模式

显示端 模式 命令
标定 Qt 个人标定上位机 ros2 launch linkerhand_bringup calibration_gui.launch.py
RViz 2 任意双手组合 ros2 launch linkerhand_bringup mediapipe_rviz.launch.py left_model:=l30 right_model:=o6
RViz 2 参数式单手 ros2 launch linkerhand_bringup mediapipe_rviz_single.launch.py model_id:=o6 side:=left
RViz 2 L30 左手 ros2 launch linkerhand_retargeting mediapipe_rviz_left.launch.py
RViz 2 L30 右手 ros2 launch linkerhand_retargeting mediapipe_rviz_right.launch.py
RViz 2 O6 左手 ros2 launch linkerhand_retargeting mediapipe_rviz_o6_left.launch.py
RViz 2 O6 右手 ros2 launch linkerhand_retargeting mediapipe_rviz_o6_right.launch.py
Gazebo Sim L30 左手 ros2 launch linkerhand_gazebo_control mediapipe_gazebo_left.launch.py
Gazebo Sim L30 右手 ros2 launch linkerhand_gazebo_control mediapipe_gazebo_right.launch.py
Gazebo Sim O6 左手 ros2 launch linkerhand_bringup mediapipe_gazebo_o6_left.launch.py
Gazebo Sim O6 右手 ros2 launch linkerhand_bringup mediapipe_gazebo_o6_right.launch.py

双手模式默认每侧以 10 FPS 运行一个 MediaPipe 实例。CPU 余量充足时可以提高:

ros2 launch linkerhand_bringup mediapipe_rviz.launch.py \
  left_model:=l30 right_model:=o6 \
  processing_fps:=12.0

更完整的设备检查、参数解释、标定范围、滤波调节和故障排查见 GUIDE.md

Gazebo 入口会同时打开 MediaPipe 预览和 Gazebo GUI。摄像头不是 /dev/video0 时, 在任意启动命令后追加 device:=/dev/video2。默认 world 会以掌心方向的近景打开; 如需自己的场景,可追加 world:=/absolute/path/to/custom.sdf

ROS 2 包

作用 文档
usb_camera_demo 打开 USB 摄像头并发布 ROS 2 图像 README
hand_pose_msgs 定义手部关键点和语义关节角消息 README
mediapipe_hand_pose MediaPipe 检测、骨架显示和 One Euro 滤波 README
linkerhand_bringup L30/O6 参数式和快捷多型号启动入口 README
linkerhand_model_profiles 统一校验型号、手侧、关节、限位和描述包 README
linkerhand_calibration Qt 手动标定、质量检查和个人 YAML 档案 README
linkerhand_retargeting 标定映射、EMA、限速、回零和双手 RViz README
linkerhand_l30_left_description L30 左手 URDF、mesh、RViz/Gazebo 启动 README
linkerhand_l30_right_description L30 v6 右手 URDF、mesh、RViz/Gazebo 启动 README
linkerhand_o6_left_description O6 左手官方 URDF、mesh 和 RViz 启动 README
linkerhand_o6_right_description O6 右手官方 URDF、mesh 和 RViz 启动 README
linkerhand_gazebo_control 轨迹适配、动态 URDF、状态节流和 Gazebo 启动 README
linkerhand_gazebo_plugin Gazebo 在线多关节运动学位置同步插件 README

分支说明

main 是完整、稳定的项目基线,包含所有已交付功能。以下分支用于突出对应演示入口, 核心代码仍从 main 同步,避免左右手实现分叉。

分支 用途
main 完整稳定版本
left-hand 左手演示配置
right-hand 右手演示配置
both-hands 双手演示配置

滤波

手势链路不是简单的固定低通,而是四层稳定化处理:

  1. One Euro 对调试骨架关键点和人体关节角进行自适应滤波。
  2. 关节死区与迟滞锁住静止小噪声,并在真实动作越过启动阈值后恢复跟随。
  3. EMA 对消抖后的机械手目标再次平滑。
  4. 速度限制抑制异常的大幅跳变,并单独控制目标丢失后的回零速度。

同一套稳定化结果同时供 RViz 和 Gazebo 使用,因此两种显示端具有一致的动作响应。

推荐从以下参数开始调整静止抖动:

ros2 launch linkerhand_bringup mediapipe_rviz.launch.py \
  left_model:=l30 right_model:=o6 \
  one_euro_min_cutoff:=0.5 \
  one_euro_beta:=0.4

验证与测试

cd ~/linkerhand_ros2_ws
source /opt/ros/humble/setup.bash
source install/setup.bash
colcon test
colcon test-result --verbose

当前验证基线:176 tests, 0 errors, 0 failures, 0 skipped

项目完成状态

  • USB 摄像头 ROS 2 图像发布
  • MediaPipe 左右手关键点与关节角
  • 左手、右手、双手 RViz 同步
  • L30/O6 型号 profile 与 O6 六主动自由度重定向
  • L30/O6 任意左右组合和统一 bringup 入口
  • 独立标定、One Euro、EMA 和回零限速
  • 可配置的左右手独立关节死区与迟滞消抖
  • Gazebo 单左手、单右手运动学位置反馈同步
  • O6 左右手 Gazebo 控制链与 GUI 动作验收
  • Qt 四姿态手动采样、取消/重采与采样质量检查
  • Qt 个人配置生成、更新/另存为、导入和配置档案
  • Qt 一键 RViz/Gazebo 验证、摄像头交接与进程清理
  • L30/O6 左右手 RViz/Gazebo 实际画面、方向、动作与稳定性现场验收

以上功能构成项目的完整交付范围。项目专注于“普通摄像头驱动灵巧手仿真显示”,适合 手势可视化、ROS 2 学习、角度映射调试和交互演示。Gazebo 使用运动学位置反馈同步; 面向接触物理的应用可以在现有接口上扩展简化碰撞体和 effort 控制器。

贡献

提交代码前请阅读 CONTRIBUTING.md。问题报告请包含 ROS 2 版本、 摄像头设备、启动命令、终端日志以及可复现步骤。

许可证

仓库采用包级许可证:自主开发的 ROS 2/Python 包声明为 Apache-2.0,左右手模型描述包 声明为 BSD-3-Clause。各目录中的 package.xml 是对应包许可证的权威来源。模型和 mesh 的使用还应遵循原始 Linker Hand 资源的授权与署名要求。

致谢

About

ROS 2 + MediaPipe gesture retargeting for LinkerHand L30 left/right hand simulation in RViz 2

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages