同样,从个人微信公众号Nao(ID:qRobotics)搬运。

前言

  先放一个ROS Industrial一周年剪辑视频

  ROS已经发布八周年了,在国外科研机构中非常受欢迎。目前,以美国西南研究院为首的几位大佬开始尝试将ROS应用在工业机器人中,上面这个视频就是ROS-I项目一周年的进展情况。

  为了说明讲清楚ROS,我就从ROS是什么,为什么使用ROS,如何使用ROS三个方面展开。

△出自今年《机器人视觉与应用》课程本人制作的课件

是什么

  ROS是Robot Operating System的缩写,原本是斯坦福大学的一个机器人项目,后来由Willow Garage公司发展,目前由OSRF(Open Source Robotics Foundation, Inc)公司维护的开源项目。

  1、首先是一个操作系统

  根据wikipedia定义,OS is system software that manages computer hardware and software resources and provides common services for computer programs。也就是说操作系统是用来管理计算机硬件与软件资源,并提供一些公用的服务的系统软件。而ROS也自称是一个OS

△计算机OS与机器人OS对比示意图

  如上图所示,计算机的操作系统将计算机硬件封装起来,而应用软件运行在操作系统之上,不用管计算机具体应用的是什么类型的硬件产品。这能大大提高软件开发效率(否则大家只能都写汇编了)。

  同理,ROS则是对机器人的硬件进行了封装,不同的机器人、不同的传感器,在ROS里可以用相同的方式表示(topic等),供上层应用程序(运动规划等)调用。

  2、是一种跨平台模块化软件通讯机制

  ROS用节点(Node)的概念表示一个应用程序,不同node之间通过事先定义好格式的消息(Topic),服务(Service),动作(Action)来实现连接。

△ROS分布特点

△三种通讯方式的特点

  三种通讯方式的优缺点可看上表,由于很多模块化编程工具都有类似功能,这里就不具体展开了。

  基于这种模块化的通讯机制,开发者可以很方便地替换、更新系统内的某些模块;也可以用自己编写的节点替换ROS的个别模块,十分适合算法开发。

  此外,ROS可以跨平台,在不同计算机、不同操作系统、不用编程语言、不同机器人上使用。

  3、是一系列开源工具

△几种ROS工具示意图:左上rqt_plot,右上rqt_graph,左下Rviz,右下TF

  如上图所示,ROS为开发者提供了一系列非常有用的工具,可以大大提高我们开发的效率。

  rqt_plot:可以实时绘制当前任意Topic的数值曲线;

  rqt_graph:可以绘制出各节点之间的连接状态,和正在使用的Topic等;

  TF:TF是Transform的简写,利用它,我们可以实时知道各连杆坐标系的位姿,也可以求出两个坐标系的相对位置。

  Rviz:超强大的3D可视化工具,可以显示机器人模型、3D电影、各种文字图标、也可以很方便二次开发;

△在Rviz里显示机器人模型、3D点云、物体模型等

△在Rviz里也可以实现方便交互功能

  除此之外,ROS还有很多其他有用的开源工具等待大家探索。

  4、是一系列最先进的算法

△ROS包含许多先进的机器人开源项目

  除了ROS之外,世界上已经有很多非常优秀的机器人开源项目,但是ROS正逐渐将它们一一囊括在自己的范畴里。例如:

  PS:我跟ROS的其他几个开发者也正在努力将LinuxCNC整合进ROS

  OROCOS:这个开源项目主要侧重于机器人底层控制器的设计,包括用于计算串联机械臂运动学数值解的KDL、贝叶斯滤波、实时控制等功能。

  OpenRave:这是在ROS之前最多人用来做运动规划的平台,ROS已经将其中的ikfast(计算串联机械臂运动学解析解)等功能吸收。

  Player:一款优秀的二维仿真平台,可以用于平面移动机器人的仿真,现在在ROS里可以直接使用。

  OpenCV:大名鼎鼎的机器视觉开源项目,ROS提供了cv_bridge,可以将OpenCV的图片与ROS的图片格式相互转换。

  OMPL:现在最著名的运动规划开源项目,已经成了MoveIt的一部分。

  Visp:一个开源视觉伺服项目,已经跟ROS完美整合。

  Gazebo:一款优秀的开源仿真平台,可以实现动力学仿真、传感器仿真等,也已被ROS吸收。

△左下角gazebo,右下角Rviz

  当然,除了吸收别的优秀开源项目,ROS自己也发展出许多非常优秀的项目和库。

  ORK:一个物体识别与位姿估计开源库,包含LineMod等算法,但实际使用效果还不是太理想。

△LineMod识别效果

  PCL:一个开源点云处理库,原本是从ROS中发展起来的,后来由于太受欢迎,为了让非ROS用户也能用,就单独立了一个PCL的项目。

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

△gmapping建立二维地图

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

△robot_localization示意图

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

△navigation示意图

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

△MoveIt对UR5进行运动规划

  当然,除了这些最先进算法外,ROS还有各种机器人、传感器驱动等内容。

  5、是一个最活跃的机器人开发交流平台

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

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

为什么

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

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

  对此,ROS可以用统一的方式来封装机器人(URDF模型+机器人驱动),用户只需要在ROS中编写应用程序,并不用关心机器人的控制方式。如果所有机器人都采用了这种方式,那么机器人必将得到更广泛地应用(对系统集成商的要求会降低)。
  其次,现在越来越多机器人厂商开始尝试使用ROS,包括占据最多工业市场份额的机器人四大家族和各种流行的研究型机器人;甚至有如Rethink的Baxter,只能使用ROS控制。研究机器人的如果不去学习ROS的话,以后可能就会面临不会使用机器人的问题。

