关闭

如何系统学习ROS

2017-11-21 11:37:59

 

初识Robot Operating System(ROS)

 

 

19779月,Intel公司创始人罗伯特·诺伊斯撰文预言:计算机将走进千家万户。

四十年过去了,我们有目共睹,这个预言早就变成了现实!

20071月,比尔·盖茨在《科学美国人》上撰文预言: 机器人即将重复个人电脑崛起的道路,走进千家万户。

十年过去了,我们有目共睹,这个预言正将变成现实,或者说,它正在通往现实的路上!

然而,这个道路不会一帆风顺,有很多关键问题需要解决。

三十年前,计算机行业的发展遇到了瓶颈:在一台机器上运行的程序代码,几乎不可能在另一台机器上发挥作用;流行的应用程序很难在五花八门的计算机上运行;如果想开发新的产品(无论是软件还是硬件),通常得从零开始。

究其原因,一是硬件没有标准化,二是软件没有操作系统。很难想象,如果没有Windows操作系统,计算机的应用和普及将会变得多么困难!

历史是惊人的相似,十年前机器人行业所面临的问题和三十年前计算机所面临的问题如出一辙!

所幸的是,人们已经认识到了这些问题,不同机器人制造商之间的壁垒逐渐消除,机器人操作系统(ROS, Robot Operating System)也应运而生。

ROS,正是ROS,有力推动着“机器人走进千家万户”的预言踏上了变成现实的康庄大道!

一、什么是ROS

Since version 1.0 was released in 2010, ROS has become the de facto standard in robotics software.

                            ——MIT Technology Review, 2013

 ROS是什么?按照ROS官网的定义,ROS是一个灵活的机器人软件框架,由工具、库和约定组成,旨在简化在各种各样的机器人平台上创建复杂和健壮的机器人行为的任务。

从事过机器人软件开发的人都知道,设计开发真正健壮的通用机器人软件并不是一件容易的事情。这是因为,对人类来说微不足道的问题对机器人来说往往都会随着环境和任务的变化而千差万别。处理这些变化是非常困难的,没有哪个人、哪个实验室或哪个机构能独自应付。

因此,ROS自诞生起就提倡并鼓励机器人社区协作进行机器人软件开发。例如,一个实验室擅长室内环境建图,那么这个实验室可以提供一套先进的建图系统。一个研究团队擅长地图导航,而另一个研究小组可能发明了一种可以很好地识别杂乱小物体的机器视觉方法。ROS就是建立在不同的个人/团队/实验室工作的基础上并且专为大家之间的协作而设计的。

二、为什么要ROS

    “Robotics is really a software problem. It is not a hardware problem.”

——Google架构师、ROS创始人Scott Hassan

ROS之所以发展和普及这么迅速,是由于它具有很多特征,这些特征可以简化和方便机器人应用的开发。为了使大家对ROS有个进一步的了解,我们分三个方面对ROS的特征进行介绍。正是这些特征,才使得ROS受到了越来越多机器人爱好者、研究者和开发者的青睐。

1.ROS通信架构

在最底层,ROS提供了一个消息传递接口,该接口提供进程间通信,称为中间件。该中间件提供了消息传递、消息记录和回放、远程调用和分布式参数系统等功能或工具。

1)消息传递

    在实现一个新的机器人应用程序时,通信常常是最早需要考虑的需求之一。ROS内置的、经过测试的消息传递系统通过匿名发布/订阅机制管理分布式节点之间的通信细节,从而节省用户的开发时间。使用消息传递系统的另一个好处是,它迫使用户在系统中的节点之间实现清晰的接口,从而改进封装并促进代码重用。这些消息接口的结构是定义在消息IDL(接口描述语言)中。因

2)消息记录和回放

    为发布/订阅系统是匿名的、异步的,因此数据可以很容易地捕获和重放,而无需改变任何代码。假如你手头有两个任务,任务A和任务B:任务A从传感器读取数据,任务B处理任务A产生的数据。ROS可以轻松地将任务A发布的数据捕获到一个文件,晚些时候再将数据从该文件重新发布出去。消息传递抽象允许任务B不知道数据源是任务A的数据还是日志文件。这是一个很有用的设计模式,可以显著减少用户的开发工作,并促进系统的灵活性和模块化。

