本书包含了大量示例,帮助你开发机器人程序,并为你提供使用开源ROS库和工具的完整解决方案。本书主要内容包括:ROS的概念、命令行工具、可视化GUI以及如何调试ROS,如何将机器人传感器和执行器连接到ROS,如何从摄像头和3D传感器获取数据并分析数据,如何在机器人/传感器和环境仿真中使用Gazebo,如何设计机器人,如何使用OpenCV3.0为机器人添加视觉功能,如何使用新版本的PCL向机器人添加3D感知功能。本书适合各个阶层的机器人开发人员和机器人爱好者阅读。
封面图
目录
- 推荐序一
- 推荐序二
- 译者序
- 前言
- 作者简介
- 审校者简介
- 第1章ROS入门1
- 1.1 PC安装教程3
- 1.2 使用软件库安装ROS Kinetic3
- 1.2.1配置Ubuntu软件库4
- 1.2.2添加软件库到sources.list文件中4
- 1.2.3设置密钥5
- 1.2.4安装ROS5
- 1.2.5初始化rosdep6
- 1.2.6配置环境6
- 1.2.7安装rosinstall7
- 1.3 如何安装VirtualBox和Ubuntu8
- 1.3.1下载VirtualBox8
- 1.3.2创建虚拟机9
- 1.4 通过Docker镜像使用ROS11
- 1.4.1安装Docker11
- 1.4.2获取和使用ROS Docker镜像和容器11
- 1.5 在BeagleBone Black上安装ROS Kinetic12
- 1.5.1准备工作13
- 1.5.2配置主机和source.list文件16
- 1.5.3设置密钥16
- 1.5.4安装ROS功能包17
- 1.5.5为ROS初始化rosdep17
- 1.5.6在BeagleBone Black中配置环境18
- 1.5.7在BeagleBone Black中安装rosinstall18
- 1.5.8BeagleBone 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节点与nodelet27
- 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.1ROS文件系统导览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.13launch文件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 当出现异常状况时使用roswtf75
- 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.1Gazebo如何获取里程数据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 为导航功能包集设置rviz151
- 6.5.12D位姿估计152
- 6.5.22D导航目标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_reconf igure修改参数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.1joy_node如何发送游戏杆动作消息201
- 8.1.2使用游戏杆数据移动机器人模型202
- 8.2 使用Arduino添加更多的传感器和执行器206
- 8.2.1创建使用Arduino的示例程序207
- 8.2.2由ROS和Arduino控制的机器人平台210
- 8.3 使用9自由度低成本IMU217
- 8.3.1安装Razor IMU ROS库219
- 8.3.2Razor如何在ROS中发送数据221
- 8.3.3创建一个ROS节点以使用机器人中的9DoF传感器数据222
- 8.3.4使用机器人定位来融合传感器数据223
- 8.4 使用IMU——Xsens MTi225
- 8.5 GPS的使用226
- 8.5.1GPS如何发送信息228
- 8.5.2创建一个使用GPS的工程示例229
- 8.6 使用激光测距仪——Hokuyo URG-04lx230
- 8.6.1了解激光如何在ROS中发送数据231
- 8.6.2访问和修改激光数据232
- 8.7 创建launch文件234
- 8.8 使用Kinect传感器查看3D环境中的对象235
- 8.8.1Kinect如何发送和查看传感器数据236
- 8.8.2创建使用Kinect的示例238
- 8.9 使用伺服电动机——Dynamixel239
- 8.9.1Dynamixel如何发送和接收运动命令241
- 8.9.2创建和使用伺服电动机示例241
- 8.10 本章小结243
- 第9章计算机视觉244
- 9.1 ROS摄像头驱动程序支持245
- 9.1.1FireWire IEEE1394摄像头245
- 9.1.2USB摄像头249
- 9.1.3使用OpenCV制作USB摄像头驱动程序250
- 9.2 ROS图像255
- 9.3 ROS中的OpenCV库256
- 9.3.1安装OpenCV 3.0256
- 9.3.2在ROS中使用OpenCV256
- 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使用低成本双目摄像头运行viso2276
- 9.8 使用RGBD深度摄像头实现视觉里程计276
- 9.8.1安装fovis276
- 9.8.2用Kinect RGBD深度摄像头运行fovis277
- 9.9 计算两幅图像的单应性278
- 9.10 本章小结279
- 第10章点云280
- 10.1 理解点云库280
- 10.1.1不同的点云类型281
- 10.1.2PCL中的算法281
- 10.1.3ROS的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