转自:http://blog.exbot.net/archives/2966

导语:本期公开课面向想入手ROS却又不知从何下手的小伙伴,为大家梳理好学习思路。

ROS和Android一样是开源的,功能上也是相差无几,它可以提供硬件抽象,底层设备控制,常用功能实现,进程间消息以及数据包管理。其独特之处在于,能够支持多种语言,如C++、Python、Octave和LISP,甚至支持多种语言混合使用,这可以简化开发者的工作。因为它是基于Linux的系统,其可靠性也会更高,体积可以做到更小,适合嵌入式设备。

另外,ROS是一种分布式处理框架,开发者可以单独设计可执行文件。不同节点的进程能接收、发布各种信息(例如传感,控制,状态,规划等等)。

Top博士自2009年第一次接触到ROS后,便认识到其在机器人开发中的重要性,并不遗余力在国内进行推广。然而随着ROS近年来火热,在教学中也发现很多新伙伴对ROS的认识存在一些误区,为了加快小伙伴们的学习速度,雷锋网本期公开课雷锋网邀请Top和大家分享一点自己学习和使用的经验和心得。

雷锋网本期公开课面向想入手ROS却又不知从何下手的小伙伴,为大家梳理好学习思路。内容包括但不限于ROS全球使用现状、核心概念、工作原理等学习重点,及仿真环境、工具库等需了解的内容。介绍了具体的学习路径及有用的资源链接。

嘉宾介绍:

Top Liu,易科机器人实验室、(星火计划)ROS公开课联合发起人,致力于机器人技术的探索与分享,撰写各类技术文章近百篇,出版有《ROS机器人程序设计2》、《机器人编程实战》、《嵌入式机器人学》、《机器人与未来》。

以下内容整理自Top Liu在硬创公开课的分享。

公开课视频:

115期:机器人程序设计之如何正确入门ROS | 硬创公开课 - 腾讯视频

PPT链接:

百度文库-信息提示

当前大家学习ROS还是以自学为主,所以会走很多的弯路,目前所谓的大神们也都是这样过来的。基本上早期开发机器人大家都是各干各的,甚至是防着彼此,生怕别人把我们的代码、设计抄袭过去,这样其实大家就是在重复地造轮子,进行一些底层的无聊工作。

我最早接触ROS是2009年在翻译《嵌入式机器人学》这本书,作者托马斯·布劳恩教授当时开发了一套RoBIOS的机器人操作系统,按照他的说法,这是最早的机器人操作系统,而且是可以嵌入式应用的。当时和他沟通,他表示不会开源,而且售价特别高,当时在网上搜索,不经意间看到了ROS,Box版本,很古老的版本。

什么是ROS?这是个老生常谈的问题,这里用官网的定义来解释一下。ROS是一个适用于机器人的开源的元操作系统。它不是一个真正的操作系统,但它提供了操作系统应用的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、 编译、编写、和跨计算机运行代码所需的工具和库函数。 它主要采用的是松耦合点对点进程网络,目前主要支持的还是Ubuntu系统,Mac OS X支持,Windows目前有测试版本,但支持的并不很好,不推荐。

为什么学习ROS

首先,目前机器人开发,软件开发的比重越来越大,而软件开发的时候软件框架的选择,是软件架构设计中一个重要的决策,直接决定了软件开发的直接效率,以及后续功能的实现程度。

目前除了ROS,还有很多类似的机器人软件框架,包括Player、YARP、Orocos、CARMEN、Orca、MOOS,以及Microsoft Robotics Studio

为什么使用ROS呢?我总结了下,ROS有四大优点:1、松散耦合的机制方便机器人软件框架的组织;2、最丰富的机器人功能库,方便快速搭建原型;3、非常便利的数据记录、分析、仿真工具,方便调试;4、学界和产业界的标准,方便学习和交流。 使用一句话总结,使用ROS,能够方便迅速地搭建好机器人原型。当然,它的性能不是最优的,但是这四条优点足以保障它在机器人操作系统里面的地位。

然后,ROS比较好的一点是使用了BSD许可证,这是一个非常宽松的开放许可证,允许在商业和闭源产品使用,这对于开发产品的创业公司是比较重要的一点。

ROS是最庞大的使用者群体,是事实上的机器人标准,这是麻省理工在一篇文章中给出的评论。然后在2016年ROS大会数据显示,目前在使用操作系统做开发的人员用户超过35万,其中活跃用户美国占第一位,中国占第二位。

在学术研究领域,基本上机器人算法都会给出ROS版本的源程序。最早在2009年ROS发布的“ROS: an open source Robot Operating System” 论文,目前已经被引用了2871次。

