如何使用游戏手柄远程操控机械臂
本指南将介绍如何使用游戏手柄移动 Panda 机械臂。
确保你的工作区已安装所需的包,并且你有一个受 ROS 2 joy 支持的游戏手柄。可以先启动一个 joy 节点,然后运行 ros2 topic echo /joy 来测试游戏手柄是否能被 joy 检测到。
- Ubuntu 22.04
- ROS 2 Humble
- MoveIt 2
- MoveIt 2 Tutorials
- ROS2 joy
-
构建 MoveIt 2 工作区
首先,
cd到 moveit2 工作区的根目录(如果你按照入门指南操作,这将是~/ws_moveit/)。然后,运行
colcon build。 -
插入你的游戏手柄。
-
加载 install 脚本并运行
moveit_servo示例文件。运行
source install/setup.bash,然后运行ros2 launch moveit_servo servo_example.launch.py -
按照下图作为参考来移动机械臂。
drawio 文档可以在这里查看。
本节解释启动文件以及将游戏手柄输入转换为运动指令的节点。
启动此示例的文件是 ws_moveit2/src/moveit2/moveit_ros/moveit_servo/launch/servo_example.launch.py
该启动文件不仅启动了 Panda 机械臂规划所需的一切,还启动了 joy 节点和 JoyToServoPub 节点(下文将解释)。
最值得注意的是启动 joy 和 JoyToServoPub 节点的代码部分。它们都被创建为 ComposableNode。关于 ComposableNode 的更多信息可以在这里和这里找到。
ComposableNode( package="moveit_servo", plugin="moveit_servo::JoyToServoPub", name="controller_to_servo_node",),ComposableNode( package="joy", plugin="joy::Joy", name="joy_node",)JoyToServoPub
Section titled “JoyToServoPub”将游戏手柄输入转换为运动指令的节点是 ws_moveit2/src/moveit2/moveit_ros/moveit_servo/src/teleop_demo/joystick_servo_example.cpp
该节点订阅 joy 节点发布的游戏手柄状态消息,并发布 TwistStamped 消息、JointJog 消息和 PlanningScene 消息。
PlanningScene 消息只在 JoyToServoPub 首次构造时发布一次,用于向规划场景中添加一些障碍物。
JointJog 和 TwistStamped 消息的区别在于:TwistStamped 消息定义的是末端执行器的运动,由逆运动学求解器据此计算各关节的运动;而 JointJog 消息则是直接控制各个关节的运动。
当有消息发布到 joy 话题时,会调用 joyCB 函数,将游戏手柄的按键输入转换为机械臂的指令。如果同一时刻的输入同时触发了 JointJog 和 TwistStamped 消息,则只发布 JointJog 消息。