
前言
随着科技的发展,机器人已经从科幻小说走进了人们的日常生活中,如房间里用来清洁地板的扫地机器人,餐厅中穿梭往来送餐的服务机器人,商场中引导顾客的引导机器人,园区中配送快递的无人快递配送车,道路上的自动驾驶汽车等。伴随而来的是行业对于机器人相关技术人才的需求愈加旺盛。而面对着功能各异、形态千差万别的机器人,它们之间有着什么差异?有着什么共性?应该从哪里开始了解它们?怎样才能掌握机器人开发相关的技术?
机器人操作系统(Robot Operating System,ROS)就是一个很好的入手方向,ROS是一套应用于机器人开发的软件框架,最初应用于科学研究领域,由于其强大的功能、开源的特性和良好的社区环境,逐渐被越来越多的商业公司应用到产品开发中。ROS经过了多年的发展,已经成为机器人行业的事实标准。
提到ROS的学习,人们最常听到的一个说法是“学习曲线很陡峭”,这是指ROS在入门学习阶段比较艰难。而结合相关的学习经验和众多学生的反馈,可以发现导致ROS学习入门难的几个原因如下:
第一,ROS目前主流使用的操作系统平台为Linux操作系统的发行版,例如Ubuntu,而多数非计算机专业的学生在此前并没有了解过Linux操作系统,加上Linux中的主要操作都是通过终端命令行输入指令完成的,和日常广泛使用的Windows操作系统依赖图形化界面的操作方式有很大的区别,这就导致了很多用户没法熟练地使用,而Linux操作系统是ROS运行的基础环境,不能熟练使用必然会给ROS的学习带来很大的阻碍。
第二,对于ROS中常用的工具掌握不熟练,甚至不知道有这些工具的存在,正所谓“工欲善其事必先利其器”,而“利其器”的前提则是“知有器”,ROS为开发者提供了很多用于调试和诊断问题的工具,每种工具有各自擅长分析和解决的问题,不会灵活地使用各类工具来辅助机器人的开发和调试,必然会极大地影响开发和学习的效率。
第三,目前很多ROS相关的教程是基于仿真软件或者一款特定的机器人硬件而展开的,对于仿真软件中的机器人与实体机器人之间的区别和联系,以及怎样去移植和适配,并没有做出很好的阐述,这就使用户在学习完成后想要搭建自己的机器人平台或者将教程中的软件移植到其他机器人平台上时存在一定的难度。
第四,现在已经有很多个人或组织开源了自己所开发的ROS功能包软件并配套了详细的使用教程,初学者可以根据文档或视频教程去运行这些软件实现相应的功能,或者基于开源的软件做一些修改来快速实现自己的功能,但是当初学者想要实现一些新的功能,并且没有现成的开源软件可以参考时就会无从下手。究其原因是对ROS的编程思想缺乏了解,开源的软件通常只是给出了一套实现功能的代码和使用教程,但是对于功能实现的分析过程和思路却鲜有提及,即告诉了“怎么做”但没有告诉“为什么这样做”。
针对以上几个问题,本书在内容选取和结构编排上做了一些针对性的设计。
第1章为学习ROS必备的Linux知识,介绍Linux操作系统的安装、使用,为后面在Linux中使用ROS打下基础。
第2章为认识ROS,介绍ROS的安装,梳理ROS中众多概念的联系,通过官方提供的例程来熟悉各种工具的使用。
第3章为ROS编程基础,介绍ROS开发环境的搭建和编程的基本方式,巩固第2章中的ROS概念和工具知识点。
第4章为ROS机器人平台搭建,介绍ROS机器人的主要构成部件和选型参考,以及组建一套可以用于开发学习的机器人。
第5章为机器人仿真环境搭建,介绍在机器人仿真软件中搭建机器人仿真平台以及与实体机器人和仿真环境中机器人的区别与联系,为第6、7、8三个章节中的机器人例程运行做准备。
第6章为ROS中的OpenCV和机器视觉,介绍机器人中的机器视觉,机器视觉是目前机器人研究中一个重要的组成部分,本章介绍ROS和OpenCV结合方法以及经典的机器视觉实验。
第7章为激光雷达SLAM建图和自主导航,介绍机器人使用激光雷达完成SLAM构建地图和在地图中导航的实验。
第8章为ROS多机器人系统,介绍该系统的搭建和控制。
第9章为自己编写程序控制机器人,结合实例分析ROS机器人应用开发的思路,以及相关API接口的查找、使用方法,并编写代码来实现相应功能。
由于作者水平有限,书中难免有疏漏之处,敬请读者批评指正。
作者