MoveIt 快速入门教程在 RViz 中
本教程将教您如何在 MoveIt 中使用 RViz 和 MoveIt 显示插件创建运动计划。RViz 是 ROS 的主要可视化工具,也是调试机器人非常有用的工具。MoveIt 显示插件允许您设置虚拟环境(规划场景),交互式地为机器人创建起始和目标状态,测试各种运动规划器,并可视化输出。
开始使用
第一步:启动演示并配置插件
-
启动演示:
ros2 launch moveit2_tutorials demo.launch.py rviz_config:=panda_moveit_config_demo_empty.rviz
-
一旦加载了运动规划插件,我们可以配置它:
- 在“显示”子窗口的“全局选项”选项卡中,将固定帧字段设置为
/panda_link0
。 - 配置插件为您的机器人(本例为 Panda):
- 确保机器人描述字段设置为
robot_description
。 - 确保规划场景主题字段设置为
/monitored_planning_scene
。 - 确保在计划路径下轨迹主题设置为
/display_planned_path
。 - 在规划请求中,将规划组更改为
panda_arm
。
- 确保机器人描述字段设置为
- 在“显示”子窗口的“全局选项”选项卡中,将固定帧字段设置为
第二步:与可视化的机器人互动
有四种不同的重叠可视化:
- 机器人在
/monitored_planning_scene
规划环境中的配置(默认激活)。 - 机器人预定的路径(默认激活)。
- 绿色:运动规划的起始状态(默认禁用)。
- 橙色:运动规划的目标状态(默认激活)。
每个可视化的显示状态可以通过复选框切换开启和关闭:
- 使用“显示机器人视觉”复选框规划场景机器人。
- 使用“显示机器人视觉”复选框来规划路径。
- 使用“查询起始状态”复选框设置起始状态。
- 使用“查询目标状态”复选框设置目标状态。
第三步:与 Panda 交互
接下来,我们只需要场景机器人、起始状态和目标状态:
- 检查计划路径树菜单中的“显示机器人视觉”复选框。
- 取消勾选场景机器人树菜单中的“显示机器人视觉”复选框。
- 检查规划请求树菜单中的“查询目标状态”复选框。
- 检查规划请求树菜单中的“查询起始状态”复选框。
此时,您将看到两个交互式标记,一个对应橙色手臂的标记用于设置“目标状态”,另一个对应绿色手臂的标记用于设置“起始状态”。您可以使用这些标记来拖动手臂并改变其方向。
进入碰撞
-
隐藏计划路径和目标状态:
- 取消勾选计划路径树菜单中的“显示机器人视觉”复选框。
- 取消勾选规划请求树菜单中的“查询目标状态”复选框。
-
尝试将臂移动到一个配置,其中其两个连杆相互碰撞。如果碰撞发生,连杆将变为红色。
-
重新勾选“使用碰撞感知逆运动学”复选框,求解器将会尝试找到一个无碰撞的解决方案。
第四步:使用 Panda 的运动规划
- 将起始状态移动到期望的位置。
- 将目标状态移动到另一个期望的位置。
- 确保两个状态都不会与机器人本身发生碰撞。
- 确保已可视化计划路径,并检查计划路径树菜单中的“显示轨迹”复选框。
- 在“运动规划”窗口下的“规划”选项卡中,点击“规划”按钮。
您的第一个 C++ MoveIt 项目
本教程将指导您编写第一个使用 MoveIt 的 C++ 应用程序。
先决条件
如果您尚未完成,请确保您已完成“入门”中的步骤。
本教程假设您已了解 ROS 2 的基础知识。为了准备自己,请完成官方 ROS 2 教程,直到“编写简单的发布者和订阅者(C++)”部分。
步骤
1. 创建一个包
-
打开终端并源码您的 ROS 2 安装,以便
ros2
命令可以工作。 -
导航到您在入门教程中创建的
ws_moveit2
目录。 -
切换到
src
目录,因为我们的源代码就放在那里。 -
使用 ROS 2 命令行工具创建一个新包:
ros2 pkg create \ --build-type ament_cmake \ --dependencies moveit_ros_planning_interface rclcpp \ --node-name hello_moveit hello_moveit
该命令将创建一个新目录,并在其中生成一些文件。
-
请注意,我们添加了
moveit_ros_planning_interface
和rclcpp
作为依赖项。这将在package.xml
和CMakeLists.txt
文件中做出必要的更改,以便我们依赖这两个包。 -
打开新创建的源文件
ws_moveit2/src/hello_moveit/src/hello_moveit.cpp
,并在您喜欢的编辑器中进行编辑。
2. 创建一个 ROS 节点和执行器
以下代码是 ROS 2 的初始化代码,它创建一个 ROS 节点:
#include <memory>
#include