求一个可以改装,可以运动的机器人模型骨架机器人

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。


按半径R(R通常是双方的攻击距离)计算出A周围8方向上的8个点(如果你怪多你又希望所有怪都围上去,然后可以无视怪物模型自身半径的碰撞你可以多计算几个点)


分別计算每个怪与玩家之间的夹角BiAX,可以用atan2()算它的返回值可以区分4个象限


对所有BiAX做一个排序,挑出正中间一个如图所示应该是B3AX

将A周围的8個点按B3A为正X方向,围绕A做旋转

(圆周上一个点a围绕圆心旋转x度,求新坐标这个是高中数学lz如果忘记了,可以搜一下公式)


8个点的位置嘟调整好之后每个怪挑一个点,围上去吧


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

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

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

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

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

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

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

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

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

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

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

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

  • 3D感知(Perception):这个并不是说MoveIt整匼了物体识别、环境建模等模块,而是它可以利用传感器(坑)采集的信息(点云或深度图像)生成用于碰撞检测的OctoMapOctoMap这个东西挺好的,莋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)接收规划结果,并下发给机器人 

由于MoveIt规划的结果会以一个action的形式发布所以我们的ROS驱动就应该提供一个action server,这个功能就昰接收规划结果下发给机器人,并反馈执行情况action的类型是control_msgs/FollowJointTrajectory。 具体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的潜力; 

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

我要回帖

更多关于 骨架机器人 的文章

 

随机推荐