3)远程调用

发布/订阅消息传递是异步的,它能满足许多机器人中的通信需求,但有时也需要进程之间的同步请求/响应交互。ROS中间件使用服务提供这种功能。与主题一样,服务调用中进程之间发送的数据是用相同的简单消息IDL定义的。

4)分布式参数系统

ROS中间件通过全局键值存储为任务提供了一种分享配置信息的方法。该系统允许用户轻松地修改任务设置,甚至允许任务更改其他任务的配置。

2.机器人具体特征

    除了核心中间件组件,ROS还提供了针对机器人的特定库和工具,它们可以使用户快速搭建和运行机器人。

1)标准机器人消息

    经过机器人社区多年的讨论和开发,形成了一套涵盖大部分机器人应用实例的标准消息格式。这些消息包括:与几何概念相关的位姿、变换和矢量;与传感器相关的摄像机、IMU和激光雷达;与导航数据相关的里程计、路径和地图,等等。在应用开发中使用这些标准消息,你的代码将能与其他ROS生态系统(无论是开发工具还是各种专用库)无缝对接。

2)机器人几何库

在许多机器人项目中,一个共同的挑战是跟踪机器人不同部位之间的相互关系。例如,如果你想把相机的数据和激光的数据结合起来,你需要知道每个传感器在一些常见的参照系中的位置。这个问题对于具有多个运动部件的人形机器人尤为重要。ROSTF(变换)库解决这个问题,它将跟踪你的机器人系统中的所有部件。

考虑到效率,TF库被用来管理一百多个自由度和几百赫兹更新率的机器人坐标转换数据。TF库允许你定义静态变换(例如固定在移动基座上的摄像机)和动态变换(如机器人臂中的关节)。你可以在系统中的任意一对坐标帧之间转换传感器数据。无论是数据的发布者和订阅者分布在网络上的不同地方,还是数据随时间以不同的频率更新,TF库都能处理。

3)机器人描述语言

ROS解决的另一个常见的机器人问题是,如何以机器可读的方式描述机器人。

ROS提供了一套描述和建模机器人的工具,包括tfrobot_state_publisherrviz,这些工具使得它能被其他ROS系统所理解。在ROS中用URDF(统一机器人描述格式)来描述机器人,它包括一个XML文档,在该文档中描述机器人的物理特性,如肢体的长度、轮子的大小、传感器的位置以及每一部分的视觉外观等。

    按照这种格式定义后,你的机器人可以很容易地与TF库一起使用,在三个维度呈现良好的可视化,并与模拟器和运动规划器一起使用。

4)诊断

ROS为机器人提供了一种标准的方法来生成、收集和汇总诊断信息,这样你就可以很快地看到机器人的状态,从而确定当它们出现时如何处理。

5)位姿估计、定位和导航

    ROS提供了许多解决机器人基本问题的功能包,这些功能包可以用来进行位姿估计、地图定位、建图甚至移动导航。无论你是一名希望进行快速研发的工程师,还是一名想及时完成研究任务的机器人研究人员,或者是一名想了解更多的机器人爱好者,这些功能包都能帮助你以较少的付出做得更好。

3.ROS工具

ROS最强大的特性之一是强大的开发工具集。这些工具支持检查、调试、绘图和可视化系统开发的状态。底层发布/订阅机制允许你自发地对流经系统的数据进行检查,以便在发生问题时容易理解和调试问题。ROS通过大量的图形和命令行工具充分利用了这种检查能力,从而简化了开发和调试过程。

1)命令行工具

    你是否把你所有的时间都花在了机器人的远程登录上?ROS可以在没有GUI的情况下正常使用,其所有核心功能和检查都可以通过45个命令行工具进行访问。这些命令包括启动一组节点的命令,检查主题、服务和行为的命令,记录和回放数据的命令,以及很多其他命令。如果你喜欢图形化的工具,rvizrqt可满足你的要求。

