如何使用MoveIt2进行无碰撞运动规划

175
0
2020年5月17日 00时00分

原作者:Jorge Nicho

文章来源:The Robot Report

编译/字幕组:沈永强

 

如何使用MoveIt2进行无碰撞运动规划插图

 图源:美国科罗拉多博尔德西南研究所

 

在这个仿真系统中,机器臂必须将相机移动到三个扫描点。MoveIt2在其中被用来规划到达扫描点的无碰撞运动轨迹。

 

MoveIt是ROS中的运动规划框架,已经成功用于众多工业、研究应用中,这些应用都是需要复杂的无碰撞机器人运动来进行操作任务。在最近的几个月中,研究人员花费了很大心血将MoveIt迁移到ROS2中。

 

目前,新的MoveIt2框架已经可以使用先前版本的许多核心功能。尽管现在一些非常有用的设置工具仍然在开发过程中(主要是指MoveIt设置助手),但现在我仍然能把MoveIt2集成到协作砂光机器人程序(CRS)里去规划运动轨迹,然后再在Gazebo仿真中模拟出UR10机器臂来执行这个轨迹。

 

我的ROS2配置涉及了从GitHub中的源码来搭建MoveIt的数据库这一步。然后把Colcon工作区覆盖在我现有的CRS应用工作区之上。我还搭建并运行了一个简单的演示程序,并且一次性就成功了。这对于帮助我弄清楚怎么把MoveIt集成到我自己的应用程序当中非常有帮助。

 

C++集成非常简单,只需要使用两个新类:MoveItCpp和PlanningComponent。在这个架构中,MoveItCpp用于加载机器人模型,根据ROS2的参数来配置运动规划管道并初始化默认值。PlanningComponent与计划组相关联,用于设置运动规划需求并调用低级规划器。

 

此外,PlanningComponent具有类似于MoveIt中MoveGroupInterface的接口。但是这里最大的变化之一是PlanningComponent中的方法并不仅仅是封装move_group节点提供的服务、动作,相反,它直接对多种运动规划功能进行函数调用。

 

我认为这一变化是非常有效的,因为这样的话,这个架构就能够即时创建MoveIt2规划配置,以适应实际应用中可能会出现的多种情况。

 

另一方面,启动/YAML集成并不像许多的ROS2概念那样干净,对我来说还是比较新的概念。要正确配置MoveIt2的话,需要将URDF文件以及一些驻留在多个YAML文件中的参数加载到MoveIt2应用程序中。幸运的是,大多数由MoveIt设置助手从原始MoveIt中生成的YAML文件只需要稍微修改就可以使用,所以我在ROS1中运行了设置助手并生成了我所需要的配置文件。

 

同时,用python组装ROS2启动文件的能力确实在这里派上了用场,因为它能让我从YAML文件实例化python字典,并将其中的元素作为参数传输给我的ROS2应用程序。除了学习MoveIt2之外,通过这个练习,我还学会了如何在不同的应用程序中重复使用同一个YAML文件来初始化参数,这是我认为ROS2中所没有的功能。

 

我对MoveIt2的总体印象很好,我认为架构的改变完全不会对现在MoveIt开发人员造成严重的影响,反而会带来一些更有趣的应用途径。我非常希望能够再移植其他那些非常有用的MoveIt组件。

 

集成MoveIt2的项目分支可以点击该链接查看https://github.com/swri-robotics/collaborative-robotic-sanding/tree/moveit2-integration-test

 

以上是我目前能够完成的运动规划的简短片段。在这次的应用中,机器人必须要将相机移动到三个扫描点,而MoveIt2在其中被用来规划出到达扫描点的无碰撞运动轨迹。

 

关于作者:Jorge Nicho是西南研究所(SwRI)的研究工程师。他于2010年12月毕业于德克萨斯大学圣安东尼奥分校,获得机械工程硕士学位。Nicho于2011年加入SwRI,担任制造和机器人技术部门的工程师。他擅长智能机器人运动规划。Nicho参与了使用ROS框架构建的多个智能机器人系统的开发。

 

本文系古月居编译作品,如需转载请注明出处。

 

发表评论

后才能评论