2016年官方支持ROS的机器人超过了100个。目前已经有很多机器人公司采用了ROS系统来开发一些应用于全新市场的产品,如ClearPath、Rethink、Unbounded、Neurala、Blue River、Big-i,最典型的就是Willow Garage的PR2机器人。投资机构也对创业公司给予了极大的支持,仅2015年相关风险投资机构就在基于ROS操作系统的机器人公司投资了超过1.5亿美元。Nvidia、博世、高通、英特尔、宝马以及大 疆等大公司也纷纷推出ROS接口。

这是ROS当前的代码统计量,总行数已经超过了1400万,超过2477名作者。代码语言以C++为主,63.98%的代码是用C++写的,排名第二的是python,占13.57% ,也就是说ROS基本上都是使用这两种语言,可以实现大部分的功能。

应该学什么

要想学ROS,应该从哪里入手,它的先后顺序是怎样的呢?ROS由四大部分构成,第一个是基础结构,这些通讯机制是如何实现的;第二个是工具,包括仿真工具、调试工具等;第三个是体现它功能的package;第四个就是社区,如何去上面下载、发布代码,和其他开发者交流学习。

入门的话,首先要了解这四点:设计思想,核心概念,核心模块,核心工具

ROS设计思想

设计思想主要是分布式架构,将机器人的功能和软件,做成一个个节点,然后每个节点通过topic进行沟通,但你这些节点可以部署在同一台机器上,也可以部署在不同机器上,还可以部署在互联网上。

ROS核心概念

ROS的核心概念主要是这几个,首先是节点,然后是节点之间的通信和话题,通信的方式有两种,一个是刚刚讲的话题,一个是服务。那么,如何管理ROS的这些节点和话题之间的沟通呢?这就需要用到Master,也就是ROS管理器,它还维持了一个参数的服务。而怎么组织代码,就是通过功能包集与功能包。

节点是各自独立的可执行文件,能够通过话题、服务或参数,与服务器或其他进程(节点)通信。ROS通过使用节点的方式将代码和功能解耦,提高了系统容错能力和可维护性,使系统简化。同时,节点允许了ROS系统能够布置在任意多个机器上并同时运行。关于节点需要注意的事项,节点在系统中必须有唯一的名称;节点可以使用不同的库进行编写,如roscpp和rospy,其中roscpp基于C++,rospy基于Python。

节点之间通过topic机制进行通信,topic机制是一个一对多的Publish/Subscribe 模式: 同一个话题也可以有很多个订阅者,它的底层传输依靠的是TCP/IP,也可以是UDP。topic具体传输的message,具有一定的类型和数据结构,包括ROS提供的标准类型,和用户自定义类型。

除了topic,ROS还提供另一种一对一的机制,也就是Service/Client,当你需要直接与节点通信并获得应答时,将无法通过话题实现,这时需要使用该服务。

Master向ROS系统中其他节点提供命名和注册服务,跟踪和记录话题的发布者和订阅者,使ROS 节点之间能够相互查找。一旦节点找到了彼此,就能建立一种点对点的通信方式。

那么如何组织代码呢?这主要依靠功能包(Package) ,ROS中软件组织的基本形式,用于创建ROS程序。功能包包含源代码和功能包清单(Manifest) 。功能包清单提供关于功能包、许可信息、依赖关系、编译标志等的信息。功能包清单是一个manifests.xml文件,通过这个文件能够实现对功能包的管理。

核心模块

ROS核心模块包括通信结构基础、机器人特性功能以及工具集,通信结构基础包括消息传递、记录和回放消息、远程过程调用、分布式参数系统;机器人特性功能包括标准机器人消息,机器人几何库,机器人描述语言,抢占式远程过程调用,诊断,位资估计、定位与导航;工具集包括命令式工具、可视化工具以及图形化接口。

核心工具

ROS拥有很多第三方的核心工具的支持,或者说Package。我们比较常见的是右边这五个工具,Gazebo是一个三维仿真环境,OpenCV是大家非常熟悉的计算机视觉库,PCL是点云库,MoveIt!是机械臂的规划控制库,Industrial是工业上会用的库。左边有三维仿真环境,另外两个其中值得一提的是MRPT,是一个非常好的机器人编程工具箱。然后,如果对实时控制要求比较高的话,可以考虑最下边的The Orocos Project。

ROS常用命令工具包括rostopic (Topics)、rosservice (ServiCES)、rosnode (Nodes)、rosparam (Parameters)、rosmsg (Messages)、rossrv (Services)和roswtf (General debugging) ,在这里就不详细展开了。

ROS用的最多的可视化工具是rqt(集成图像交互界面)和 rviz(3D 可视化工具)。

ROS具有非常强的数据存储/回放功能,也就是使用bag存储topic(例如现实中的传感器数据),以后调用bag的topic数据则不必每次都在现实中运行机器人,速度非常快。

ROS log系统记录软件运行相关信息,便于以后的调试。

怎么学

