当前位置: 首页 » 行业资讯 » 机器人»【知识】机器人操作系统ROS(二)
   

【知识】机器人操作系统ROS(二)

 46.1K
     [点击复制]
放大字体  缩小字体 发布日期:2016-09-09   浏览次数:437
核心提示:PCL:一个开源点云处理库,原本是从ROS中发展起来的,后来由于太受欢迎,为了让非ROS用户也能用,就单独立了一个PCL的项目。  
         PCL:一个开源点云处理库,原本是从ROS中发展起来的,后来由于太受欢迎,为了让非ROS用户也能用,就单独立了一个PCL的项目。

  Gmapping:这其实是在OpenSlam项目继承过来的(后来发展和改动较大),利用gmapping可以实现laser-basedSLAM,快速建立室内二维地图。

  △gmapping建立二维地图

  Localization:基于扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)的机器人定位算法,可以融合各种传感器的定位信息,获得较为准确的定位效果。

  △robot_localization示意图

  Navigation:基于Dijkstra、A*算法(全局规划器)和动态窗口法DWA(局部规划器)的移动机器人路径规划模块,可以在二维地图上实现机器人导航。

  △navigation示意图

  MoveIt:这个是专注于移动机械臂运动规划的模块,下次讲运动规划入门的时候再详细介绍它。

  △MoveIt对UR5进行运动规划

  当然,除了这些最先进算法外,ROS还有各种机器人、传感器驱动等内容。
  5、是一个最活跃的机器人开发交流平台

  个人认为,这应该是最重要的一点。除了ROS外,现在有需要其他的项目可以代替或者部分代替ROS的功能:OpenRave运动规划,V-rep仿真。但是这些项目的社区远没有ROS活跃。

  ROS版本定期更新、主要模块有专人维护、问答区活跃、各maillists也非常活跃、开发者非常热衷交流分享。如果深入到ROS社区,可以学到很多东西。

  为什么

  首先,用过工业机器人的人肯定知道,不同工业机器人的开发系统基本都不一样,示教、编程方法也不同,一个熟练使用Motoman的工程师很可能并不会使用Kuka机械臂。就算是同种机器人,由于固件版本的更新换代,也可能造成程序的不兼容(我在UR上就遇到过这个问题)。这就大大影响了机器人的推广普及。

  △左:不同机器人的示教器;右:UR固件版本不兼容

  对此,ROS可以用统一的方式来封装机器人(URDF模型+机器人驱动),用户只需要在ROS中编写应用程序,并不用关心机器人的控制方式。如果所有机器人都采用了这种方式,那么机器人必将得到更广泛地应用(对系统集成商的要求会降低)。

  其次,现在越来越多机器人厂商开始尝试使用ROS,包括占据最多工业市场份额的机器人四大家族和各种流行的研究型机器人;甚至有如Rethink的Baxter,只能使用ROS控制。研究机器人的如果不去学习ROS的话,以后可能就会面临不会使用机器人的问题。

  △使用ROS的机器人

  再者,机器人是一个复杂且涉及面极广的学科,从下往上包括机械设计、电机控制、传感器、轨迹规划、运动学与动力学、运动规划、机器视觉、定位导航、机器学习、高级智能等等。一个研究生基本不可能在几年时间内掌握所有领域。

  对于一个做上层规划的研究生,如果不用ROS的话,往往需要花费非常长时间用于搭建实验系统,从而大大挤压了真正用在发明新知识的时间。例如,我做运动规划,就必须先把机械臂运动学正逆解、物体识别算法、碰撞检测算法等完成才有可能开始做运动规划。造轮子的事就交给专业造轮子的人做吧。

  所以,对于科研人员来说,ROS可以帮助你快速搭建机器人软件系统,同时其模块化的设计可以让你方便地用自己的算法替换其中某一模块,让你专注于自己的研究点。

  最后,就是对于创业或者参加比赛的人来说,ROS可以帮助你快速搭建原型样机。原型样机出来了,自然比只有设计说明书的人有优势。

  为防止做广告嫌疑,创业的例子就不说了,就拿我们去年参加的一个创业大赛来讲。我们组四个人用了不到两个月时间完成了下面这个超市购物机器人的软硬件设计与制作,功能包括避障、防跌、人员跟随、蓝牙校正(跟踪对的人)、手势识别、商品自动计价、自动支付等。

  嗯,我的公众号Nao(qRobotics)的头像就是在这个项目时设计的。

  △去年参加某创业大赛的作品MarketBot

  如何

  这方面已经可以找到很多答案了,但是学习这种东西只能靠自己多练习了,我只简单从我个人角度给出几个建议吧。

  首先,就是要先了解ROS的基本架构和开发方式。我个人是强烈推荐直接看ROS官网上的教程ROS/Tutorials的BeginnerLevel(多看几遍),同时充分使用ROS的问答社区ROSAnswers与各模块的MailLists,很多基础问题可能前人都遇到过。

  其次,在了解ROS的基本架构与开发方式后,就可以有针对性地看自己所关心的部分了。如做移动机器人的同学就去看Navigation教程;做物体识别的就去看ORK教程;做运动规划的就去看MoveIt教程。这一步最好能跟有实际机器人练手(如果没有的话,就用gazebo仿真)。由于一些模块的教程不够清楚(如MoveIt),一定要多练习,甚至是去看部分源码,先保证自己会用ROS实现一些功能。

  对于ROS与实际机器人的连接,建议仔细看看action(编写机器人驱动package)、URDF(机器人描述文件)的教程(或者ros_control)。如下图,我为SDA5F机器人编写了URDF文件,并修改了motoman_driver中的action,使得在ROS环境中用MoveIt规划控制双臂机器人运动。

  △SDA5F双臂机器人与其URDF模型

  最后,就是进阶阶段了。我要强调一句“ROS只是一个工具”,你会用ROS做SLAM并不能说明你会做SLAM。对于自己研究的内容,必须沉下心去看教材和论文,去理解每种算法背后的原理,知道如何调整算法参数、如何改进算法,最终能够自己编写某部分代码,并替换ROS的相应模块(如自己写运动学正逆解替代KDL等)。

  做研究,交流非常重要。如果你改进ROS某一算法后,最好能与package的原作者交流,将自己的修改merge到原项目中,在交流中提高自己与package的水平。当然,如果对算法有疑问,也可以直接咨询作者,ROS里的贡献者大都非常愿意分享和交流。

  当然,在问别人之前,请一定要保证自己充分熟悉了官方Tutorials,而不是朝别人发一堆编译错误截图,然后问这是怎么回事。提问的艺术真的非常重要,有时候不是对方不愿意跟你交流,而是对方不愿意手把手带你过Tutorials。

  结尾

  很多人在争论是否应该使用ROS、是否应该在产品上使用ROS、是否应该在工业中使用ROS。但是从我个人的角度上看,ROS对于服务机器人上层算法开发和研究而言是一个很棒的工具,作为学术研究使用的话,可以大大加快实验平台搭建过程。

 
 
 
[ 行业资讯搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 关闭窗口 ]
 
 
展会更多+
视频更多+
点击排行
 
网站首页 | 网站地图 | 排名推广 | 广告服务 | 积分换礼 | 网站留言 | RSS订阅