前言
前 言  Preface学习ROS,并通过支持ROS的机器人(如Baxter和TurtleBot)进行实际操作,将开启一段神奇的机器人技术的学习之旅。ROS具有十分突出的优点以及鲜明的特色,但其学习曲线也较为陡峭。通过对许多实际的ROS应用的尝试,并在总结了一系列错误的经验教训之后,我们摸索出了一条切实有效的学习路径,并形成了本书所论述的内容。本书会呈现我们关于ROS的见解中最重要的知识,并在读者的ROS学习之旅中提供循序渐进的引导。我们将结合典型的ROS机器人进行介绍,这些机器人包括TurtleBot、Baxter、Crazyflie以及Bebop,此外还将通过模拟机器人对相关技术进行论述,这些模拟机器人主要有Turtlesim和Hector。

除了对一般性的ROS技术进行论述外,本书还将对ROS机器人的高级应用特性进行讲解。本书首先对ROS的基本配置进行介绍,内容包括ROS的安装、基本概念、主要的功能包与工具简介等。然后对相应的故障排查方法进行了论述,当读者在实际操作中得到的结果与预期结果不相符时,可以按照相应方法进行故障的排查。然后通过模拟的方式,先对Turtlesim的ROS组成模块进行了描述,之后对其他几类典型机器人的ROS组成模块进行了相应的介绍。对ROS组成模块的介绍,一般遵循的流程是首先介绍基本的ROS命令,然后对ROS的功能包、节点、主题以及消息进行论述,以此来对ROS机器人操作系统的整体内容进行详细的阐述。为了对书中选用的机器人的整体性能进行描述,书中还给出了相关机器人的技术资料。

ROS涵盖了完整的软件概念、实现以及相应的工具,其目标是为机器人提供复杂系统的同质化图景以及一体化的软件集成。传感器的外部扩展库、执行器驱动以及相应的接口均已包含其中,此外ROS还囊括了大部分目前最新最有效的算法。对于如OpenCV这样十分流行的第三方开源项目,ROS并未包含,但可以直接对其进行导入。此外,为了节省研究人员的时间,使研究人员能够将精力集中于自己的兴趣点上,ROS还提供了一系列的辅助工具,来对机器人进行控制、监控以及调试,这些工具包括rqt、rviz、Gazebo、动态配置工具以及MoveIt等。

本书将循序渐进地以实例的形式对ROS的各部分内容进行阐述,每一部分内容都是实际的机器人实例的组成部分。对于TurtleBot机器人,主要对导航和地图构建主题进行探索;对于Baxter机器人,则主要介绍关节控制与路径规划主题。对于书中提及的机器人,将以简单的Python脚本为例来实现ROS的各个元素。读者都能够通过模拟机器人对书中内容加以实操练习。此外,书中还介绍了如何以模拟的形式设计并构建读者自己的机器人模型。

ROS本身的优异性能、支持ROS的机器人的多样性,以及ROS社区的支持,共同构建起了一个值得一试的机器人开发ROS实例的学习之旅。除了书中的内容之外,读者还能够找到丰富的在线扩展指南、wiki资源、论坛、开发技巧等内容。那么现在就从本书开始,一起踏上ROS机器人开发的学习之旅吧。

本书涵盖的内容第1章主要阐述了学习ROS的优势,同时论述了支持ROS的机器人平台的主要亮点。对ROS在Ubuntu操作系统下的安装流程进行了介绍。描述了ROS的框架结构,并对其主要组件进行了描述。对Turtlesim模拟机器人程序进行了简述,同时为了进一步加深读者对ROS组件以及ROS命令的理解,对Turtlesim的使用进行了介绍。

第2章主要介绍了ROS的模拟环境Gazebo。本章内容将引导读者一步步构建起一台差分驱动的两轮模拟机器人,并介绍了统一机器人描述格式(Universal Robotic Description Format,URDF)的相关内容。此外还将详细地介绍基本的ROS工具(如rviz、Gazebo等)的使用方法,从而使读者能够在模拟环境下展示所构建的机器人,并与之进行交互。

第3章主要介绍一款真实的机器人—TurtleBot的操作和控制。如果读者没有该型机器人,那么可以在Gazebo模拟环境下使用模拟的TurtleBot机器人来学习本章的内容。读者可以通过ROS命令、Python脚本程序等多种方法实现对TurtleBot机器人的操控。此外,本章还讲述了使用rqt工具及其插件对TurtleBot进行控制以及对其传感器数据进行监控的方法。

第4章探讨了视觉传感器以及对于机器人创建周围环境地图的相关内容。论述了可用作TurtleBot视觉系统的3D传感器,并介绍了在ROS下进行设置与操作,使得机器人具备自主导航能力的内容。在TurtleBot机器人导航模块中,应用了同步定位与地图创建技术。

