资讯 机器人
此为临时链接,仅用于文章预览,将在时失效

如何利用ROS MoveIt快速搭建机器人运动规划平台?

作者:qqfly
2016/12/26 09:36

雷锋网按:本文作者qqfly,上海交通大学机器人所博士生,本科毕业于清华大学机械工程系,主要研究方向机器视觉与运动规划,本文首发作者微信公众号:Nao(ID:qRobotics),雷锋网已获授权。

两个月前给自己挖了个坑,说要写写MoveIt,但一直没动手。主要有两个原因: 

1)这两个月主要在写小论文,毕竟博士生要毕业还得看论文,不能靠公众号阅读量分享率; 

2)直接讲MoveIt似乎需要挖更多坑,一直没想好怎么写比较好。 

主要是因为机器人运动规划涉及太多基础内容,如果跳过不讲就会变成新坑;一时半会又没法讲完。 

所以,这次就从初学者如何利用MoveIt快速搭建机器人运动规划平台来讲吧,先展示Big Picture,其他细节内容以后有空再慢慢填。但可能会坑的地方我会用(坑)标注出来。 

什么是MoveIt

先看个视频介绍吧:

   

看完视频,大家应该对MoveIt有一个大概的印象了。用MoveIt官网(moveit.ros.org)的说法: 

它是目前最先进的移动(坑)操作机器人软件,整合了最先进的运动规划、操作、3D感知、运动学、控制与导航算法。为这方面的开发人员提供了一个十分便利的开发平台。 

这个说法不太直观,换个说法就是MoveIt = RobotGo,翻译成中文就是“机器人,走你!” 

所以,MoveIt的主要就是一款致力于让机器人能够自主运动及其相关技术的软件,它的所有模块都是围绕着运动规划的实现而设计的。 

下面大概介绍下它的一些功能模块。 

如何利用ROS MoveIt快速搭建机器人运动规划平台?

如何利用ROS MoveIt快速搭建机器人运动规划平台?

目前而言,MoveIt还只是一个针对机械臂运动规划问题的软件平台,暂时还不是适合用在Navigation、manipulation、control、perception等领域。 

为什么选择MoveIt

其实,要做运动规划可以用很多方法:自己写、OMPL、OpenRave等。我个人认为选择MoveIt大概有三个原因: 

如何利用ROS MoveIt快速搭建机器人运动规划平台?

| 对初学者很友好 

前面我们已经知道,要想自己从头建立一个运动规划的软件平台需要花费非常多力气:运动学正逆解、碰撞检测算法、环境识别、规划算法,任何一点都是需要一段不短的时间积累才可能亲手实现的。初学者可能一开始就被这些次要问题打退了。 

自己写:对初学者简直是灾难,尤其是没人带的情况; 

OMPL:完全没有机器人的概念,需要用户自己集成运动学、碰撞检测算法,它的官方文档也不涉及如何利用OMPL做机器人的运动规划问题; 

OpenRave:虽然OpenRave已经有自己的一套机器人描述方法,但是它的文档不太友好。 

用MoveIt的话,初学者只需准备机器人的模型,跟着教程走,便可以在半小时内实现仿真环境中的机器人运动规划演示。 

| 方便研究 

这个应该是更重要的因素。运动规划由很多子问题构成,每个子问题都可以成为一个研究点。MoveIt几乎所有组件都是以Plugin的形式工作的,也就是说我们可以随时更换它的任一模块。目前它支持以下组件的修改: 

运动学求解器 

规划算法 同时OMPL自身也支持用户自己编写规划器 

规划器初始化方法 

控制器接口 

传感器接口 

规划器的采样算法 

碰撞检测算法 

OctoMap更新算法 

如果是做这些课题研究的人,完全可以先用MoveIt建立一个环境,之后修改相应Plugin,换成自己的算法。这样可以让我们将侧重点放在主要矛盾上。 

| 活跃的社群 

这点其实就是ROS相对于其他机器人开发平台的优点。MoveIt依托于ROS,也拥有很高的人气(去年的调研结果看,MoveIt是ROS中使用度排名第三的package)。 

活跃的社群对于学习是大有裨益的: 

怎么样使用MoveIt

要用MoveIt控制机器人大概分为以下几步: 

建立机器人URDF模型(必须) 

建立机器人ROS驱动 

生成MoveIt配置文件(必须) 

标定相机 

修改MoveIt配置文件与launch文件 

机器人,走你!(必须) 

其中,上面未标明“(必须)”字样的只有在使用实际机器人时才需要。初学者如果只想在仿真里看看的话,可以先跳过。 

如何利用ROS MoveIt快速搭建机器人运动规划平台?


| 建立机器人URDF模型(必须) 

URDF(Unified Robot Description Format)是ROS中使用的一种机器人描述文件,它以HTML的形式定义一个机器人。包含的内容有:连杆、关节名称,运动学参数、动力学参数、可视化模型、碰撞检测模型等。

如何利用ROS MoveIt快速搭建机器人运动规划平台?

后续碰撞检测、运动学求解、规划等都依赖于URDF文件。 

