第1章 地面无人系统与ROS简介 001 1.1 地面无人系统简介 001 1.1.1 智能机器人与地面无人系统 001 1.1.2 地面无人系统发展现状 002 1.1.3 地面无人系统的特点 003 1.1.4 地面无人系统的关键技术 003 1.1.5 地面无人系统发展研究课题 005 1.2 ROS简介 006 1.2.1 ROS和机器人 006 1.2.2 ROS的主要特点 007 1.2.3 ROS版本 008 1.2.4 ROS学习资源 010 第2章 ROS入门 011 2.1 ROS基本概念 011 2.1.1 ROS主要功能 011 2.1.2 ROS主要框架 013 2.2 ROS文件系统 014 2.2.1 catkin 编译系统 014 2.2.2 ROS工作空间 017 2.2.3 ROS功能包 018 2.2.4 launch 启动文件 022 2.2.5 launch 自启动 025 2.3 ROS通信机制 027 2.3.1 节点及节点管理器 027 2.3.2 消息 028 2.3.3 话题 029 2.3.4 服务 041 2.3.5 动作 047 2.3.6 参数服务器 052 2.3.7 pluginlib 057 2.3.8 nodelet 062 2.3.9 rosbridge 063 2.3.10 rosserial 070 第3章 ROS基础实践 075 3.1 Ubuntu 与ROS的安装 075 3.1.1 虚拟机安装准备 075 3.1.2 双系统安装准备 080 3.1.3 Ubuntu 安装 085 3.1.4 Ubuntu arm 版安装 087 3.1.5 ROSNoetic 安装 088 3.1.6 ROS测试 089 3.2 ROS常用工具 090 3.2.1 可视化工具 090 3.2.2 仿真工具 092 3.2.3 调试工具 094 3.3 ROS机器人3D 建模 096 3.3.1 统一机器人描述格式——URDF 096 3.3.2 建立URDF 模型 097 3.3.3 建立xacro 模型 104 3.4 虚拟环境下的仿真测试 106 3.4.1 Gazebo 仿真 106 3.4.2 ArbotiX 仿真 117 第4章 基于ROS的地面无人系统开发实践和进阶 120 4.1 地面无人系统常用传感器 120 4.1.1 常用激光雷达 120 4.1.2 IMU 122 4.1.3 相机(摄像头) 122 4.1.4 组合导航 123 4.2 navigation 导航 123 4.2.1 导航功能包 123 4.2.2 move_base 124 4.2.3 常用路径规划算法 125 4.2.4 A*全局路径规划算法及优化 128 4.3 gmapping 算法 131 4.3.1 gmapping 简介 131 4.3.2 gmapping 面向用户开放的接口 131 4.3.3 gmapping 节点的配置与运行 133 4.4 cartographer 算法 134 4.4.1 cartographer 简介 134 4.4.2 cartographer 面向用户开放的接口 135 4.4.3 cartographer 节点的配置与运行 136 4.4.4 gmapping 与cartographer 138 4.5 little_car 综合软件包 138 4.5.1 little_car 软件包通用操作 139 4.5.2 底盘 141 4.5.3 思岚激光雷达 155 4.5.4 摄像头(相机) 155 4.5.5 组合导航模块 157 4.5.6 navigation 166 4.5.7 cartographer 建图 170 4.6 其他开源完整的车辆模型 173 第5章 机器视觉在地面无人系统中的应用 174 5.1 OpenCV 和cv-bridge 简介 174 5.1.1 OpenCV 读取本地图片 174 5.1.2 OpenCV 读取摄像头视频 180 5.2 视觉SLAM 187 5.2.1 视觉里程计 187 5.2.2 非线性优化 188 5.2.3 回环检测 188 5.2.4 构建地图 188 5.3 障碍物预测 189 5.3.1 数学模型 189 5.3.2 碰撞预测及策略 190 5.4 二维码识别 191 5.4.1 识别算法简介 191 5.4.2 目标点二维码提取 191 5.4.3 使用无人车摄像头对二维码进行识别 194 5.5 非结构化道路识别 195 5.5.1 非结构化道路识别的意义 195 5.5.2 主流非结构化道路识别算法 196 5.5.3 DeeplabV3 分割算法 198 5.5.4 DeeplabV3 分割算法优化改进 198 第6章 地面无人系统的通信网络 203 6.1 计算机网络协议 203 6.1.1 OSI 7 层协议 203 6.1.2 TCP/IP 网络协议族 205 6.1.3 其他计算机网络协议 206 6.2 TCP/IP 网络分层模型与协议栈协议 207 6.2.1 TCP/IP 网络分层模型 207 6.2.2 TCP/IP 网络协议栈 207 6.3 网络分类 228 6.3.1 地域范围分类 228 6.3.2 拓扑结构分类 229 6.3.3 4G 及5G 移动通信 231 6.3.4 无线自组网 233 6.3.5 数据链 238 6.4 不同场景下无人系统中的网络连接 239 6.4.1 无人系统内部模块通信网络 240 6.4.2 局域网场景下的单无人系统的测试与调试 243 6.4.3 局域网场景下的多无人系统的组网 244 6.4.4 广域网场景下的多无人系统的组网 245 6.5 多无人系统的组网的通信协议 246 6.5.1 基于UDP 组播方式的无**服务器通信 247 6.5.2 基于UDP 或TCP 的有**服务器通信 248 第7章 地面无人系统编队 255 7.1 地面无人系统编队简介 255 7.2 鸽群算法及其改进 256 7.2.1 无人车编队算法 256 7.2.2 鸽群算法 256 7.2.3 鸽群算法改进 257 7.3 **跟随法编队控制 258 7.4 无人系统编队仿真 259 7.4.1 路径规划仿真 259 7.4.2 **跟随仿真 260 7.5 无人系统实车编队 262 第8章 无人系统的指挥控制1.0 265 8.1 无人系统指控软件的用途 265 8.1.1 单机无人车指控系统 265 8.1.2 集群无人车指控系统 266 8.2 指控软件XCommander 266 8.3 开发指控软件的rviz SLAM 模块 267 8.3.1 开发环境配置 267 8.3.2 创建演示模块项目myviz 270 8.3.3 调整演示模块项目myviz 273 8.3.4 软件方法学与编程技术准备 277 8.3.5 关注ROS话题 281 8.3.6 程序文件 284 8.3.7 调试 296 8.4 无人车侧软件 302