简介
RDK X3 是一款强大的开发板,支持通过手势控制机器人小车的运动。本文将详细介绍如何利用 RDK X3 和其配套工具(如 MIPI 或 USB 摄像头)实现手势控制功能,并通过 ROS 2 的 cmd_vel topic 发布控制指令,驱动小车完成前进、后退、左右旋转等操作。此外,我们还将展示如何在 Gazebo 仿真环境中测试控制效果,确保系统的稳定性和可靠性。
系统架构
具体流程如下图所示:
相应的代码仓库:https://github.com/D-Robotics/gesture_control
板端程序通过cmd_vel topic发布控制指令,既能够控制PC端Gazebo仿真环境下的虚拟小车,也可以直接用于控制实物小车。
手势识别
首先将RDK X3联网,确保PC和RDK X3在同一网段下。
之后,在RDK X3中运行如下命令,启动USB摄像头采集,手势识别和控制,通过PC端web浏览器实时查看采集到的图像。
source /opt/tros/humble/setup.bash
cp -r /opt/tros/${TROS_DISTRO}/lib/mono2d_body_detection/config/ .
cp -r /opt/tros/${TROS_DISTRO}/lib/hand_lmk_detection/config/ .
cp -r /opt/tros/${TROS_DISTRO}/lib/hand_gesture_detection/config/ .
export CAM_TYPE=usb
ros2 launch gesture_control gesture_control.launch.py
如果要使用mipi摄像头,只需要将CAM_TYPE从usb修改为mipi即可。
之后,在PC端的浏览器中输入http://192.168.2.12:8000 即可查看摄像头采集的图像及算法渲染效果(其中192.168.2.12为RDK的IP地址)。下面是其中两种手势的是被效果图:
可以看到,系统能够准确识别当前的手势。并且在网页的左下角可以看到当前的系统状态信息
其中的fps为实时AI推理输出的帧率,当前为17帧。ai_delay为540,表示的是单帧推理的延迟为540ms。
手势控制
具体的控制方式可以从代码仓库的src/main.cpp代码文件中查看
相应的手势与对应的控制功能如下:
- Okay:Wake up
- Palm:Reset
- Awesome:Forward
- Victory:Backward
- ThumbRight:Turn Right
- ThumbLeft:Turn Left
下面我们在PC上新建终端,执行如下命令,查看不同手势下cmd_vel topic上发布的内容,其中包含线速度和角速度的信息。
ros2 topic echo /cmd_vel
我们分别做出了手掌和“V”手势,可以看到,分别发出了reset指令和后退指令。
仿真测试
下面我们在PC端运行Gazebo仿真程序,展示实际的控制效果。
首先执行如下命令,启动Gazebo仿真程序。
source /opt/ros/humble/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo empty_world.launch.py
运行的仿真环境如下图所示:
之后我们分别给出不同的手势,控制小车的运行状态。测试效果如下:
播放器加载失败: 未检测到Flash Player,请到
安装
仿真测试
小结
本节中,我们成功借助 RDK X3 实现了基于手势控制的机器人小车运动功能,包括前进、后退、左右旋转及重置等操作。通过集成手势识别算法与 ROS 2 的 cmd_vel 控制机制,系统展示了良好的实时性和稳定性。此外,结合仿真工具如 Gazebo,为算法的测试与调试提供更便捷的支持。