Visualizing In RViz
本教程将向您介绍一个工具,该工具可以通过在RViz中渲染可视化效果,帮助您更容易地理解您的MoveIt应用程序正在做什么。
前提条件
如果您还没有完成,确保您已经完成了“您的第一个项目”中的步骤。本项目假设您是从hello_moveit项目开始的,这是之前教程的结束点。
步骤
1 添加依赖项moveit_visual_tools
在hello_moveit项目的package.xml文件中,在其他<depend>语句之后添加以下行:
<depend>moveit_visual_tools</depend>
然后在您的CMakeLists.txt文件中,在find_package语句部分添加以下行:
find_package(moveit_visual_tools REQUIRED)
在文件的更下方,扩展ament_target_dependencies宏调用以包含新依赖项,如下所示:
ament_target_dependencies(
hello_moveit
"moveit_ros_planning_interface"
"moveit_visual_tools"
"rclcpp"
)
为了验证您是否正确添加了依赖项,请在源文件hello_moveit.cpp中添加所需的包含:
#include <moveit_visual_tools/moveit_visual_tools.h>
为了测试这一切是否正常工作,请在工作区目录中打开终端(记得source您的ROS安装),然后使用colcon构建:
cd ~/ws_moveit
colcon build --mixin debug
cxy@cxy-Ubuntu2404:~/ws_moveit$ colcon build --packages-select hello_moveit --mixin debug
Starting >>> hello_moveit
Finished <<< hello_moveit [22.7s]
Summary: 1 package finished [23.1s]
2 创建一个ROS执行器并在线程上旋转节点
在我们初始化MoveItVisualTools之前,我们需要有一个执行器在我们的ROS节点上旋转。这是因为MoveItVisualTools与ROS服务和主题的交互方式。首先,在顶部添加线程库到您的包含中。
#include <thread> // <---- add this to the set of includes at the top
通过创建和命名记录器,我们可以保持我们的程序日志组织。
// Create a ROS logger
auto const logger = rclcpp::get_logger("hello_moveit");
接下来,在创建MoveIt MoveGroup Interface之前添加您的执行器。
// Spin up a SingleThreadedExecutor for MoveItVisualTools to interact with ROS
rclcpp::executors::SingleThreadedExecutor executor;
executor.add_node(node);
auto spinner = std::thread([&executor]() { executor.spin(); });
// Create the MoveIt MoveGroup Interface
...
最后,在退出之前确保连接线程。
// Shutdown ROS
rclcpp::shutdown(); // <--- This will cause the spin function in the thread to return
spinner.join(); // <--- Join the thread before exiting
return 0;
在进行这些更改后,重新构建您的工作区以确保您没有任何语法错误。
3 创建并初始化MoveItVisualTools
接下来,我们将在MoveGroupInterface构建之后构建并初始化MoveItVisualTools。
// Create the MoveIt MoveGroup Interface
using moveit::planning_interface::MoveGroupInterface;
auto move_group_interface = MoveGroupInterface(node, "manipulator");
// Construct and initialize MoveItVisualTools
auto moveit_vi