首先,我们在学校学的是指导主义,也就是传统的教学方式:老师讲,学生听,今天我在这儿其实也属于这种模式吧,而这种模式的缺点在于开环或是闭环周期过长。另一种是建造主义,通过动手来学习,然后你可以得到实时反馈,你学到的知识就能形成一个闭环。当然,你还是要摸索出一个套路,这样上手才能比较快。

学习步骤

当然,比较好的套路还是官网的那一套。首先按照官网的步骤安装ROS,这个过程不要轻易问问题,因为教程里讲得已经很明白了,大神们对这些问题也会比较鄙视,通常会笑而不语。另外,建议初学者一定要认真学完整20个初级教程!然后就此打住!那些中级教程就不要再看了,浏览下都有啥即可,以后遇到类似问题再回来看即可,这个时候你的重点就应该回到机器人学及其实践上了,那20个初级教程都是可以在电脑上编程学习的,但不涉及机器人学。

接下来就应该运行真实的机器人、解决真实的问题。有的小伙伴就会问,没有真实的机器人怎么办?当然也有办法,你可以在仿真环境里边运行。

仿真环境由易到难主要有这三个:Turtlesim、ArbotiX、Gazebo。Turtlesim是一个QT开发的2D轨迹显示界面,只能显示运动轨迹;ArbotiX是含有一个差速驱动机器人的rviz模拟器,机器人运动及topic数据的3D显示,但不包含物理学引擎;Gazebo是功能齐全的3D物理模拟器,不过缺点是非常重,对内存和显卡要求高,慎入!

ROS版本那么多,该用哪一个?

很多小伙伴会问,ROS版本那么多,该用哪一个? 目前,ROS是一年推出一个版本。通过下载统计,我们发现现在使用最多的还是Indigo,所以对于初学者,建议还是使用这个版本,因为这是目前使用人数最多、坑最少的版本。而如果Linux编程能力比较强的,可以使用Kinetic,它可以一直支持到2021年。然后,你在选择Ubuntu版本时,要与ROS版本需匹配。

命令行不熟悉怎么办? 有IDE

现在已经有很多IDE了,值得一提的是这个RoboWare Studio是我们中国团队开发的一个开源IDE,目前刚刚推出64位版本。最近我也和RoboWare Studio的王博士交流了一下,他表示之后会推出32位版本,包括Arm集成开发环境的,而且承诺是免费的,以后也会在适当的时候开源。

不熟悉Linux怎么办?

其实学习ROS并不难,而很多小伙伴遇到的问题在于对于Linux不熟悉。这个只能边用边学了,遇到问题也要善用搜索,基本上这些问题都能在搜索中找到答案。教程推荐这两个版本,一个是英文版本,一个中文版本。书的话,推荐《鸟哥的Linux私房菜》吧!

ROS和ROS2.0该学习哪个呢?

对于大众学习者、普通开发者、机器人算法开发者,在2017年仍推荐使用ROS。对于软件架构的学习者、强调实时性的开发者,建议关注ROS2.0 。另外,我在知乎上对于这个问题也有详细的回答,有兴趣的可以去看看

Q&A 环节

Q:请问除了ROS还有其他哪些常用的实时嵌入式操作系统?

A:关于机器人目前操作系统哪家强这个问题,目前已经形成了各个阵营,我们最近会组织一场辩论。主要是现在服务机器人用安卓的比较多。实时系统的话,我建议不要用ROS,因为ROS设计对象是家用移动智能机器人,当初的设计就不是针对实时控制的,不过ROS 2.0已经加入了实时性这个特性,大家可以关注一下。

Q:硬件方面有什么要求呢?

A:刚才讲了ROS它具备操作系统的特性,其中一个特性就是对于硬件的抽象,如果你用ROS的话,你不用过多关注底层硬件的东西,因为大家都是按照标准来做好封装,你直接调用就OK,你主要的精力还是放在机器人系统的设计和算法的开发上。

Q:您觉得ROS在目前火热的自动驾驶领域应用前景如何?

A:据我所知,自动驾驶领域一些大企业也是用ROS开发的,它的最终产品不一定是基于ROS,但是研发阶段我相信是会用到的,据所了解确实有一些是在用的。

Q:ROS未来能不能发展成完全替代Linux和Window?

A:ROS不会替代Linux和Window,它根本就是两回事儿。Linux和Window是一个基本的操作系统,ROS是完全针对机器人的上层架构,它可以依赖于Linux和Window,当然2.0开始,也开始独立地去工作。所以,你要搞清楚,哪些是ROS可以做,哪些是它不擅长的领域。

Q:像美国刚刚搞的蜂群无人机,在ROS上是否能实现?

