为MoveIt Task Constructor添加GUI界面功能

文章目录

  • 前言
  • 1 重构和新建内容
  • 2 使用
    • 2.1 下载并编译
    • 2.2 运行
      • 2.2.1 MoveIt Task Constructor 的 demo 运行
      • 2.2.2 MoveIt 的其他环境运行
      • 2.2.3 循环执行
    • 保存和加载
  • 总结


前言

MoveIt 从版本 Noetic 开始,加入了 Task Constructor 框架,其提供了一种灵活和透明的方式来定义和计划由多个相互依赖的子任务组成的操作。该框架使用容器的概念对运动的基本阶段进行分层组织,能够实现运动任务的顺序组合和并行组合

使用 Task Constructor 能够快速的组合出特定场景的运动规划任务,但目前为止,Task Constructor 仅支持使用编写代码的方式,对于部分终端用户来说,代码编写有一些技术要求,对编程语言也需要有一个学习过程。本文介绍一个基于 Task Constructor 开发的图形化界面功能,可用通过使用图形化的界面构建 Task Constructor 的运动规划和执行

MoveIt Task Constructor 提供了多种容器策略,组合方式非常灵活,本文介绍的图形化功能目前仅支持 Serial Container 以及 MoveTo 和 MoveRelative 两种 stage,其他策略将会在后续完善

本文介绍内容的完整源码可以在 GitHub 下载


1 重构和新建内容

重构和新建内容涉及到对 MoveIt Task Constructor 的构建理解和各个类间的层次关系的理解,本文不再对其做详细解释和说明,读者可以在 GitHub 下载完整源码参考

File Package Class Comment
task_view.ui moveit_task_constructor_visualization 重构 增加了execute按钮; 重命名了右键弹出菜单;增加了load/save按钮
task_panel_p.h task_panel.h task_panel.cpp moveit_task_constructor_visualization 重构 重构了addTask和removeStages函数
task_display.h task_display.cpp moveit_task_constructor_visualization 重构 增加了interactive marker
container.h container.cpp moveit_task_constructor_core 重构 增加了通过序号获取stage元素的函数
cartesian_path.h joint_interpolation.h moveit_task_constructor_core 重构 增加了planner的获取函数
introspection.cpp moveit_task_constructor_core 重构 重构instrospection的namespace为公共适应多任务文件的加载
CMakeLists.txt moveit_task_constructor_visualization 重构 新增文件的导入
add_task_stage.h add_task_stage.cpp moveit_task_constructor_visualization 新增 GUI界面的控件属性及其对应的操作逻辑
whi_logo.png moveit_task_constructor_visualization 新增 logo图像

2 使用

2.1 下载并编译

进入 ROS 的工作目录,这里假设工作目录命名为 catkin_workspace:

cd ~/catkin_workspace/src
git clone https://github.com/xinjuezou-whi/moveit_task_constructor.git

随后通过 rosdep 检查并安装所需依赖:

rosdep install --from-paths . --ignore-src --rosdistro $ROS_DISTRO

最后编译,编译完成记得为终端添加工作目录:

catkin build
source ~/catkin_workspace/devel/setup.bash

2.2 运行

编译完成后在 RViz 的 MoveIt 环境中就能添加 Motion Planning Task 插件运行,如果直接运行 MoveIt Task Constructor 的 demo.launch 将不需要其他前置环境的设置,可以直接使用本文 GUI 功能;如果运行其他 MoveIt 的环境,比如 Motion Planning 则需要做一些简单的环境配置

2.2.1 MoveIt Task Constructor 的 demo 运行

运行 Task Constructor 的 demo.launch:

roslaunch moveit_task_constructor_demo demo.launch

右键点击“Motion Planning tasks”,在弹出菜单中选择“Add task or stage”。在弹出的对话框中即可设置 task 的 stage,目前支持 serial container 中的 MoveTo 和 MoveRelative stage。目标 stage 设置完成后,将“Task Solution topic”设置为:

/whi_gui/solution

随后将看到创建的 stage:

2.2.2 MoveIt 的其他环境运行

首先需要引入“ExecuteTaskSolutionCapability”,否则执行运动路径将不能得到响应。在包含引用“move_group.launch”的 launch 文件后,比如 moveit_config 的“demo.launch",加入如下语句:


为MoveIt Task Constructor添加GUI界面功能_第1张图片

同时,值得注意的是:MoveIt Task Constructor 在规划路径时会要求获得执行末端的 tip,否则将无法规划路径。这个要求即待控制的机械臂需要配置好 end effector,配置过程可以参考官网说明,这里不再累述

随后,在运行的 RViz 中添加“Motion Planning Tasks”插件:

当上述环境配置都完成后,即可以通过 MoveIt Task Constructor 构建目标任务,本文的 GUI 功能依然支持原有的编码形式。下面两个示例分别是苇航智能用于演示的 6DOF 机械臂,以及 AR2/3 开源硬件机械臂

WHI 6DOF arm:

AR2/3 arm:

2.2.3 循环执行

勾选Loop后,点击Execute,所构建的任务路径将被循环执行:

保存和加载

构建的任务及其阶段可以保存为yaml文件,并通过从保存的yaml文件中加载来重用:


如果加载的yaml文件包含了多个任务,则首先需要将“Task Solution topic” 主题设置为“/whi_gui/solution”,否则将只能显示最后一个任务


总结

ROS 精神在于开源贡献,人人都可以分享自身的成果,同时也享受他人成果带来的便利。本文将对 MoveIt Task Constructor 的图形化界面的拓展开发做了一个分享,希望借此能够给同样运用 ROS 平台的读者多少带来一些参考。

本文说明的源代码,可以完整的在 GitHub 下载,如果文中出现了描述错误以及不清晰的地方,欢迎指正,共同交流:[email protected]

你可能感兴趣的:(ROS,RViz,MoveIt,ubuntu,linux)