目 录
预 备 篇
第1章 绪论 1
1.1 机器人的概念及特点 1
1.1.1 机器人的由来 1
1.1.2 机器人的定义 2
1.1.3 机器人的主要特点 3
1.2 机器人的组成与分类 3
1.2.1 机器人的组成 3
1.2.2 机器人的分类 4
1.3 智能机器人 10
1.3.1 智能机器人的定义 10
1.3.2 脑科学与智能机器人 11
1.3.3 人工智能在机器人中的应用 11
第2章 Linux基础 14
2.1 Linux简介 14
2.1.1 Linux的发行版 14
2.1.2 Linux应用领域 15
2.2 Linux系统目录结构 15
2.3 Linux用户及用户组管理 18
2.4 Linux文件属性管理 20
2.4.1 查看文件属性 20
2.4.2 文件属性修改 21
2.4.3 文件权限修改 22
2.5 Linux目录管理 24
2.5.1 常用命令 24
2.5.2 文件内容查看指令 27
2.5.3 重定向与追加 28
2.6 Linux包操作 29
第3章 Python基础 31
3.1 Python简介 31
3.1.1 Python发行版 31
3.1.2 Python特点 32
3.2 Python基础介绍 32
3.2.1 基础导引 32
3.2.2 变量 33
3.2.3 数据类型 34
3.2.4 条件语句 35
3.2.5 循环语句 36
3.2.6 切片操作 37
3.3 数据常用操作方法 38
3.3.1 字符串常见操作 38
3.3.2 列表常见操作 43
3.3.3 字典常见操作 46
3.3.4 集合常见操作 51
3.3.5 元组常见操作 52
3.3.6 逻辑运算 54
3.4 函数 54
3.4.1 函数简介 54
3.4.2 参数(argument-list) 55
3.4.3 局部变量与全局变量 57
3.4.4 返回值 58
3.4.5 递归函数 59
3.4.6 匿名函数 59
3.4.7 列表推导式 59
3.4.8 字典推导式 60
3.4.9 常用内置函数 61
3.5 面向对象 64
3.5.1 面向过程与面向对象 64
3.5.2 类与实例 65
3.5.3 类属性与实例属性 65
3.5.4 类方法与静态方法 68
3.5.5 魔法方法 69
3.5.6 面向对象的三大特性 71
3.6 常用术语介绍 74
基 础 篇
第4章 ROS概述 76
4.1 初识ROS 76
4.2 PC安装ROS 79
4.3 Raspberry 系统下安装ROS的脚本 83
第5章 ROS基础 84
5.1 文件系统级 84
5.2 计算图级 86
5.3 开源社区级 87
5.4 文件系统工具 87
5.4.1 使用rospack 87
5.4.2 使用roscd 88
5.4.3 使用rosls 89
5.4.4 使用rosed 89
5.4.5 使用roscp 89
5.5 创建工作空间 89
5.5.1 创建工作空间简介 90
5.5.2 工作空间目录解析 90
5.6 功能包的创建与编译 91
5.6.1 catkin功能包的组成 91
5.6.2 创建功能包 92
5.6.3 功能包依赖关系 92
5.6.4 功能包命名规范 93
5.6.5 删除功能包 94
5.6.6 编译功能包 94
5.7 ROS节点 96
5.7.1 启动ROS 97
5.7.2 使用rosnode 97
5.8 ROS主题与节点交互 98
5.8.1 控制turtle移动 98
5.8.2 查看节点信息 99
5.8.3 查看主题信息 100
5.8.4 使用 rqt_graph 102
5.9 ROS服务和参数 103
5.10 创建ROS消息和ROS服务 106
5.10.1 消息(msg)和服务(srv)介绍 107
5.10.2 使用 msg 107
5.10.3 使用 srv 109
5.11 编写发布器与订阅器 110
5.11.1 定义msg消息 110
5.11.2 编写发布器 112
5.11.3 编写订阅器 114
5.11.4 启动rqt查看节点信息 115
5.12 编写服务端和客户端 116
5.12.1 定义srv服务 116
5.12.2 编写服务端 118
5.12.3 编写客户端 120
5.13 编写launch文件 122
5.13.1 roslaunch使用方法 122
5.13.2 编写launch文件介绍 125
实 战 篇
第6章 ARTROBOT机器人移动平台搭建 127
6.1 三轴全向移动机器人介绍 127
6.1.1 全向轮结构 127
6.1.2 底盘结构设计 127
6.1.3 直流电机的选择 129
6.1.4 电机驱动板 129
6.1.5 ROS的主控板 130
6.2 运动学建模和分析 130
6.2.1 机器人坐标系系统分析 130
6.2.2 运动学模型分析 132
6.2.3 逆运动学模型方程推导 133
6.2.4 正运动学模型方程推导 135
6.2.5 航迹推算 136
6.3 ros_arduino_bridge功能包集 136
6.3.1 ros_arduino_bridge功能包集简介 137
6.3.2 安装ros_arduino_bridge功能包集 139
6.3.3 安装python-serial功能包 139
6.3.4 串口的操作权限 139
6.4 下位机Arduino代码详解 140
6.4.1 ros_arduino_bridge功能简介 140
6.4.2 创建ros_arduino_bridge项目 141
6.4.3 mobileBaseArduinoCode.ino 141
6.4.4 commands.h 147
6.4.5 encoder_driver.h 147
6.4.6 encoder_driver.ino 148
6.4.7 motor_driver.h 151
6.4.8 motor_driver.ino 151
6.4.9 omniWheel_controller.h 154
6.4.10 sensors.h 157
6.5 上位机ros_arduino_python代码 158
6.5.1 ros_arduino_python功能简介 158
6.5.2 arduino.launch 159
6.5.3 my_arduino_params.yaml 159
6.5.4 arduino_node.py 160
6.5.5 base_controller.py 161
第7章 机器人传感器配置与使用 167
7.1 惯性测量单元校准和调试 167
7.1.1 惯性测量单元相关介绍 167
7.1.2 IMU功能包简介 167
7.1.3 在ROS环境下复制并编译IMU源码 168
7.1.4 IMU初始标定 168
7.1.5 启动IMU测试 168
7.1.6 单独运行IMU 169
7.2 雷达调试 170
7.2.1 雷达选型 170
7.2.2 下载编译ROS下驱动源码 171
7.2.3 生成挂载点 172
7.2.4 启动雷达测试 174
7.2.5 读取雷达数据 174
7.3 udev串口配置 177
7.3.1 udev简介 177
7.3.2 udev规则 177
7.3.3 udev内容 179
7.3.4 udev生效 183
7.4 ROS中TF变换 184
7.4.1 TF功能包 185
7.4.2 TF广播与监听 187
7.4.3 TF常用工具 193
第8章 SLAM及导航 198
8.1 SLAM简介 198
8.2 常见激光SLAM算法简介 199
8.3 应用gmapping构建机器人约束条件 200
8.4 slam_gmapping功能包 201
8.5 应用gmapping构建二维地图 201
8.6 SLAM构建地图过程分析 205
8.6.1 地图分析 205
8.6.2 SLAM执行过程 206
8.6.3 gmapping参数设定 207
8.7 ROS机器人导航简介 209
8.8 机器人路径规划算法简介 212
8.9 应用导航功能包实现自主路径规划 214
8.9.1 路径规划执行过程 214
8.9.2 导航功能包参数设定 215
第9章 机器人功能扩展实例 218
9.1 机器人视觉跟随功能 218
9.1.1 ROS下摄像头的标定 218
9.1.2 ROS跟随功能实现 226
9.1.3 launch启动及效果演示 236
9.2 机器人+物联网功能 239
9.2.1 物联网模块介绍 240
9.2.2 物联网模块硬件接线 240
9.2.3 物联网模块协议 244
9.2.4 机器人+物联网功能实现 244
9.2.5 launch启动及效果演示 246
第10章 ROS2简介 249
10.1 从ROS1到ROS2 249
10.1.1 ROS1的局限性 250
10.1.2 ROS2对ROS1的改进 250
10.2 ROS2系统架构 251
10.3 ROS2安装 252
10.3.1 ROS2在Ubuntu上安装 252
10.3.2 Ubuntu ROS2测试 253
10.4 ROS2通信 253
10.4.1 节点 254
10.4.2 主题 254
10.4.3 服务 256
10.4.4 参数 259
10.4.5 基本操作 261
10.5 ROS2编程 262
10.5.1 工作空间 262
10.5.2 ROS2功能包 263
10.5.3 发布者和订阅者 264
10.5.4 编写简单的服务和客户端节点 270
10.5.5 创建ROS2消息和服务类型 275
10.6 ROS1和ROS2之间的桥接通信 283
10.6.1 ros1_bridge功能包 283
10.6.2 ros1_bridge之主题通信 283
10.6.3 ros1_bridge之服务通信 285
第11章 交叉编译器 286
11.1 GNU toolchain介绍 286
11.1.1 gcc和g++ 286
11.1.2 as、ld和ar 287
11.2 从源码制作gcc编译器 288
11.3 交叉编译器的制作 289
展开