A:目前用ROS开发不是很好实现,如果用ROS 2.0,应该是可以的。因为ROS它用在分布式系统上,一个比较大的问题是需要一个Master,分布式系统是不需要Master的,所以如果你非要用ROS的话,就有点别扭。而ROS 2.0是没有中心节点的,是没有Master的,完全分布式架构,那应该适用于多机器人的应用场景。

机器人程序设计——之如何正确入门ROS | 硬创公开课(附视频/PPT)【转】的更多相关文章

  1. 如何自行搭建一个威胁感知大脑 SIEM?| 硬创公开课

    如何自行搭建一个威胁感知大脑 SIEM?| 硬创公开课 本文作者:谢幺 2017-03-10 10:09 专题:硬创公开课 导语:十年安全产品经验的百度安全专家兜哥,手把手教你用开源项目搭建SIEM安 ...

  2. (一)ROS系统入门 Getting Started with ROS 以Kinetic为主更新 附课件PPT

    ROS机器人程序设计(原书第2版)补充资料 教案1 ROS Kinetic系统入门 ROS Kinetic在Ubuntu 16.04.01 安装可参考:http://blog.csdn.net/zha ...

  3. [Swoole入门到进阶] [精选公开课] Swoole服务器-Server的四层生命周期

    PHP 完整生命周期 执行PHP文件 PHP扩展模块初始化(MINIT) PHP扩展请求初始化(RINIT) 执行 PHP 逻辑 PHP扩展请求结束(RSHUTDOWN) PHP脚本清理 PHP扩展模 ...

  4. ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation

    ROS机器人程序设计(原书第2版)补充资料 (捌) 第八章 导航功能包集入门 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中 ...

  5. ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门

    ROS机器人程序设计(原书第2版)补充资料 (壹) 第一章 ROS系统入门 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第一章主要包括R ...

  6. ROS机器人程序设计(原书第2版)补充资料 教学大纲

    ROS机器人程序设计(原书第2版) 补充资料 教学大纲 针对该书稍后会补充教学大纲.教案.多媒体课件以及练习题等. <ROS机器人程序设计>课程简介 课程编号:XXXXXX 课程名称:RO ...

  7. ROS机器人程序设计-学习小结-

    ROS官网 |易科 |虞坤林 |古月居 |ROSClub 学习ROS相关书籍推荐:http://blog.csdn.net/zhangrelay/article/details/52244746 RO ...

  8. ROS机器人程序设计(原书第2版)补充资料 (零) 源代码、资料和印刷错误修订等 2017年01月01日更新

    ROS机器人程序设计(原书第2版)补充资料 (零) 源代码等 ROS官网 版)部分内容修订 页:第1行,删去$ 页:第6行,float64 y 前面加一个空格 页:中间创建主题:下面程序不用换行,(& ...

  9. ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse

    ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse 书中,大部分出现hydro的地方,直接替换为indigo或ja ...

随机推荐

  1. (转发)IOS高级开发~Runtime(四)

    用C代替OC: #import <objc/runtime.h> #import <objc/message.h> #import <stdio.h> extern ...

  2. k8s基于canel的网络策略

    Kubernetes能够把集群中不同Node节点上的Pod连接起来,并且默认情况下,每个Pod之间是可以相互访问的.但在某些场景中,不同的Pod不应该互通,这个时候就需要进行访问控制.亲测:在kube ...

  3. POJ:1330-Nearest Common Ancestors(LCA在线、离线、优化算法)

    传送门:http://poj.org/problem?id=1330 Nearest Common Ancestors Time Limit: 1000MS Memory Limit: 10000K ...

  4. POJ2594拐点弯的二分

    开始读题没理解题意,以为就是覆盖,可是怎么交都不对... 我就气愤了,结果去百度了一下发现奶奶的这题的机器人是可以隔点瞭望的,例如1->2->3.2->4.5->2  这个图 ...

  5. dedecms 标签

    article文章页标签 文档工具:http://tools.dedecms.com/dedetag_maker/article.html {dede:field.title/} 文章标题 {dede ...

  6. 不可取代的网站开发工具---------dreamweaver

    现在web开发的工具越来越多,sublime text,webstorm等web开发工具日益崛起,一直威胁着当年网页三剑客之一的dreamweaver工具的地位,然而dreamweaver却是无法取代 ...

  7. Linux中的more命令

    ore命令,功能类似 cat , cat命令是整个文件的内容从上到下显示在屏幕上.  more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,而且还有搜寻 ...

  8. Diango路由控制

    路由的格式: #路由配置的格式: urls.py里面写 from diango.conf.urls import url urlpatterns = [ url(正则表达式,views视图函数,nam ...

  9. Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)

    A. Protect Sheep time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  10. The 18th Zhejiang University Programming Contest Sponsored by TuSimple

    Pretty Matrix Time Limit: 1 Second      Memory Limit: 65536 KB DreamGrid's birthday is coming. As hi ...