那么,要如何建立URDF文件呢?如果你用的是单臂、串联机器人,并且你本人没有强迫症的话,可以使用ROS官方发布的sw_urdf_exporter,它可以帮你从SolidWorks中导出URDF文件。

如何利用ROS MoveIt快速搭建机器人运动规划平台?

但如果不幸你使用的是双臂(双臂机器人用这个插件经常出问题)或者非并联机器人(需要自己用mimic_joint改成串联形式),又或者你有强迫症(想要尽量简洁、漂亮的模型)的话,可以考虑自己手写URDF或者xacro文件(坑)。 

这点我就不具体说了,简单写几个要点: 

多臂用xacro来减少工作量; 

坐标系设置尽量满足所有关节为0°时候,所有坐标系同姿态(这样可以避免引入pi); 

如果想要有颜色的模型,可以自己生成每个零件的dae模型,而不使用stl模型; 

可视化模型采用漂亮、精细的模型,碰撞模型可以使用简化的模型。 

如何利用ROS MoveIt快速搭建机器人运动规划平台?

| 建立机器人ROS驱动 

如果你不用真实机器人,这步可以先跳过。 

机器人的ROS驱动并没有什么标准的格式或者规定。对于MoveIt而言,只要求你有个ROS node,它有两个功能: 

1)发布关节角度/joint_states 

如果连接实际机器人,MoveIt需要从机器人当前状态开始规划,因此这个ROS驱动需要能够实时获取机器人的各关节信息(如角度),并用过/joint_states消息发布; 

2)接收规划结果,并下发给机器人 

由于MoveIt规划的结果会以一个action的形式发布,所以我们的ROS驱动就应该提供一个action server,这个功能就是接收规划结果,下发给机器人,并反馈执行情况。action的类型是control_msgs/FollowJointTrajectory。 具体action的写法可以参照ROS官网(坑)。

简单而言,一个action有五个部分: 

这部分在MoveIt部分是看不到文档的,所以也是阻碍初学者使用MoveIt控制自己机器人的最大问题之一。但是了解了它的机理之后,就比较简单了。 如果你是第一次使用MoveIt,极力推荐你先试试UR、Baxter等已经写好这部分驱动的机器人。 

生成MoveIt配置文件(必须) 

这个利用MoveIt的setup assistant界面,按照教程很容易就能配置好。 

如何利用ROS MoveIt快速搭建机器人运动规划平台?

这步做完,就可以直接在仿真里面看运动规划效果了。这是我觉得MoveIt对初学者最友善的地方,不用写一行代码就可以看到运动规划。 

| 标定相机 

这个主要涉及相机模型与AX=XB求解问题,不多赘述。 这步就是为了让机器人知道摄像头放在机器人的哪个位置。大家可以看看我实验室师弟写的自动标定演示: 

如何利用ROS MoveIt快速搭建机器人运动规划平台?

一个launch文件就能完成标定,不知比我当年写的手动标定方法高多少。这个标定程序我们之后可能会开源出来。如果有机会我也会顺便讲讲它的原理(坑)。 

修改MoveIt配置文件与launch文件 

因为前面生成的文件都是针对虚拟机器人的,如果需要连接实际机器人,需要修改一些配置文件,我可能记不太清具体要修改几个文件了,请以官方教程为主: 

上述内容完成后,就可以Enjoy Yourself了,无论是Rviz, Python 还是C++,都可以用来进行运动规划,如果连接了真实机器人,那么也可以在实际机器人上完成运动规划。 

如何利用ROS MoveIt快速搭建机器人运动规划平台?

其他 

虽然写了这么多,但感觉还是没写清楚,最后随便列点之前大家在后台问过的比较多的问题: 

什么机器人能用MoveIt 

MoveIt其实跟机器人关系不大,只要你有URDF文件,能接受控制指令,那么就能用MoveIt,移动机器人的话也可以,只是MoveIt现在没有针对Navigation做规划器。 

怎么用MoveIt做移动机器人3D Navigation 

相对于传统Navigation包,MoveIt中可以做3D的碰撞检测,但是它尚未加入适合移动平台的规划算法。大概做法如下: 

怎么用MoveIt做飞行器或潜艇的路径规划 

这个与上个问题类似,MoveIt没有针对刚体的规划算法,如果可以接受RRT的规划结果,那么理论上讲是可以直接使用的。 

| 如何在MoveIt上使用自己的规划算法 

我只尝试过先在OMPL中写自己的规划器,之后通过修改moveit_planner中的ompl_interface,将自己的规划器用到MoveIt中; 如果是非Sampling-based方法,那就要去看看MoveIt的Plugin怎么改了,这部分我没经验。 

如何学习MoveIt 

关注我的公众号(划重点); 

如何利用ROS MoveIt快速搭建机器人运动规划平台? 

机器人,走你!                        

长按图片保存图片,分享给好友或朋友圈

如何利用ROS MoveIt快速搭建机器人运动规划平台?

扫码查看文章

正在生成分享图...

取消
相关文章