ROS简介-从零开始讲解ROS(适合超零基础阅读)

1. 前言

笔者以前是机械专业,对于计算机方面的学习是少之又少,接触机器人的学习之后,比如路径规划、算法等,发现很难入门,不过慢慢摸爬滚打之后还是有了一些认识,俗话说的好,学习最好的方法就是复述,复述学习法也是我推荐大家采用的一种学习方法,能够写下这篇博客也是鼓起勇气来写的,为的是理清自己所学的知识体系,能够让完全不懂计算机的人也能够看懂什么是ROS,若是有同学对部分地方有异议还望提出,我也会随着学习ROS的深入逐渐将以往自己写的BLOG进行完善。

2. 站在哲学领域看ROS

虽说是自己对ROS的概述,但是还是避免不了参考很多牛人的博客,自己主要参考了古月居博主的博客,大家如果学习ROS也建议大家多去逛逛他的博客,很受用。
为什么要从哲学领域看ROS呢,其实我自己有两个观念,第一是我们若想真正训练我们自己的思维方式,必须对事物的本质能够有强烈的好奇心,其次,哲学也是任何科学探索的本质,所有的科学真理问题,都将回归到哲学上的三个终极问题:
1.我从哪里来br> 2.我活着为了什么br> 3.将来去哪里br> 西方有一本书《圣经》完全解释了这三个问题,而且这三个问题也与越来越多的现代历史考古以及科学领域形成了统一的逻辑,所以哲学还是挺有意思的,让人们认清事物最原始的本质。

(1)ROS从何处来br> 从下面这张图片来看,ROS是2007年诞生与斯坦福大学,斯坦福大学,世界名校,而且是专业研究机器人的,目前也在从事人工智能的研发,ROS诞生于这样的贵族,可见ROS的发展还是非常有前途的。

ROS简介-从零开始讲解ROS(适合超零基础阅读)

ROS目前能够应用的是机器人领域,包括移动机器人和机械臂,移动机器人应该是应用最广泛的,主要是应用于机器人的建模、感知、导航、规划等,其可以和普通机器人结合进而控制真实机器人,功能的确强大,而且随着目前的发展势头,其功能是越来越强大。下面简单以几个例子来说明。
ROS用在机器人领域,机器人可以是移动机器人,也可以是机械臂,移动机器人就是类似于扫地机器人的那种,当然机器人也可以是移动机器人和机械臂的组合,比如下面这幅图的这个机器人。

ROS简介-从零开始讲解ROS(适合超零基础阅读)
目前ROS能够结合的机器人也挺多的,国际上有名的工业机器人、协作机器人、服务机器人等绝大多数都已经用ROS开发过,所以在网上也是大把的资源。
但是ROS也有一些问题,就是目前实时性不是太强,所以ROS也推出了2.0版本,还有就是ROS在运行的时候容易崩溃,所以稳定性也有待提高,但是从总体上看,ROS运用在机器人领域还是蛮有优势的。

3.ROS具体介绍

其实说到具体介绍,肯定也不会太具体,本文先横向介绍ROS的整体框架,然后纵向介绍ROS系统层次,最后具体对ROS的安装以及主要文件夹的功能进行解释。(有的人可能会说“整体框架”和“系统层次”感觉差不多啊,的确,这两个词乍一看起来根本不知道在说啥,举个栗子吧,整体框架是横向广度的介绍,而系统层次是纵向深浅层次的介绍,我们既要横向看待ROS,也必须纵向看待ROS,人在不断进步的过程中也是一样,既要纵向扩展深度,也必须横向扩大视野)

3.1ROS横向介绍

ROS横向介绍我们看下面这幅图,这幅图也是古月居博主总结的,前面我们说过ROS的总体目标,也就是提高软件复用率,下面我们主要介绍它的五个特点和四位一体。

ROS简介-从零开始讲解ROS(适合超零基础阅读)

经过上述的介绍你可能就会懂了,还不懂的话就留言吧!

(2)多语言支持
这个好理解,上面第(1)点我们介绍了ROS是有多个节点的,节点之间可能会有联系,但是联系又没有那么紧密,每个节点都是一个功能,它们可以分别使用不同的编程语言进行编程,如C++、Python、Java等编程语言,无论采用哪种编程语言进行编程,最后节点之间进行信息交互的时候都可以通过与语言无关的一个接口进行连接

(3)架构精简,集成度高
这个特点说明的主要是ROS的一个宏观描述,就是描述ROS这一操作系统还是一个看起来结构比较简单,操作不难,而且功能集成丰富,大家字面理解就行。

