ROS平台下:从零开始学习SLAM(Part1 ROS初探)
行文结构
在写这篇博文时,我特意找了一位从未接触过ROS,但接触过Ubuntu的峰峰仔同学,让他以一位初学者的身份向我提问。通过整理我们之间谈话的内容,我决定从三个问题出发,带读者们初探ROS:
1.ROS可以用来做什么?
2.ROS怎么安装?
3.ROS与Ubuntu的关系是什么?
初探ROS
Part1.ROS可以用来做什么?
要回答这个问题,就必须先解释:什么是ROS?
在发表我的个人见解前,我先给出ROS官网的Introduction。如果你的基础足够好,理解能力足够强,那么OK,你就可以跳过Part1这一部分的内容,直接去看ROS官网的Introduction。当然,若你看完这段Introduction仍是一头雾水,那么不妨听听我的理解:
ROS是一种能提供点对点通信的网络,而且使用起来非常方便。举个例子,假设你有两台笔记本之间需要通信,那么你可以用socket完成这个任务;如果你有两台笔记本,一台用于连接摄像头与激光雷达,另一台用于处理从另一台笔记本传输过来的摄像头与激光雷达数据,且需要根据实际情况,选择使用摄像头数据或者激光雷达数据甚至进行两者的数据融合,来实现自定位,是不是感觉有些麻烦了;那么,还是刚刚那两台笔记本,一台不仅需要接收来自摄像头与激光雷达的数据,还需要接收imu,超声波传感器,底层小车模型数据,小车电量等等其他数据,并选择性地上传到另一台笔记本进行处理,面对这些大量,且格式、频率都不一定一致的数据,你不是要惊呼:我的天!这处理起来太麻烦了!
还好,这时候,ROS出现了!它提出了以节点(node),节点管理器(master),主题(topic)为核心;以广播(Advertise),订阅(Subscribe),发布(Publish)为操作的点对点网络架构。那么ROS实际的操作过程是怎么样的呢?
假设需要在笔记本A上发布激光雷达的数据到笔记本B,需要把在笔记本A发布激光雷达的数据设置为一个节点:laser_scan;把用于接收数据的笔记本B记为另一个节点:computer_b
第一步:广播(Advertise)。laser_scan节点将告诉节点管理器之后我将雷达数据广播到data主题(topic)。左起图1。
第二步:订阅(Subscribe)。computer_b节点将通知节点管理器之后我将订阅data主题(topic)。左起图2。
第三步:发布(Publish)。在Master的牵线搭桥作用下,laser_scan节点将和computer_b节点以data主题传输消息,之后就没Master什么事了。左起图3.
以上便是ROS的通信机制。下面我举个更加形象的例子吧:
今天小明教授想去工大开个SLAM的讲座,于是他来到了工大的教务处说:“今天我想在工大和同学们谈一谈SLAM”(教授说的话就是Advertise,且指明了他想发布的topic:SLAM;教务处就是Master)
于是,教务处老师处在教师QQ群里发了一条消息:“今天有位小明教授来工大想来开个SLAM讲座,哪个学院有兴趣听呢?”。这时候,信息学院的老师发说:“让小明教授来广知楼吧,我们信息学院的学生想听这个讲座”(信息学院的老师说的话就是Subscribe)
然后,小明教授来到了广知楼,向信息学院的学生滔滔不绝地传授SLAM知识(教授传授SLAM知识的过程就是Publish)。于此同时,教务处开始安排下一个想来工大讲座的教授了。
最后,在工大的广知楼,信息学院的学生们通过订阅(Subscribe)SLAM这个主题(topic)学到了很多有用的知识。
我们回过头再来思考一下ROS通信机制的优势:
一方面:由于教务处(Master)的存在,无论有多少个教授想来讲课,只要有学生想听,我们就可以安排他去对应的教学楼;如果信息学院想还想听ROS的讲座,只需要向教务处(Master)订阅(Subscribe)ROS这个主题(topic)即可,整个过程非常方便。
另一方面:如果没有教务处(Master)的存在,随着讲座个数的增加,学校的管理体系就混乱起来了。这就体现了教务处(Master)存在的价值。
这便是ROS可以做的,最为核心也最为基础的工作,读者们,你们懂了吗?
Part2.ROS怎么安装?
ROS主要是在Ubuntu和Mac OS X 系统上运行。所以,想要安装ROS,就必须先安装Ubuntu或Mac OS X。我的选择是安装Ubuntu14.04 LTS。
安装Ubuntu14.04 LTS的方式可以分为两种:一种是直接安装或者双系统安装Ubuntu;另外一种是在虚拟机VM下安装Ubuntu。
双系统或直接安装Ubuntu14.04 LTS
这里我假设读者们有一定的电脑基础了。
Step1.你需要下载UltraISO与Ubuntu14.04 LTS的iso镜像(这些我都已经下载完,放在/ROS_SLAM/Part1/ 中)。
Step2.插入一个已经格式化好的U盘,打开UltraISO>打开Ubuntu14.04 LTS镜像文件>选择镜像>写入硬盘镜像文件>写入。
Step3.关闭你的笔记本,启动你的Bios,修改启动项为优先U盘启动(不同笔记本这个有差异,不会的百度下即可)。
Step4.插上你制作完镜像的U盘,笔记本便会直接从U盘启动,直到出现下图安装Ubuntu的界面。
接下来就很简单啦,这里提两点:
1.在第二步连接无线时,最好选择“我现在不想连接wifi无线网络”,这样能加快安装速度。
2.安装完成之后,点击右上角的设置(那个小齿轮)>系统设置>软件和更新>Ubuntu软件>下载自>其他站点>选择最佳服务器,之后,这样后续的ROS安装就会很快了。
虚拟机中安装Ubuntu14.04 LTS
Step1.你需要下载VM(我的版本是VM12)与Ubuntu14.04 LTS的iso镜像(这些我都已经下载完,放在/ROS_SLAM/Part1/ 中)。
step2.打开VM12,创建新的虚拟机。
接下来就很简单啦,注意事项参照双系统或直接安装Ubuntu14.04 LTS 即可。
安装ROS
安装完Ubuntu之后,就可以安装ROS了。这里我使用的ROS版本是indigo。这里是官网的安装教程。
这里提一点,下图中我红线划掉的部分是不需要执行的。
剩下的读者只需要在命令行中一条条复制粘贴即可。
执行完官网的所有命令后,打开一个新的命令窗口,输入:roscore。如果你看到下图这样的界面,恭喜你,ROS安装成功!
Part3.ROS与Ubuntu的关系是什么?
个人之见:可以把ROS理解Ubuntu下的一个软件,这个软件通过roscore命令开启。也可以把ROS理解为一个Ubuntu下的开源机器人操作平台:里面有各种通用的机器人函数库可以供使用者调用,同时使用者也可以将自己封装好的机器人函数库上传,供他人下载使用和维护。
欢迎各位看官打赏哦