第一部分 ROS基础 1
第1章 概述:ROS工具和节点 2
1.1 ROS基础概念 2
1.2编写ROS节点 5
1.2.1创建ROS程序包 5
1.2.2编写一个最小的ROS发布器 8
1.2.3编译ROS节点 11
1.2.4运行ROS节点 12
1.2.5检查运行中的最小发布器节点 13
1.2.6规划节点时间 15
1.2.7编写一个最小ROS订阅器 17
1.2.8编译和运行最小订阅器 19
1.2.9总结最小订阅器和发布器节点 21
1.3更多的ROS工具:catkin- simple、roslaunch、 rqt console和rosbag 21
1.3.1用catkin-simple简化CMakeLists.txt 21
1.3.2自动启动多个节点 23
1.3.3在ROS控制台观察输出 25
1.3.4使用rosbag记录并回放数据 26
1.4最小仿真器和控制器示例 28
1.5小结 32
第2章 消息、类和服务器 33
2.1定义自定义消息 33
2.1.1定义一条自定义消息 34
2.1.2定义一条变长的消息 38
2.2 ROS服务介绍 43
2.2.1服务消息 43
2.2.2 ROS服务节点 45
2.2.3与ROS服务手动交互 47
2.2.4 ROS服务客户端示例 48
2.2.5运行服务和客户端示例 50
2.3在ROS中使用C++类 51
2.4在ROS中创建库模块 56
2.5动作服务器和动作客户端介绍 61
2.5.1创建动作服务器包 62
2.5.2定义自定义动作服务器消息 62
2.5.3设计动作客户端 68
2.5.4运行示例代码 71
2.6参数服务器介绍 80
2.7小结 84
第二部分 ROS中的仿真和可视化 85
第3章ROS中的仿真 86
3.1简单的2维机器人仿真器 86
3.2动力学仿真建模 93
3.3统一的机器人描述格式 95
3.3.1运动学模型 95
3.3.2视觉模型 98
3.3.3动力学模型 99
3.3.4碰撞模型 102
3.4 Gazebo介绍 104
3.5最小关节控制器 112
3.6使用Gazebo插件进行关节伺服控制 118
3.7构建移动机器人模型 124
3.8仿真移动机器人模型 132
3.9组合机器人模型 136
3.10小结 139
第4章ROS中的坐标变换 141
4.1 ROS中的坐标变换简介 141
4.2转换侦听器 149
4.3使用Eigen库 156
4.4转换ROS数据类型 161
4.5小结 163
第5章ROS中的感知与可视化 164
5.1 rviz中的标记物和交互式标记物 168
5.1.1 rviz中的标记物 168
5.1.2三轴显示示例 172
5.1.3 rviz中的交互式标记物 176
5.2在rviz中显示传感器值 183
5.2.1仿真和显示激光雷达 183
5.2.2仿真和显示彩色相机数据 189
5.2.3仿真和显示深度相机数据 193
5.2.4 rviz中点的选择 198
5.3小结 201
第三部分 ROS中的感知处理 203
第6章在ROS中使用相机 204
6.1相机坐标系下的投影变换 204
6.2内置相机标定 206
6.3标定立体相机内参 211
6.4在ROS中使用OpenCV 217
6.4.1 OpenCV示例:寻找彩色像素 218
6.4.2 OpenCV示例:查找边缘 223
6.5小结 224
第7章 深度图像与点云信息 225
7.1从扫描LIDAR中获取深度信息 225
7.2立体相机的深度信息 230
7.3深度相机 236
7.4小结 237
第8章 点云数据处理 238
8.1简单的点云显示节点 238
8.2从磁盘加载和显示点云图像 244
8.3将发布的点云图像保存到磁盘 246
8.4用PCL方法解释点云图像 248
8.5物体查找器 257
8.6小结 261
第四部分 ROS中的移动机器人 263
第9章 移动机器人的运动控制 264
9.1生成期望状态 264
9.1.1从路径到轨迹 264
9.1.2轨迹构建器库 268
9.1.3开环控制 273
9.1.4发布期望状态 274
9.2机器人状态估计 282
9.2.1从Gazebo获得模型状态 282
9.2.2里程计 286
9.2.3混合里程计、GPS和惯性传感器 292
9.2.4混合里程计和LIDAR 297
9.3差分驱动转向算法 302
9.3.1机器人运动模型 303
9.3.2线性机器人的线性转向 304
9.3.3非线性机器人的线性转向 306
9.3.4非线性机器人的非线性转向 308
9.3.5仿真非线性转向算法 309
9.4相对于地图坐标系的转向 312
9.5小结 317
第10章 移动机器人导航 318
10.1构建地图 318
10.2路径规划 323
10.3 move base客户端示例 328
10.4修改导航栈 331
10.5 小结 335
第五部分 ROS中的机械臂 337
第11章 底层控制 338
11.1单自由度移动关节机器人模型 338
11.2位置控制器示例 339
11.3速度控制器示例 342
11.4力控制器示例 344
11.5机械臂的轨迹消息 349
11.6 7自由度臂的轨迹插值动作服务器 353
11.7小结 354
第12章 机械臂运动学 355
12.1正向运动学 356
12.2逆向运动学 360
12.3小结 365
第13章 手臂运动规划 366
13.1笛卡儿运动规划 367
13.2关节空间规划的动态规划 368
13.3笛卡儿运动动作服务器 372
13.4小结 376
第14章Baxter仿真器进行手臂控制 377
14.1运行Baxter仿真器 377
14.2 Baxter关节和主题 379
14.3 Baxter夹具 382
14.4头盘控制 385
14.5指挥Baxter关节 387
14.6使用ROS关节轨迹控制器 390
14.7关节空间记录和回放节点 391
14.8 Baxter运动学 397
14.9 Baxter笛卡儿运动 399
14.10小结 404
第15章object-grabber包 405
15.1 object-grabber代码组织 405
15.2对象操作查询服务 407
15.3通用夹具服务 410
15.4 object-grabber动作服务器 412
15.5 object-grabber动作客户端示例 415
15.6小结 425
第六部分 系统集成与高级控制 427
第16章 基于感知的操作 428
16.1外部相机标定 428
16.2综合感知和操作 431
16.3小结 440
第17章 移动操作 441
17.1移动机械手模型 441
17.2移动操作 442
17.3小结 446
第18章 总结 447
参考文献 449