作者 |
伯纳多·朗奎洛·贾蓬 胡里奥·阿尔贝托·门多萨—门多萨 郎坦·约瑟夫 卡罗尔·费尔柴尔德托马斯· L.哈曼 等 |
丛书名 |
机器人设计与制作系列 |
出版社 |
机械工业出版社 |
ISBN |
9782109261729 |
简要 |
简介 |
内容简介书籍计算机书籍 ---------------------------8083413 - ROS机器人编程实践--------------------------- 本书首先介绍GoPiGo3及其配备的传感器和执行器。然后,通过从零开始创建3D模型并使用Gazebo在ROS中运行模拟机器人来使用GoPiGo3的数字孪生模型。接下来展示如何使用GoPiGo3构建和运行一个了解周围环境的自主移动机器人。还探索了机器人如何学习尚未在代码中编程但通过观察其环境而获得的任务。本书甚至还涵盖深度学习和强化学习等主题。在本书的末尾,读者将熟悉在机器人技术中构建特定用途应用程序的基础知识,并具备从零起步开发高度智能自主机器人的能力。本书适合机器人技术人员和业余爱好者阅读。 ---------------------------8082984 - 无人机编程实战:基于ArduPilot和Pixhawk--------------------------- 本书包括三个部分,首先介绍自动驾驶仪和库的特性。然后着重介绍对ArduPilot库的重要部分的理解,其中描述了代码的每个主要组成部分。第三部分是高级特性部分,目的是将获得的知识扩展到实时应用程序。每个部分都详细描述了代码及其组件、应用程序和交互。 ---------------------------8077994 - ROS机器人项目开发11例(原书第2版)--------------------------- . 本书涵盖新的ROS发行版中的项目——ROS Melodic Morenia with Ubuntu Bionic(18.04)。从基本原理开始,本书向你介绍了ROS-2,并帮助你了解它与ROS-1的不同之处。你将能够在ROS中建模并构建工业移动机械手臂,并在Gazebo 9中进行模拟。然后,你将了解如何使用状态机处理复杂的机器人应用程序,以及一次处理多个机器人。本书还向你介绍了新的、流行的硬件,如Nvidia的Jetson Nano、华硕修补板和Beaglebone Black,并允许你探索与ROS的接口。 ---------------------------8067954 - ROS机器人开发:实用案例分析(原书第2版)--------------------------- 本书不仅涵盖ROS的基础知识,还循序渐进地讲解了ROS机器人的高级应用特性。书中首先对ROS的基本配置进行介绍,内容包括ROS的安装、基本概念、主要的功能包与工具等。然后对相应的故障排查方法进行了论述。之后通过模拟的方式,先对Tu rtIesim的ROS组成模块进行描述,再对其他几类典型机器人的ROS组成模块进行相应的介绍。对ROS组成模块的介绍,一般遵循的流程是首先介绍基本的ROS命令,然后对ROS的功能包、节点、主题以及消息进行论述,以此来对ROS机器人操作系统的整体内容进行详细的阐述。为了对书中选用的机器人的整体性能进行描述,书中还给出了相关机器人的技术资料。 ---------------------------8062860 - JavaScript机器人:用Raspberry Pi、Arduino和BeagleBone构建NodeBots--------------------------- 本书展示使用JavaScript构建响应周围世界的机器人的方法。书中详细介绍使用带有Arduino、树莓派和BeagleBone的开源Johnny-Five机器人库,逐步构建和编程能够漫游、游泳、打字、散步、跳舞、发送提醒、制作音乐、表达情感等的机器人的方法。书中详细说明了项目所需的材料,找到材料的地点以及购买材料的估计成本,并且在计划和排除项目故障的过程中会提供大量帮助,这样你可以轻松地构建本书中的项目。本书深入解读Johnny-Five库、树莓派、Arduino和BeagleBone,非常适合具有JavaScript背景的中级创客。 ---------------------------8058704 - 精通ROS机器人编程(原书第2版)--------------------------- 本书主要面向机器人开发人员和想充分利用ROS功能的研究人员,是一本侧重ROS框架高级概念的进阶学习指南。书中既介绍了ROS的基本概念,又系统讲解了使用ROS进行复杂机器人设计、建模、仿真和交互的实用技术、工具和编程技巧,包含大量示例,可以为你快速提升ROS实战技能提供翔实参考。 全书共15章,第1章简要介绍ROS基本概念;第2章解释如何使用ROS软件包;第3章讨论7-DOF机械臂和差速驱动机器人的设计;第4章和第5章通过示例详细讲解如何使用Gazebo和V-REP这两个著名的机器人仿真软件;第6章介绍如何使用ROS MoveIt!和导航软件包集的现有功能;第7章讨论ROS pluginlib、小节点和控制器等一些高级概念;第8章进一步讨论RViz插件和ROS控制器;第9章讨论一些硬件组件与ROS的接口;第10章讨论如何使用ROS连接各种视觉传感器,并利用开源计算机视觉库(OpenCV)和点云库(PCL)进行编程;第11章介绍如何构建差速驱动的自主移动机器人,并将其与ROS连接;第12章介绍MoveIt!的高级功能;第13章讨论如何将Matlab和Simulink软件与ROS连接;第14章介绍ROS-Industrial软件包;第15章讨论如何在ROS中安装集成开发环境,并介绍ROS实战技巧与调试方法。 ---------------------------8055562 - 机器人ROS开发实践--------------------------- 全书共分9章。第1章介绍了机器人的发展,如何搭建ROS环境。第2章介绍了ROS的基本概念如节点、话题、消息、服务、动作等。第3章介绍如何开发ROS程序包,并应该如何编译、调试ROS程序包。第4章介绍如何进行ROS的核心技能,并介绍如何进行参数配置和分布式计算。第5章介绍ROS和运动控制相关的坐标系、控制器等,为读者学习定位、导航等打下基础。第6章介绍ROS如何实现和语音交互相关的语音识别、语义合成、声源定位等。第7章介绍ROS如何和OpenCV结合进行图像、视觉处理,如何传输、处理图片,如何进行视频流处理等。第8章介绍如何进行ROS机器人建模。第9章介绍了如何在Gazebo中进行机器人仿真,介绍了如何搭建仿真环境。 ---------------------------8029708 - 探索LEGO Mindstorms EV3:机器人搭建与编程实用工具及技术--------------------------- 随着科学技术的发展,特别是人工智能与机器人的结合,机器人不再局限于工业应用和研究所内,日益受到大众的关注。LEGOMindstorms(乐高机器人)是可编程主机、电动马达、传感器、LEGOTechnic部分(齿轮、轮轴、横梁、插销)的统称。许多语言都能对Mindstorms进行编程,包括Lego、Basic、Java的衍生版、Smalltalk和C语言。EV3大的特点是无需使用计算机就可进行编程,它受到机器人爱好者的欢迎。本书详细介绍了使用Mindstorms设备和LEGOTechnic进行机器人设计、构建和编程的基础知识,为机器人爱好者和乐高爱好者提供全面、系统的实用指南。 ---------------------------7991375 - ROS机器人开发实践--------------------------- 本书在介绍ROS总体框架和理论要点的基础上,讲解ROS的通信机制、常用组件和进阶功能;同时以实践为主,讲解机器视觉、机器听觉、SLAM与导航、机械臂控制、机器学习等多种ROS应用的主要原理和实现方法;并分析基于ROS的机器人系统设计方法和典型实例;后论述ROS2的框架特点和使用方法,剖析ROS的发展方向。 ---------------------------8004538 - ROS机器人项目开发11例[图书]--------------------------- 本书11个ROS机器人项目,在无须大量硬件的情况下可直接实现原型设计。本书首先介绍ROS及其安装过程。在完成基础知识学习之后,将会学习一些非常棒的项目,如构建自动驾驶汽车、自主移动机器人以及使用深度学习和ROS进行图像识别等。这里可以找到适用于初级、中级甚至专家级的各类ROS机器人应用程序! ---------------------------7731483 - ROS机器人开发:实用案例分析--------------------------- 本书针对基于ROS的机器人开发技术进行了全面综合的介绍,不仅涵盖ROS框架的基础知识,还详细描述模拟机器人模型的构建方法和真实机器人操控。本书循序渐进地以实例形式讲解移动机器人、飞行机器人、机器人手臂等各类机器人的ROS实现。通过控制这些机器人,无论是模拟还是在现实中,你都可以使用ROS控制来驱动、移动机器人,甚至是让机器人飞行。 ---------------------------6479751 - ROS机器人高效编程(原书第3版)[图书]--------------------------- 本书包含了大量示例,帮助你开发机器人程序,并为你提供使用开源ROS库和工具的完整解决方案。本书主要内容包括:ROS的概念、命令行工具、可视化GUI以及如何调试ROS,如何将机器人传感器和执行器连接到ROS,如何从摄像头和3D传感器获取数据并分析数据,如何在机器人/传感器和环境仿真中使用Gazebo,如何设计机器人,如何使用OpenCV3.0为机器人添加视觉功能,如何使用新版本的PCL向机器人添加3D感知功能。本书适合各个阶层的机器人开发人员和机器人爱好者阅读。 ---------------------------6087791 - 机器人编程实战--------------------------- 本书以一位受困于荒岛的年轻人的视角带领读者进行一场冒险。他必须寻找到一种给机器人编程的方法才能得以逃离。本书作为一本控制自主机器人编程指南,介绍了编程机器人传感器、电动机以及将想法转换为机器人可以自主执行任务的实际方法和技术。对于硬、制造商、DIY项目,这些技术可以用于当今领先的机器人微控制器(ARM9和ARM7)和机器人平台(包括广泛流行的低成本Arduino平台,LEGOMindstormsEV3、NXT,以及WoweeRSMedia机器人)。 ---------------------------5006992 - ROS机器人程序设计(原书第2版)[图书]--------------------------- 无论是业余爱好者还是专业的机器人开发人员,在开始进行机器人系统及程序设计时,首先要面对的问题都是基本的如何驱动机器人的轮子的设计。ROS通过软件代码复用集成了众多已经开发完成的功能组件。本书专门帮助读者从对ROS一无所知到能够通过ROS系统完成小型机器人系统的开发和编程工作。本书提供了各种实际的示例代码供读者学习和理解ROS的软件框架。你可以在仿真环境中自行构建机器人相应的功能程序。本书第2版在第1版的基础上增加了与ROSHydro一起工作,如何创建、可视化和处理不同传感器的点云信息,如何控制和利用多关节机械臂,并提供简单易懂的实用教程编写自己的机器人。 |
目录 |
[套装书具体书目] 5006992 - ROS机器人程序设计(原书第2版)[图书] - 9787111551058 - 机械工业出版社 - 定价 69 6087791 - 机器人编程实战 - 9787111571568 - 机械工业出版社 - 定价 79 6479751 - ROS机器人高效编程(原书第3版)[图书] - 9787111578468 - 机械工业出版社 - 定价 69 7731483 - ROS机器人开发:实用案例分析 - 9787111593720 - 机械工业出版社 - 定价 79 7991375 - ROS机器人开发实践 - 9787111598237 - 机械工业出版社 - 定价 99 8004538 - ROS机器人项目开发11例[图书] - 9787111598176 - 机械工业出版社 - 定价 69 8029708 - 探索LEGO Mindstorms EV3:机器人搭建与编程实用工具及技术 - 9787111558095 - 机械工业出版社 - 定价 79 8055562 - 机器人ROS开发实践 - 9787111617204 - 机械工业出版社 - 定价 69 8058704 - 精通ROS机器人编程(原书第2版) - 9787111621997 - 机械工业出版社 - 定价 99 8062860 - JavaScript机器人:用Raspberry Pi、Arduino和BeagleBone构建NodeBots - 9787111635086 - 机械工业出版社 - 定价 99 8067954 - ROS机器人开发:实用案例分析(原书第2版) - 9787111648598 - 机械工业出版社 - 定价 99 8077994 - ROS机器人项目开发11例(原书第2版) - 9787111672449 - 机械工业出版社 - 定价 99 8082984 - 无人机编程实战:基于ArduPilot和Pixhawk - 9787111687580 - 机械工业出版社 - 定价 99 8083413 - ROS机器人编程实践 - 9787111689157 - 机械工业出版社 - 定价 89 ---------------------------8083413 - ROS机器人编程实践--------------------------- 译者序 前言 作者简介 审校者简介 第一部分 物理机器人组装与测试 第1章 组装机器人 2 1.1GoPiGo3机器人介绍 2 1.1.1机器人技术角度 3 1.1.2编程角度 3 1.1.3机器人套件和资源 4 1.2熟悉嵌入式硬件 7 1.2.1GoPiGo3开发板 7 1.2.2Raspberry Pi 3B+ 9 1.2.3为什么机器人需要CPU 10 1.3深入理解机电 10 1.4整合到一起 17 1.5快速硬件测试 18 1.5.1资源 18 1.5.2DexterOS入门 19 1.5.3用Bloxter编程 20 1.5.4校准机器人 20 1.5.5驱动机器人 22 1.5.6检查传感器 22 1.5.7关闭机器人 23 1.6总结 23 1.7习题 24 1.8进一步阅读 24 第2章 GoPiGo3的组件测试 25 2.1技术要求 25 2.2Python和JupyterLab入门 25 2.2.1为GoPiGo3启动JupyterLab 26 2.2.2硬件测试 29 2.3传感器和驱动的组件测试 32 2.3.1快速入门传感器和电动机 32 2.3.2机器人漫游 32 2.3.3距离传感器 35 2.3.4伺服软件包 40 2.3.5巡线跟随器 42 2.3.6IMU 43 2.3.7Raspberry Pi 43 2.3.8GoPiGo3项目 45 2.4总结 46 2.5习题 46 2.6进一步阅读 47 第3章 ROS入门 48 3.1技术要求 48 3.2ROS基本概念 49 3.2.1ROS图 50 3.2.2roscore 51 3.2.3工作空间和catkin 51 3.3配置ROS开发环境 52 3.3.1安装ROS 52 3.3.2集成开发环境 55 3.4ROS节点之间的通信—消息和主题 56 3.4.1创建工作空间 56 3.4.2设置ROS软件包 60 3.4.3发布主题的节点 62 3.4.4订阅主题的节点 65 3.4.5在同一节点中合并发布者和订阅者 67 3.5对ROS使用公开可用的软件包 69 3.6总结 69 3.7习题 70 3.8进一步阅读 70 第二部分 使用Gazebo进行 机器人仿真 第4章 创建虚拟两轮ROS机器人 72 4.1技术要求 72 4.2RViz机器人可视化入门 73 4.3使用URDF构建差动驱动机器人 74 4.3.1用于GoPiGo3的URDF概述 75 4.3.2机器人主体URDF 76 4.3.3左右轮的URDF模型 79 4.4使用RViz在ROS中查看GoPiGo3模型 81 4.4.1理解roslaunch命令 82 4.4.2通过RViz控制GoPiGo3机器人的车轮 84 4.5URDF模型中的机器人参考坐标系 86 4.6在构建时使用RViz查看模型 88 4.6.1在RViz窗口中更改模型的外观 88 4.6.2使用ROS工具进行检查 89 4.7总结 90 4.8习题 90 4.9进一步阅读 91 第5章 使用Gazebo进行机器人行为仿真 92 5.1技术要求 92 5.2Gazebo仿真器入门 93 5.3修改机器人URDF 96 5.3.1扩展URDF以生成SDF机器人定义 97 5.3.2碰撞和物理性质 97 5.3.3Gazebo标签 99 5.4验证Gazebo模型并查看URDF 99 5.5移动模型 102 5.6总结 105 5.7习题 105 5.8进一步阅读 106 第三部分 使用SLAM进行自主导航 第6章 在ROS中编程—命令和工具 108 6.1技术要求 109 6.2设置物理机器人 109 6.2.1下载并设置Ubuntu Mate 18.04 109 6.2.2访问自定义 110 6.2.3设置VNC服务器(x11vnc) 110 6.2.4Geany IDE 112 6.2.5安装GoPiGo3和DI传感器的驱动程序 112 6.2.6设置Pi Camera 114 6.2.7安装ROS Melodic 115 6.3ROS编程快速入门 116 6.3.1设置工作空间 116 6.3.2克隆ROS软件包 117 6.3.3第一次执行ROS节点 117 6.4案例研究1:编写ROS距离传感器软件包 118 6.4.1创建一个新软件包 119 6.4.2编写自己的源代码 119 6.5使用ROS命令 125 6.5.1Shell命令 125 6.5.2执行命令 126 6.5.3信息命令 127 6.5.4软件包和catkin工作空间 128 6.6创建并运行发布者和订阅者节点 129 6.7使用roslaunch自动执行节点 131 6.8案例研究2:ROS GUI开发工具—Pi Camera 133 6.8.1使用rqt_graph分析ROS图 134 6.8.2使用rqt_image_view显示图像数据 135 6.8.3用rqt_plot绘制传感器数据的时间序列 135 6.8.4使用rqt_bag播放录制的ROS会话 136 6.9使用ROS参数自定义机器人功能 138 6.10总结 140 6.11习题 140 6.12进一步阅读 141 第7章 机器人控制与仿真 142 7.1技术要求 142 7.2设置GoPiGo3开发环境 143 7.3案例研究3:使用键盘进行远程控制 146 7.3.1在机器人中运行gopigo3节点 146 7.3.2遥控软件包 149 7.3.3在笔记本电脑上运行远程操作 149 7.4使用ROS主题进行远程控制 151 7.4.1运动控制主题—/cmd_vel 151 7.4.2使用/cmd_vel直接驱动GoPiGo3 152 7.4.3检查GoPiGo3的X、Y和Z轴 154 7.4.4组合运动 154 7.5远程控制物理和虚拟机器人 155 7.5.1将ROS主节点还原到本地计算机 155 7.5.2用Gazebo仿真GoPiGo3 156 7.5.3同时在真实世界和仿真中运行 158 7.6总结 159 7.7习题 160 7.8进一步阅读 160 第8章 使用Gazebo进行虚拟SLAM和导航 162 8.1技术要求 162 8.1.1ROS导航软件包 163 8.1.2在本地计算机上运行ROS主节点 164 8.2使用Gazebo进行动态仿真 164 8.3导航组件 171 8.4机器人感知和SLAM 172 8.4.1添加LDS 172 8.4.2SLAM概念 176 8.5使用GoPiGo3练习SLAM和导航 178 8.5.1探索使用SLAM构建地图的环境 178 8.5.2使用导航沿着计划的轨迹行驶 180 8.6总结 182 8.7习题 182 8.8进一步阅读 183 第9章 用于机器人导航的SLAM 184 9.1技术要求 184 9.2为机器人准备LDS 186 9.2.1设置YDLIDAR 186 9.2.2与Raspberry Pi集成 188 9.2.3从远程笔记本电脑处理YDLIDAR数据 193 9.3在ROS中创建导航应用程序 195 9.4使用GoPiGo3练习导航 196 9.4.1绘制环境图 196 9.4.2在现实世界中导航GoPiGo3 198 9.5总结 199 9.6习题 199 9.7进一步阅读 199 第四部分 使用机器学习的 自适应机器人行为 第10章 在机器人技术中应用机器学习 202 10.1技术要求 202 10.2在系统中配置TensorFlow 203 10.2.1安装pip 203 10.2.2安装TensorFlow及其他依赖项 204 10.2.3使用GPU获得更好的性能 204 10.3机器人技术中的机器学习 205 10.3.1机器学习的核心概念 206 10.3.2机器学习线程 207 10.4从机器学习到深度学习 208 10.4.1机器学习算法 208 10.4.2深度学习和神经网络 210 10.5通过编程将机器学习应用于机器人技术的方法 213 10.5.1应用程序编程的一般方法 213 10.5.2集成机器学习任务 214 10.6深度学习应用于机器人技术—计算机视觉 215 10.6.1Gazebo中的目标识别 216 10.6.2现实世界中的目标识别 217 10.7总结 220 10.8习题 220 10.9进一步阅读 221 第11章 使用OpenAI Gym进行机器学习 222 11.1技术要求 223 11.2OpenAI Gym简介 224 11.2.1安装OpenAI Gym 224 11.2.2安装OpenAI ROS 226 11.2.3智能体、人工智能和机器学习 226 11.2.4倒立摆示例 227 11.2.5Q-learning说明—自动驾驶出租车示例 231 11.3运行环境 235 11.4配置环境文件 236 11.5运行仿真并绘制结果 237 11.6总结 240 11.7习题 240 11.8进一步阅读 241 第12章 通过强化学习实现目标 242 12.1技术要求 242 12.2使用TensorFlow、Keras和Anaconda配置环境 243 12.2.1TensorFlow后端 243 12.2.2使用Keras进行深度学习 244 12.2.3ROS依赖软件包 244 12.3了解ROS机器学习软件包 244 12.3.1训练场景 245 12.3.2用于运行强化学习任务的ROS软件包结构 245 12.4设置训练任务参数 246 12.5训练GoPiGo3避开障碍物到达目标位置 247 12.5.1如何运行仿真 249 12.5.2场景1—前往目标位置 249 12.5.3场景2—避开障碍物前往目标位置 251 12.6总结 255 12.7习题 256 12.8进一步阅读 256 附录 习题答案 257 ---------------------------8082984 - 无人机编程实战:基于ArduPilot和Pixhawk--------------------------- 译者序 前言 致谢 第一部分 引言 第1章 硬件和软件说明 2 1.1 自动驾驶仪 2 1.2 自动驾驶仪的种类:SDK与GUI 3 1.3 SDK的种类 4 1.4 Pixhawk自动驾驶仪(硬件) 5 1.5 克隆版本与原始版本 8 1.6 商业自动驾驶仪与你自己的设计 8 1.7 ArduPilot库(软件) 9 1.8 兼容性和类似项目 9 1.9 硬件和软件之间的困惑 10 1.10 本章小结 10 第2章 ArduPilot工作环境 11 2.1 ArduPilot库的相关文件类型 11 2.2 特定数据类型 11 2.3 所用程序的描述和流程 12 2.3.1 编码和编译 13 2.3.2 连接和加载接口 13 2.3.3 物理执行 13 2.3.4 显示 13 2.3.5 反馈 14 2.4 上传自定义代码到自动驾驶仪 14 2.5 使用Eclipse创建新项目 16 2.6 错误校验 21 2.7 ArduPilot库中直接使用Arduino是否可行 26 2.8 本章小结 27 第3章 概念和定义 28 3.1 辅助组件 28 3.1.1 无刷电机 28 3.1.2 ESC 29 3.1.3 螺旋桨 30 3.1.4 框架 30 3.1.5 特殊连接器 31 3.1.6 遥测模块(无线串行通信) 32 3.1.7 锂电池 33 3.1.8 电池测试仪或电池监测器 33 3.1.9 GPS模块 34 3.1.10 分配器 34 3.1.11 电源模块 35 3.1.12 硅线 36 3.1.13 热电偶 36 3.1.14 紧扣件 36 3.1.15 被动防振模块 36 3.1.16 遥控器 37 3.1.17 嵌入式车载电脑 37 3.1.18 特殊Pixhawk组件 38 3.2 计算效率与数学等式 38 3.3 使用变量、函数、模块和对象 39 3.3.1 变量 39 3.3.2 结构体 39 3.3.3 函数 40 3.3.4 模块 40 3.4 getter和setter的概念 42 3.5 方向和位置的概念 42 3.6 安装和编码之间的区别 44 3.7 ArduPilot代码的常用部分 44 3.8 ArduPilot代码编程的常用模型 45 3.9 本章小结 46 参考资料和建议网站 47 第二部分 顺序操作模式 第4章 基本输入和输出操作 51 4.1 头文件 52 4.2 设置 54 4.2.1 写入终端 54 4.2.2 读取终端 56 4.2.3 读取无线电信号 57 4.3 辅助通道与状态机简介 62 4.3.1 内部传感器读取位置和方向 64 4.3.2 外部位置传感器读数(GPS) 68 4.3.3 读取模拟传感器 72 4.3.4 信号滤波 73 4.3.5 读写数字 75 4.3.6 电池读数 77 4.3.7 通过主LED使用视觉警报 78 4.4 本章小结 79 第5章 高级操作 80 5.1 有线和无线串行通信 80 5.2 通信程序 83 5.2.1 发送数据的过程 84 5.2.2 数据验证过程 87 5.2.3 基本“校验和”方法的描述 87 5.2.4 XOR“校验和”方法的描述 87 5.3 轮询 89 5.4 通过串行通信和开发板从外部设备读取信息 97 5.5 写入无刷电机(BLDC电机) 99 5.5.1 代码优化 106 5.5.2 写入电机的简化函数 106 5.6 写入标准直流电机(有刷) 110 5.7 使用步进电机 117 5.8 使用伺服电机执行辅助任务 118 5.9 ArduPilot兼容电机总结 121 5.10 数据的使用与存储 121 5.11 使用Mission Planner GUI绘制SD数据 126 5.12 时间管理 133 5.13 本章小结 135 第6章 控制具有平稳飞行模式的四轴飞行器 136 6.1 多轴飞行器的基本建模 140 6.2 第二个例子:双轴飞行器(同轴电机分析) 149 6.3 速度运动学关系 155 6.3.1 动态平移方程 157 6.3.2 动态旋转方程 158 6.4 飞行模式 161 6.5 解耦的任务 163 6.6 控制方法 165 6.7 闭环与开环 165 6.8 饱和PD控制(飞行的软模式基本控制) 166 6.9 无人机飞行的实施 175 6.10 本章小结 180 参考资料 180 第三部分 实 时 模 式 第7章 实时工作环境 184 7.1 链接器 184 7.2 调度程序说明 184 7.3 实时模式/调度程序模式下的ArduPilot常用部件 185 7.4 测量任务执行时间 186 7.5 本章小结 190 第8章 应用程序代码 191 8.1 radio.pde模块 194 8.2 control.pde模块 194 8.3 data.pde模块 197 8.4 pose.pde模块 200 8.5 本章小结 201 参考资料 202 附录1 与其他SDK命令的比较 203 附录2 设置扩展代码 205 附录3 扩展头文件 206 附录4 完整功能代码 210 附录5 有用的关键字 215 附录6 安装ArduPilot库 216 附录7 推力矢量 234 附录8 全向性 236 附录9 扩展功率的方法 239 附录10 四轴飞行器设计总结 241 附录11 使用头文件 245 ---------------------------8077994 - ROS机器人项目开发11例(原书第2版)--------------------------- 译者序 前言 作者简介 第1章 ROS入门 1 1.1 技术要求 2 1.2 ROS概述 2 1.2.1 ROS发行版 3 1.2.2 支持的操作系统 3 1.2.3 支持的机器人及传感器 4 1.2.4 为什么选择ROS 5 1.3 ROS基础 6 1.3.1 文件系统层级 7 1.3.2 计算图层级 7 1.3.3 ROS社区层级 9 1.3.4 ROS中的通信 9 1.4 ROS客户端库 10 1.5 ROS工具 11 1.5.1 ROS的可视化工具RViz 11 1.5.2 rqt_plot 11 1.5.3 rqt_graph 12 1.6 ROS模拟器 13 1.7 在Ubuntu 18.04 LTS上安装ROS Melodic 13 1.8 在VirtualBox上设置ROS 18 1.9 Docker简介 19 1.9.1 为什么选择Docker 20 1.9.2 安装Docker 20 1.10 设置ROS工作空间 23 1.11 ROS在工业界和学术界的机遇 25 1.12 本章小结 25 第2章 ROS-2及其特性简介 26 2.1 技术要求 27 2.2 ROS-2概述 27 2.2.1 ROS-2发行版 28 2.2.2 支持的操作系统 28 2.2.3 支持的机器人及传感器 29 2.2.4 为什么选择ROS-2 29 2.3 ROS-2基础 30 2.3.1 什么是DDS 30 2.3.2 DDS的实现 30 2.3.3 计算图 31 2.3.4 ROS-2社区层级 32 2.3.5 ROS-2中的通信 32 2.3.6 ROS-2的变化 33 2.4 ROS-2客户端库 33 2.5 ROS-2工具 34 2.5.1 RViz2 34 2.5.2 Rqt 36 2.6 安装ROS-2 36 2.6.1 开始安装 37 2.6.2 获取ROS-2源码 38 2.6.3 ROS-1、ROS-2以及共存环境设置 41 2.6.4 运行测试节点 42 2.7 设置ROS-2工作空间 44 2.8 编写ROS-2节点 45 2.8.1 ROS-1代码示例 45 2.8.2 ROS-2代码示例 46 2.8.3 ROS-1发布者节点与ROS-2发布者节点的区别 49 2.9 ROS-1和ROS-2的通信 50 2.10 本章小结 52 第3章 构建工业级移动机械臂 53 3.1 技术要求 54 3.2 常见的移动机械臂 54 3.3 移动机械臂应用场景 55 3.4 移动机械臂构建入门 56 3.4.1 单位及坐标系 57 3.4.2 Gazebo及ROS机器人模型格式设定 57 3.5 机器人底座构建 58 3.5.1 机器人底座需求 58 3.5.2 软件参数 60 3.5.3 机器人底座建模 60 3.5.4 机器人底座模拟 64 3.5.5 机器人底座测试 68 3.6 机械臂构建 70 3.6.1 机械臂需求 71 3.6.2 软件参数 72 3.6.3 机械臂建模 72 3.6.4 机械臂模拟 74 3.6.5 机械臂测试 77 3.7 系统集成 78 3.7.1 移动机械臂建模 78 3.7.2 移动机械臂模拟与测试 79 3.8 本章小结 80 第4章 基于状态机的复杂机器人任务处理 81 4.1 技术要求 81 4.2 ROS动作机制简介 82 4.2.1 服务器–客户端结构概述 82 4.2.2 actionlib示例:机械臂客户端 83 4.2.3 基于actionlib的服务器–客户端示例:电池模拟器 85 4.3 服务员机器人应用示例 90 4.4 状态机简介 92 4.5 SMACH简介 93 4.6 SMACH入门 96 4.6.1 SMACH-ROS的安装与使用 96 4.6.2 简单示例 96 4.6.3 餐厅机器人应用示例 98 4.7 本章小结 102 第5章 构建工业级应用程序 103 5.1 技术要求 103 5.2 应用案例:机器人送货上门 104 5.3 机器人底座智能化 106 5.3.1 添加激光扫描传感器 106 5.3.2 配置导航栈 108 5.3.3 环境地图构建 110 5.3.4 机器人底座定位 111 5.4 机械臂智能化 111 5.4.1 Moveit简介 112 5.4.2 安装与配置Moveit 113 5.4.3 通过Moveit控制机械臂 117 5.5 应用程序模拟 120 5.5.1 环境地图构建与保存 120 5.5.2 选择目标点 120 5.5.3 添加目标点 121 5.5.4 状态机构建 121 5.6 机器人改进 121 5.7 本章小结 122 第6章 多机器人协同 123 6.1 技术要求 123 6.2 集群机器人基本概念 124 6.3 集群机器人分类 125 6.4 ROS中的多机器人通信 125 6.4.1 单个roscore和公共网络 126 6.4.2 群组/名称空间的使用 127 6.4.3 基于群组/名称空间的多机器人系统构建示例 128 6.5 多master概念简介 131 6.5.1 multimaster_fkie功能包简介 132 6.5.2 安装multimaster_fkie功能包 133 6.5.3 设置multimaster_fkie功能包 133 6.6 多机器人应用示例 136 6.7 本章小结 138 第7章 嵌入式平台上的ROS应用及其控制 139 7.1 技术要求 139 7.2 嵌入式板基础知识 140 7.2.1 重要概念介绍 141 7.2.2 机器人领域微控制器和微处理器的区别 142 7.2.3 板卡选型步骤 142 7.3 微控制器板简介 143 7.3.1 Arduino Mega 143 7.3.2 STM32 144 7.3.3 ESP8266 145 7.3.4 ROS支持的嵌入式板 146 7.3.5 对比表格 147 7.4 单板计算机简介 147 7.4.1 CPU板 148 7.4.2 GPU板 151 7.5 Debian与Ubuntu 152 7.6 在Tinkerboard S平台上设置操作系统 153 7.6.1 基础需求 153 7.6.2 安装Tinkerboard Debian操作系统 153 7.6.3 安装Armbian和ROS 154 7.6.4 使用可用的ROS镜像安装 156 7.7 在BeagleBone Black平台上设置ROS 156 7.7.1 基础需求 156 7.7.2 安装Debian 操作系统 157 7.7.3 安装Ubuntu和ROS 158 7.8 在Raspberry Pi 3/4平台上设置ROS 159 7.8.1 基础需求 159 7.8.2 安装Raspbian和ROS 159 7.8.3 安装Ubuntu和ROS 160 7.9 在Jetson Nano平台上设置ROS 161 7.10 通过ROS控制GPIO 161 7.10.1 Tinkerboard S 162 7.10.2 BeagleBone Black 163 7.10.3 Raspberry Pi 3/4 164 7.10.4 Jetson Nano 165 7.11 嵌入式板基准测试 166 7.12 Alexa入门及连接ROS 168 7.12.1 Alexa 技能构建前提条件 168 7.12.2 创建Alexa技能 169 7.13 本章小结 173 第8章 强化学习与机器人学 174 8.1 技术要求 174 8.2 机器学习概述 175 8.2.1 监督学习 175 8.2.2 无监督学习 175 8.2.3 强化学习 176 8.3 理解强化学习 176 8.3.1 探索与开发 177 8.3.2 强化学习公式 177 8.3.3 强化学习平台 178 8.3.4 机器人领域的强化学习应用 179 8.4 马尔可夫决策过程与贝尔曼方程 179 8.5 强化学习算法 181 8.5.1 出租车问题应用示例 181 8.5.2 TD预测 182 8.5.3 TD控制 183 8.6 ROS中的强化学习功能包 189 8.6.1 gym-gazebo 189 8.6.2 gym-gazebo2 194 8.7 本章小结 196 第9章 ROS下基于TensorFlow的深度学习 197 9.1 技术要求 197 9.2 深度学习及其应用简介 198 9.3 机器人领域的深度学习 198 9.4 深度学习库 199 9.5 TensorFlow入门 200 9.5.1 在Ubuntu 18.04 LTS上安装TensorFlow 200 9.5.2 TensorFlow概念 202 9.5.3 在TensorFlow下编写第一行代码 204 9.6 ROS下基于TensorFlow的图像识别 206 9.6.1 基础需求 207 9.6.2 ROS图像识别节点 207 9.7 scikit-learn简介 210 9.8 SVM及其在机器人领域的应用简介 211 9.9 本章小结 214 第10章 ROS下的自动驾驶汽车构建 215 10.1 技术要求 215 10.2 自动驾驶汽车入门 216 10.3 典型自动驾驶汽车基本组件 218 10.3.1 GPS、IMU和车轮编码器 218 10.3.2 摄像头 219 10.3.3 超声波传感器 219 10.3.4 LIDAR与RADAR 219 10.3.5 自动驾驶汽车的软件模块体系结构 221 10.4 ROS下的自动驾驶汽车模拟与交互 222 10.4.1 Velodyne LIDAR模拟 223 10.4.2 ROS下的Velodyne传感器接口 224 10.4.3 激光扫描仪模拟 225 10.4.4 模拟代码扩展 226 10.4.5 ROS下的激光扫描仪接口 227 10.4.6 Gazebo下的立体与单目摄像头模拟 228 10.4.7 ROS下的摄像头接口 229 10.4.8 Gazebo下的GPS模拟 230 10.4.9 ROS下的GPS接口 231 10.4.10 Gazebo下的IMU模拟 231 10.4.11 ROS下的IMU接口 233 10.4.12 Gazebo下的超声波传感器模拟 233 10.4.13 低成本LIDAR传感器 235 10.5 Gazebo下带传感器的自动驾驶汽车模拟 236 10.6 ROS下的DBW汽车接口 241 10.6.1 功能包安装 241 10.6.2 自动驾驶汽车及传感器数据可视化 241 10.6.3 基于ROS与DBW通信 243 10.7 Udacity开源自动驾驶汽车项目简介 243 10.7.1 Udacity的开源自动驾驶汽车模拟器 244 10.7.2 MATLAB ADAS工具箱 246 10.8 本章小结 246 第11章 基于VR头盔和Leap Motion的机器人遥操作 247 11.1 技术要求 248 11.2 VR头盔和Leap Motion传感器入门 248 11.3 项目设计和实施 250 11.4 在Ubuntu 14.04.5上安装Leap Motion SDK 251 11.4.1 可视化Leap Motion控制器数据 252 11.4.2 使用Leap Motion可视化工具 252 11.4.3 安装用于Leap Motion控制器的ROS驱动程序 253 11.5 RViz中Leap Motion数据的可视化 255 11.6 使用Leap Motion控制器创建遥操作节点 256 11.7 构建ROS-VR Android应用程序 258 11.8 ROS-VR应用程序的使用及与Gazebo的交互 260 11.9 VR下的TurtleBot模拟 262 11.9.1 安装TurtleBot模拟器 262 11.9.2 在VR中控制TurtleBot 262 11.10 ROS-VR应用程序故障排除 263 11.11 ROS-VR应用与Leap Motion遥操作功能集成 264 11.12 本章小结 265 第12章 基于ROS、Open CV和Dynamixel伺服系统的人脸识别与跟踪 266 12.1 技术要求 266 12.2 项目概述 267 12.3 硬件和软件基础需求 267 12.4 使用RoboPlus配置Dynamixel伺服系统 271 12.5 Dynamixel与ROS连接 275 12.6 创建人脸跟踪器ROS功能包 276 12.7 使用人脸跟踪ROS功能包 278 12.7.1 理解人脸跟踪器代码 279 12.7.2 理解CMakeLists.txt 283 12.7.3 track.yaml文件 284 12.7.4 启动文件 284 12.7.5 运行人脸跟踪器节点 285 12.7.6 face_tracker_control功能包 286 12.7.7 平移控制器配置文件 287 12.7.8 伺服系统参数配置文件 287 12.7.9 人脸跟踪控制器节点 288 12.7.10 创建CMakeLists.txt 289 12.7.11 测试人脸跟踪器控制功能包 290 12.7.12 节点集成 291 12.7.13 固定支架并设置电路 291 12.7.14 最终运行 292 12.8 本章小结 292 ---------------------------8067954 - ROS机器人开发:实用案例分析(原书第2版)--------------------------- 译者序 前言 作者简介 审校者简介 第1章 ROS初体验 1 1.1 ROS的用途以及学习ROS的好处 1 1.2 哪些机器人采用了ROS 2 1.3 安装并启动ROS 4 1.3.1 配置Ubuntu系统的软件源 4 1.3.2 设置Ubuntu系统软件源列表 5 1.3.3 设置Ubuntu系统密钥 5 1.3.4 安装ROS Kinetic 5 1.3.5 初始化rosdep 6 1.3.6 环境设置 6 1.3.7 安装 rosinstall 6 1.3.8 故障排除—ROS环境测试 7 1.4 创建catkin工作空间 7 1.5 ROS的功能包与清单 8 1.5.1 ROS清单 8 1.5.2 探索ROS功能包 8 1.6 ROS节点、话题与消息 10 1.6.1 ROS节点 11 1.6.2 ROS话题 11 1.6.3 ROS消息 11 1.6.4 ROS节点管理器 12 1.6.5 确定节点和话题的ROS命令 13 1.7 第一个ROS机器人模拟程序turtlesim 15 1.7.1 启动turtlesim节点 15 1.7.2 turtlesim节点 16 1.7.3 turtlesim话题与消息 18 1.7.4 通过发布/turtle1/cmd_vel话题控制乌龟运动 20 1.7.5 通过键盘或游戏手柄控制乌龟移动 22 1.7.6 turtlesim的参数服务器 22 1.7.7 控制乌龟移动的ROS服务 24 1.8 ROS命令小结 25 1.9 本章小结 26 第2章 构建一个模拟的两轮ROS机器人 27 2.1 Rviz简介 27 2.1.1 安装和启动Rviz 28 2.1.2 熟悉Rviz界面 29 2.2 生成并构建ROS功能包 32 2.3 构建差分驱动的机器人URDF 33 2.3.1 创建机器人底座 33 2.3.2 使用roslaunch 34 2.3.3 添加轮子 37 2.3.4 添加小脚轮 39 2.3.5 添加颜色 41 2.3.6 添加碰撞属性 42 2.3.7 移动轮子 43 2.3.8 tf和robot_state_publisher简介 44 2.3.9 添加物理学属性 45 2.3.10 试用URDF工具 46 2.4 Gazebo 47 2.4.1 安装并启动Gazebo 48 2.4.2 使用roslaunch启动Gazebo 49 2.4.3 熟悉Gazebo界面 50 2.4.4 机器人URDF的修改 54 2.4.5 Gazebo模型验证 55 2.4.6 在Gazebo中查看URDF 56 2.4.7 机器人模型调整 57 2.4.8 移动机器人模型 58 2.4.9 其他的机器人模拟环境 59 2.5 本章小结 60 第3章 TurtleBot机器人操控 61 3.1 TurtleBot 2机器人简介 61 3.2 下载TurtleBot 2模拟器软件 63 3.3 在Gazebo中启动TurtleBot 2模拟器 63 3.3.1 常见问题与故障排除 65 3.3.2 ROS命令与Gazebo 66 3.3.3 模拟环境下使用键盘远程控制TurtleBot 2 68 3.4 控制真正的TurtleBot 2机器人的设置 69 3.5 连接上网本与远程计算机 71 3.5.1 网络类型 71 3.5.2 网络地址 72 3.5.3 远程计算机网络设置 73 3.5.4 上网本网络设置 73 3.5.5 SSH连接 74 3.5.6 网络设置小结 74 3.5.7 排查网络连接中的故障 75 3.5.8 TurtleBot 2机器人系统测试 75 3.6 TurtleBot 2机器人的硬件规格参数 76 3.7 移动真实的TurtleBot 2机器人 78 3.7.1 采用键盘远程控制TurtleBot 2机器人移动 78 3.7.2 采用ROS命令控制TurtleBot 2机器人移动 79 3.7.3 编写第一个Python脚本程序控制TurtleBot 2机器人移动 80 3.8 rqt工具简介 83 3.8.1 rqt_graph 83 3.8.2 rqt的消息发布与话题监控 86 3.9 TurtleBot机器人的测程 87 3.9.1 模拟的TurtleBot 2机器人的测程 91 3.9.2 Rviz下真实的TurtleBot 2机器人的测程显示 93 3.10 TurtleBot机器人的自动充电 95 3.11 TurtleBot 3介绍 96 3.12 下载TurtleBot 3模拟软件 98 3.13 在Rviz中启动TurtleBot 3模拟软件 99 3.14 在Gazebo中启动TurtleBot 3模拟软件 100 3.15 硬件装配与测试 103 3.16 下载TurtleBot 3机器人软件包 103 3.16.1 在远程计算机上安装软件 103 3.16.2 在SBC上安装软件 104 3.17 TurtleBot 3与远程计算机的网络连接 107 3.17.1 远程计算机网络设置 108 3.17.2 TurtleBot 3网络设置 108 3.17.3 SSH通信测试 110 3.17.4 网络连接的故障处理 110 3.18 控制真实的TurtleBot 3移动 111 3.19 本章小结 113 第4章 TurtleBot机器人导航 114 4.1 TurtleBot机器人的3D视觉系统 115 4.1.1 3D视觉传感器原理 115 4.1.2 3D传感器对比 116 4.2 配置TurtleBot机器人并安装3D 传感器软件 123 4.2.1 Kinect 123 4.2.2 ASUS与PrimeSense 123 4.2.3 Intel RealSense 124 4.2.4 摄像头软件结构 124 4.2.5 术语定义 125 4.3 独立模式下测试3D传感器 125 4.4 运行ROS节点进行可视化 126 4.4.1 使用Image Viewer可视化数据 126 4.4.2 使用Rviz可视化数据 128 4.5 TurtleBot机器人导航 131 4.5.1 采用TurtleBot 2机器人构建房间地图 132 4.5.2 采用TurtleBot 2机器人实现自主导航 136 4.5.3 导航至指定目标点 142 4.5.4 基于Python脚本与地图实现航路点导航 144 4.5.5 TurtleBot 3机器人的SLAM 151 4.5.6 使用TurtleBot 3进行自主导航 152 4.5.7 rqt_reconfigure 153 4.5.8 进一步探索ROS导航 155 4.6 本章小结 155 第5章 构建模拟的机器人手臂 156 5.1 Xacro的特点 156 5.2 采用Xacro建立一个关节式机器人手臂URDF 157 5.2.1 指定名空间 158 5.2.2 使用Xacro属性标签 158 5.2.3 扩展Xacro 161 5.2.4 使用Xacro的包含与宏标签 163 5.2.5 给机器人手臂添加网格 166 5.3 在Gazebo中控制关节式机器人手臂 171 5.3.1 添加Gazebo特性元素 171 5.3.2 将机器人手臂固定在世界坐标系下 173 5.3.3 在Gazebo中查看机器人手臂 173 5.3.4 给Xacro添加控制组件 174 5.3.5 采用ROS命令行控制机器人手臂 178 5.3.6 采用rqt控制机器人手臂 179 5.4 本章小结 182 第6章 机器人手臂摇摆的关节控制 183 6.1 Baxter简介 184 6.1.1 研究型机器人Baxter 185 6.1.2 Baxter模拟器 186 6.2 Baxter的手臂 186 6.2.1 Baxter的俯仰关节 187 6.2.2 Baxter的滚转关节 188 6.2.3 Baxter的坐标系 188 6.2.4 Baxter手臂的控制模式 189 6.2.5 Baxter手臂的抓手 189 6.2.6 Baxter手臂的传感器 190 6.3 下载Baxter软件 190 6.3.1 安装Baxter SDK软件 190 6.3.2 安装Baxter模拟器 192 6.3.3 配置Baxter shell 193 6.3.4 安装MoveIt! 194 6.4 在Gazebo中启动Baxter模拟器 195 6.4.1 启动Baxter模拟器 196 6.4.2 “热身”练习 199 6.4.3 弯曲Baxter手臂 200 6.5 Baxter手臂与正向运动 209 6.5.1 关节与关节状态发布器 209 6.5.2 理解tf 212 6.5.3 直接指定关节组件角度 215 6.5.4 Rviz下的tf坐标系 216 6.5.5 查看机器人元素的tf树 217 6.6 MoveIt!简介 217 6.6.1 使用MoveIt!对Baxter手臂进行运动规划 219 6.6.2 在场景中添加物体 220 6.6.3 采用MoveIt!进行避障运动规划 222 6.7 配置真实的Baxter机器人 223 6.8 控制真实的Baxter机器人 225 6.8.1 控制关节到达航路点 225 6.8.2 控制关节的力矩弹簧 226 6.8.3 关节速度控制演示 227 6.8.4 其他示例 227 6.8.5 视觉伺服和抓取 227 6.9 反向运动 228 6.10 使用状态机实现YMCA 231 6.11 本章小结 236 第7章 空中机器人基本操控 237 7.1 四旋翼飞行器简介 238 7.1.1 风靡的四旋翼飞行器 238 7.1.2 滚转角、俯仰角与偏航角 238 7.1.3 四旋翼飞行器原理 239 7.1.4 四旋翼飞行器的组成 241 7.1.5 添加传感器 241 7.1.6 四旋翼飞行器的通信 242 7.2 四旋翼飞行器的传感器 243 7.2.1 惯性测量单元 243 7.2.2 四旋翼飞行器状态传感器 243 7.3 飞行前的准备工作 244 7.3.1 四旋翼飞行器检测 244 7.3.2 飞行前检测列表 245 7.3.3 飞行中的注意事项 245 7.3.4 需要遵循的规则和条例 245 7.4 在无人机中使用ROS 246 7.5 Hector四旋翼飞行器 246 7.5.1 下载Hector四旋翼飞行器 248 7.5.2 在Gazebo中启动Hector四旋翼飞行器 249 7.6 Crazyflie 2.0简介 256 7.6.1 无ROS情况下的Crazyflie控制 257 7.6.2 使用Crazyradio PA进行通信 258 7.6.3 加载Crazyflie ROS软件 259 7.6.4 飞行前的检查 261 7.6.5 使用teleop操控Crazyflie飞行 262 7.6.6 在运动捕获系统下飞行 265 7.6.7 控制多个Crazyflie飞行 266 7.7 Bebop简介 266 7.7.1 加载bebop_autonomy软件 268 7.7.2 使用命令控制Bebop飞行 270 7.8 本章小结 271 第8章 使用外部设备控制机器人 272 8.1 创建自定义ROS游戏控制器接口 272 8.1.1 测试游戏控制器 273 8.1.2 使用joy ROS功能包 275 8.1.3 使用自定义游戏控制器接口控制turtlesim 275 8.2 创建自定义ROS Android设备接口 280 8.2.1 安装Android Studio和工具 280 8.2.2 安装ROS-Android开发环境 281 8.2.3 术语定义 282 8.2.4 ROS-Android开发环境介绍 283 8.3 在Arduino或树莓派上创建ROS节点 284 8.3.1 使用Arduino 284 8.3.2 使用树莓派 294 8.4 本章小结 295 第9章 操控Crazyflie执行飞行任务 296 9.1 执行任务所需的组件 297 9.1.1 Kinect Windows v2 297 9.1.2 Crazyflie操作 298 9.1.3 任务软件结构 298 9.1.4 OpenCV与ROS 300 9.2 安装任务所需的软件 301 9.2.1 安装libfreenect2 301 9.2.2 安装iai_kinect2 304 9.2.3 使用iai_kinect2元包 305 9.3 任务设置 311 9.3.1 探测Crazyflie与目标 311 9.3.2 使用Kinect与OpenCV 314 9.3.3 对Crazyflie进行跟踪 317 9.4 Crazyflie控制 319 9.5 试飞Crazyflie 324 9.5.1 悬停 324 9.5.2 飞往静止目标 326 9.5.3 学到的经验 327 9.6 本章小结 328 第10章 基于MATLAB的Baxter控制 329 10.1 安装MATLAB机器人系统工具箱 329 10.1.1 MATLAB与机器人系统工具箱版本检查 330 10.1.2 机器人系统工具箱下的ROS命令 330 10.2 机器人系统工具箱与Baxter模拟器的使用 330 10.2.1 在MATLAB中安装Baxter消息 330 10.2.2 运行Baxter模拟器和MATLAB 332 10.2.3 控制Baxter运动 334 10.3 本章小结 337 ---------------------------8062860 - JavaScript机器人:用Raspberry Pi、Arduino和BeagleBone构建NodeBots--------------------------- 译者序 前言 第1章 用Lo-tech材料建造机器人 1 1.1 构建SimpleBot 2 1.1.1 材料单 2 1.1.2 构建步骤 3 1.1.3 安装Node.js包 5 1.1.4 使用基本程序测试构建 6 1.1.5 故障排除——接线 6 1.1.6 一个简单的驱动程序 7 1.1.7 故障排除——伺服电机 9 1.2 切断电源线 10 1.2.1 构建无线SimpleBot 10 1.2.2 连接 10 1.2.3 控制SimpleBot 11 1.2.4 疑难解答 14 1.3 进一步探索 15 第2章 TypeBot 17 2.1 材料清单 18 2.2 剖析机器人手臂 19 2.2.1 设计手臂 19 2.2.2 约束手臂 19 2.3 构建硬件 20 2.3.1 底座和肩膀 20 2.3.2 肘部 21 2.3.3 腕部 22 2.3.4 手指 23 2.3.5 脑部 23 2.4 编写软件 24 2.4.1 创建项目文件 24 2.4.2 控制伺服 24 2.4.3 初始化 27 2.4.4 按键排序 29 2.4.5 首次运行 31 2.4.6 微调手臂 32 2.5 进一步探索 32 第3章 节点船 33 3.1 材料清单 33 3.2 潜艇电机吊舱 34 3.2.1 为什么要使用电机驱动器 35 3.2.2 电机吊舱零件 35 3.2.3 修改电机 36 3.2.4 测试电机 36 3.2.5 完成电机 36 3.2.6 插入电机 37 3.2.7 打孔 38 3.2.8 关闭电机吊舱 39 3.2.9 电线的防水 39 3.3 安装Spark核心板 39 3.4 第一个Spark项目 40 3.5 焊接电机驱动器 42 3.6 给小船接线 42 3.6.1 给电机驱动器供电 43 3.6.2 连接Spark核心板和电机驱动器 44 3.6.3 连接电机 44 3.7 电机的控制:代码 45 3.7.1 添加按键事件 46 3.7.2 记录按键状态 47 3.8 船体装配 48 3.9 伺服系统 49 3.9.1 伺服系统编程 50 3.9.2 安装方向舵 52 3.10 启航 52 3.11 进一步探索 53 第4章 piDuino5移动机器人平台 55 4.1 材料清单 55 4.2 安装开发板和软件 56 4.2.1 在树莓派上安装Node.js 57 4.2.2 下载piDuino5代码和依赖项 57 4.2.3 插入Arduino 57 4.2.4 通过WebSockets测试Johnny-Five 57 4.2.5 浏览app.js 58 4.2.6 初始化Johnny-Five 58 4.2.7 控制硬件 59 4.2.8 使用WebSockets进行低延迟控制 59 4.2.9 从任何地方连接 59 4.3 装配硬件 60 4.4 用智能手机控制 61 4.4.1 下载piDuino5 Web应用程序 61 4.4.2 将localtunnel发布到Web应用程序上 61 4.4.3 在手机上试用Web应用程序 62 4.5 浏览app.js和index.html 62 4.5.1 存储localtunnel地址和前端 62 4.5.2 服务用户界面 62 4.5.3 触摸屏操纵杆 63 4.5.4 建立连接 63 4.5.5 发送命令 63 4.6 进一步探索 64 第5章 用Johnny-Five控制六足机器人 65 5.1 材料清单 65 5.2 从命令行控制机器人 66 5.3 phoenix.js简介 66 5.4 组装机器人 68 5.4.1 准备底盘 68 5.4.2 安装电子产品 68 5.4.3 准备伺服 69 5.4.4 安装髋关节 69 5.4.5 安装股骨 70 5.4.6 安装胫骨 70 5.5 坐标系统 71 5.6 修整伺服 71 5.6.1 修整髋关节 71 5.6.2 修整股骨 72 5.6.3 修整胫骨 73 5.7 为伺服添加范围 73 5.8 步行不易 74 5.9 认识动画类 75 5.9.1 一个伺服数组作为对象 75 5.9.2 一个Servo.Array作为对象 75 5.9.3 一个Servo.Arrays数组作为对象 75 5.10 第一个动画片段 76 5.11 步行 78 5.11.1 行步态 79 5.11.2 走步态 80 5.11.3 跑步态 80 5.12 转弯 81 5.13 命令参考 81 5.14 进一步探索 81 第6章 构建语音控制的NodeBots 83 6.1 材料清单 84 6.2 构建项目 86 6.3 构建一个继电器电路 86 6.4 构建麦克风前置放大器电路 88 6.5 构建命令服务器 90 6.6 使用Web Speech API进行简单的语音控制 92 6.7 整合命令服务器与继电器电路 94 6.8 使用Android可穿戴设备的高级语音控制 95 6.8.1 Android移动应用 96 6.8.2 Android Wear应用 101 6.9 进一步探索 104 第7章 室内日晷 105 7.1 材料清单 105 7.2 开始制作日晷 108 7.3 制作和组装核心结构 108 7.4 连接和设置伺服 109 7.4.1 连接伺服 109 7.4.2 设置伺服 110 7.5 制作底座 111 7.6 制作圆盘 111 7.7 制作底座包围和日晷圆盘支撑 112 7.7.1 制作底座的包围 112 7.7.2 放置圆盘 113 7.7.3 制作日晷圆盘的支撑 114 7.8 完成所有零件的装配 115 7.8.1 制作方位臂 115 7.8.2 制作立面弧 116 7.8.3 切割晷针 117 7.8.4 连接由LED模拟的“太阳” 117 7.9 编写代码并控制日晷 118 7.9.1 理解sundial.js文件的代码 119 7.9.2 在sundial.js中添加配置选项 120 7.9.3 sundial.js的具体细节 120 7.10 组装所有零件 122 7.11 实现目标 123 7.12 进一步探索 123 第8章 万圣节恶搞灯光秀 125 8.1 材料清单 125 8.2 背景 126 8.3 组装LED点阵 127 8.3.1 所需工具 127 8.3.2 准备 128 8.3.3 连接控制器与LED点阵 129 8.3.4 装饰LED 132 8.3.5 疑难解答 133 8.4 控制LED点阵 133 8.4.1 准备Arduino开发板 133 8.4.2 运行测试程序 133 8.4.3 Matrix构造函数选项 133 8.4.4 控制LED点阵显示 134 8.5 开发Web应用程序 134 8.5.1 开发工具 135 8.5.2 使用express-generator 135 8.5.3 开发API 135 8.5.4 添加用户界面 137 8.5.5 扩展应用程序 138 8.6 进一步探索 138 第9章 CheerfulJ5 139 9.1 材料清单 139 9.2 接线电路 140 9.3 CheerfulJ5代码 141 9.3.1 连接到Arduino 141 9.3.2 控制RGB 142 9.3.3 使用Node.js Read-Eval-Print循环 143 9.3.4 定义CheerLights颜色图 143 9.3.5 访问CheerLights ThingSpeak API 144 9.3.6 使用Twitter Streaming API 146 9.4 使用Spark WiFi开发套件实现无线连接 149 9.4.1 将Spark添加到你的电路中 149 9.4.2 使用Spark-io IO插件 150 9.4.3 切换到电池电量 151 9.5 打包 151 9.6 进一步探索 152 第10章 使用BeagleBone Black的交互式RGB LED显示屏 153 10.1 材料清单 154 10.1.1 BeagleBone Black 154 10.1.2 WiFi USB适配器(可选) 154 10.1.3 外部5V电源 (半可选) 154 10.1.4 RGB LED 155 10.1.5 传感器 155 10.1.6 其他 155 10.2 准备:软件 155 10.2.1 LEDScape 155 10.2.2 连接LED 156 10.3 连接RGB LED 156 10.4 使用JavaScript编写代码 158 10.4.1 运行测试脚本 159 10.4.2 添加Johnny-Five / Beaglebone-io 161 10.4.3 添加光敏电阻 163 10.4.4 用加速度计改变颜色 164 10.5 进一步探索 167 第11章 物理安全、JavaScript和你 169 11.1 简易超声波传感器项目:实验控制测试(SUSPECT) 169 11.2 SMS增强超声波传感器应用:一般实验(SAUSAGE) 173 11.3 进入点监控系统(PoEMS) 175 11.4 激光给敌人和战友都留下深刻印象,谢谢 (LIBERTY) 176 11.5 状态指示器、按钮和二极管(SINBaD) 178 11.6 进一步探索! 181 第12章 人工智能:蝙蝠机器人 183 12.1 人工智能的基础知识 183 12.1.1 遥控机器人 184 12.1.2 半自动机器人 184 12.1.3 自主机器人 184 12.1.4 蝙蝠机器人 184 12.2 材料清单 184 12.3 组装 186 12.4 第1步:远程控制 187 12.4.1 移动机器人 187 12.4.2 控制机器人 189 12.4.3 依赖声呐指向和读数 190 12.5 第2步:自治 191 12.6 疑难解答 195 12.7 进一步探索 195 第13章 三角洲机器人和运动学 197 13.1 材料清单 198 13.2 三角洲结构解析 198 13.3 构建Junky Delta 199 13.3.1 让它移动 203 13.3.2 通过运动学可预测的定位 204 13.4 更复杂的三角洲选项 208 13.4.1 酒保机器人 208 13.4.2 机器人军队 209 13.5 进一步探索 209 第14章 喵喵鞋 211 14.1 材料清单 211 14.2 零件说明 212 14.3 制作传感器插件 214 14.3.1 将传感器焊接到接线上 214 14.3.2 将传感器安装到鞋子中 215 14.3.3 将导线穿出鞋子 215 14.4 连接鞋子 215 14.5 将鞋子连接到Arduino 217 14.5.1 准备接线 217 14.5.2 焊接Arduino 217 14.5.3 将Arduino连接到右鞋上 218 14.6 用Johnny-Five运行代码 218 14.6.1 连接到Johnny-Five 218 14.6.2 设置传感器 219 14.6.3 记录传感器输出 219 14.6.4 示例行为 220 14.7 进一步探索 221 附录A 223 ---------------------------8058704 - 精通ROS机器人编程(原书第2版)--------------------------- 译者序 前言 作者简介 译者简介 第1章 ROS简介 1 1.1 为什么要学习ROS 1 1.2 在机器人开发中,人们为什么更愿意选择ROS 2 1.3 为什么有些人不愿意选择ROS 3 1.4 理解ROS的文件系统 4 1.4.1 ROS软件包 5 1.4.2 ROS超软件包 7 1.4.3 ROS消息 7 1.4.4 ROS服务 9 1.5 理解ROS的计算图 9 1.5.1 ROS节点 11 1.5.2 ROS消息 12 1.5.3 ROS话题 13 1.5.4 ROS服务 13 1.5.5 ROS消息记录包 14 1.5.6 ROS节点管理器 14 1.5.7 应用ROS参数 16 1.6 ROS的社区 17 1.7 学习ROS需要做哪些准备 17 1.8 习题 20 1.9 本章小结 20 第2章 ROS编程入门 21 2.1 创建一个ROS软件包 21 2.1.1 学习ROS话题 23 2.1.2 创建ROS节点 23 2.1.3 编译生成节点 26 2.2 添加自定义的msg和srv文件 28 2.3 使用ROS服务 30 2.3.1 使用ROS动作库 34 2.3.2 编译ROS动作服务器和客户端 37 2.4 创建启动文件 39 2.5 话题、服务和动作库的应用 41 2.6 维护ROS软件包 41 2.7 发布ROS软件包 42 2.7.1 准备发布ROS软件包 43 2.7.2 发布软件包 43 2.7.3 为ROS软件包创建维基页面 45 2.8 习题 47 2.9 本章小结 47 第3章 在ROS中为3D机器人建模 48 3.1 机器人建模的ROS软件包 49 3.2 利用URDF理解机器人建模 50 3.3 为机器人描述创建ROS软件包 52 3.4 创建我们的第一个URDF模型 52 3.5 详解URDF文件 54 3.6 在RViz中可视化机器人3D模型 55 3.7 向URDF模型添加物理属性和碰撞属性 57 3.8 利用xacro理解机器人建模 58 3.8.1 使用属性 58 3.8.2 使用数学表达式 59 3.8.3 使用宏 59 3.9 将xacro转换为URDF 59 3.10 为7-DOF机械臂创建机器人描述 60 3.10.1 机械臂规格 61 3.10.2 关节类型 61 3.11 解析7-DOF机械臂的xacro模型 61 3.11.1 使用常量 61 3.11.2 使用宏 62 3.11.3 包含其他xacro文件 62 3.11.4 在连杆中使用网格模型 63 3.11.5 使用机器人夹爪 63 3.11.6 在RViz中查看7-DOF机械臂 63 3.12 为差速驱动移动机器人创建机器人模型 66 3.13 习题 70 3.14 本章小结 70 第4章 使用ROS和Gazebo进行机器人仿真 71 4.1 使用Gazebo和ROS仿真机械臂 71 4.2 为Gazebo创建机械臂仿真模型 72 4.2.1 为Gazebo机器人模型添加颜色和纹理 73 4.2.2 添加transmission标签来驱动模型 74 4.2.3 添加gazebo_ros_control插件 74 4.2.4 在Gazebo中添加3D视觉传感器 75 4.3 仿真装有Xtion Pro的机械臂 76 4.4 在Gazebo中使用ROS控制器 78 4.4.1 认识ros_control软件包 78 4.4.2 不同类型的ROS控制器和硬件接口 79 4.4.3 ROS控制器如何与Gazebo交互 79 4.4.4 将关节状态控制器和关节位置控制器连接到手臂 80 4.4.5 在Gazebo中启动ROS控制器 81 4.4.6 控制机器人的关节运动 83 4.5 在Gazebo中仿真差速轮式机器人 83 4.5.1 将激光雷达添加到机器人中 85 4.5.2 在Gazebo中控制机器人移动 86 4.5.3 在启动文件中添加关节状态发布者 87 4.6 添加ROS遥控节点 88 4.7 习题 89 4.8 本章小结 89 第5章 用ROS和V-REP进行机器人仿真 91 5.1 安装带有ROS的V-REP 91 5.2 理解vrep_plugin 95 5.2.1 使用ROS服务与V-REP交互 96 5.2.2 使用ROS话题与V-REP交互 98 5.3 使用V-REP和ROS仿真机械臂 101 5.4 在V-REP下仿真差速轮式机器人 107 5.4.1 在V-REP中添加激光传感器 109 5.4.2 在V-REP中添加3D视觉传感器 110 5.5 习题 112 5.6 本章小结 112 第6章 ROS MoveIt!与导航软件包集 113 6.1 安装MoveIt! 113 6.2 使用配置助手工具生成MoveIt!配置软件包 118 6.2.1 第1步:启动配置助手工具 118 6.2.2 第2步:生成自碰撞矩阵 120 6.2.3 第3步:增加虚拟关节 120 6.2.4 第4步:添加规划组 121 6.2.5 第5步:添加机器人姿态 122 6.2.6 第6步:设置机器人的末端执行器 122 6.2.7 第7步:添加被动关节 123 6.2.8 第8步:作者信息 123 6.2.9 第9步:生成配置文件 123 6.3 使用MoveIt!配置软件包在RViz中进行机器人运动规划 124 6.3.1 使用RViz运动规划插件 125 6.3.2 MoveIt!配置软件包与Gazebo的接口 128 6.4 理解ROS导航软件包集 133 6.4.1 ROS导航硬件的要求 133 6.4.2 使用导航软件包 134 6.5 安装ROS导航软件包集 136 6.6 使用SLAM构建地图 136 6.6.1 为gmapping创建启动文件 137 6.6.2 在差速驱动机器人上运行SLAM 138 6.6.3 使用amcl和静态地图实现自主导航 141 6.6.4 创建amcl启动文件 141 6.7 习题 144 6.8 本章小结 144 第7章 使用pluginlib、小节点和Gazebo 插件 145 7.1 理解pluginlib 145 7.2 理解ROS小节点 151 7.3 理解Gazebo插件 156 7.4 习题 160 7.5 本章小结 160 第8章 ROS控制器和可视化插件编程 161 8.1 理解 ros_control软件包集 162 8.1.1 controller_interface软件包 162 8.1.2 控制器管理器 164 8.2 使用ROS编写一个基本的关节控制器 164 8.2.1 第1步:创建控制器软件包 165 8.2.2 第2步:创建控制器头文件 165 8.2.3 第3步:创建控制器源文件 166 8.2.4 第4步:控制器源文件解析 166 8.2.5 第5步:创建插件描述文件 167 8.2.6 第6步:更新package.xml文件 168 8.2.7 第7步:更新CMake-Lists.txt文件 168 8.2.8 第8步:编译控制器 168 8.2.9 第9步:编写控制器配置文件 168 8.2.10 第10步:编写控制器的启动文件 169 8.2.11 第11步:在Gazebo中运行控制器和7-DOF机械臂 169 8.3 理解ROS可视化工具(RViz)及其插件 171 8.3.1 Displays面板 172 8.3.2 RViz工具栏 172 8.3.3 Views面板 172 8.3.4 Time面板 172 8.3.5 可停靠面板 172 8.4 编写用于遥控操作的RViz插件 172 8.5 习题 178 8.6 本章小结 178 第9章 将ROS与I/O开发板、传感器、执行机构连接 179 9.1 理解Arduino-ROS接口 179 9.2 Arduino-ROS接口是什么 180 9.2.1 理解ROS中的rosserial软件包 181 9.2.2 理解Arduino中的ROS节点API 185 9.2.3 ROS-Arduino发布者和订阅者实例 187 9.2.4 Arduino-ROS接口实例——LED灯闪烁/按按钮 190 9.2.5 Arduino-ROS接口实例——ADXL 335加速度计 192 9.2.6 Arduino-ROS接口实例——超声波测距传感器 194 9.2.7 Arduino-ROS接口实例——里程计发布者 197 9.3 非Arduino开发板与ROS接口 199 9.3.1 在Odroid-XU4和树莓派2上配置ROS 199 9.3.2 用ROS控制树莓派2 上的LED灯闪烁 206 9.3.3 在树莓派2上使用ROS测试按钮和LED灯闪烁 208 9.3.4 在树莓派2上运行示例 211 9.4 将DYNAMIXEL驱动器连接到ROS 212 9.5 习题 212 9.6 本章小结 212 第10章 用ROS对视觉传感器编程、OpenCV、PCL 213 10.1 理解ROS-OpenCV开发接口软件包 213 10.2 理解ROS-PCL开发接口软件包 214 10.3 在ROS中连接USB相机 216 10.4 ROS与相机校准 218 10.4.1 使用cv_bridge在ROS和OpenCV之间转换图像 221 10.4.2 使用ROS和OpenCV进行图像处理 221 10.5 在ROS中连接Kinect与华硕Xtion Pro 225 10.6 将英特尔Real Sense相机与ROS连接 228 10.7 在ROS中连接Hokuyo激光雷达 232 10.8 处理点云数据 233 10.8.1 如何发布点云 234 10.8.2 如何订阅和处理点云 235 10.8.3 将点云数据写入点云数据(PCD)文件 236 10.8.4 从PCD文件中读取并发布点云 237 10.9 物体姿态估计与AR标记检测 239 10.10 习题 243 10.11 本章小结 244 第11章 在ROS中构造与连接差速驱动移动机器人 245 11.1 Chefbot DIY移动机器人及其硬件配置 246 11.1.1 使用Energia IDE来烧写Chefbot固件 248 11.1.2 讨论Chefbot的ROS软件包接口 249 11.1.3 从编码器计数计算里程计信息 254 11.1.4 根据ROS twist消息计算马达转速 256 11.1.5 为Chefbot机器人配置导航软件包集 257 11.1.6 配置gmapping节点 257 11.1.7 配置导航软件包集 259 11.1.8 理解AMCL 264 11.1.9 在RViz中使用导航功能 267 11.1.10 导航软件包中避障 272 11.1.11 Chefbot机器人仿真 273 11.1.12 从ROS节点向导航软件包集发送一个目的地 276 11.2 习题 278 11.3 本章小结 278 第12章 探索ROS-MoveIt!的高级功能 279 12.1 使用move_group的C++接口进行运动规划 279 12.1.1 使用MoveIt! C++ API规划随机路径 280 12.1.2 使用MoveIt! C++ API规划自定义路径 281 12.2 使用MoveIt!进行机械臂的碰撞检测 283 12.2.1 向MoveIt!添加碰撞对象 283 12.2.2 从规划场景中移除碰撞对象 286 12.2.3 向机器人连杆上添加一个碰撞对象 286 12.2.4 使用MoveIt! API检查自碰撞 287 12.3 使用MoveIt!和Gazebo处理视觉 288 12.4 使用MoveIt!执行拾取和放置任务 294 12.4.1 使用GPD计算抓握姿态 297 12.4.2 在Gazebo和真实机器人上执行拾取和放置动作 300 12.5 理解用于机器人硬件接口的DYNAMIXEL ROS伺服控制器 300 12.5.1 DYNAMIXEL伺服舵机 300 12.5.2 DYNAMIXEL-ROS接口 301 12.6 7-DOF机械臂与ROS MoveIt! 302 12.6.1 为COOL机械臂创建一个控制器软件包 303 12.6.2 COOL机械臂的MoveIt!配置 306 12.7 习题 308 12.8 本章小结 308 第13章 在MATLAB和Simulink中使用ROS 309 13.1 学习使用MATLAB与MATLAB-ROS 309 13.1.1 机器人系统工具箱和ROS-MATLAB接口入门 310 13.1.2 ROS话题和MATLAB回调函数 313 13.1.3 为Turtlebot机器人设计一个避障系统 317 13.2 学习使用ROS与Simulink 321 13.2.1 在Simulink中创建波形信号积分器 321 13.2.2 在Simulink中使用ROS消息 323 13.2.3 在Simulink中发布ROS消息 323 13.2.4 在Simulink中订阅ROS话题 327 13.3 用Simulink开发一个简单的控制系统 328 13.4 习题 332 13.5 本章小结 332 第14章 ROS与工业机器人 333 14.1 理解ROS-Industrial软件包 333 14.1.1 ROS-Industrial的目标 334 14.1.2 ROS-Industrial简史 334 14.1.3 ROS-Industrial优点 334 14.2 安装ROS-Industrial软件包 334 14.3 ROS-Industrial软件包框图 335 14.4 为工业机器人创建URDF 336 14.5 为工业机器人创建MoveIt!配置 337 14.5.1 更新MoveIt!配置文件 340 14.5.2 测试MoveIt!配置 341 14.6 安装UR机械臂的ROS-Industrial软件包 341 14.7 理解UR机械臂的MoveIt!配置 343 14.8 使用真实的UR机器人和ROS-I 345 14.9 ABB机器人的MoveIt!配置 346 14.10 ROS-Industrial机器人支持软件包 349 14.11 ROS-Industrial 机器人客户端软件包 351 14.12 ROS-Industrial 机器人驱动软件包 352 14.13 理解MoveIt! IKFast插件 354 14.14 为ABB IRB 6640机器人创建MoveIt! IKFast插件 354 14.14.1 开发MoveIt! IKFast插件的前提条件 354 14.14.2 OpenRave和IKFast模块 354 14.15 为使用OpenRave,创建机器人的COLLADA文件 357 14.16 为IRB 6640机器人生成IKFast CPP文件 358 14.17 习题 361 14.18 本章小结 361 第15章 调试方法与最佳实战技巧 362 15.1 在Ubuntu中安装RoboWare Studio 362 15.1.1 安装和卸载RoboWare Studio 363 15.1.2 RoboWare Studio入门 363 15.1.3 在RoboWare Studio中创建ROS软件包 364 15.1.4 在RoboWare Studio中编译ROS工作区 366 15.1.5 在RoboWare Studio中运行ROS节点 367 15.1.6 在RoboWare界面启动ROS工具 368 15.1.7 处理活动的ROS话题、节点和服务 369 15.1.8 使用RoboWare工具创建ROS节点和类 370 15.1.9 RoboWare Studio中的ROS软件包管理器 371 15.2 ROS的最佳实战技巧与经验 372 15.3 ROS软件包中的最佳实战技巧与经验 374 15.4 ROS中的重要调试技巧 374 15.5 习题 377 15.6 本章小结 378 ---------------------------8055562 - 机器人ROS开发实践--------------------------- 前言 第1章 机器人基础1 1.1 机器人发展历史 1 1.2 ROS发展历程 5 1.3 安装ROS环境 6 第2章 理解ROS 11 2.1 启动小海龟 11 2.2 系统架构 12 2.3 理解节点管理器 16 2.4 理解节点 19 2.5 理解话题 21 2.6 理解消息 23 2.7 理解服务 28 2.8 理解动作 30 2.9 理解参数 32 第3章 开发ROS 35 3.1 你好ROS 35 3.2 编译ROS 42 3.3 编译配置 49 3.4 调试ROS 62 第4章 资源与配置 67 4.1 消息通信 67 4.2 订阅服务 73 4.3 执行动作 77 4.4 启动管理 81 4.5 配置参数 89 4.6 分布式计算 97 第5章 运动控制 99 5.1 坐标系 99 5.1.1 理解坐标系 99 5.1.2 坐标变换 101 5.1.3 消息过滤 108 5.1.4 添加坐标系 111 5.2 控制器 113 5.2.1 控制器架构 114 5.2.2 双轮差速控制 121 第6章 语音处理 125 6.1 语音基础 127 6.2 语音识别 129 6.3 语音合成 137 6.4 声源定位 142 第7章 视觉处理 144 7.1 相机标定 144 7.2 图像处理 147 7.3 视频处理 152 第8章 机器人建模 157 8.1 URDF模型基础 157 8.2 实现URDF模型 169 8.3 使用Xacro建模 178 8.4 使用Solidworks建模 186 第9章 机器人仿真 193 9.1 Gazebo场景 194 9.1.1 场景基础 194 9.1.2 创建场景 198 9.2 Gazebo模型 199 9.3 启动仿真 207 附录A 常见Linux、ROS命令 210 参考文献 217 ---------------------------8029708 - 探索LEGO Mindstorms EV3:机器人搭建与编程实用工具及技术--------------------------- 推荐序 译者序 前言 致谢 第1章 介绍LEGO Mindstorms EV3 1 1.1 了解 EV3 套装:从你打开包装的那一刻开始 1 1.1.1 EV3电子部件 2 1.1.2 EV3软件 4 1.1.3 搭建部件 5 1.1.4 搭建指南和试验板 8 1.2 比较EV3和NXT 9 小结 9 第2章 搭建自动驾驶汽车:入门车型 10 2.1 从自动驾驶汽车开始 10 2.1.1 你可以使用自动驾驶汽车做什么 10 2.1.2 组装自动驾驶汽车 12 2.2 了解EV3程序块界面 21 2.2.1 使用程序块按键 21 2.2.2 探索基础界面 22 2.2.3 操作自动驾驶汽车 26 小结 26 第3章 让我们开始编程 27 3.1 什么是编程 27 3.1.1 与机器人沟通 27 3.1.2 了解编程语言 28 3.1.3 预览 EV3 软件系统 28 3.2 启动EV3软件 29 3.2.1 你在屏幕上看到了什么 29 3.2.2 了解编程界面和图形化语言 32 3.2.3 开始习惯界面 34 3.3 将程序下载至机器人 37 3.3.1 将EV3程序块连接至计算机 37 3.3.2 在软件中读取EV3程序块 39 小结 41 第4章 探索动作模块第一部分:电机编程 42 4.1 了解模块编程基础 42 4.1.1 规则1:使用开始模块 42 4.1.2 规则2:尊重程序流程 43 4.1.3 编程模块结构概览 44 4.2 开始认识电机的输入值 44 4.2.1 关闭、开启及开启指定秒数模式 45 4.2.2 开启指定度数和指定圈数模式 46 4.2.3 电机功率输入和电机方向 48 4.3 使用大型电机模块和中型电机模块控制电机 48 4.3.1 使用大型电机模块工作 49 4.3.2 使用大型电机模块新建程序 49 4.4 使用移动转向模块控制两个电机 52 4.4.1 使用移动转向模块工作 52 4.4.2 使用移动转向模块新建程序 55 4.5 使用移动槽模块控制电机的功率等级 59 4.5.1 使用移动槽模块工作 59 4.5.2 使用移动槽模块新建程序 59 小结 60 第5章 探索动作模块第二部分:使用显示、声音和程序块状态灯模块 61 5.1 显示模块 61 5.1.1 显示文本:文本—像素和文本—网格模式 63 5.1.2 绘制形状:线、圆圈、矩形和点模式 68 5.1.3 显示图像:图像模式 71 5.1.4 重置显示:重置屏幕模式 75 5.2 声音模块 75 5.2.1 播放文件模式 76 5.2.2 播放音调模式 78 5.2.3 播放音符模式 79 5.2.4 停止模式 80 5.3 程序块状态灯模块 80 5.3.1 开启模式 80 5.3.2 关闭和重置模式 81 小结 81 第6章 探索流程模块 82 6.1 开始模块 82 6.1.1 开始程序 82 6.1.2 展示代码 83 6.2 等待模块 83 6.2.1 等待模块的比较模式 84 6.2.2 等待模块的更改模式 84 6.2.3 时间模式 85 6.2.4 程序块按钮模式 86 6.3 循环模块 88 6.3.1 无限制、计数和时间模式 89 6.3.2 程序块按钮模式 90 6.4 循环中断模块 91 6.5 切换模块 92 6.5.1 切换模块中的比较模式 93 6.5.2 切换模块中的测量模式 95 6.5.3 使用来自数据线的值 96 小结 97 第7章 搭建间谍兔:一个可以对其周围环境做出反应的机器人 98 7.1 了解间谍兔 98 7.1.1 间谍兔的性格 99 7.1.2 组装间谍兔 99 7.2 测试间谍兔的移动组件 115 小结 116 第8章 感知环境:使用红外线、触动和颜色传感器 117 8.1 了解传感器 117 8.2 介绍EV3传感器 118 8.3 使用红外传感器和远程红外信标 118 8.3.1 远程红外信标 119 8.3.2 远程模式 120 8.3.3 信标模式 122 8.3.4 近程模式 124 8.3.5 使用红外传感器在端口查看中读取数值 127 8.3.6 使用红外传感器和远程红外编程 128 8.4 使用触动传感器 132 8.4.1 为间谍兔添加触动传感器 133 8.4.2 使用触动传感器在端口查看中读取数值 135 8.4.3 使用触动传感器编程 135 8.5 使用颜色传感器 138 8.5.1 颜色模式 138 8.5.2 反射光强度模式 140 8.5.3 环境光强度模式 140 8.5.4 为间谍兔添加颜色传感器 142 8.5.5 使用颜色传感器在端口查看中读取数值 144 8.5.6 使用颜色传感器编程 144 小结 146 第9章 使用计时器和电机旋转传感器 147 9.1 了解计时器 147 9.1.1 在编程模块中使用计时器 148 9.1.2 使用计时器编程 151 9.2 了解电机旋转传感器 153 9.2.1 在编程模块中使用电机旋转传感器 153 9.2.2 使用电机旋转传感器编程 156 小结 159 第10章 搭建龟先生:海龟机器人 160 10.1 了解龟先生 160 10.1.1 龟先生的身体结构 161 10.1.2 组装龟先生 162 10.2 测试龟先生的移动 182 小结 183 第11章 使用数据线编程并使用“我的模块” 184 11.1 什么是数据线 184 11.2 数据线是如何工作的 185 11.2.1 由数据线编程开始 185 11.2.2 使用模块输入和输出 187 11.2.3 了解数据类型和数据线类型 187 11.3 传感器模块和数据线 190 11.3.1 设置传感器模块 191 11.3.2 练习1:耶!我发现了些什么 192 11.3.3 练习2:你能听到我吗 193 11.3.4 练习3:亮光唤醒龟先生 194 11.4 介绍我的模块 195 11.4.1 使用我的模块创建器 195 11.4.2 导出和导入我的模块 199 小结 200 第12章 使用数据操作模块 201 12.1 变量模块 201 12.1.1 什么是变量 202 12.1.2 设置变量模块 202 12.2 常量模块 206 12.2.1 常量模块的多种模式 207 12.2.2 动作中的常量模块 207 12.3 阵列运算模块 208 12.3.1 附加模式 208 12.3.2 读取和写入索引模式 208 12.3.3 长度模式 209 12.4 逻辑运算模块 210 12.4.1 And模式 210 12.4.2 Or模式 211 12.4.3 XOR模式 211 12.4.4 Not模式 211 12.5 数学和舍入模块 213 12.5.1 数学模块 213 12.5.2 舍入模块 215 12.6 比较、范围和随机模块 215 12.6.1 比较模块 215 12.6.2 范围模块 216 12.6.3 随机模块 217 12.7 文本模块 217 小结 218 第13章 搭建大肚机器人:一个可以吃东西和便便的机器人 219 13.1 了解大肚机器人 219 13.1.1 大肚机器人的性格 220 13.1.2 大肚机器人的机械结构 220 13.1.3 组装大肚机器人 222 13.2 给大肚机器人编程 241 13.2.1 动作1—直立 241 13.2.2 动作2—进食 242 13.2.3 动作3—便便 242 13.2.4 动作4—关闭后端 243 小结 243 第14章 设计你自己的机器人:机器小狗Guapo 245 14.1 搭建机器小狗 Guapo 245 14.2 设置目标 274 14.2.1 为目标收集灵感 274 14.2.2 定义机器人的动作 274 14.3 决定移动部件和传感器 275 14.3.1 绘制草图做计划 275 14.3.2 添加传感器 276 14.4 搭建和修改 279 14.5 开始编程 280 小结 281 附录A 使用EV3程序块的蓝牙和WiFi功能 282 ---------------------------7991375 - ROS机器人开发实践--------------------------- 推荐序一 推荐序二 推荐序三 前言 第1章 初识ROS 1 1.1 ROS是什么 1 1.1.1 ROS的起源 1 1.1.2 ROS的设计目标 2 1.1.3 ROS的特点 3 1.2 如何安装ROS 4 1.2.1 操作系统与ROS版本的选择 4 1.2.2 配置系统软件源 6 1.2.3 添加ROS软件源 6 1.2.4 添加密钥 7 1.2.5 安装ROS 7 1.2.6 初始化rosdep 8 1.2.7 设置环境变量 8 1.2.8 完成安装 9 1.3 本书源码下载 9 1.4 本章小结 10 第2章 ROS架构 11 2.1 ROS架构设计 11 2.2 计算图 12 2.2.1 节点 12 2.2.2 消息 13 2.2.3 话题 13 2.2.4 服务 13 2.2.5 节点管理器 14 2.3 文件系统 14 2.3.1 功能包 14 2.3.2 元功能包 16 2.4 开源社区 17 2.5 ROS的通信机制 17 2.5.1 话题通信机制 18 2.5.2 服务通信机制 19 2.5.3 参数管理机制 20 2.6 话题与服务的区别 20 2.7 本章小结 21 第3章 ROS基础 22 3.1 第一个ROS例程——小乌龟仿真 23 3.1.1 turtlesim功能包 23 3.1.2 控制乌龟运动 24 3.2 创建工作空间和功能包 25 3.2.1 什么是工作空间 25 3.2.2 创建工作空间 26 3.2.3 创建功能包 27 3.3 工作空间的覆盖 28 3.3.1 ROS中工作空间的覆盖 28 3.3.2 工作空间覆盖示例 28 3.4 搭建Eclipse开发环境 30 3.4.1 安装Eclipse 30 3.4.2 创建Eclipse工程文件 30 3.4.3 将工程导入Eclipse 31 3.4.4 设置头文件路径 31 3.4.5 运行/调试程序 32 3.5 RoboWare简介 35 3.5.1 RoboWare的特点 35 3.5.2 RoboWare的安装与使用 36 3.6 话题中的Publisher与Subscriber 37 3.6.1 乌龟例程中的Publisher与Subscriber 37 3.6.2 如何创建Publisher 37 3.6.3 如何创建Subscriber 40 3.6.4 编译功能包 41 3.6.5 运行Publisher与Subscriber 42 3.6.6 自定义话题消息 44 3.7 服务中的Server和Client 46 3.7.1 乌龟例程中的服务 46 3.7.2 如何自定义服务数据 47 3.7.3 如何创建Server 48 3.7.4 如何创建Client 49 3.7.5 编译功能包 51 3.7.6 运行Server和Client 51 3.8 ROS中的命名空间 52 3.8.1 有效的命名 52 3.8.2 命名解析 53 3.8.3 命名重映射 54 3.9 分布式多机通信 54 3.9.1 设置IP地址 55 3.9.2 设置ROS_MASTER_URI 56 3.9.3 多机通信测试 56 3.10 本章小结 57 第4章 ROS中的常用组件 58 4.1 launch启动文件 58 4.1.1 基本元素 58 4.1.2 参数设置 60 4.1.3 重映射机制 61 4.1.4 嵌套复用 61 4.2 TF坐标变换 62 4.2.1 TF功能包 62 4.2.2 TF工具 63 4.2.3 乌龟例程中的TF 65 4.2.4 创建TF广播器 67 4.2.5 创建TF监听器 68 4.2.6 实现乌龟跟随运动 70 4.3 Qt工具箱 70 4.3.1 日志输出工具(rqt_console) 71 4.3.2 计算图可视化工具(rqt_graph) 71 4.3.3 数据绘图工具(rqt_plot) 72 4.3.4 参数动态配置工具(rqt_reconfigure) 73 4.4 rviz三维可视化平台 73 4.4.1 安装并运行rviz 74 4.4.2 数据可视化 75 4.4.3 插件扩展机制 76 4.5 Gazebo仿真环境 78 4.5.1 Gazebo的特点 78 4.5.2 安装并运行Gazebo 78 4.5.3 构建仿真环境 81 4.6 rosbag数据记录与回放 82 4.6.1 记录数据 82 4.6.2 回放数据 83 4.7 本章小结 84 第5章 机器人平台搭建 85 5.1 机器人的定义 85 5.2 机器人的组成 86 5.2.1 执行机构 87 5.2.2 驱动系统 87 5.2.3 传感系统 87 5.2.4 控制系统 87 5.3 机器人系统搭建 88 5.3.1 MRobot 88 5.3.2 执行机构的实现 88 5.3.3 驱动系统的实现 89 5.3.4 内部传感系统的实现 90 5.4 基于Raspberry Pi的控制系统实现 90 5.4.1 硬件平台Raspberry Pi 91 5.4.2 安装Ubuntu 16.04 91 5.4.3 安装ROS 93 5.4.4 控制系统与MRobot通信 94 5.4.5 PC端控制MRobot 97 5.5 为机器人装配摄像头 99 5.5.1 usb_cam功能包 99 5.5.2 PC端驱动摄像头 100 5.5.3 Raspberry Pi驱动摄像头 102 5.6 为机器人装配Kinect 104 5.6.1 freenect_camera功能包 104 5.6.2 PC端驱动Kinect 106 5.6.3 Raspberry Pi驱动Kinect 109 5.6.4 Kinect电源改造 109 5.7 为机器人装配激光雷达 110 5.7.1 rplidar功能包 110 5.7.2 PC端驱动rplidar 111 5.7.3 Raspberry Pi驱动rplidar 113 5.8 本章小结 113 第6章 机器人建模与仿真 114 6.1 统一机器人描述格式——URDF 114 6.1.1 标签 114 6.1.2 标签 115 6.1.3 标签 116 6.1.4 标签 116 6.2 创建机器人URDF模型 116 6.2.1 创建机器人描述功能包 116 6.2.2 创建URDF模型 117 6.2.3 URDF模型解析 120 6.2.4 在rviz中显示模型 122 6.3 改进URDF模型 124 6.3.1 添加物理和碰撞属性 124 6.3.2 使用xacro优化URDF 125 6.3.3 xacro文件引用 127 6.3.4 显示优化后的模型 127 6.4 添加传感器模型 128 6.4.1 添加摄像头 128 6.4.2 添加Kinect 130 6.4.3 添加激光雷达 132 6.5 基于ArbotiX和rviz的仿真器 133 6.5.1 安装ArbotiX 133 6.5.2 配置ArbotiX控制器 133 6.5.3 运行仿真环境 135 6.6 ros_control 136 6.6.1 ros_control框架 137 6.6.2 控制器 139 6.6.3 硬件接口 139 6.6.4 传动系统 140 6.6.5 关节约束 140 6.6.6 控制器管理器 141 6.7 Gazebo仿真 142 6.7.1 机器人模型添加Gazebo属性 142 6.7.2 在Gazebo中显示机器人模型 145 6.7.3 控制机器人在Gazebo中运动 147 6.7.4 摄像头仿真 147 6.7.5 Kinect仿真 150 6.7.6 激光雷达仿真 153 6.8 本章小结 155 第7章 机器视觉 156 7.1 ROS中的图像数据 156 7.1.1 二维图像数据 156 7.1.2 三维点云数据 158 7.2 摄像头标定 159 7.2.1 camera_calibration功能包 159 7.2.2 启动标定程序 159 7.2.3 标定摄像头 160 7.2.4 标定Kinect 162 7.2.5 加载标定参数的配置文件 162 7.3 OpenCV库 164 7.3.1 安装OpenCV 164 7.3.2 在ROS中使用OpenCV 164 7.4 人脸识别 166 7.4.1 应用效果 167 7.4.2 源码实现 168 7.5 物体跟踪 170 7.5.1 应用效果 170 7.5.2 源码实现 171 7.6 二维码识别 173 7.6.1 ar_track_alvar功能包 173 7.6.2 创建二维码 174 7.6.3 摄像头识别二维码 175 7.6.4 Kinect识别二维码 178 7.7 物体识别 179 7.7.1 ORK功能包 179 7.7.2 建立物体模型库 181 7.7.3 模型训练 183 7.7.4 三维物体识别 184 7.8 本章小结 185 第8章 机器语音 186 8.1 让机器人听懂你说的话 187 8.1.1 pocketsphinx功能包 187 8.1.2 语音识别测试 188 8.1.3 创建语音库 190 8.1.4 创建launch文件 192 8.1.5 语音指令识别 192 8.1.6 中文语音识别 192 8.2 通过语音控制机器人 193 8.2.1 编写语音控制节点 193 8.2.2 语音控制小乌龟运动 194 8.3 让机器人说话 195 8.3.1 sound_play功能包 195 8.3.2 语音播放测试 195 8.4 人工智能标记语言 196 8.4.1 AIML中的标签 196 8.4.2 Python中的AIML解析器 197 8.5 与机器人对话 198 8.5.1 语音识别 199 8.5.2 智能匹配应答 201 8.5.3 文本转语音 202 8.5.4 智能对话 203 8.6 让机器人听懂中文 204 8.6.1 下载科大讯飞SDK 204 8.6.2 测试SDK 206 8.6.3 语音听写 207 8.6.4 语音合成 209 8.6.5 智能语音助手 211 8.7 本章小结 213 第9章 机器人SLAM与自主导航 214 9.1 理论基础 214 9.2 准备工作 216 9.2.1 传感器信息 217 9.2.2 仿真平台 219 9.2.3 真实机器人 222 9.3 gmapping 224 9.3.1 gmapping功能包 224 9.3.2 gmapping节点的配置与运行 227 9.3.3 在Gazebo中仿真SLAM 228 9.3.4 真实机器人SLAM 231 9.4 hector-slam 234 9.4.1 hector-slam功能包 234 9.4.2 hector_mapping节点的配置与运行 236 9.4.3 在Gazebo中仿真SLAM 237 9.4.4 真实机器人SLAM 238 9.5 cartographer 240 9.5.1 cartographer功能包 240 9.5.2 官方demo测试 241 9.5.3 cartographer节点的配置与运行 244 9.5.4 在Gazebo中仿真SLAM 246 9.5.5 真实机器人SLAM 247 9.6 rgbdslam 249 9.6.1 rgbdslam功能包 249 9.6.2 使用数据包实现SLAM 250 9.6.3 使用Kinect实现SLAM 252 9.7 ORB_SLAM 253 9.7.1 ORB_SLAM功能包 253 9.7.2 使用数据包实现单目SLAM 254 9.7.3 使用摄像头实现单目SLAM 256 9.8 导航功能包 258 9.8.1 导航框架 258 9.8.2 move_base功能包 258 9.8.3 amcl功能包 260 9.8.4 代价地图的配置 263 9.8.5 本地规划器配置 266 9.9 在rviz中仿真机器人导航 267 9.9.1 创建launch文件 267 9.9.2 开始导航 268 9.9.3 自动导航 269 9.10 在Gazebo中仿真机器人导航 277 9.10.1 创建launch文件 277 9.10.2 运行效果 278 9.10.3 实时避障 279 9.11 真实机器人导航 280 9.11.1 创建launch文件 280 9.11.2 开始导航 282 9.12 自主探索SLAM 282 9.12.1 创建launch文件 282 9.12.2 通过rviz设置探索 目标 283 9.12.3 实现自主探索SLAM 284 9.13 本章小结 286 第10章 MoveIt!机械臂控制 287 10.1 MoveIt!系统架构 288 10.1.1 运动组(move_group) 288 10.1.2 运动规划器(motion_planner) 290 10.1.3 规划场景 291 10.1.4 运动学求解器 291 10.1.5 碰撞检测 291 10.2 如何使用MoveIt! 292 10.3 创建机械臂模型 292 10.3.1 声明模型中的宏 292 10.3.2 创建六轴机械臂模型 294 10.3.3 加入Gazebo属性 299 10.3.4 显示机器人模型 300 10.4 使用Setup Assistant配置机械臂 302 10.4.1 加载机器人URDF模型 303 10.4.2 配置自碰撞矩阵 304 10.4.3 配置虚拟关节 304 10.4.4 创建规划组 304 10.4.5 定义机器人位姿 307 10.4.6 配置终端夹爪 308 10.4.7 配置无用关节 309 10.4.8 设置作者信息 309 10.4.9 生成配置文件 309 10.5 启动MoveIt! 310 10.5.1 拖动规划 311 10.5.2 随机目标规划 311 10.5.3 初始位姿更新 313 10.5.4 碰撞检测 314 10.6 配置文件 315 10.6.1 SRDF文件 315 10.6.2 fake_controllers.yaml 316 10.6.3 joint_limits.yaml 317 10.6.4 kinematics.yaml 317 10.6.5 ompl_planning.yaml 318 10.7 添加ArbotiX关节控制器 318 10.7.1 添加配置文件 318 10.7.2 运行ArbotiX节点 318 10.7.3 测试例程 319 10.7.4 运行效果 321 10.8 配置MoveIt!关节控制器 322 10.8.1 添加配置文件 323 10.8.2 启动插件 324 10.9 MoveIt!编程学习 324 10.9.1 关节空间规划 324 10.9.2 工作空间规划 328 10.9.3 笛卡儿运动规划 333 10.9.4 避障规划 338 10.10 pick and place示例 345 10.10.1 应用效果 345 10.10.2 创建抓取的目标物体 346 10.10.3 设置目标物体的放置位置 346 10.10.4 生成抓取姿态 346 10.10.5 pick 348 10.10.6 place 348 10.11 Gazebo中的机械臂仿真 349 10.11.1 创建配置文件 350 10.11.2 创建launch文件 350 10.11.3 开始仿真 351 10.12 使用MoveIt!控制Gazebo中的机械臂 353 10.12.1 关节轨迹控制器 354 10.12.2 MoveIt!控制器 355 10.12.3 关节状态控制器 356 10.12.4 运行效果 357 10.13 ROS-I 358 10.13.1 ROS-I的目标 359 10.13.2 ROS-I的安装 359 10.13.3 ROS-I的架构 360 10.14 本章小结 362 第11章 ROS与机器学习 363 11.1 AlphaGo的大脑——Tensor-Flow 364 11.2 TensorFlow基础 364 11.2.1 安装TensorFlow 364 11.2.2 核心概念 366 11.2.3 第一个TensorFlow程序 367 11.3 线性回归 369 11.3.1 理论基础 369 11.3.2 创建数据集 371 11.3.3 使用TensorFlow解决线性回归问题 372 11.4 手写数字识别 374 11.4.1 理论基础 374 11.4.2 TensorFlow中的MNIST例程 377 11.4.3 基于ROS实现MNIST 381 11.5 物体识别 384 11.5.1 安装TensorFlow Object Detection API 385 11.5.2 基于ROS实现动态物体识别 388 11.6 本章小结 390 第12章 ROS进阶功能 391 12.1 action 391 12.1.1 什么是action 391 12.1.2 action的工作机制 392 12.1.3 action的定义 392 12.1.4 实现action通信 393 12.2 plugin 396 12.2.1 工作原理 396 12.2.2 如何实现一个插件 396 12.2.3 创建基类 397 12.2.4 创建plugin类 398 12.2.5 注册插件 399 12.2.6 编译插件的动态链接库 399 12.2.7 将插件加入ROS 399 12.2.8 调用插件 400 12.3 rviz plugin 401 12.3.1 速度控制插件 402 12.3.2 创建功能包 402 12.3.3 代码实现 402 12.3.4 编译插件 407 12.3.5 运行插件 408 12.4 动态配置参数 409 12.4.1 创建配置文件 410 12.4.2 创建服务器节点 412 12.4.3 参数动态配置 413 12.5 SMACH 414 12.5.1 什么是SMACH 415 12.5.2 状态机“跑”起来 415 12.5.3 状态机实现剖析 416 12.5.4 状态间的数据传递 419 12.5.5 状态机嵌套 421 12.5.6 多状态并行 422 12.6 ROS-MATLAB 423 12.6.1 ROS-MATLAB是什么 423 12.6.2 ROS-MATLAB可以做什么 424 12.6.3 连接MATLAB和ROS 425 12.6.4 MATLAB可视化编程 428 12.6.5 创建可视化界面 429 12.6.6 编辑控件的回调函数 431 12.6.7 运行效果 434 12.7 Web GUI 435 12.7.1 ROS中的Web功能包 435 12.7.2 创建Web应用 436 12.7.3 使用Web浏览器控制机器人 439 12.8 本章小结 440 第13章 ROS机器人实例 441 13.1 PR2 441 13.1.1 PR2功能包 442 13.1.2 Gazebo中的PR2 443 13.1.3 使用PR2实现SLAM 446 13.1.4 PR2机械臂的使用 448 13.2 TurtleBot 450 13.2.1 TurtleBot功能包 451 13.2.2 Gazebo中的TurtleBot 451 13.2.3 使用TurtleBot实现导航功能 453 13.2.4 尝试TurtleBot 3 456 13.3 Universal Robots 457 13.3.1 Universal Robots功能包 458 13.3.2 Gazebo中的UR机器人 459 13.3.3 使用MoveIt!控制UR机器人 460 13.4 catvehicle 462 13.4.1 构建无人驾驶仿真系统 463 13.4.2 运行无人驾驶仿真器 465 13.4.3 控制无人驾驶汽车 466 13.4.4 实现无人驾驶汽车的SLAM功能 467 13.5 HRMRP 469 13.5.1 总体架构设计 469 13.5.2 SLAM与导航 471 13.5.3 多机器人扩展 472 13.6 Kungfu Arm 474 13.6.1 总体架构设计 474 13.6.2 具体层次功能 475 13.6.3 功夫茶应用展示 478 13.7 本章小结 478 第14章 ROS 2 479 14.1 ROS 1存在的问题 480 14.2 什么是ROS 2 481 14.2.1 ROS 2的设计目标 481 14.2.2 ROS 2的系统架构 482 14.2.3 ROS 2的关键中间件——DDS 483 14.2.4 ROS 2的通信模型 483 14.2.5 ROS 2的编译系统 485 14.3 在Ubuntu上安装ROS 2 487 14.3.1 安装步骤 487 14.3.2 运行talker和listener例程 488 14.4 在Windows上安装ROS 2 489 14.4.1 安装Chocolatey 489 14.4.2 安装Python 490 14.4.3 安装OpenSSL 490 14.4.4 安装Visual StudioCommunity 2015 491 14.4.5 配置DDS 491 14.4.6 安装OpenCV 492 14.4.7 安装依赖包 492 14.4.8 下载并配置ROS 2 492 14.4.9 运行talker和listener例程 493 14.5 ROS 2中的话题通信 494 14.5.1 创建工作和功能包 494 14.5.2 创建talker 495 14.5.3 创建listener 497 14.5.4 修改CMakeLists.txt 497 14.5.5 编译并运行节点 498 14.6 自定义话题和服务 499 14.6.1 自定义话题 499 14.6.2 自定义服务 499 14.6.3 修改CMakeLists.txt和package.xml 499 14.6.4 编译生成头文件 499 14.7 ROS 2中的服务通信 500 14.7.1 创建Server 500 14.7.2 创建Client 501 14.7.3 修改CMakeLists.txt 503 14.7.4 编译并运行节点 503 14.8 ROS 2与ROS 1的集成 504 14.8.1 ros1_bridge功能包 504 14.8.2 话题通信 504 14.8.3 服务通信 504 14.9 本章小结 505 ---------------------------8004538 - ROS机器人项目开发11例[图书]--------------------------- 译者序 推荐序一 推荐序二 作者简介 审校者简介 前言 致谢 第1章 入门ROS机器人应用程序开发 1 1.1 ROS入门 2 1.1.1 ROS发行版 2 1.1.2 支持ROS的操作系统 3 1.1.3支持ROS的机器人和传感器 4 1.1.4为什么选择ROS 5 1.2 ROS基础 6 1.2.1文件系统级 7 1.2.2计算图级 8 1.2.3ROS社区级 9 1.2.4ROS通信 9 1.3ROS客户端库 10 1.4ROS工具 11 1.4.1Rviz(ROS可视化) 11 1.4.2rqt_plot 11 1.4.3rqt_graph 12 1.5ROS仿真器 13 1.6在Ubuntu 16.04 LTS上安装ROS Kinetic 13 1.7在VirtualBox上设置ROS 17 1.8设置ROS工作区 19 1.9ROS在工业和研究中的机遇 20 1.10 问题 22 1.11 本章总结 22 第2章 使用ROS、OpenCV和Dynamixel伺服舵机进行人脸检测与跟踪 23 2.1项目概述 23 2.2硬件和软件需求 24 2.3ROS与Dynamixel伺服舵机的接口 33 2.4创建人脸跟踪ROS包 34 2.5人脸跟踪功能包的工作原理 36 2.5.1理解人脸跟踪代码 38 2.5.2理解CMakeLists.txt 41 2.5.3track.yaml文件 43 2.5.4启动文件 43 2.5.5运行人脸跟踪器节点 44 2.5.6face_tracker_control功能包 45 2.5.7 云台控制器配置文件 46 2.5.8舵机参数配置文件 47 2.5.9人脸跟踪控制器节点 47 2.5.10 创建CMakeLists.txt 49 2.5.11 测试人脸跟踪控制功能包 49 2.5.12 集成所有节点 51 2.5.13 固定支架并安装电路 51 2.5.14 最终测试 52 2.6 问题 52 2.7 本章总结 53 第3章 在ROS中构建一个像Siri的聊天机器人 54 3.1人机交互机器人 54 3.2构建人机交互机器人 55 3.3预备条件 56 3.4AIML入门 57 3.4.1AIML标签 57 3.4.2PyAIML解释器 58 3.4.3在Ubuntu 16.04 LTS上安装PyAIML 59 3.4.4使用PyAIML 59 3.4.5加载多个AIML文件 60 3.4.6在ROS中创建AIML机器人 62 3.4.7AIML ROS功能包 62 3.5 问题 70 3.6 本章总结 70 第4章 使用ROS控制嵌入式电路板 71 4.1主流嵌入式电路板入门 71 4.1.1如何选择Arduino开发板 71 4.1.2Raspberry Pi(树莓派)介绍 74 4.1.3Odroid开发板 76 4.2Arduino与ROS的接口 76 4.2.1使用Arduino和ROS监控光线亮度 79 4.2.2在PC上运行ROS串行服务器 81 4.2.3通过mbed连接STM32开发板和ROS 82 4.2.4使用Energia连接ROS与Tiva C Launchpad板 85 4.3在Raspberry Pi和Odroid上运行ROS 87 4.3.1将Raspberry Pi和Odroid连接到PC 88 4.3.2ROS控制GPIO引脚 90 4.4 问题 94 4.5 本章总结 95 第5章 使用手势远程操作机器人 96 5.1使用键盘遥控ROS龟 97 5.2使用手势进行遥控 98 5.3项目配置 100 5.4MPU-9250、Arduino和ROS连接 101 5.5在Rviz中可视化IMU TF 106 5.6将IMU数据转换为twist消息 107 5.7集成和最终运行 109 5.8使用Android手机进行遥控 111 5.9 问题 113 5.10 本章总结 113 第6章 物体检测和识别 114 6.1物体检测和识别的快速入门 114 6.2ROS中的find_object_2d包 116 6.2.1安装find_object_2d包 116 6.2.2运行find_object_2d节点检测网络摄像头图像中的物体 117 6.2.3使用深度传感器运行find_object_2d节点 121 6.33D物体识别快速入门 124 6.4ROS中3D物体识别包的介绍 125 6.5从3D网格中检测和识别物体 127 6.5.1使用物体的3D模型进行训练 127 6.5.2使用捕获的3D模型进行训练 129 6.6识别物体 132 6.7 问题 135 6.8 本章总结 135 第7章 使用ROS和TensorFlow进行深度学习 136 7.1深度学习及其应用简介 136 7.2深度学习机器人 137 7.3深度学习库 138 7.4TensorFlow入门 139 7.4.1在Ubuntu 16.04 LTS上安装TensorFlow 139 7.4.2TensorFlow的概念 141 7.4.3在TensorFlow中编写我们的第一个程序 143 7.5使用ROS和TensorFlow进行图像识别 146 7.5.1前提条件 147 7.5.2ROS图像识别节点 147 7.6scikit-learn介绍 150 7.7SVM及其在机器人中的应用 151 7.8 问题 154 7.9 本章总结 154 第8章 在MATLAB和Android上运行ROS 156 8.1ROS-MATLAB接口入门 156 8.2在MATLAB中设置机器人工具箱 157 8.2.1MATLAB中的基本ROS功能 157 8.2.2列出ROS节点、主题和消息 158 8.3MATLAB与ROS网络通信 160 8.4利用MATLAB控制ROS机器人 163 8.4.1设计MATLAB GUI应用程序 164 8.4.2解释回调 166 8.4.3运行应用程序 168 8.5Android及其ROS接口入门 169 8.5.1安装rosjava 170 8.5.2通过Ubuntu软件包管理器安装android-sdk 172 8.6安装ROS-Android接口 174 8.7使用ROS-Android应用程序 175 8.8代码演练 180 8.9使用ROS-Android接口创建基本应用程序 182 8.10 问题 183 8.11 本章总结 184 第9章 构建自主移动机器人 185 9.1机器人规格和设计概述 185 9.2设计和选择机器人的电动机和轮子 186 9.2.1计算电动机扭矩 186 9.2.2电动机转速的计算 186 9.2.3设计总结 187 9.3构建机器人本体的2D和3D模型 187 9.3.1底盘 187 9.3.2连接杆和空心管设计 188 9.3.3电动机、轮子和电动机夹具设计 189 9.3.4脚轮设计 189 9.3.5中层板和顶层板设计 189 9.3.6顶层板 190 9.3.7机器人的3D建模 191 9.4在Gazebo中进行机器人模型仿真 192 9.5差速驱动机器人的数学模型 192 9.6设计和建造实际的机器人 200 9.6.1电动机和电动机驱动 201 9.6.2电动机编码器 201 9.6.3Tiva C Launchpad 201 9.6.4超声波传感器 201 9.6.5OpenNI深度传感器 201 9.6.6英特尔NUC 201 9.6.7使用Launchpad将传感器 和电动机连接起来 201 9.6.8Tiva C Launchpad编程 202 9.7连接机器人硬件与ROS 205 9.8在Chefbot中进行地图构建和定位 208 9.9 问题 210 9.10 本章总结 210 第10章 使用ROS创建自动驾驶汽车 211 10.1 自动驾驶汽车入门 211 10.2 典型自动驾驶汽车的功能框图 214 10.2.1 自动驾驶汽车的软件框图 218 10.2.2 在ROS中仿真和连接自动驾驶汽车传感器 219 10.3 在Gazebo中仿真一辆带有传感器的自动驾驶汽车 235 10.3.1 安装预备条件 235 10.3.2 可视化机器人车传感器数据 237 10.3.3 在Gazebo里移动一辆自动驾驶汽车 238 10.3.4 使用机器人车运行hector SLAM 238 10.4 将DBW车与ROS连接 239 10.4.1 安装包 240 10.4.2 可视化自动驾驶汽车和传感器数据 240 10.4.3 DBW与ROS通信 242 10.5 Udacity开源自动驾驶汽车项目介绍 242 10.6 问题 245 10.7 本章总结 246 第11章 使用VR头戴设备和Leap Motion遥控机器人 247 11.1 VR头戴设备和Leap Motion入门 248 11.2 项目预备条件 249 11.3 项目的设计和工作原理 250 11.4 在Ubuntu 14.04.5上安装Leap Motion SDK 251 11.4.1 可视化Leap Motion控制器数据 252 11.4.2 使用Leap Motion可视化工具 252 11.4.3 安装Leap Motion控制器的ROS驱动程序 253 11.5 在Rviz中可视化Leap Motion数据 255 11.6 使用Leap Motion控制器创建遥控节点 256 11.7 构建ROS-VR Android应用程序 258 11.8 使用ROS-VR应用程序并与Gazebo进行连接 259 11.9 在VR中使用TurtleBot仿真 262 11.10 ROS-VR应用程序的故障排除 263 11.11 ROS-VR和Leap Motion遥控的集成应用 264 11.12 问题 264 11.13 本章总结 264 第12章 通过网络控制机器人 265 12.1 ROS Web入门 265 12.1.1 rosbridge_suite 265 12.1.2 roslibjs、ros2djs和ros3djs 266 12.1.3 tf2_web_republisher 267 12.2 在ROS Kinetic上设置ROS Web 267 12.2.1 安装rosbridge_suite 267 12.2.2 设置rosbridge客户端库 268 12.3 在ROS Kinetic上安装tf2_web_republisher 269 12.4 在Web浏览器上实现机器人遥控和可视化 269 12.4.1 项目开发 269 12.4.2 连接到rosbridge_server 271 12.4.3 初始化teleop 271 12.4.4 在Web浏览器中创建3D查看器 272 12.4.5 创建TF客户端 272 12.4.6 创建URDF客户端 272 12.4.7 创建文本输入 273 12.4.8 运行Web teleop应用程序 273 12.5 利用网络浏览器控制机器人关节 275 12.5.1 安装joint_state_publisher_js 275 12.5.2 运行网络关节状态发布器 276 12.5.3 解释代码 278 12.5.4 运行机器人监控应用程序 278 12.6 基于Web的语音控制机器人 279 12.6.1 前提条件 280 12.6.2 在Web应用程序中启用语音识别 280 12.7 运行语音控制机器人应用程序 282 12.8 问题 283 12.9 本章总结 284 ---------------------------7731483 - ROS机器人开发:实用案例分析--------------------------- 译者序 作者简介 前言 第1章 ROS初体验1 1.1 ROS的用途以及学习ROS的好处1 1.2 哪些机器人采用了ROS2 1.3 安装并启动ROS4 1.3.1 配置Ubuntu系统的软件源4 1.3.2 设置Ubuntu系统软件源列表5 1.3.3 设置Ubuntu系统密钥5 1.3.4 安装ROS Indigo5 1.3.5 初始化rosdep6 1.3.6 环境设置6 1.3.7 安装rosinstall7 1.3.8 故障排除—ROS环境测试7 1.4 生成一个catkin工作空间7 1.5 ROS的功能包与清单8 1.5.1 ROS清单9 1.5.2 探索ROS功能包9 1.6 ROS节点与ROS节点管理器11 1.6.1 ROS节点11 1.6.2 ROS节点管理器12 1.6.3 确定节点和主题的ROS命令14 1.7 第一个ROS机器人模拟程序—Turtlesim15 1.7.1 启动Turtlesim节点15 1.7.2 Turtlesim节点16 1.7.3 Turtlesim主题与消息18 1.7.4 Turtlesim的参数服务器20 1.7.5 移动乌龟的ROS服务22 1.8 ROS命令小结23 1.9 本章小结24 第2章 构建一个模拟的两轮ROS机器人25 2.1 rviz25 2.1.1 安装和启动rviz26 2.1.2 使用rviz27 2.2 生成并构建ROS功能包29 2.3 构建差分驱动的机器人URDF30 2.3.1 生成机器人底座31 2.3.2 使用roslaunch32 2.3.3 添加轮子35 2.3.4 添加小脚轮37 2.3.5 添加颜色38 2.3.6 添加碰撞属性40 2.3.7 移动轮子41 2.3.8 tf和robot_state_publisher简介42 2.3.9 添加物理学属性42 2.3.10 试用URDF工具43 2.4 Gazebo45 2.4.1 安装并启动Gazebo45 2.4.2 使用roslaunch启动Gazebo46 2.4.3 使用Gazebo47 2.4.4 机器人URDF的修改50 2.4.5 Gazebo模型验证51 2.4.6 在Gazebo中查看URDF51 2.4.7 机器人模型调整53 2.4.8 移动机器人模型53 2.4.9 其他的机器人仿真环境54 2.5 本章小结55 第3章 TurtleBot机器人操控56 3.1 TurtleBot机器人简介56 3.2 下载TurtleBot模拟器软件57 3.3 在Gazebo中启动TurtleBot模拟器58 3.3.1 常见问题与故障排除60 3.3.2 ROS命令与Gazebo61 3.3.3 模拟环境下使用键盘远程控制TurtleBot63 3.4 控制一台真正的TurtleBot机器人的准备64 3.5 联接上网本与远程计算机66 3.5.1 网络类型67 3.5.2 网络地址67 3.5.3 远程计算机网络设置68 3.5.4 上网本网络设置69 3.5.5 安全外壳协议联接69 3.5.6 网络设置小结70 3.5.7 排查网络联接中的故障70 3.5.8 TurtleBot机器人系统测试70 3.6 TurtleBot机器人的硬件规格参数72 3.7 移动真实的TurtleBot机器人73 3.7.1 采用键盘远程控制TurtleBot机器人移动74 3.7.2 采用ROS命令控制TurtleBot机器人移动75 3.7.3 编写第一个Python脚本程序控制TurtleBot机器人移动76 3.8 rqt工具简介79 3.8.1 rqt_graph79 3.8.2 rqt的消息发布与主题监控82 3.9 TurtleBot机器人的里程计84 3.9.1 模拟的TurtleBot机器人的测程84 3.9.2 真实的TurtleBot机器人的里程计在rviz下的显示86 3.10 TurtleBot机器人的自动充电88 3.11 本章小结90 第4章 TurtleBot机器人导航91 4.1 TurtleBot机器人的3D视觉系统92 4.1.1 3D视觉传感器原理92 4.1.2 3D传感器对比92 4.1.3 障碍物规避的缺陷96 4.2 配置TurtleBot机器人并安装3D传感器软件96 4.2.1 Kinect96 4.2.2 ASUS与PrimeSense98 4.2.3 摄像头软件结构98 4.2.4 术语界定98 4.3 独立模式下测试3D传感器99 4.4 运行ROS可视化节点100 4.4.1 使用Image Viewer可视化数据100 4.4.2 使用rviz可视化数据102 4.5 TurtleBot机器人导航105 4.5.1 采用TurtleBot机器人构建房间地图105 4.5.2 采用TurtleBot机器人实现自主导航109 4.5.3 rqt_reconfigure116 4.5.4 进一步探索ROS导航117 4.6 本章小结117 第5章 构建模拟的机器人手臂119 5.1 Xacro的特点119 5.2 采用Xacro建立一个关节式机器人手臂URDF121 5.2.1 使用Xacro属性标签121 5.2.2 使用roslaunch启动rrbot124 5.2.3 使用Xacro的包含与宏标签126 5.2.4 给机器人手臂添加网格129 5.3 在Gazebo中控制关节式机器人手臂133 5.3.1 添加Gazebo特定的元素133 5.3.2 将机器人手臂固定在世界坐标系下135 5.3.3 在Gazebo中查看机器人手臂135 5.3.4 给Xacro添加控件136 5.3.5 采用ROS命令行控制机器人手臂140 5.3.6 采用rqt控制机器人手臂141 5.4 本章小结143 第6章 机器人手臂摇摆的关节控制144 6.1 Baxter简介145 6.1.1 Baxter,一款研究型机器人146 6.1.2 Baxter模拟器147 6.2 Baxter的手臂147 6.2.1 Baxter的俯仰关节149 6.2.2 Baxter的滚转关节149 6.2.3 Baxter的坐标系149 6.2.4 Baxter手臂的控制模式150 6.2.5 Baxter手臂抓手151 6.2.6 Baxter手臂的传感器152 6.3 下载Baxter软件152 6.3.1 安装Baxter SDK软件152 6.3.2 安装Baxter模拟器154 6.3.3 配置Baxter shell155 6.3.4 安装MoveIt156 6.4 在Gazebo中启动Baxter模拟器157 6.4.1 启动Baxter模拟器157 6.4.2 “热身”练习161 6.4.3 弯曲Baxter手臂163 6.4.4 Baxter手臂控制器的调校173 6.5 Baxter手臂与正向运动学174 6.5.1 关节与关节状态发布器174 6.5.2 理解tf177 6.5.3 rviz下的tf坐标系180 6.5.4 查看机器人元素的tf树181 6.6 MoveIt简介182 6.6.1 采用MoveIt给Baxter手臂进行运动规划184 6.6.2 在场景中添加物体185 6.6.3 采用MoveIt进行避障运动规划186 6.7 配置真实的Baxter机器人188 6.8 控制真实的Baxter机器人190 6.8.1 控制关节到达航路点190 6.8.2 控制关节的力矩弹簧191 6.8.3 关节速度控制演示192 6.8.4 其他示例192 6.8.5 视觉伺服和抓握192 6.9 反向运动学193 6.10 本章小结196 第7章 空中机器人基本操控198 7.1 四旋翼飞行器简介199 7.1.1 风靡的四旋翼飞行器199 7.1.2 滚转角、俯仰角与偏航角200 7.1.3 四旋翼飞行器原理201 7.1.4 四旋翼飞行器的组成203 7.1.5 添加传感器203 7.1.6 四旋翼飞行器的通信204 7.2 四旋翼飞行器的传感器204 7.2.1 惯性测量单元205 7.2.2 四旋翼飞行器状态传感器205 7.3 放飞前的准备工作205 7.3.1 四旋翼飞行器检测206 7.3.2 飞行前检测列表206 7.3.3 飞行中的注意事项207 7.3.4 需要遵循的规则和条例207 7.4 在无人机中使用ROS208 7.5 Hector四旋翼飞行器简介208 7.5.1 下载Hector Quadrotor功能包209 7.5.2 在Gazebo中启动Hector四旋翼飞行器210 7.6 Crazyflie 2.0简介216 7.6.1 无ROS情况下的Crazy-flie控制218 7.6.2 使用Crazyradio PA进行通信218 7.6.3 加载Crazyflie ROS软件219 7.6.4 放飞前的检查222 7.6.5 使用teleop操控Crazy-flie飞行222 7.6.6 在运动捕获系统下飞行226 7.6.7 控制多个Crazyflie飞行226 7.7 Bebop简介227 7.7.1 加载bebop_autonomy软件228 7.7.2 Bebop飞行前的准备229 7.7.3 使用命令控制Bebop飞行230 7.8 本章小结231 第8章 使用外部设备控制机器人233 8.1 创建自定义ROS游戏控制器接口233 8.1.1 测试游戏控制器234 8.1.2 使用joy ROS功能包236 8.1.3 使用自定义游戏控制器接口控制Turtlesim237 8.2 创建自定义ROS Android设备接口242 8.2.1 使用Turtlebot Remocon进行操控242 8.2.2 使用Android设备实现ROS机器人的自定义控制245 8.3 在Arduino或树莓派上创建ROS节点249 8.3.1 使用Arduino249 8.3.2 使用树莓派260 8.4 本章小结261 第9章 操控Crazyflie执行飞行任务262 9.1 执行任务所需的组件263 9.1.1 用于Windows的Kinect v2263 9.1.2 Crazyflie操作263 9.1.3 任务软件结构264 9.1.4 OpenCV与ROS265 9.2 安装任务所需的软件266 9.2.1 安装libfreenect2267 9.2.2 安装iai_kinect2269 9.2.3 使用iai_kinect2元包271 9.3 任务设置277 9.3.1 探测Crazyflie与目标277 9.3.2 使用Kinect与OpenCV281 9.3.3 对Crazyflie进行跟踪283 9.4 Crazyflie控制285 9.5 放飞Crazyflie290 9.5.1 悬停290 9.5.2 飞往静止目标292 9.5.3 吸取的经验294 9.6 本章小结295 第10章 ROS功能扩展296 10.1 通过声音控制机器人296 10.1.1 Sphinx库297 10.1.2 Rospeex库298 10.2 给机器人添加语音功能299 10.3 给机器人添加人脸识别功能299 10.3.1 采用级联分类器进行人脸识别300 10.3.2 采用OpenCV进行人脸识别301 10.4 本章小结303 ---------------------------6479751 - ROS机器人高效编程(原书第3版)[图书]--------------------------- 推荐序一 推荐序二 译者序 前言 作者简介 审校者简介 第1章 ROS入门 1 1.1 PC安装教程 3 1.2 使用软件库安装ROS Kinetic 3 1.2.1 配置Ubuntu软件库 4 1.2.2 添加软件库到sources.list文件中 4 1.2.3 设置密钥 5 1.2.4 安装ROS 5 1.2.5 初始化rosdep 6 1.2.6 配置环境 6 1.2.7 安装rosinstall 7 1.3 如何安装VirtualBox和Ubuntu 8 1.3.1 下载VirtualBox 8 1.3.2 创建虚拟机 9 1.4 通过Docker镜像使用ROS 11 1.4.1 安装Docker 11 1.4.2 获取和使用ROS Docker镜像和容器 11 1.5 在BeagleBone Black上安装ROS Kinetic 12 1.5.1 准备工作 13 1.5.2 配置主机和source.list文件 16 1.5.3 设置密钥 16 1.5.4 安装ROS功能包 17 1.5.5 为ROS初始化rosdep 17 1.5.6 在BeagleBone Black中配置环境 18 1.5.7 在BeagleBone Black中安装rosinstall 18 1.5.8 BeagleBone Black基本ROS示例 18 1.6 本章小结 19 第2章 ROS架构及概念 20 2.1 理解ROS文件系统级 20 2.1.1 工作空间 21 2.1.2 功能包 22 2.1.3 元功能包 23 2.1.4 消息 24 2.1.5 服务 25 2.2 理解ROS计算图级 25 2.2.1 节点与nodelet 27 2.2.2 主题 28 2.2.3 服务 29 2.2.4 消息 29 2.2.5 消息记录包 30 2.2.6 节点管理器 30 2.2.7 参数服务器 30 2.3 理解ROS开源社区级 31 2.4 ROS试用练习 32 2.4.1 ROS文件系统导览 32 2.4.2 创建工作空间 32 2.4.3 创建ROS功能包和元功能包 33 2.4.4 编译ROS功能包 34 2.4.5 使用ROS节点 35 2.4.6 如何使用主题与节点交互 37 2.4.7 如何使用服务 39 2.4.8 使用参数服务器 41 2.4.9 创建节点 42 2.4.10 编译节点 44 2.4.11 创建msg和srv文件 45 2.4.12 使用新建的srv和msg文件 48 2.4.13 launch文件 51 2.4.14 动态参数 53 2.5 本章小结 57 第3章 可视化和调试工具 58 3.1 调试ROS节点 60 3.1.1 使用gdb调试器调试ROS节点 60 3.1.2 在ROS节点启动时调用gdb调试器 61 3.1.3 在ROS节点启动时调用valgrind分析节点 62 3.1.4 设置ROS节点core文件转储 62 3.2 日志消息 62 3.2.1 输出日志消息 62 3.2.2 设置调试消息级别 63 3.2.3 为特定节点配置调试消息级别 64 3.2.4 消息命名 65 3.2.5 按条件显示消息与过滤消息 65 3.2.6 显示消息的方式——单次、可调以及其他组合 66 3.2.7 使用rqt_console和rqt_logger_level在运行时修改调试级别 66 3.3 检测系统状态 69 3.4 设置动态参数 73 3.5 当出现异常状况时使用roswtf 75 3.6 可视化节点诊断 77 3.7 绘制标量数据图 78 3.8 图像可视化 81 3.9 3D可视化 83 3.9.1 使用rqt_rviz在3D世界中实现数据可视化 83 3.9.2 主题与坐标系的关系 86 3.9.3 可视化坐标变换 87 3.10 保存与回放数据 88 3.10.1 什么是消息记录包文件 89 3.10.2 使用rosbag在消息记录包文件中记录数据 89 3.10.3 回放消息记录包文件 90 3.10.4 查看消息记录包文件的主题和消息 91 3.11 应用rqt与rqt_gui插件 93 3.12 本章小结 93 第4章 3D建模与仿真 95 4.1 在ROS中自定义机器人的3D模型 95 4.2 创建第一个URDF文件 95 4.2.1 解释文件格式 97 4.2.2 在rviz里查看3D模型 98 4.2.3 加载网格到机器人模型中 100 4.2.4 使机器人模型运动 100 4.2.5 物理和碰撞属性 101 4.3 xacro——一种更好的机器人建模方法 102 4.3.1 使用常量 102 4.3.2 使用数学方法 103 4.3.3 使用宏 103 4.3.4 使用代码移动机器人 103 4.3.5 使用SketchUp进行3D建模 107 4.4 在ROS中仿真 109 4.4.1 在Gazebo中使用URDF 3D模型 109 4.4.2 在Gazebo中添加传感器 112 4.4.3 在Gazebo中加载和使用地图 115 4.4.4 在Gazebo中移动机器人 116 4.5 本章小结 118 第5章 导航功能包集入门 119 5.1 ROS导航功能包集 119 5.2 创建变换 120 5.2.1 创建广播器 121 5.2.2 创建侦听器 121 5.2.3 查看坐标变换树 124 5.3 发布传感器信息 124 5.4 发布里程数据信息 127 5.4.1 Gazebo如何获取里程数据 128 5.4.2 使用Gazebo创建里程数据 131 5.4.3 创建自定义里程数据 132 5.5 创建基础控制器 135 5.6 使用ROS创建地图 139 5.6.1 使用map_server保存地图 141 5.6.2 使用map_server加载地图 141 5.7 本章小结 142 第6章 导航功能包集进阶 144 6.1 创建功能包 144 6.2 创建机器人配置 144 6.3 配置全局和局部代价地图 147 6.3.1 基本参数的配置 147 6.3.2 全局代价地图的配置 148 6.3.3 局部代价地图的配置 149 6.3.4 底盘局部规划器配置 149 6.4 为导航功能包集创建启动文件 150 6.5 为导航功能包集设置rviz 151 6.5.1 2D位姿估计 152 6.5.2 2D导航目标 152 6.5.3 静态地图 154 6.5.4 粒子云 154 6.5.5 机器人占地空间 155 6.5.6 局部代价地图 156 6.5.7 全局代价地图 156 6.5.8 全局规划 157 6.5.9 局部规划 158 6.5.10 规划器规划 158 6.5.11 当前目标 159 6.6 自适应蒙特卡罗定位 160 6.7 使用rqt_reconfigure修改参数 161 6.8 机器人避障 162 6.9 发送目标 163 6.10 本章小结 166 第7章 使用MoveIt! 167 7.1 MoveIt!体系结构 167 7.1.1 运动规划 169 7.1.2 规划场景 169 7.1.3 世界几何结构显示器 170 7.1.4 运动学 170 7.1.5 碰撞检测 170 7.2 在MoveIt!中集成一个机械臂 171 7.2.1 工具箱里有什么 171 7.2.2 使用设置助手生成一个MoveIt!功能包 172 7.2.3 集成到RViz中 176 7.2.4 集成到Gazebo或实际机械臂中 179 7.3 简单的运动规划 180 7.3.1 规划单个目标 181 7.3.2 规划一个随机目标 181 7.3.3 规划预定义的群组状态 183 7.3.4 显示目标的运动 183 7.4 考虑碰撞的运动规划 184 7.4.1 将对象添加到规划场景中 184 7.4.2 从规划的场景中删除对象 185 7.4.3 应用点云进行运动规划 186 7.5 抓取和放置任务 187 7.5.1 规划的场景 188 7.5.2 要抓取的目标对象 189 7.5.3 支撑面 189 7.5.4 感知 191 7.5.5 抓取 191 7.5.6 抓取操作 193 7.5.7 放置操作 195 7.5.8 演示模式 197 7.5.9 在Gazebo中仿真 198 7.6 本章小结 199 第8章 在ROS下使用传感器和执行器 200 8.1 使用游戏杆或游戏手柄 200 8.1.1 joy_node如何发送游戏杆动作消息 201 8.1.2 使用游戏杆数据移动机器人模型 202 8.2 使用Arduino添加更多的传感器和执行器 206 8.2.1 创建使用Arduino的示例程序 207 8.2.2 由ROS和Arduino控制的机器人平台 210 8.3 使用9自由度低成本IMU 217 8.3.1 安装Razor IMU ROS库 219 8.3.2 Razor如何在ROS中发送数据 221 8.3.3 创建一个ROS节点以使用机器人中的9DoF传感器数据 222 8.3.4 使用机器人定位来融合传感器数据 223 8.4 使用IMU——Xsens MTi 225 8.5 GPS的使用 226 8.5.1 GPS如何发送信息 228 8.5.2 创建一个使用GPS的工程示例 229 8.6 使用激光测距仪——Hokuyo URG-04lx 230 8.6.1 了解激光如何在ROS中发送数据 231 8.6.2 访问和修改激光数据 232 8.7 创建launch文件 234 8.8 使用Kinect传感器查看3D环境中的对象 235 8.8.1 Kinect如何发送和查看传感器数据 236 8.8.2 创建使用Kinect的示例 238 8.9 使用伺服电动机——Dynamixel 239 8.9.1 Dynamixel如何发送和接收运动命令 241 8.9.2 创建和使用伺服电动机示例 241 8.10 本章小结 243 第9章 计算机视觉 244 9.1 ROS摄像头驱动程序支持 245 9.1.1 FireWire IEEE1394摄像头 245 9.1.2 USB摄像头 249 9.1.3 使用OpenCV制作USB摄像头驱动程序 250 9.2 ROS图像 255 9.3 ROS中的OpenCV库 256 9.3.1 安装OpenCV 3.0 256 9.3.2 在ROS中使用OpenCV 256 9.4 使用rqt_image_view显示摄像头输入的图像 257 9.5 标定摄像头 257 9.5.1 如何标定摄像头 258 9.5.2 双目标定 261 9.6 ROS图像管道 264 9.7 计算机视觉任务中有用的ROS功能包 269 9.7.1 视觉里程计 270 9.7.2 使用viso2实现视觉里程计 270 9.7.3 摄像头位姿标定 271 9.7.4 运行viso2在线演示 273 9.7.5 使用低成本双目摄像头运行viso2 276 9.8 使用RGBD深度摄像头实现视觉里程计 276 9.8.1 安装fovis 276 9.8.2 用Kinect RGBD深度摄像头运行fovis 277 9.9 计算两幅图像的单应性 278 9.10 本章小结 279 第10章 点云 280 10.1 理解点云库 280 10.1.1 不同的点云类型 281 10.1.2 PCL中的算法 281 10.1.3 ROS的PCL接口 282 10.2 我的第一个PCL程序 283 10.2.1 创建点云 284 10.2.2 加载和保存点云到硬盘中 287 10.2.3 可视化点云 290 10.2.4 滤波和缩减采样 294 10.2.5 配准与匹配 298 10.2.6 点云分区 301 10.3 分割 305 10.4 本章小结 308 ---------------------------6087791 - 机器人编程实战--------------------------- 译者序 前言 致谢 第1章 究竟什么是机器人 1 1.1 定义机器人的7个标准 1 1.1.1 标准1:感知环境 2 1.1.2 标准2:可编程的动作和行为 2 1.1.3 标准3:改变环境、与环境交互或作用于环境 2 1.1.4 标准4:具备电源 2 1.1.5 标准5:适用于表示指令和数据的语言 3 1.1.6 标准6:无需外部干预的自主性 3 1.1.7 标准7:一个没有生命的机器 4 1.1.8 机器人分类 4 1.1.9 传感器 6 1.1.10 执行器 7 1.1.11 末端作用器 8 1.1.12 控制器 8 1.1.13 机器人所在的场景 12 1.2 给机器人指令 14 1.2.1 每个机器人都有一种语言 14 1.2.2 迁就机器人的语言 16 1.2.3 在可视化编程环境中表示机器人场景 18 1.2.4 Midamba的困境 18 1.3 下文预告 20 第2章 机器人词汇 21 2.1 为什么需要更多努力 22 2.2 确定动作 25 2.3 自主机器人的ROLL模型 26 2.3.1 机器人的能力 27 2.3.2 场景和态势中的机器人角色 28 2.4 下文预告 30 第3章 机器人场景图形规划 31 3.1 建立场景地图 31 3.1.1 创建平面图 32 3.1.2 机器人的世界 34 3.1.3 RSVP READ设置 36 3.2 伪代码和绘制RSVP流程图 38 3.2.1 控制流程和控制结构 39 3.2.2 子程序 43 3.3 目标和机器人状态图 46 3.4 下文预告 50 第4章 检验机器人的实际能力 51 4.1 微控制器的实际检验 53 4.2 传感器的实际检验 56 4.3 执行器和末端作用器的检验 60 4.4 REQUIRE机器人效能 62 4.5 下文预告 64 第5章 详解传感器 65 5.1 传感器感知 66 5.1.1 模拟和数字传感器 68 5.1.2 读取模拟和数字信号 69 5.1.3 传感器输出 71 5.1.4 读数存储 72 5.1.5 有源和无源传感器 72 5.1.6 传感器与微控制器的连接 74 5.1.7 传感器属性 77 5.1.8 范围和分辨率 78 5.1.9 精度和准确度 78 5.1.10 线性度 79 5.1.11 传感器校准 80 5.1.12 传感器相关问题 81 5.1.13 终端用户校准过程 81 5.1.14 校准方法 82 5.2 下文预告 83 第6章 通过编程控制机器人的传感器 84 6.1 使用颜色传感器 84 6.1.1 颜色传感器模式 86 6.1.2 探测距离 87 6.1.3 机器人环境的照明 87 6.1.4 校准颜色传感器 88 6.1.5 编程颜色传感器 89 6.2 用于检测和跟踪颜色目标的数码相机 92 6.3 利用RS Media跟踪颜色目标 92 6.4 使用Pixy Vision传感器跟踪颜色目标 95 6.4.1 训练Pixy以检测目标 96 6.4.2 编程Pixy 98 6.4.3 详解属性 101 6.5 超声波传感器 101 6.5.1 超声波传感器的局限性和准确性 102 6.5.2 超声波传感器的模式 106 6.5.3 采样读数 106 6.5.4 传感器读数的数据类型 107 6.5.5 校准超声波传感器 107 6.5.6 编程超声波传感器 108 6.6 罗盘传感器计算机器人的航向 117 6.7 下文预告 121 第7章 电动机和伺服机构编程 122 7.1 执行器是输出转换器 122 7.1.1 电动机特性 123 7.1.2 电压 123 7.1.3 电流 123 7.1.4 转速 123 7.1.5 扭矩 123 7.1.6 电阻 123 7.2 不同类型的直流电动机 124 7.2.1 直流电动机 124 7.2.2 转速和扭矩 126 7.2.3 齿轮电动机 127 7.3 电动机配置:直接和间接动力传动系统 134 7.4 室内和室外机器人的地形挑战 134 7.4.1 应对地形挑战 135 7.4.2 机器人手臂和末端作用器的扭矩挑战 138 7.4.3 计算扭矩和转速需求 138 7.4.4 电动机和REQUIRE 139 7.5 通过编程使机器人移动 140 7.5.1 一个电动机,还是两个、三个、更多个电动机 140 7.5.2 执行动作 140 7.5.3 编程动作 141 7.5.4 通过编程使电动机移动到指定位置 145 7.5.5 使用Arduino实现电动机编程 151 7.6 机器人手臂和末端作用器 154 7.6.1 不同类型的机器人手臂 154 7.6.2 机器人手臂的扭矩 155 7.6.3 不同类型的末端作用器 157 7.6.4 为机器人的手臂进行编程 159 7.6.5 计算运动学 163 7.7 下文预告 166 第8章 开始自主:构建机器人所对应的软件机器人 167 8.1 初探软件机器人 169 8.1.1 部件部分 171 8.1.2 动作部分 171 8.1.3 任务部分 171 8.1.4 场景(态势)部分 171 8.2 机器人的ROLL模型和软件机器人框架 172 8.2.1 BURT把软件机器人框架转换为类 173 8.2.2 第一次实现自主机器人程序设计 184 8.3 下文预告 185 第9章 机器人SPACES 186 9.1 机器人需要自身的SPACES 187 9.1.1 扩展的机器人场景 187 9.1.2 REQUIRE检查表 188 9.1.3 前提或后置条件不满足时会发生的情况 190 9.1.4 前提或后置条件不满足时的行动选择 191 9.2 详解机器人初始化后置条件 192 9.2.1 启动前提条件和后置条件 194 9.2.2 编码前提条件和后置条件 195 9.2.3 前提和后置条件的出处 200 9.3 SPACES检查和RSVP状态图 204 9.4 下文预告 206 第10章 自主机器人需要STORIES 207 10.1 不只是动作 208 10.1.1 Birthday Robot Take 2 208 10.1.2 机器人STORIES 209 10.1.3 扩展的机器人场景 210 10.1.4 将Unit1的场景转换为STORIES 210 10.1.5 详解场景的本体 210 10.1.6 关注机器人的意图 220 10.1.7 面向对象的机器人代码和效能问题 243 10.2 下文预告 244 第11章 系统整合:Midamba的第一个自主机器人编程 245 11.1 Midamba的初始场景 245 11.1.1 Midamba一夜之间成为机器人程序员 245 11.1.2 步骤1:机器人在仓库场景中 247 11.1.3 步骤2:设施场景1的机器人词汇和ROLL模型 249 11.1.4 步骤3:设施场景1的RSVP 250 11.1.5 机器人POV图的布局图 251 11.1.6 Midamba的设施场景1(精简) 252 11.1.7 RSVP的图形化流程图 252 11.1.8 RSVP的状态图 258 11.2 Midamba关于机器人Unit1和Unit2的STORIES 258 11.3 下文预告 270 第12章 开源SARAA机器人总结 274 12.1 低成本、开源、入门级机器人 274 12.1.1 基于场景的编程有助于确保机器人的安全 276 12.1.2 SARAA机器人总结 276 12.1.3 对机器人编程新手的建议 278 12.1.4 Midamba场景的完整RSVP、STORIES和源代码 278 术语表 279 ---------------------------5006992 - ROS机器人程序设计(原书第2版)[图书]--------------------------- 推荐序一 推荐序二 译者序 前言 作者简介 审校者简介 第1章 ROS Hydro系统入门 1 1.1 PC安装教程 3 1.2 使用软件库安装ROS Hydro 3 1.2.1 配置Ubuntu软件库 4 1.2.2 添加软件库到sources.list文件中 4 1.2.3 设置密钥 5 1.2.4 安装ROS 5 1.2.5 初始化rosdep 6 1.2.6 配置环境 6 1.2.7 安装rosinstall 7 1.3 如何安装VirtualBox和Ubuntu 8 1.3.1 下载VirtualBox 8 1.3.2 创建虚拟机 8 1.4 在BeagleBone Black上安装ROS Hydro 11 1.4.1 准备工作 12 1.4.2 配置主机和source.list文件 13 1.4.3 设置密钥 14 1.4.4 安装ROS功能包 14 1.4.5 初始化rosdep 15 1.4.6 在BeagleBone Black中配置环境 15 1.4.7 在BeagleBone Black中安装rosinstall 15 1.5 本章小结 15 第2章 ROS系统架构及概念 16 2.1 理解ROS文件系统级 16 2.1.1 工作空间 17 2.1.2 功能包 18 2.1.3 综合功能包 19 2.1.4 消息 20 2.1.5 服务 21 2.2 理解ROS计算图级 22 2.2.1 节点与nodelet 23 2.2.2 主题 24 2.2.3 服务 25 2.2.4 消息 26 2.2.5 消息记录包 26 2.2.6 节点管理器 26 2.2.7 参数服务器 27 2.3 理解ROS开源社区级 27 2.4 ROS系统试用练习 28 2.4.1 ROS文件系统导览 28 2.4.2 创建工作空间 29 2.4.3 创建ROS功能包和综合功能包 30 2.4.4 编译ROS功能包 30 2.4.5 使用ROS节点 31 2.4.6 如何使用主题与节点交互 33 2.4.7 如何使用服务 36 2.4.8 使用参数服务器 38 2.4.9 创建节点 38 2.4.10 编译节点 41 2.4.11 创建msg和srv文件 42 2.4.12 使用新建的srv和msg文件 44 2.4.13 启动文件 48 2.4.14 动态参数 50 2.5 本章小结 54 第3章 可视化和调试工具 55 3.1 调试ROS节点 57 3.1.1 使用gdb调试器调试ROS节点 57 3.1.2 ROS节点启动时调用gdb调试器 58 3.1.3 ROS节点启动时调用valgrind分析节点 59 3.1.4 设置ROS节点core文件转储 59 3.2 日志信息 59 3.2.1 输出日志信息 59 3.2.2 设置调试信息级别 60 3.2.3 为特定节点配置调试信息级别 61 3.2.4 信息命名 62 3.2.5 按条件显示信息与过滤信息 62 3.2.6 显示信息的方式——单次、可调、组合 63 3.2.7 使用rqt_console和rqt_logger_level在运行时修改调试级别 63 3.3 检测系统状态 66 3.3.1 检测节点、主题、服务和参数 67 3.3.2 使用rqt_graph在线检测节点状态图 70 3.4 设置动态参数 71 3.5 当出现异常状况时使用 roswtf 72 3.6 可视化节点诊断 74 3.7 绘制标量数据图 75 3.8 图像可视化 77 3.9 3D可视化 79 3.9.1 使用rqt_rviz在3D世界中实现数据可视化 79 3.9.2 主题与坐标系的关系 82 3.9.3 可视化坐标变换 82 3.10 保存与回放数据 83 3.10.1 什么是消息记录包文件 84 3.10.2 使用rosbag在消息记录包中记录数据 84 3.10.3 回放消息记录包文件 85 3.10.4 检查消息记录包文件的主题和消息 86 3.11 应用rqt与rqt_gui插件 88 3.12 本章小结 88 第4章 在ROS下使用传感器和执行器 90 4.1 使用游戏杆或游戏手柄 90 4.1.1 joy_node如何发送游戏杆动作消息 91 4.1.2 使用游戏杆数据在turtlesim中移动海龟 92 4.2 使用激光雷达——Hokuyo URG-04lx 95 4.2.1 了解激光雷达如何在ROS中发送数据 96 4.2.2 访问和修改激光雷达数据 98 4.3 使用Kinect传感器查看3D环境中的对象 100 4.3.1 如何发送和查看Kinect数据 101 4.3.2 创建使用Kinect的示例 102 4.4 使用伺服电动机——Dynamixel 104 4.5 使用Arduino添加更多的传感器和 执行器 107 4.6 在Arduino上使用超声波传感器 111 4.7 距离传感器如何发送消息 113 4.7.1 创建使用超声波的示例 113 4.7.2 Xsens如何在ROS中发送数据 116 4.7.3 创建使用Xsens的示例 116 4.8 使用10自由度低成本惯性测量模组IMU 118 4.8.1 下载加速度传感器库 119 4.8.2 Arduino Nano和10自由度传感器编程 120 4.8.3 创建ROS节点以使用10自由度传感器数据 121 4.9 GPS的使用 123 4.9.1 GPS如何发送信息 125 4.9.2 创建一个使用GPS的工程实例 126 4.10 本章小结 127 第5章 计算机视觉 128 5.1 连接和运行摄像头 129 5.1.1 FireWire IEEE1394摄像头 129 5.1.2 USB摄像头 133 5.2 使用OpenCV制作USB摄像头 驱动程序 134 5.2.1 通过cv_bridge使用OpenCV处理ROS图像 139 5.2.2 使用image transport发布图像 139 5.2.3 在ROS中使用OpenCV 140 5.2.4 显示摄像头输入的图像 140 5.3 标定摄像头 141 5.4 ROS图像管道 148 5.5 计算机视觉任务中有用的ROS功能包 152 5.6 使用viso2实现视觉里程计 153 5.6.1 摄像头位姿标定 154 5.6.2 运行viso2在线演示 157 5.6.3 使用低成本双目摄像头运行viso2 159 5.7 使用RGBD深度摄像头实现视觉里程计 160 5.7.1 安装fovis 160 5.7.2 用Kinect RGBD深度摄像头运行fovis 160 5.8 计算两幅图像的单应性 161 5.9 本章小结 162 第6章 点云 163 6.1 理解点云库 163 6.1.1 不同的点云类型 164 6.1.2 PCL中的算法 164 6.1.3 ROS的PCL接口 165 6.2 我的第一个PCL程序 166 6.2.1 创建点云 167 6.2.2 加载和保存点云到硬盘 170 6.2.3 可视化点云 173 6.2.4 滤波和缩减采样 176 6.2.5 配准与匹配 181 6.2.6 点云分区 184 6.3 分割 187 6.4 本章小结 191 第7章 3D建模与仿真 192 7.1 在ROS中自定义机器人的3D模型 192 7.2 创建第一个URDF文件 192 7.2.1 解释文件格式 194 7.2.2 在rviz里查看3D模型 195 7.2.3 加载网格到机器人模型 197 7.2.4 使机器人模型运动 198 7.2.5 物理属性和碰撞属性 198 7.3 xacro——一个更好的机器人建模方法 199 7.3.1 使用常量 199 7.3.2 使用数学方法 200 7.3.3 使用宏 200 7.3.4 使用代码移动机器人 201 7.3.5 使用SketchUp进行3D建模 204 7.4 在ROS中仿真 205 7.4.1 在Gazebo中使用URDF 3D模型 206 7.4.2 在Gazebo中添加传感器 208 7.4.3 在Gazebo中加载和使用地图 211 7.4.4 在Gazebo中移动机器人 213 7.5 本章小结 215 第8章 导航功能包集入门 216 8.1 ROS导航功能包集 216 8.2 创建变换 217 8.2.1 创建广播机构 218 8.2.2 创建侦听器 218 8.2.3 查看坐标变换树 221 8.3 发布传感器信息 221 8.4 发布里程数据信息 224 8.4.1 Gazebo如何获取里程数据 225 8.4.2 创建自定义里程数据 228 8.5 创建基础控制器 232 8.5.1 使用Gazebo创建里程数据 233 8.5.2 创建自己的基础控制器 235 8.6 使用ROS创建地图 237 8.6.1 使用map_server保存地图 238 8.6.2 使用map_server加载地图 239 8.7 本章小结 240 第9章 导航功能包集进阶 241 9.1 创建功能包 241 9.2 创建机器人配置 241 9.3 配置全局和局部代价地图 243 9.3.1 基本参数的配置 244 9.3.2 全局代价地图的配置 245 9.3.3 局部代价地图的配置 245 9.3.4 基本局部规划器配置 246 9.4 为导航功能包集创建启动文件 247 9.5 为导航功能包集设置rviz 248 9.5.1 2D位姿估计 248 9.5.2 2D导航目标 249 9.5.3 静态地图 249 9.5.4 粒子云 251 9.5.5 机器人占地空间 251 9.5.6 局部代价地图 252 9.5.7 全局代价地图 252 9.5.8 全局规划 254 9.5.9 局部规划 254 9.5.10 规划器规划 254 9.5.11 当前目标 255 9.6 自适应蒙特卡罗定位 256 9.7 使用rqt_reconfigure修改参数 258 9.8 机器人避障 259 9.9 发送目标 260 9.10 本章小结 262 第10章 使用MoveIt! 264 10.1 MoveIt!体系结构 264 10.1.1 运动规划 265 10.1.2 规划场景 267 10.1.3 运动学 268 10.1.4 碰撞检测 268 10.2 在MoveIt!中集成一个机械臂 268 10.2.1 工具箱里有什么 268 10.2.2 使用设置助手生成一个MoveIt!包 269 10.2.3 集成到rviz 273 10.2.4 集成到Gazebo或实际机器人的手臂 276 10.3 简单的运动规划 277 10.3.1 规划单个目标 278 10.3.2 规划一个随机目标 278 10.3.3 规划预定义的群组状态 280 10.3.4 显示目标的运动 280 10.4 考虑碰撞的运动规划 280 10.4.1 将对象添加到规划场景中 281 10.4.2 从规划的场景中删除对象 282 10.4.3 应用点云进行运动规划 283 10.5 抓取和放置任务 284 10.5.1 规划的场景 285 10.5.2 感知 288 10.5.3 抓取 288 10.5.4 抓取操作 290 10.5.5 放置操作 292 10.5.6 演示模式 295 10.5.7 在Gazebo中仿真 295 10.6 本章小结 296 |