第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中使用URDF3D模型 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章 使用Movelt! 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-041x 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