书名:ROS机器人编程与SLAM算法解析指南
ISBN:978-7-115-52631-1
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
主 编 陶满礼
参 编 夏丽娟 张志飞 夏文杰
责任编辑 张 爽
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
目前ROS(Robot Operating System)正逐步成为机器人开发领域的主要工具平台,同时SLAM技术也日益成为机器人应用领域的研究热点。本书主要讲解ROS编程与SLAM算法,并介绍 ROS 与机器人仿真软件V-rep的结合应用。书中各章节所涉及的代码均有对应的源代码,可供读者下载,便于调试与应用。
本书可作为机器人开发从业人员或相关领域研究人员的参考用书,也适合没有机器人开发基础的人员自学使用,还可作为相关培训学校的教材。
本书以作者在机器人开发过程中遇到的问题及相关解决方案为基础,深入浅出地介绍了ROS的基础知识及其使用方法,涉及移动机器人自主建图、导航、SLAM算法源码解读、ROS Navigation源码解读,以及相关算法原理与代码实现。本书可帮助机器人领域的开发人员了解并使用ROS。
本书的创新之处在于提供了结合ROS进行机器人开发的V-rep环境。V-rep软件是一款优秀的机器人开发仿真软件。目前国内有关该软件的中文资料较少,与ROS结合进行开发的资料更是稀缺。本书结合ROS与V-rep这两款优秀的机器人开发软件,为读者提供了建图和导航实现的项目实例。
本书分为7章。
第1章主要介绍了Ubuntu系统、ROS的安装及常用命令操作。
第2章主要介绍了ROS开发IDE—RoboWare Studio的安装使用,以及ROS开发的基础知识。
第3章主要介绍了ROS开发过程的常用调试工具。
第4章主要介绍了TF知识及使用方法。
第5章主要介绍了SLAM功能包源码解读及自定义功能包再现建图过程。
第6章主要介绍了Navigation功能包解读及相关算法原理与代码实现。
第7章主要介绍了ROS与V-rep联合开发实现机器人建图与导航。
本书第1章由夏丽娟执笔,第2、5、6、7章由陶满礼执笔,第3章由张志飞执笔,第4章由夏文杰执笔。全书代码由陶满礼编写并校验。
本书内容是基于作者在新松公司服务机器人开发过程中遇到的问题及相关解决方案编写而成的。新松智能交通部门工程师张志飞为作者提供了许多重要的参考意见,并参与了相关章节的编写工作,在此表示感谢!
本书逻辑清晰、合理,内容简洁、实用、易懂。对于广大从事机器人开发的工作者及开展机器人研究的高校研究人员来说,是一本不可多得的自学及参考用书。
由于编者水平有限,书中难免存在错误和欠缺之处,敬请读者批评指正。
编者
2019年9月
本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。
本书提供配套源代码,请在异步社区本书页面中点击 ,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入勘误信息,点击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。
如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。
异步社区
微信服务号
ROS,全称Robot Operating System,是一个开源的机器人操作系统,能为异质计算机集群提供类似操作系统的功能(注意:ROS不是真正意义上的操作系统,它通常运行在Ubuntu系统上,且有固定的版本对应)。ROS提供了操作系统应有的服务,包括硬件抽象、底层设备控制、常用函数的实现、进程间消息传递,以及包管理。ROS也提供用于获取、编译、编写和跨计算机运行代码所需的工具和库函数。
ROS系统起源于2007年斯坦福大学人工智能实验室与机器人技术公司Willow Garage合作的个人机器人项目PR2(Personal Robots Program)。2009年初推出测试版的ROS0.4,该版本已初步具备现有的ROS系统框架。2010年正式推出ROS1.0版本,并开发出一系列机器人操作的基础软件包。之后不断进行版本迭代和功能完善,目前ROS的最新版本为Lunar。除此之外,支持包括Linux、Windows、macOS等操作系统的ROS2也已推出(本书只介绍ROS1的使用,对ROS2不作讨论)。ROS各版本及其发布时间如表1-1所示。
表1-1 ROS版本及发布时间
ROS 版本 |
发布时间 |
---|---|
Lunar Loggerhead |
2017.5 |
Kinetic Kame |
2016.5 |
Jade Turtle |
2015.5 |
Indigo Igloo |
2014.7 |
Hydro Medusa |
2013.9 |
Groovy Galapagos |
2012.12 |
Fuerte Turtle |
2012.4 |
Electric Emys |
2011.8 |
Diamondback |
2011.3 |
C Turtle |
2010.8 |
Box TurtleBox Turtle |
2010.3 |
Ubuntu(乌班图)是一个基于Debian的以桌面应用为主的Linux操作系统,支持x86、amd64(即x64)架构,由全球化的专业开发团队(Canonical Ltd)打造。机器人操作系统ROS就是基于Ubuntu运行的,因此在学习ROS之前,我们需要先花一些时间来了解如何安装以及配置Ubuntu系统,为之后安装与配置ROS系统做准备。不同的ROS 版本对应不同版本的Ubuntu系统,其匹配关系如表1-2所示。
表1-2 ROS版本及对应版本的Ubuntu系统
ROS发布日期 |
ROS版本 |
Ubuntu系统版本 |
---|---|---|
2016.3 |
ROS Kinetic Kame |
Ubuntu 16.04 (Xenial) / Ubuntu 15.10 (Wily) |
2015.3 |
ROS Jade Turtle |
Ubuntu 15.04 (Wily) / Ubuntu LTS 14.04 (Trusty) |
2014.7 |
ROS Indigo Igloo |
Ubuntu 14.04 (Trusty) |
2013.9 |
ROS Hydro Medusa |
Ubuntu 12.04 LTS (Precise) |
2012.12 |
ROSGroovyGalapagos |
Ubuntu 12.04 |
准备工作如下。
进入Ubuntu官网https://www.ubuntu.com/download/alternative-downloads下载安装包,界面显示可供下载的Ubuntu镜像选项如下。
选择下载对应版本(本书以14.04为例),后续对应ROS的Indigo版本使用。
为电脑分出30GB~70GB的存储空间,从现有的硬盘中直接压缩。具体操作是,右击“计算机→管理→磁盘管理”,可以很清楚地看到各个磁盘的分区情况,右击选中待压缩的磁盘,单击压缩卷,压缩出30GB~70GB的内存用于安装Ubuntu系统。
完成分区之后开始刻录U盘启动盘,安装下载好的UltraISO软件并打开,如图1-1所示,在菜单里找到“启动”选项,单击“写入硬盘映像”。
图1-1 UltraISO软件启动界面
在弹出的窗口中单击“便捷启动”选项,在下拉菜单中选择“写入新的硬盘主引导记录(MBR)”,继续选择“USB-HDD+”,如图1-2所示。
图1-2 写入磁盘映像
写入完成后,拔出U盘并关闭电脑,然后重新插入U盘,启动电脑,通过快捷键进入BIOS,选择U盘启动。各电脑进入BIOS的快捷键可参考表1-3。
表1-3 BIOS快捷键参考
笔记本 |
启动按键 |
台式机 |
启动按键 |
---|---|---|---|
联想笔记本 |
F12 |
联想台式机 |
F12 |
宏基笔记本 |
F12 |
惠普台式机 |
F12 |
华硕笔记本 |
Esc |
宏基台式机 |
F12 |
惠普笔记本 |
F9 |
戴尔台式机 |
Esc |
联想ThinkPad |
F12 |
神舟台式机 |
F12 |
戴尔笔记本 |
F12 |
华硕台式机 |
F8 |
神舟笔记本 |
F12 |
方正台式机 |
F12 |
东芝笔记本 |
F12 |
清华同方台式机 |
F12 |
三星笔记本 |
F12 |
明基台式机 |
F8 |
IBM笔记本 |
F12 |
|
|
进入BIOS之后,在安装界面选择“中文(简体)”,如图1-3所示,单击“安装Ubuntu”。
图1-3 Ubuntu安装界面
在准备安装Ubuntu界面中单击“继续”,如图1-4所示。
图1-4 准备安装界面
在新弹出的安装类型界面中选择“其他选项”,单击“继续”,如图1-5所示。
图1-5 安装类型界面
在弹出的新建分区界面中,单击“新建分区表...”,如图1-6所示。
图1-6 新建分区界面
此时,弹出窗口提示“要在此设备上创建新的空分区表吗?”,选择“继续”,如图1-7所示。
图1-7 是否新建分区表界面
接下来,建立/boot分区。如图1-8所示,单击“空闲”磁盘分区,单击“+”添加新分区,将大小设置为500MB,类型为“主分区”,挂载点为“/boot”,最后单击“确定”。
图1-8 新建boot分区
接下来,新建交换空间分区。如图1-9所示,单击“空闲”磁盘分区,单击“+”添加新分区,将大小设置为2048MB,类型为“主分区”,用于“交换空间”,最后单击“确定”。
图1-9 新建交换空间分区
然后,新建根分区。如图1-10所示,单击“空闲”磁盘分区,单击“+”添加新分区,将大小设置为50GB,类型为“主分区”,挂载点为“/”根分区,最后单击“确定”。
图1-10 新建根分区
接着,新建home分区。单击“空闲”磁盘分区,单击“+”添加新分区,将大小设置为剩余全部空间,类型为“逻辑分区”,挂载点为“/home”,单击“确定”,最后单击“现在安装”,如图1-11所示。
图1-11 新建home分区
接下来,在页面中设置用户名、计算机名及密码,单击“继续”,安装完成后单击“现在重启”,如图1-12所示。
图1-12 是否重启界面
重启后,可看到图1-13所示的安装成功界面。
图1-13 安装成功界面
至此,Ubuntu系统在电脑上的安装工作完成。
(1)树莓派:HDMI转VGA转接线(连接树莓派与显示器)、电源(树莓派供电)、microSD卡(安装系统)。.img镜像的官方下载地址为http://cdimage.ubuntu.com/ubuntu/releases/。
(2)Win32diskmanager(镜像读写工具)的官方下载地址为https://sourceforge.net/projects/win32diskimager/。
(1)将microSD卡插入读卡器。
(2)打开Win32DiskImager,选择下载的.img镜像及microSD卡的盘符,然后写入。
(3)将写好的系统内存卡插入树莓派,然后将键盘、鼠标、显示器、树莓派插上电源即可启动。
(4)设置系统语言、用户名和密码等。
配置 Ubuntu 软件仓库,打开软件和更新对话框,具体可以在 Ubuntu 最左上角的“搜索”选项中搜索。打开后按照图1-14所示进行配置(确保勾选了“restricted”“universe”和“multiverse”)。
图1-14 配置Ubuntu软件仓库
添加sources.lists,配置电脑使其能够安装来自 packages.ros.org的软件。 ROS Indigo 仅支持 Saucy (13.10) 和 Trusty (14.04):
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
添加 keys:
sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
更新Debian软件包索引:
sudo apt-get update
安装桌面完整版ROS:
sudo apt-get install ros-indigo-desktop-full
在开始使用ROS之前,还需要初始化rosdep。rosdep可以在编译某些源码时为其安装一些系统依赖,也是某些ROS核心功能组件必须要用到的工具。
sudo rosdep init
rosdep update
下面开始配置环境。
打开终端,输入以下内容:
$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
安装rosinstall。rosintall是ROS中经常使用的命令行,可以便于我们在一行命令中同时下载多个ROS packages,其安装命令如下:
sudo apt-get install python-rosinstall
测试时,在命令行输入“roscore”启动ROS节点管理器,如图1-15所示。
图1-15 ROS节点管理器启动界面
如果看到图1-15所示的结果,说明已成功安装ROS。
由于ROS是基于Ubuntu系统运行的,因此在学习ROS之前,我们需要熟悉一些基本的Linux操作指令。常用的操作命令分为以下3类。
(1)查找指令
(2)文件/文件夹操作命令
(3)安装软件及创建用户命令
ROS中包含丰富的调试命令。本书只提供一些常用的基本操作命令,这些命令会在后续章节中频繁地被使用,希望读者熟记。
(1)工作空间及功能包相关命令
(2)节点启动及主题调试命令