第5章对复杂的机器人手臂进行了简要介绍。采用Xacro的宏语言设计并构建了一个模拟的机器人手臂。为了操作机器人手臂,在Gazebo环境下创建了相应的控制器。通过控制器的创建,论述了简单的机器人手臂的结构和物理学的相关内容。

第6章对复杂的机器人手臂控制进行了更进一步的探讨。对最新型的Baxter机器人进行了介绍,这也是本书中介绍的第二款机器人。Baxter机器人有两个7自由度的手臂以及其他一系列的传感器,并提供了一个开源的Baxter机器人模拟器,本章正是采用这一机器人手臂模拟器进行论述。通过实例的形式,分别在位置控制模式、速度控制模式与扭矩控制模式下,对机器人手臂的正向与反向运动控制进行了介绍。此外,本章还对一个非常有用的ROS工具—MoveIt进行了介绍,MoveIt既可以对模拟的Baxter机器人手臂进行运动规划的仿真和执行,也可以对真实的Baxter机器人手臂进行运动规划的仿真和执行。

第7章对一个日渐风靡的机器人领域—无人机进行了论述。本章主要针对四旋翼的相关内容进行阐述,对四旋翼硬件与飞行控制的概念进行了论述。对四旋翼模拟器Hector的下载与控制进行了介绍,通过对模拟四旋翼飞行操控的练习,使读者能够对真实的四旋翼(如Bitcraze的Crazyflie或者Parrot的Bebop)进行操控。对四旋翼的控制可以使用遥控或者ROS的主题/消息命令实现。

第8章对一系列可以用来对支持ROS的机器人进行控制的外部设备进行了描述。Joystick游戏手柄、控制器开发板(Arduino和树莓派)以及所有移动设备均具有ROS接口,这些接口可以集成到读者的机器人系统之中来实现对机器人更多的外部控制。

第9章对书中前面章节所介绍的多个ROS组件与概念进行集成,从而实现一个十分具有挑战性的任务:自主飞行。在该任务中,读者将在采用Kinect 3D传感器构建的地图下控制Crazyflie四旋翼飞行器自动飞往一个“远方”的目标。这一任务采用了ROS的消息通信机制与协同传输,从而得到四旋翼飞行器上Kinect的视野以及目标相对于四旋翼的位置,从而对飞行进行精密的规划,在此基础上,将采用了PID控制的Crazyflie的飞行控制软件作为飞行任务中的飞行控制模块,从而实现了四旋翼的自主飞行。

第10章对高级ROS机器人应用的相关内容进行了论述,激励读者对ROS功能做更加深入的学习。对机器人的语音控制、人脸检测与识别以及机器人语音功能等都做了描述。

学习本书内容所需的基础知识与设备本书的形式是给出各项任务内容的步骤指令,并由读者参与其中,具体实操。读者需要一台安装了Ubuntu14.04(Trusty Tahr)的电脑。同时也支持其他版本的Ubuntu以及Linux发行版,此外也支持Mac OS X、Android和Windows,不过需要参考ROS wiki的文档(地址:http://wiki.ros.org/Distributions)。

本书中所用的ROS版本为Indigo Igloo,该版本是目前推荐的稳定发行版,对该版本的支持将持续到2019年4月。书中内容对其他版本的ROS理论上是可支持的,但是并没有进行测试。

书中所有的软件都是开源的,可以免费获取和使用。在对相关软件进行介绍时会提供相关的下载说明。本书第1章给出了下载和设置ROS软件环境的相应指令。

下载软件时,推荐使用Debian软件包。当不存在相应的Debian包时,推荐从GitHub软件发行库中下载。

Gazebo模拟器提供了增强的图形化处理功能,推荐使用专用的图形选项卡进行操作,但并不强求。

涉及的外部设备主要包括3D传感器、Xbox或者PS3控制器,以及Arduino或者是Raspberry Pi控制板、Android移动设备等。

本书面向的读者人群本书主要面向机器人开发人员,无论是业余爱好者还是相关研究人员,无论是专业人士还是对ROS感兴趣的人,都能从书中获益,如果具备GNU/Linux系统和Python语言的相关知识则更好。

示例代码下载读者也可以在GitHub上下载相应的代码包,地址为:https://github.com/Packt Publi-shing/ROS-Robotics-By-Example。此外,我们也给出了丰富的其他各类书籍的相关下载内容(代码包、视频等),地址为:https://github.com/Packt Publishing/,欢迎读者下载使用。

书中彩图下载我们还以PDF文件格式的方式提供了书中有关的屏幕截图以及图表的彩图文件。这些彩图能够便于读者理解输出内容的变化。读者可以通过下述网址下载相关内容:http://www.packtpub.com/sites/default/files/downloads/ROSRoboticsByExample_Color Images.pdf。



按 Ctrl+p 打印本页】【关闭