(4)组件化工具包丰富
这个字面理解就是说ROS有很多功能强大的工具,比如仿真界面工具rviz,仿真环境gazebo,rqt_plot图形化显示工具等,现在这些工具大家可能不懂具体能干什么,不过这些工具在大家学习到ROS的过程中都会碰到,而且是经常使用的。

ROS简介-从零开始讲解ROS(适合超零基础阅读)
ROS简介-从零开始讲解ROS(适合超零基础阅读)
对ROS进行总结便形成了ROS四位一体的格局,首先是ROS的通讯机制,这个大家都知道了,点对点通讯。其次是ROS具备很多开发工具,比如rviz等。接着,ROS的功能也非常多,在ROS中是以一个叫做功能包的形式存在的(注:此处的功能和节点不能混为一谈,大家可以理解为一个大功能,而节点可以理解为一个个小功能),其应用功能设计视觉导航、运动规划多个方面。最后,ROS也不是一个单独的软件,它所存在的环境有各大牛人,各大公司,全世界都在使用它,相当于一个活跃的生态系统。

3.2ROS纵向介绍

ROS的纵向介绍主要从小到大,从深到浅进行介绍,整个ROS系统分为以下三个层次,如图

ROS简介-从零开始讲解ROS(适合超零基础阅读)
(3)话题
这个就比较重要了,涉及到ROS的通讯,前面说过,ROS的通讯机制是点对点通讯,也就是一个个节点之间的通讯,ROS节点之间的主要通讯方式是两种,这个话题通讯就是一种,另外一种是接下来会介绍到的第(4)点中的服务通讯,话题通讯和服务通讯是主要的通讯方式,这两种通讯方式的区别如下图所示,大家可以先看下面对这两种通信方式的具体介绍之后再来看这张表进行对比。
ROS简介-从零开始讲解ROS(适合超零基础阅读)
看到这幅图可能是懵逼的,接下来我们详细介绍。

假设一个节点需要某种类型的信息,假设这种类型是“bar”,也就是我们所说的话题,那这个节点必须接收这种话题的信息,我们把这个节点称之为接收者或者订阅者(listener),因此它会向节点管理器(ROS Master)求助,节点管理器(ROS Master)然后便会帮助这个接收者(listener)找正在发布这种话题“bar”的节点,这个节点我们称之为发布者(talker)找到之后便会帮助这两个节点建立连接,然后通讯。

总体上来说一下步骤(图中步骤是七个,此处精简为五个步骤):
**第一步:**信息的发布者(talker)和接收者(listener)都必须向节点管理器(ROS Master)注册自己的信息,就跟人员登记一样,节点管理器需要知道你这个节点的地址等信息,为什么需要知道呢,因为ROS的节点在实际机器人设计中,可能都存在于一个计算机之中,也可能分布于不同的计算机,因此需要地址等信息来对节点进行确定;
**第二步:**节点管理器在确定需要通信的两个节点之后就会对两个节点的信息进行匹配;
**第三步:**接收者(listener)向发布者(talker)发送自己的TCP通讯协议以及连接请求;
**第四步:**发布者(talker)确定连接请求,然后将自己的TCP地址发送给接收者(listener);
**第五步:**两个节点正式建立连接,并以TCP协议进行数据传输。

从以上步骤可以看出,五个步骤全部都是在进行通信,通信的过程中有一个字眼叫做协议,至于这个概念,我们先来看百度百科。

ROS简介-从零开始讲解ROS(适合超零基础阅读)
在话题通信中使用的协议有RPC协议和TCP协议,不同的协议用处不一样。

(4)服务
在第(3)点介绍中,我们讲解话题通信的主要过程,我们是以两个节点之间的通信为例进行讲解,但是实则,话题通信可以多个节点与多个节点进行通信,比如一个节点发布一种话题的信息,有五个节点都需要这种信息,则这五个节点都可以订阅并且接收这种信息。

服务通信是单向的,大家可以很容易理解,信息流只能是由发布者流向接收者,而且节点之间的通信是有延迟的,并不同步,针对这两个缺陷,这个小点介绍的服务通信则满足了双向同步的通信,此外,服务通信两端的节点一个叫服务器(talker),一个叫客户端(listener),服务器还是发布数据信息的,客户端则是接收数据信息的,但是这种通信只允许有一个服务器,客户端可以有多个,服务器和客户端之间双向同步通信,采取请求和应答的模式进行通信,如下图所示。

ROS简介-从零开始讲解ROS(适合超零基础阅读)
接下来介绍ROS的上面的一个文件系统层次,文件系统,说白了,就不再讨论具体的程序和通讯了,而是了解各个文件的结构以及它们之间的联系,ROS的文件的组织和排列是按照功能来进行的,不同功能的文件被放置在不同的文件夹下面,**功能包(package)**是ROS的文件系统层次下一个比较基本的单元,ROS的文件系统层次也是围绕它来展开:
ROS简介-从零开始讲解ROS(适合超零基础阅读)
讲到第三个层次,也就基本上是ROS中最外层的层次了,也是我们最好理解的层次,开源社区层,从前面所说的ROS的五个特点的最后一个特点“免费且开源”我们可以知道,ROS的开源可以让很多人共享资源,这个共享资源的平台也就可以称之为ROS的开源社区。
如下图所示,ROS的开源社区主要包括以下几个方面或部分,很简单的内容,也就是一些网站、博客之类的,其中软件源的意思可能难以理解一点,ROS有各种功能的功能包,ROS安装的时候只会安装固定的安装包,如果你要搭建自己的机器人,需要很多你自己需要的特定功能的功能包,你可以自己写功能包源代码,当然你也可以从开源社区中寻找,直接采用软件源的形式下载别人的功能包来参考使用。
ROS简介-从零开始讲解ROS(适合超零基础阅读)
从这幅图可以很清楚的看到ROS的层次性构造,最小的就是节点,节点之间主要通过话题和服务这两种方式通讯,多个节点之间连接器起来可以完成一定的功能,形成一个具有一定功能的功能包,多个具有相似功能或任务的功能包又组成一个大的元功能包,同理,多个元功能包又可以形成一个软件仓库,一个软件往往可以完成多个功能,一个ROS开源社区内部又存在多个软件仓库。

讲到这里,大家对于ROS的理解想必更深了一些。

3.3ROS安装及其主要文件夹介绍

前面对ROS进行了一些口头上的描述,我们要使用ROS肯定需要在自己的电脑上安装它,接下来主要就是对ROS的安装以及安装之后所在的文件夹进行介绍。

3.3.1ROS的安装

ROS是在Linux系统上运行的,一般选择Linux的Ubuntu系统进行安装,大家可以参考下面这个博客,也是笔者所作,是在原有windows7基础上安装Ubuntu双系统,写的非常详细。
Windows7上安装Ubuntu双系统
安装完成Ubuntu系统之后就可以在Ubuntu系统上打开终端(终端是一个黑色的窗口,任何界面直接按键盘快捷键Ctrl+Alt+T即可打开终端界面。),然后按照ROS wiki官网的ROS安装教程安装ROS,大家记得选择你所安装的Ubuntu版本以及你想安装的ROS的版本。

3.3.2ROS安装后的文件夹介绍

ROS安装之后的安装目录默认在“计算机/opt/ros/”安装目录下,如下图所示,大家打开之后会看到下面这五个文件夹。

ROS简介-从零开始讲解ROS(适合超零基础阅读)
(2)etc文件夹
这个文件夹用的少,主要是ROS 的一些配置文件。

(3)include文件夹
这个文件夹比较重要,里面放置的是头文件,这个大家就比较熟悉了,学过C语言的都知道,每次我们在写程序的第一行就是#include <stdio.h>,这个里面就包含了一个头文件。
ROS里面的某一具体的头文件属于某一具体的功能包,如果一个功能包需要依赖另外一个功能包,也就是要与另外一个功能包建立联系,那必须要包含另外那个功能包的头文件,功能包的头文件在功能包安装的时候就被存放于这个文件夹。

(4)lib文件夹
这个文件夹放置的就是一些可执行程序

(5)share文件夹
这个文件夹放置的全部是ROS里面已经安装的功能包,主要包含功能包的各种信息,包括其接口、配置信息等。

注意:如果我们需要真正的操作搭建机器人,我们并不是直接在上述这个ROS文件夹下进行的,我们需要额外建立一个文件夹,称之为工作空间,然后我们在那个工作空间下会创建自己的功能包,进行一系列开发工作。

4. 小结

讲到这里也暂时告一段落了,ROS的学习是一个漫长的过程,它始终是一个平台,一个工具,我们学习它也需要知道我们为什么学,我们是要去完成一个什么样的任务,这个很重要,而不是为了学ROS而去学习ROS,不要看到别人都在学习ROS我们也效仿别人去学习它,我们得有一个具体的任务,然后有一套自己具体的理论,最后用这个工具来帮助我们实现。

关于ROS的学习方法,最好还是先看一下ROSwiki上面的教程的初级部分,也就是初学者部分,然后打住,可以看看古月居博主的视频教程,然后自己在网上找找牛人的博客,自己亲手敲代码实践,实践出真知,祝大家学习进步!

来源:弓长木乔的博客

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年10月19日
下一篇 2018年10月19日

相关推荐