△使用ROS的机器人

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

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

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

  最后,就是对于创业或者参加比赛的人来说,ROS可以帮助你快速搭建原型样机。原型样机出来了,自然比只有设计说明书的人有优势。
为防止做广告嫌疑,创业的例子就不说了,就拿我们去年参加的一个创业大赛来讲。我们组四个人用了不到两个月时间完成了下面这个超市购物机器人的软硬件设计与制作,功能包括避障、防跌、人员跟随、蓝牙校正(跟踪对的人)、手势识别、商品自动计价、自动支付等。

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

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

如何

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

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

  其次,在了解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对于服务机器人上层算法开发和研究而言是一个很棒的工具,作为学术研究使用的话,可以大大加快实验平台搭建过程。

  有问题和意见欢迎大家直接在下面留言

  【备注:所有带公众号“qRobotics”水印的图片版权归本人所有,未经允许,不得转载。】

  欢迎扫描下方二维码关注我的微信公众号Nao(ID:qRobotics),博客会比公众号迟推送一周左右。

机器人操作系统ROS | 简介篇的更多相关文章

  1. 机器人操作系统——ROS,Robot Operating System

    Note:偶然看到的滴滴研究院的无人驾驶竞赛,了解一下. ROS:专为机器人软件开发所设计出来的一套电脑操作系统架构.是一个开源的元级操作系统(后操作系统),提供类似操作系统的服务,包括硬件抽象描述. ...

  2. 机器人操作系统ROS Indigo 入门学习(1)——安装ROS Indigo【转】

    转自:http://blog.csdn.net/bobsweetie/article/details/43638761 Ubuntu14.04安装ROS Indigo 一.安装ROS 1.1配置Ubu ...

  3. 机器人操作系统ROS(indigo)与三维仿真软件V-Rep(3.2.1)通信接口使用笔记

    关键字:ROS(indigo),V-Rep(3.2.1), vrep_ros_bridge(lagadic). vrep_ros_bridge提供了V-Rep和ROS之间的通信接口,可以实现使用ROS ...

  4. ROS机器人操作系统相关书籍、资料和学习路径

    作者:Top Liu链接:https://zhuanlan.zhihu.com/p/30391098来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文是易科机器人实验 ...

  5. 快速了解 Robot Operating System(ROS) 机器人操作系统

     http://www.ros.org/ 关于ROS About ROS http://www.ros.org/about-ros/ 机器人操作系统(ROS)是用于编写机器人软件的灵活框架.目的在简化 ...

  6. ROS探索总结(一)——ROS简介

    转自古-月 ROS探索总结(一)——ROS简介 一.历史 随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求原来越强烈,而已有的开源机器人系统又不能很好的适应需求.2010年Willow G ...

  7. 机器人操作系统 除了Android还有一个ROS(转)

    你知道市面上的机器人都采用了哪些操作系统吗? 估计大多数人给出的答案就是 Android 了.从市面上的产品来看,基于 Android 系统开发的机器人确实是主流,但是还有一种操作系统却鲜为人知,它叫 ...

  8. ROS(indigo)机器人操作系统学习有趣丰富的Gazebo仿真示例evarobot

    一直在寻找一个示例可以将ROS学习中常用的基础内容大部分都包含进去,最好还包括Gazebo仿真, 这样即使没有硬件设备,也可以很好的学习ROS相关内容,但又必须有对应的硬件,便于后续研究. 这里,介绍 ...

  9. ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS)

    ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS) 1. 网站资源: ROSwiki官网:http://wiki.ros.org/cn GitHub    ...

随机推荐

  1. 帕累托分析法(Pareto Analysis)(柏拉图分析)

    帕累托分析法(Pareto Analysis)(柏拉图分析) ABC分类法是由意大利经济学家帕雷托首创的.1879年,帕累托研究个人收入的分布状态图是地,发现少数人收入占全部人口收入的大部分,而多数人 ...

  2. UVAlive3523 Knights of the Round Table(bcc)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18122 [思路] 点-双连通分量 求出bcc,判断每个bcc是否为 ...

  3. POJ-1200(哈希)

    2015-08-19 题意:给出两个数n,nc,并给出一个由nc种字符组成的字符串.求这个字符串中长度为n的子串有多少种. 分析: 1.这个题不用匹配,因为不高效. 2.将长度为n的子串看作n位的nc ...

  4. git init

    git clone git@code.easyunion.net:516059158/cloud-basic-knowledge.git添加codes;git add .;git commit -m ...

  5. Hbase 设计与开发实战

    Hbase 概述 大数据及 NoSQL 的前世今生 传统的关系型数据库处理方式是基于全面的 ACID 保证,遵循 SQL92 的标准表设计模式(范式)和数据类型,基于 SQL 语言的 DML 数据交互 ...

  6. 基于Equinox构建OSGi项目

    几种OSGi框架 Several independently implemented OSGi frameworks exist today, including four that are avai ...

  7. Oracle Dataguard三种保护模式

    Oracle Dataguard提供了三种数据保护模式,在此分别总结一下三种数据保护模式的特点. 1.最大保护模式1)这种模式提供了最高级别的数据保护能力:2)要求至少一个物理备库收到重做日志后,主库 ...

  8. VMware Ubuntu安装详细过程

    参考链接: http://blog.csdn.net/u013142781/article/details/50529030

  9. SVN 中trunk、tags、branches使用

    简介 我们都知道SVN是管理项目源代码的软件,可以把我们开发中的各个阶段的代码记录下来,供我们以后来使用,那么SVN具体的结构你是否知道呢?下面我们来介绍一下它的基本结构 Trunk.Branches ...

  10. JAVA虚拟机与内存

    资料整理自网络(侵删) JVM内存 组成 JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 栈区: 1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和 ...