无论是业余爱好者还是专业的机器人开发人员,在开始进行机器人系统及程序设计时,首先要面对的问题都是最基本的驱动机器人的轮子的设计。ROS通过软件代码复用集成了众多已经开发完成的功能组件。本书就是专门帮助读者从对ROS一无所知到能够通过ROS系统完成小型机器人系统的开发和编程工作的。
本书提供了各种实际的示例代码供读者学习和理解ROS的软件框架。你可以在仿真环境中自行构建机器人相应的功能程序。本书第2版在第1版的基础上增加了首次与ROS Hydro一起工作,如何创建、可视化和处理不同传感器的点云信息,如何控制和利用多关节机械臂,并提供简单易懂的实用教程编写自己的机器人。
封面图
目录
- 推荐序一
- 推荐序二
- 译者序
- 前言
- 作者简介
- 审校者简介
- 第1章ROS Hydro系统入门1
- 1.1PC安装教程3
- 1.2使用软件库安装ROS Hydro3
- 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创建虚拟机8
- 1.4在BeagleBone Black上安装ROS Hydro11
- 1.4.1准备工作12
- 1.4.2配置主机和source.list文件13
- 1.4.3设置密钥14
- 1.4.4安装ROS功能包14
- 1.4.5初始化rosdep15
- 1.4.6在BeagleBone Black中配置环境15
- 1.4.7在BeagleBone Black中安装rosinstall15
- 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节点与nodelet23
- 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.4ROS系统试用练习28
- 2.4.1ROS文件系统导览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.2ROS节点启动时调用gdb调试器58
- 3.1.3ROS节点启动时调用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当出现异常状况时使用roswtf72
- 3.6可视化节点诊断74
- 3.7绘制标量数据图75
- 3.8图像可视化77
- 3.93D可视化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.1joy_node如何发送游戏杆动作消息91
- 4.1.2使用游戏杆数据在turtlesim中移动海龟92
- 4.2使用激光雷达——Hokuyo URG-04lx95
- 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使用伺服电动机——Dynamixel104
- 4.5使用Arduino添加更多的传感器和
- 执行器107
- 4.6在Arduino上使用超声波传感器111
- 4.7距离传感器如何发送消息113
- 4.7.1创建使用超声波的示例113
- 4.7.2Xsens如何在ROS中发送数据116
- 4.7.3创建使用Xsens的示例116
- 4.8使用10自由度低成本惯性测量模组IMU118
- 4.8.1下载加速度传感器库119
- 4.8.2Arduino Nano和10自由度传感器编程120
- 4.8.3创建ROS节点以使用10自由度传感器数据121
- 4.9GPS的使用123
- 4.9.1GPS如何发送信息125
- 4.9.2创建一个使用GPS的工程实例126
- 4.10本章小结127
- 第5章计算机视觉128
- 5.1连接和运行摄像头129
- 5.1.1FireWire IEEE1394摄像头129
- 5.1.2USB摄像头133
- 5.2使用OpenCV制作USB摄像头驱动程序134
- 5.2.1通过cv_bridge使用OpenCV处理ROS图像139
- 5.2.2使用image transport发布图像139
- 5.2.3在ROS中使用OpenCV140
- 5.2.4显示摄像头输入的图像140
- 5.3标定摄像头141
- 5.4ROS图像管道148
- 5.5计算机视觉任务中有用的ROS功能包152
- 5.6使用viso2实现视觉里程计153
- 5.6.1摄像头位姿标定154
- 5.6.2运行viso2在线演示157
- 5.6.3使用低成本双目摄像头运行viso2159
- 5.7使用RGBD深度摄像头实现视觉里程计160
- 5.7.1安装fovis160
- 5.7.2用Kinect RGBD深度摄像头运行fovis160
- 5.8计算两幅图像的单应性161
- 5.9本章小结162
- 第6章点云163
- 6.1理解点云库163
- 6.1.1不同的点云类型164
- 6.1.2PCL中的算法164
- 6.1.3ROS的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.3xacro—— 一个更好的机器人建模方法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.1ROS导航功能包集216
- 8.2创建变换217
- 8.2.1创建广播机构218
- 8.2.2创建侦听器218
- 8.2.3查看坐标变换树221
- 8.3发布传感器信息221
- 8.4发布里程数据信息224
- 8.4.1Gazebo如何获取里程数据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为导航功能包集设置rviz248
- 9.5.12D位姿估计248
- 9.5.22D导航目标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.1MoveIt!体系结构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集成到rviz273
- 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