1. 前言
笔者以前是机械专业,对于计算机方面的学习是少之又少,接触机器人的学习之后,比如路径规划、算法等,发现很难入门,不过慢慢摸爬滚打之后还是有了一些认识,俗话说的好,学习最好的方法就是复述,复述学习法也是我推荐大家采用的一种学习方法,能够写下这篇博客也是鼓起勇气来写的,为的是理清自己所学的知识体系,能够让完全不懂计算机的人也能够看懂什么是ROS,若是有同学对部分地方有异议还望提出,我也会随着学习ROS的深入逐渐将以往自己写的BLOG进行完善。
2. 站在哲学领域看ROS
虽说是自己对ROS的概述,但是还是避免不了参考很多牛人的博客,自己主要参考了古月居博主的博客,大家如果学习ROS也建议大家多去逛逛他的博客,很受用。
为什么要从哲学领域看ROS呢,其实我自己有两个观念,第一是我们若想真正训练我们自己的思维方式,必须对事物的本质能够有强烈的好奇心,其次,哲学也是任何科学探索的本质,所有的科学真理问题,都将回归到哲学上的三个终极问题:
1.我从哪里来br> 2.我活着为了什么br> 3.将来去哪里br> 西方有一本书《圣经》完全解释了这三个问题,而且这三个问题也与越来越多的现代历史考古以及科学领域形成了统一的逻辑,所以哲学还是挺有意思的,让人们认清事物最原始的本质。
(1)ROS从何处来br> 从下面这张图片来看,ROS是2007年诞生与斯坦福大学,斯坦福大学,世界名校,而且是专业研究机器人的,目前也在从事人工智能的研发,ROS诞生于这样的贵族,可见ROS的发展还是非常有前途的。
ROS目前能够应用的是机器人领域,包括移动机器人和机械臂,移动机器人应该是应用最广泛的,主要是应用于机器人的建模、感知、导航、规划等,其可以和普通机器人结合进而控制真实机器人,功能的确强大,而且随着目前的发展势头,其功能是越来越强大。下面简单以几个例子来说明。
ROS用在机器人领域,机器人可以是移动机器人,也可以是机械臂,移动机器人就是类似于扫地机器人的那种,当然机器人也可以是移动机器人和机械臂的组合,比如下面这幅图的这个机器人。
3.ROS具体介绍
3.1ROS横向介绍
ROS横向介绍我们看下面这幅图,这幅图也是古月居博主总结的,前面我们说过ROS的总体目标,也就是提高软件复用率,下面我们主要介绍它的五个特点和四位一体。
经过上述的介绍你可能就会懂了,还不懂的话就留言吧!
(2)多语言支持
这个好理解,上面第(1)点我们介绍了ROS是有多个节点的,节点之间可能会有联系,但是联系又没有那么紧密,每个节点都是一个功能,它们可以分别使用不同的编程语言进行编程,如C++、Python、Java等编程语言,无论采用哪种编程语言进行编程,最后节点之间进行信息交互的时候都可以通过与语言无关的一个接口进行连接。
(3)架构精简,集成度高
这个特点说明的主要是ROS的一个宏观描述,就是描述ROS这一操作系统还是一个看起来结构比较简单,操作不难,而且功能集成丰富,大家字面理解就行。
(4)组件化工具包丰富
这个字面理解就是说ROS有很多功能强大的工具,比如仿真界面工具rviz,仿真环境gazebo,rqt_plot图形化显示工具等,现在这些工具大家可能不懂具体能干什么,不过这些工具在大家学习到ROS的过程中都会碰到,而且是经常使用的。
3.2ROS纵向介绍
ROS的纵向介绍主要从小到大,从深到浅进行介绍,整个ROS系统分为以下三个层次,如图
假设一个节点需要某种类型的信息,假设这种类型是“bar”,也就是我们所说的话题,那这个节点必须接收这种话题的信息,我们把这个节点称之为接收者或者订阅者(listener),因此它会向节点管理器(ROS Master)求助,节点管理器(ROS Master)然后便会帮助这个接收者(listener)找正在发布这种话题“bar”的节点,这个节点我们称之为发布者(talker)找到之后便会帮助这两个节点建立连接,然后通讯。
总体上来说一下步骤(图中步骤是七个,此处精简为五个步骤):
**第一步:**信息的发布者(talker)和接收者(listener)都必须向节点管理器(ROS Master)注册自己的信息,就跟人员登记一样,节点管理器需要知道你这个节点的地址等信息,为什么需要知道呢,因为ROS的节点在实际机器人设计中,可能都存在于一个计算机之中,也可能分布于不同的计算机,因此需要地址等信息来对节点进行确定;
**第二步:**节点管理器在确定需要通信的两个节点之后就会对两个节点的信息进行匹配;
**第三步:**接收者(listener)向发布者(talker)发送自己的TCP通讯协议以及连接请求;
**第四步:**发布者(talker)确定连接请求,然后将自己的TCP地址发送给接收者(listener);
**第五步:**两个节点正式建立连接,并以TCP协议进行数据传输。
从以上步骤可以看出,五个步骤全部都是在进行通信,通信的过程中有一个字眼叫做协议,至于这个概念,我们先来看百度百科。
(4)服务
在第(3)点介绍中,我们讲解话题通信的主要过程,我们是以两个节点之间的通信为例进行讲解,但是实则,话题通信可以多个节点与多个节点进行通信,比如一个节点发布一种话题的信息,有五个节点都需要这种信息,则这五个节点都可以订阅并且接收这种信息。
服务通信是单向的,大家可以很容易理解,信息流只能是由发布者流向接收者,而且节点之间的通信是有延迟的,并不同步,针对这两个缺陷,这个小点介绍的服务通信则满足了双向同步的通信,此外,服务通信两端的节点一个叫服务器(talker),一个叫客户端(listener),服务器还是发布数据信息的,客户端则是接收数据信息的,但是这种通信只允许有一个服务器,客户端可以有多个,服务器和客户端之间双向同步通信,采取请求和应答的模式进行通信,如下图所示。
讲到这里,大家对于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/”安装目录下,如下图所示,大家打开之后会看到下面这五个文件夹。
(3)include文件夹
这个文件夹比较重要,里面放置的是头文件,这个大家就比较熟悉了,学过C语言的都知道,每次我们在写程序的第一行就是#include <stdio.h>,这个里面就包含了一个头文件。
ROS里面的某一具体的头文件属于某一具体的功能包,如果一个功能包需要依赖另外一个功能包,也就是要与另外一个功能包建立联系,那必须要包含另外那个功能包的头文件,功能包的头文件在功能包安装的时候就被存放于这个文件夹。
(4)lib文件夹
这个文件夹放置的就是一些可执行程序
(5)share文件夹
这个文件夹放置的全部是ROS里面已经安装的功能包,主要包含功能包的各种信息,包括其接口、配置信息等。
注意:如果我们需要真正的操作搭建机器人,我们并不是直接在上述这个ROS文件夹下进行的,我们需要额外建立一个文件夹,称之为工作空间,然后我们在那个工作空间下会创建自己的功能包,进行一系列开发工作。
4. 小结
讲到这里也暂时告一段落了,ROS的学习是一个漫长的过程,它始终是一个平台,一个工具,我们学习它也需要知道我们为什么学,我们是要去完成一个什么样的任务,这个很重要,而不是为了学ROS而去学习ROS,不要看到别人都在学习ROS我们也效仿别人去学习它,我们得有一个具体的任务,然后有一套自己具体的理论,最后用这个工具来帮助我们实现。
关于ROS的学习方法,最好还是先看一下ROSwiki上面的教程的初级部分,也就是初学者部分,然后打住,可以看看古月居博主的视频教程,然后自己在 上找找牛人的博客,自己亲手敲代码实践,实践出真知,祝大家学习进步!
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!