2rviz

    Rviz也许是ROS中最有名的工具了,它可以用来对许多传感器数据和任何URDF描述的机器人进行三维可视化。

    Rviz可以可视化ROS提供的许多常见消息类型,如激光扫描、三维点云、摄像机图像等。它还使用来自TF库的信息在你选择的公共坐标框架中显示所有传感器数据,并提供机器人的三维渲染。在同一应用中可视化所有的数据,不仅看起来激动人心,而且能够使你快速看到你的机器人所看到的,还能够识别诸如传感器偏差或机器人模型不精确等问题。

3rqt

ROS提供的rqt是一个基于QT框架的机器人图形界面开发工具。你可以通过将内置的rqt插件组合和配置到选项卡、拆分屏幕和其他布局来创建用户界面,也可以编写自己的rqt插件并将其引入新的界面组件中。

rqt_graph插件为实时ROS系统提供检查和可视化功能,它可显示节点和它们之间的连接,并允许你轻松地调试和理解你的运行系统以及它们的构成。

rqt_plot插件可以用来监测编码器、电压以及任何随时间变化的数据。你也可以使用rqt_plot插件选择最适合你需要的绘图后台(如matlablibQWTpyqtgraph)。

rqt_topicrqt_publisher插件可以监测和使用主题。前者允许你监测和检查系统内发布的任意数量的主题;后者允许你将自己的消息发布到任何主题,方便你系统的实验。

ROS使用bag格式进行数据的记录和回放。Bag文件可使用rqt_bag插件来创建和访问。该插件可将数据记录在bag中,可从一个bag中回放选择的主题以及可视化一个bag的内容(包括图像的显示和随时间变化数据的绘制)。

 

三、如何学ROS

许多ROS初学者在刚接触ROS往往感到很迷茫不知从哪里开始不知怎样学习它如何学好它我们在多年的ROS推广和实践过程中积累了一些ROS的学习和开发经验,这里抛砖引玉,供大家参考。

1. 熟悉Ubuntu基本命令和基本操作

学习好ROS首先要打好基础而这个基础就是Ubuntu系统对于没有接触过UbuntuROS学习者建议花几周时间熟悉一下Ubuntu这个操作系统尤其是一些基本的Linux命令和一些基本的操作

2. 掌握ROS的基本概念和基本操作

对于ROS初学者首先要掌握ROS的一些基本概念如工作空间功能包标题服务节点等和一些基本操作如工作空间和功能包的创建节点的编写多个节点之间传递信息标题的发布服务的提供等只有首先牢固掌握了这些基本概念和基本操作才有可能进行后续深入的学习和开发

3.掌握一门面向对象的程序设计语言

要使用ROS控制和操作机器人或者传感器必须要编写自己的节点相当于应用程序),这就需要至少掌握一门面向对象程序设计语言C++Python均可最好是两者都熟悉如果你尚未使用过C++Python请参照C++ Primer或者Python基础教程学习和掌握它们

4.拥有一台属于自己的ROS机器人

ROS提供了强大的模拟和仿真工具,即使没有机器人也可以学习和测试ROS。但如果一直模拟和仿真,时间久了难免枯燥,所以最好能有一台支持ROS的机器人。大部分支持ROS的机器人价格昂贵,动辄几十万上百万的价格,往往非个人所能承受。这里给大家推荐两款性价比高的ROS机器人,一款是TurtleBot3(或TurtleBot2),另一款是硅步机器人自主研发的无人机Gapter EDU这两款机器人的价格低廉且配套有完整的ROS教学资源是入门者学习ROS的不二选择

5.实践、实践、再实践

实践出真知。如果你已具备了上述四个条件,那剩下的就是实践了。请参照本网站提供的ROS教程和资源,同时还可以跟随硅步机器人主办的ROS大讲堂直播进行系统的学习和实践。相信用不了多久,你就能成为ROS社区的一员生力军!

首页
机器人
生命科学
新闻动态
视频&资料
服务支持
关于我们

群海设计Copyright © 2016-2026 Shanghai Gaitech Scientific Instruments Co.,Ltd 沪ICP备05039062号-1所有版权归上海硅步科学仪器有限公司