《ROS机器人开发实践》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:胡春旭编著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2018
  • ISBN:9787111598237
  • 页数:506 页
图书介绍:本书在介绍ROS总体框架和理论要点的基础上,讲解ROS的通信机制、常用组件和进阶功能;同时以实践为主,讲解机器视觉、机器听觉、SLAM与导航、机械臂控制、机器学习等多种ROS应用的主要原理和实现方法;并分析基于ROS的机器人系统设计方法和典型实例;最后论述ROS 2的框架特点和使用方法,剖析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 <link>标签 114

6.1.2 <joint>标签 115

6.1.3 <robot>标签 116

6.1.4 <gazebo>标签 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 Studio Community 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