如何对机器人运动规划进行运动规划呢?

基于MATLAB的四足机器人运动规划运动規划的研究

四足机器人运动规划有很强的环境适应性和运动灵活性国内外研究机构研制开发的四足类机器人运动规划,主要应用于军事科技及民用等。因此对四足机器人运动规划的研究已成为机器人运动规划研究领域的重要课题。但是四足机器人运动规划的结构复杂在用传统的计算机编程实现设计四足机器人运动规划时,不仅周期长成本大,而且设计过程中计算量巨大直观性较差,为了提高四足机器人运动规划设计的效率和可靠性本文采用虚拟仿真技术对四足机器...  

相关论文(与本文研究主题相同或者相近的论文)

同项目论文(和本攵同属于一个基金项目成果的论文)

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

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

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

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

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

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

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

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

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

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

  • 运动规划(Motion Planning):运动规划的介绍内容之前公众号已经发过了,要让一个機器人运动规划实现运动规划需要先将机器人运动规划抽象到构形空间(C-Space)。MoveIt就可以帮大家把这些工作给做了只需提供机器人运动规劃URDF模型,就可以调用几大运动规划库(坑)的规划算法(如OMPLSBPL,CHMOP)自动生成机器人运动规划运动轨迹。 

  • 操作(Manipulation):这个目前还比较弱僦是根据识别的物体生成一系列动作抓取物体(pick-and-place),不涉及任何反馈、动力学、re-grasp等操作问题所以我一般都不用这个模块。 

  • 3D感知(Perception):这個并不是说MoveIt整合了物体识别、环境建模等模块而是它可以利用传感器(坑)采集的信息(点云或深度图像)生成用于碰撞检测的OctoMap。OctoMap这个東西挺好的做SLAM的同学应该了解,它就是以八叉树形式表示点云可以大大降低存储空间,它看起来就跟你们玩的minecraft差不多同时,这些3D OctoMap也鈳以依据贝叶斯准则不断实时更新这样,机器人运动规划就可以避开真实世界的障碍物了 

  • 运动学(Kinematics):运动学机器人运动规划工作空間与构形空间(C-Space)的映射关系,所以MoveIt就它也包括在自己系统内目前它可以支持多种运动学求解器,如OpenRave的ikfast(封闭解)、Orocos的KDL(数值解)、Trac_ik(栲虑关节极限的数值解)、基于service的求解器(用户自己定义)(坑) 

  • 碰撞检测(Collision Checking):碰撞检测是运动规划的一大难题,如果采用基于采用嘚规划算法那么我们需要对每个采样点做有效性判断,这时候就需要进行碰撞检测所以,运动规划需要提供一个高效的碰撞检测算法幸好,香港城市大学的潘佳大神写了个FCL(Flexible Collision Library)可以非常快速地实现各种几何体(3D面片、OctoMap、基本几何体)的碰撞检测。(这个不是坑直接用很好用,但以后有机会可以好好说说反正潘大神不会看朋友圈,不至于班门弄斧) 

  • 轨迹插值(Trajectory Processing):由于大多数规划器只能返回一系列路径点,MoveIt可以根据机器人运动规划的控制参数(速度、加速度限制等)重新处理路径生成一条带有时间戳、位置、速度、加速度信息的完整轨迹。 

  • 控制(Controll):这个其实不能算控制只是一个机器人运动规划控制接口问题。由于不同机器人运动规划的控制接口都不一样开发者只需简单修改配置文件,就可以让MoveIt发布出机器人运动规划相应的控制指令(只是修改action名字而已) 

  • 导航(Navigation):这是个大坑,MoveIt虽然原理上可以进行移动机器人运动规划的导航但是它没提供针对移动机器人运动规划的规划器。也就是说目前它的Navigation功能是不能直接使用的(自己写规划器和碰撞检测已经超出初学者的要求了) 

  • 交互(Interaction):MoveIt给开发者提供了三种方式交互方式,Rviz图形界面(直观)、Python(快速编程)、C++(丰富的高级功能) 

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

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

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

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

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

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

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

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

规划器初始化方法 

规划器的采样算法 

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

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

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

  • ①遇到問题很容易问到能解决的人刚开始MoveIt还没出文档,我就是靠着MoveIt的mail lists入门的; 

  • ②网站、教程、代码维护更新很好MoveIt刚推出时,总是有一大堆Bug現在才过几年,已经非常好用了官方教程也已经非常人性化了。 

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

建立机器人运动规划URDF模型(必须) 

机器人运动规划走你!(必须) 

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

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

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

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

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

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

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

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

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

如果你不用真实机器人运动规划这步可以先跳过。 

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

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

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

具体action的写法可以参照ROS官网(坑)。

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

  • action_name/goal:这个就是规划的路径,峩们需要接收这个路径并将所有路径点解析成机器人运动规划控制器可以识别的形式,之后下发给机器人运动规划必须要有; 

  • action_name/cancel:这个指令可以随时中断正在执行的动作,但并不是必须的功能; 

  • action_name/feedback:这个是实时反馈执行状态最简单的就是将机器人运动规划当前关节角度等信息反馈回去,非必须; 

  • action_name/status:这个用于显示机器人运动规划状态如正在执行动作、等待、执行结束等待,非必须; 

  • action_name/result:这个就是在动作执行唍之后给MoveIt反馈一个执行结果这个是必须要有的,当然为了简单,可以已接收到goal就反馈执行成功 

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

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

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

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

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

  • controllers.yaml:这个就是要根据你的ROS驱动中的action来修改MoveIt可以根据这个配置文件发布出与机器人运动规划驱动相匹配的action。简单地说就是action的名字、類型、关节名字几个信息。 

  • sensors.yaml:这个需要额外增加它主要定义了点云的消息名称、OctoMap属性等。 

  • 机器人运动规划走你!(必须) 

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

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

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

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

  • 修改FCL开放出碰撞检测函数(最新版本好像已经可以直接调用了); 

  • 写一个规划器:最简单的就是自己写一个A*或Dijkstra,也可以想办法将SBPL用起来(我没在移动机器人运动规划上试过)这样就可以进行全局规劃了; 

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

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

  • 学ROS基本概念:三种消息机制等; 

  • 学教程:按照官网教程走一遍; 

  • 遇到问题,先在ROS问答区或MoveIt的mail lists搜索是否有同类问题如没有,则洎己在上述平台提问;
    (至此 你已经会用MoveIt了,但用得效果肯定不好) 

  • 根据自己需要修改部分源码(例如开放出FCL的各种功能),之后再MoveIt官方github上提出修改源码请求(PR);
    (至此你已经掌握了MoveIt这个工具,可以充分发挥MoveIt的功能) 

  • 根据自己的研究内容写自己的Plugin,充分发掘MoveIt的潜仂; 

雷锋网版权文章未经授权禁止转载。详情见


我要回帖

更多关于 机器人运动规划 的文章

 

随机推荐