ROS机器人开发实践
ROS机器人开发实践
1 初识ROS
1.1 ROS是什么
1.1.1 ROS的起源
1.1.2 ROS的设计目标
1.1.3 ROS的特点
1.2 如何安装ROS
1.2.1 操作系统与ROS版本的选择
1.2.2 配置系统软件源
1.2.3 添加ROS软件源
1.2.4 添加密钥
1.2.5 安装ROS
1.2.6 初始化rosdep
1.2.7 设置环境变量
1.2.8 完成安装
1.3 本书源码下载
1.4 本章小结
2 ROS架构
2.1 ROS架构设计
2.2 计算图
2.2.1 节点
2.2.2 消息
2.2.3 话题
2.2.4 服务
2.2.5 节点管理器
2.3 文件系统
2.3.1 功能包
2.3.2 元功能包
2.4 开源社区
2.5 ROS的通信机制
2.5.1 话题通信机制
2.5.2 服务通信机制
2.5.3 参数管理机制
2.6 话题与服务的区别
2.7 本章小结
3 ROS基础
3.1 第一个ROS例程——小乌龟仿真
3.1.1 turtlesim功能包
3.1.2 控制乌龟运动
3.2 创建工作空间和功能包
3.2.1 什么是工作空间
3.2.2 创建工作空间
3.2.3 创建功能包
3.3 工作空间的覆盖
3.3.1 ROS中工作空间的覆盖
3.3.2 工作空间覆盖示例
3.4 搭建Eclipse开发环境
3.4.1 安装Eclipse
3.4.2 创建Eclipse工程文件
3.4.3 将工程导入Eclipse
3.4.4 设置头文件路径
3.4.5 运行/调试程序
3.5 RoboWare简介
3.5.1 RoboWare的特点
3.5.2 RoboWare的安装与使用
3.6 话题中的Publisher与Subscriber
3.6.1 乌龟例程中的Publisher与Subscriber
3.6.2 如何创建Publisher
3.6.3 如何创建Subscriber
3.6.4 编译功能包
3.6.5 运行Publisher与Subscriber
3.6.6 自定义话题消息
3.7 服务中的Server和Client
3.7.1 乌龟例程中的服务
3.7.2 如何自定义服务数据
3.7.3 如何创建Server
3.7.4 如何创建Client
3.7.5 编译功能包
3.7.6 运行Server和Client
3.8 ROS中的命名空间
3.8.1 有效的命名
3.8.2 命名解析
3.8.3 命名重映射
3.9 分布式多机通信
3.9.1 设置IP地址
3.9.2 设置ROS_MASTER_URI
3.9.3 多机通信测试
3.10 本章小结
4 ROS中的常用组件
4.1 launch启动文件
4.1.1 基本元素
4.1.2 参数设置
4.1.3 重映射机制
4.1.4 嵌套复用
4.2 TF坐标变换
4.2.1 TF功能包
4.2.2 TF工具
4.2.3 乌龟例程中的TF
4.2.4 创建TF广播器
4.2.5 创建TF监听器
4.2.6 实现乌龟跟随运动
4.3 Qt工具箱
4.3.1 日志输出工具(rqt_console)
4.3.2 计算图可视化工具(rqt_graph)
4.3.3 数据绘图工具(rqt_plot)
4.3.4 参数动态配置工具(rqt_reconfigure)
4.4 rviz三维可视化平台
4.4.1 安装并运行rviz
4.4.2 数据可视化
4.4.3 插件扩展机制
4.5 Gazebo仿真环境
4.5.1 Gazebo的特点
4.5.2 安装并运行Gazebo
4.5.3 构建仿真环境
4.6 rosbag数据记录与回放
4.6.1 记录数据
4.6.2 回放数据
4.7 本章小结
5 机器人平台搭建
5.1 机器人的定义
5.2 机器人的组成
5.2.1 执行机构
5.2.2 驱动系统
5.2.3 传感系统
5.2.4 控制系统
5.3 机器人系统搭建
5.3.1 MRobot
5.3.2 执行机构的实现
5.3.3 驱动系统的实现
5.3.4 内部传感系统的实现
5.4 基于Raspberry Pi的控制系统实现
5.4.1 硬件平台Raspberry Pi
5.4.2 安装Ubuntu 16.04
5.4.3 安装ROS
5.4.4 控制系统与MRobot通信
5.4.5 PC端控制MRobot
5.5 为机器人装配摄像头
5.5.1 usb_cam功能包
5.5.2 PC端驱动摄像头
5.5.3 Raspberry Pi驱动摄像头
5.6 为机器人装配Kinect
5.6.1 freenect_camera功能包
5.6.2 PC端驱动Kinect
5.6.3 Raspberry Pi驱动Kinect
5.6.4 Kinect电源改造
5.7 为机器人装配激光雷达
5.7.1 rplidar功能包
5.7.2 PC端驱动rplidar
5.7.3 Raspberry Pi驱动rplidar
5.8 本章小结
6 机器人建模与仿真
6.1 统一机器人描述格式——URDF
6.1.1 标签
6.1.2 标签
6.1.3 标签
6.1.4 标签
6.2 创建机器人URDF模型
6.2.1 创建机器人描述功能包
6.2.2 创建URDF模型
6.2.3 URDF模型解析
6.2.4 在rviz中显示模型
6.3 改进URDF模型
6.3.1 添加物理和碰撞属性
6.3.2 使用xacro优化URDF
6.3.3 xacro文件引用
6.3.4 显示优化后的模型
6.4 添加传感器模型
6.4.1 添加摄像头
6.4.2 添加Kinect
6.4.3 添加激光雷达
6.5 基于ArbotiX和rviz的仿真器
6.5.1 安装ArbotiX
6.5.2 配置ArbotiX控制器
6.5.3 运行仿真环境
6.6 ros_control
6.6.1 ros_control框架
6.6.2 控制器
6.6.3 硬件接口
6.6.4 传动系统
6.6.5 关节约束
6.6.6 控制器管理器
6.7 Gazebo仿真
6.7.1 机器人模型添加Gazebo属性
6.7.2 在Gazebo中显示机器人模型
6.7.3 控制机器人在Gazebo中运动
6.7.4 摄像头仿真
6.7.5 Kinect仿真
6.7.6 激光雷达仿真
6.8 本章小结
7 机器视觉
7.1 ROS中的图像数据
7.1.1 二维图像数据
7.1.2 三维点云数据
7.2 摄像头标定
7.2.1 camera_calibration功能包
7.2.2 启动标定程序
7.2.3 标定摄像头
7.2.4 标定Kinect
7.2.5 加载标定参数的配置文件
7.3 OpenCV库
7.3.1 安装OpenCV
7.3.2 在ROS中使用OpenCV
7.4 人脸识别
7.4.1 应用效果
7.4.2 源码实现
7.5 物体跟踪
7.5.1 应用效果
7.5.2 源码实现
7.6 二维码识别
7.6.1 ar_track_alvar功能包
7.6.2 创建二维码
7.6.3 摄像头识别二维码
7.6.4 Kinect识别二维码
7.7 物体识别
7.7.1 ORK功能包
7.7.2 建立物体模型库
7.7.3 模型训练
7.7.4 三维物体识别
7.8 本章小结
8 机器语音
8.1 让机器人听懂你说的话
8.1.1 pocketsphinx功能包
8.1.2 语音识别测试
8.1.3 创建语音库
8.1.4 创建launch文件
8.1.5 语音指令识别
8.1.6 中文语音识别
8.2 通过语音控制机器人
8.2.1 编写语音控制节点
8.2.2 语音控制小乌龟运动
8.3 让机器人说话
8.3.1 sound_play功能包
8.3.2 语音播放测试
8.4 人工智能标记语言
8.4.1 AIML中的标签
8.4.2 Python中的AIML解析器
8.5 与机器人对话
8.5.1 语音识别
8.5.2 智能匹配应答
8.5.3 文本转语音
8.5.4 智能对话
8.6 让机器人听懂中文
8.6.1 下载科大讯飞SDK
8.6.2 测试SDK
8.6.3 语音听写
8.6.4 语音合成
8.6.5 智能语音助手
8.7 本章小结
9 机器人SLAM与自主导航
9.1 理论基础
9.2 准备工作
9.2.1 传感器信息
9.2.2 仿真平台
9.2.3 真实机器人
9.3 gmapping
9.3.1 gmapping功能包
9.3.2 gmapping节点的配置与运行
9.3.3 在Gazebo中仿真SLAM
9.3.4 真实机器人SLAM
9.4 hector-slam
9.4.1 hector-slam功能包
9.4.2 hector_mapping节点的配置与运行
9.4.3 在Gazebo中仿真SLAM
9.4.4 真实机器人SLAM
9.5 cartographer
9.5.1 cartographer功能包
9.5.2 官方demo测试
9.5.3 cartographer节点的配置与运行
9.5.4 在Gazebo中仿真SLAM
9.5.5 真实机器人SLAM
9.6 rgbdslam
9.6.1 rgbdslam功能包
9.6.2 使用数据包实现SLAM
9.6.3 使用Kinect实现SLAM
9.7 ORB_SLAM
9.7.1 ORB_SLAM功能包
9.7.2 使用数据包实现单目SLAM
9.7.3 使用摄像头实现单目SLAM
9.8 导航功能包
9.8.1 导航框架
9.8.2 move_base功能包
9.8.3 amcl功能包
9.8.4 代价地图的配置
9.8.5 本地规划器配置
9.9 在rviz中仿真机器人导航
9.9.1 创建launch文件
9.9.2 开始导航
9.9.3 自动导航
9.10 在Gazebo中仿真机器人导航
9.10.1 创建launch文件
9.10.2 运行效果
9.10.3 实时避障
9.11 真实机器人导航
9.11.1 创建launch文件
9.11.2 开始导航
9.12 自主探索SLAM
9.12.1 创建launch文件
9.12.2 通过rviz设置探索目标
9.12.3 实现自主探索SLAM
9.13 本章小结
10 MoveIt!机械臂控制
10.1 MoveIt!系统架构
10.1.1 运动组(move_group)
10.1.2 运动规划器(motion_planner)
10.1.3 规划场景
10.1.4 运动学求解器
10.1.5 碰撞检测
10.2 如何使用MoveIt!
10.3 创建机械臂模型
10.3.1 声明模型中的宏
10.3.2 创建六轴机械臂模型
10.3.3 加入Gazebo属性
10.3.4 显示机器人模型
10.4 使用Setup Assistant配置机械臂
10.4.1 加载机器人URDF模型
10.4.2 配置自碰撞矩阵
10.4.3 配置虚拟关节
10.4.4 创建规划组
10.4.5 定义机器人位姿
10.4.6 配置终端夹爪
10.4.7 配置无用关节
10.4.8 设置作者信息
10.4.9 生成配置文件
10.5 启动MoveIt!
10.5.1 拖动规划
10.5.2 随机目标规划
10.5.3 初始位姿更新
10.5.4 碰撞检测
10.6 配置文件
10.6.1 SRDF文件
10.6.2 fake_controllers.yaml
10.6.3 joint_limits.yaml
10.6.4 kinematics.yaml
10.6.5 ompl_planning.yaml
10.7 添加ArbotiX关节控制器
10.7.1 添加配置文件
10.7.2 运行ArbotiX节点
10.7.3 测试例程
10.7.4 运行效果
10.8 配置MoveIt!关节控制器
10.8.1 添加配置文件
10.8.2 启动插件
10.9 MoveIt!编程学习
10.9.1 关节空间规划
10.9.2 工作空间规划
10.9.3 笛卡儿运动规划
10.9.4 避障规划
10.10 pick and place示例
10.10.1 应用效果
10.10.2 创建抓取的目标物体
10.10.3 设置目标物体的放置位置
10.10.4 生成抓取姿态
10.10.5 pick
10.10.6 place
10.11 Gazebo中的机械臂仿真
10.11.1 创建配置文件
10.11.2 创建launch文件
10.11.3 开始仿真
10.12 使用MoveIt!控制Gazebo中的机械臂
10.12.1 关节轨迹控制器
10.12.2 MoveIt!控制器
10.12.3 关节状态控制器
10.12.4 运行效果
10.13 ROS-I
10.13.1 ROS-I的目标
10.13.2 ROS-I的安装
10.13.3 ROS-I的架构
10.14 本章小结
11 ROS与机器学习
11.1 AlphaGo的大脑——TensorFlow
11.2 TensorFlow基础
11.2.1 安装TensorFlow
11.2.2 核心概念
11.2.3 第一个TensorFlow程序
11.3 线性回归
11.3.1 理论基础
11.3.2 创建数据集
11.3.3 使用TensorFlow解决线性回归问题
11.4 手写数字识别
11.4.1 理论基础
11.4.2 TensorFlow中的MNIST例程
11.4.3 基于ROS实现MNIST
11.5 物体识别
11.5.1 安装TensorFlow Object Detection API
11.5.2 基于ROS实现动态物体识别
11.6 本章小结
12 ROS进阶功能
12.1 action
12.1.1 什么是action
12.1.2 action的工作机制
12.1.3 action的定义
12.1.4 实现action通信
12.2 plugin
12.2.1 工作原理
12.2.2 如何实现一个插件
12.2.3 创建基类
12.2.4 创建plugin类
12.2.5 注册插件
12.2.6 编译插件的动态链接库
12.2.7 将插件加入ROS
12.2.8 调用插件
12.3 rviz plugin
12.3.1 速度控制插件
12.3.2 创建功能包
12.3.3 代码实现
12.3.4 编译插件
12.3.5 运行插件
12.4 动态配置参数
12.4.1 创建配置文件
12.4.2 创建服务器节点
12.4.3 参数动态配置
12.5 SMACH
12.5.1 什么是SMACH
12.5.2 状态机“跑”起来
12.5.3 状态机实现剖析
12.5.4 状态间的数据传递
12.5.5 状态机嵌套
12.5.6 多状态并行
12.6 ROS-MATLAB
12.6.1 ROS-MATLAB是什么
12.6.2 ROS-MATLAB可以做什么
12.6.3 连接MATLAB和ROS
12.6.4 MATLAB可视化编程
12.6.5 创建可视化界面
12.6.6 编辑控件的回调函数
12.6.7 运行效果
12.7 Web GUI
12.7.1 ROS中的Web功能包
12.7.2 创建Web应用
12.7.3 使用Web浏览器控制机器人
12.8 本章小结
13 ROS机器人实例
13.1 PR2
13.1.1 PR2功能包
13.1.2 Gazebo中的PR2
13.1.3 使用PR2实现SLAM
13.1.4 PR2机械臂的使用
13.2 TurtleBot
13.2.1 TurtleBot功能包
13.2.2 Gazebo中的TurtleBot
13.2.3 使用TurtleBot实现导航功能
13.2.4 尝试TurtleBot 3
13.3 Universal Robots
13.3.1 Universal Robots功能包
13.3.2 Gazebo中的UR机器人
13.3.3 使用MoveIt!控制UR机器人
13.4 catvehicle
13.4.1 构建无人驾驶仿真系统
13.4.2 运行无人驾驶仿真器
13.4.3 控制无人驾驶汽车
13.4.4 实现无人驾驶汽车的SLAM功能
13.5 HRMRP
13.5.1 总体架构设计
13.5.2 SLAM与导航
13.5.3 多机器人扩展
13.6 Kungfu Arm
13.6.1 总体架构设计
13.6.2 具体层次功能
13.6.3 功夫茶应用展示
13.7 本章小结
14 ROS 2
14.1 ROS 1存在的问题
14.2 什么是ROS 2
14.2.1 ROS 2的设计目标
14.2.2 ROS 2的系统架构
14.2.3 ROS 2的关键中间件——DDS
14.2.4 ROS 2的通信模型
14.2.5 ROS 2的编译系统
14.3 在Ubuntu上安装ROS 2
14.3.1 安装步骤
14.3.2 运行talker和listener例程
14.4 在Windows上安装ROS 2
14.4.1 安装Chocolatey
14.4.2 安装Python
14.4.3 安装OpenSSL
14.4.4 安装Visual Studio Community 2015
14.4.5 配置DDS
14.4.6 安装OpenCV
14.4.7 安装依赖包
14.4.8 下载并配置ROS 2
14.4.9 运行talker和listener例程
14.5 ROS 2中的话题通信
14.5.1 创建工作目录和功能包
14.5.2 创建talker
14.5.3 创建listener
14.5.4 修改CMakeLists.txt
14.5.5 编译并运行节点
14.6 自定义话题和服务
14.6.1 自定义话题
14.6.2 自定义服务
14.6.3 修改CMakeLists.txt和package.xml
14.6.4 编译生成头文件
14.7 ROS 2中的服务通信
14.7.1 创建Server
14.7.2 创建Client
14.7.3 修改CMakeLists.txt
14.7.4 编译并运行节点
14.8 ROS 2与ROS 1的集成
14.8.1 ros1_bridge功能包
14.8.2 话题通信
14.8.3 服务通信
14.9 本章小结
思维导图
防止博客图床图片失效,防止图片源站外链:
http://www.processon.com/chart_image/5e5b2869e4b0d4dc8776bd09.png)
思维导图在线编辑链接: