# Books_Robot_SLAM_Navigation **Repository Path**: jianming-lu/Books_Robot_SLAM_Navigation ## Basic Information - **Project Name**: Books_Robot_SLAM_Navigation - **Description**: 《机器人SLAM导航核心技术与实战》张虎 著 (随书配套源码+PPT课件+课后习题答案) - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: http://www.xiihoo.com - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 49 - **Created**: 2022-05-17 - **Last Updated**: 2022-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 《机器人SLAM导航核心技术与实战》张虎 著 (随书配套源码+PPT课件+课后习题答案) ![avatar](https://gitee.com/xiihoo-robot/Books_Robot_SLAM_Navigation/blob/master/BOOK1.jpg) ![avatar](https://gitee.com/xiihoo-robot/Books_Robot_SLAM_Navigation/blob/master/BOOK2.PNG) ## 图书封面 ![](BOOK1.jpg) ![](BOOK2.PNG) ## 目录 * * 前言 * 编程基础篇 * 第1章 ROS入门必备知识 2 + 1.1 ROS简介 2 - 1.1.1 ROS的性能特色 2 - 1.1.2 ROS的发行版本 3 - 1.1.3 ROS的学习方法 3 + 1.2 ROS开发环境的搭建 3 - 1.2.1 ROS的安装 4 - 1.2.2 ROS文件的组织方式 4 - 1.2.3 ROS网络通信配置 5 - 1.2.4 集成开发工具 5 + 1.3 ROS系统架构 5 - 1.3.1 从计算图视角理解ROS架构 6 - 1.3.2 从文件系统视角理解ROS架构 7 - 1.3.3 从开源社区视角理解ROS架构 8 + 1.4 ROS调试工具 8 - 1.4.1 命令行工具 9 - 1.4.2 可视化工具 9 + 1.5 ROS节点通信 10 - 1.5.1 话题通信方式 12 - 1.5.2 服务通信方式 15 - 1.5.3 动作通信方式 19 + 1.6 ROS的其他重要概念 25 + 1.7 ROS 2.0展望 28 + 1.8 本章小结 28 * 第2章 C++编程范式 29 + 2.1 C++工程的组织结构 29 - 2.1.1 C++工程的一般组织结构 29 - 2.1.2 C++工程在机器人中的组织结构 29 + 2.2 C++代码的编译方法 30 - 2.2.1 使用g++编译代码 31 - 2.2.2 使用make编译代码 32 - 2.2.3 使用CMake编译代码 32 + 2.3 C++编程风格指南 33 + 2.4 本章小结 34 * 第3章 OpenCV图像处理 35 + 3.1 认识图像数据 35 - 3.1.1 获取图像数据 35 - 3.1.2 访问图像数据 36 + 3.2 图像滤波 37 - 3.2.1 线性滤波 37 - 3.2.2 非线性滤波 38 - 3.2.3 形态学滤波 39 + 3.3 图像变换 40 - 3.3.1 射影变换 40 - 3.3.2 霍夫变换 42 - 3.3.3 边缘检测 42 - 3.3.4 直方图均衡 43 + 3.4 图像特征点提取 44 - 3.4.1 SIFT特征点 44 - 3.4.2 SURF特征点 50 - 3.4.3 ORB特征点 52 + 3.5 本章小结 54 * 硬件基础篇 * 第4章 机器人传感器 56 + 4.1 惯性测量单元 56 - 4.1.1 工作原理 56 - 4.1.2 原始数据采集 60 - 4.1.3 参数标定 65 - 4.1.4 数据滤波 73 - 4.1.5 姿态融合 75 + 4.2 激光雷达 91 - 4.2.1 工作原理 92 - 4.2.2 性能参数 94 - 4.2.3 数据处理 96 + 4.3 相机 100 - 4.3.1 单目相机 101 - 4.3.2 双目相机 107 - 4.3.3 RGB-D相机 109 + 4.4 带编码器的减速电机 111 - 4.4.1 电机 111 - 4.4.2 电机驱动电路 112 - 4.4.3 电机控制主板 113 - 4.4.4 轮式里程计 117 + 4.5 本章小结 118 * 第5章 机器人主机 119 + 5.1 X86与ARM主机对比 119 + 5.2 ARM主机树莓派3B+ 120 - 5.2.1 安装Ubuntu MATE 18.04 120 - 5.2.2 安装ROS melodic 122 - 5.2.3 装机软件与系统设置 122 + 5.3 ARM主机RK3399 127 + 5.4 ARM主机Jetson-tx2 128 + 5.5 分布式架构主机 129 - 5.5.1 ROS网络通信 130 - 5.5.2 机器人程序的远程开发 130 + 5.6 本章小结 131 * 第6章 机器人底盘 132 + 6.1 底盘运动学模型 132 - 6.1.1 两轮差速模型 132 - 6.1.2 四轮差速模型 136 - 6.1.3 阿克曼模型 140 - 6.1.4 全向模型 144 - 6.1.5 其他模型 148 + 6.2 底盘性能指标 148 - 6.2.1 载重能力 148 - 6.2.2 动力性能 148 - 6.2.3 控制精度 150 - 6.2.4 里程计精度 150 + 6.3 典型机器人底盘搭建 151 - 6.3.1 底盘运动学模型选择 152 - 6.3.2 传感器选择 152 - 6.3.3 主机选择 153 + 6.4 本章小结 155 * SLAM篇 * 第7章 SLAM中的数学基础 158 + 7.1 SLAM发展简史 158 - 7.1.1 数据关联、收敛和一致性 160 - 7.1.2 SLAM的基本理论 161 + 7.2 SLAM中的概率理论 163 - 7.2.1 状态估计问题 164 - 7.2.2 概率运动模型 166 - 7.2.3 概率观测模型 171 - 7.2.4 概率图模型 173 + 7.3 估计理论 182 - 7.3.1 估计量的性质 182 - 7.3.2 估计量的构建 183 - 7.3.3 各估计量对比 190 + 7.4 基于贝叶斯网络的状态估计 193 - 7.4.1 贝叶斯估计 194 - 7.4.2 参数化实现 196 - 7.4.3 非参数化实现 202 + 7.5 基于因子图的状态估计 206 - 7.5.1 非线性最小二乘估计 206 - 7.5.2 直接求解方法 206 - 7.5.3 优化方法 208 - 7.5.4 各优化方法对比 218 - 7.5.5 常用优化工具 219 + 7.6 典型SLAM算法 221 + 7.7 本章小结 221 * 第8章 激光SLAM系统 223 + 8.1 Gmapping算法 223 - 8.1.1 原理分析 223 - 8.1.2 源码解读 228 - 8.1.3 安装与运行 233 + 8.2 Cartographer算法 240 - 8.2.1 原理分析 240 - 8.2.2 源码解读 247 - 8.2.3 安装与运行 258 + 8.3 LOAM算法 266 - 8.3.1 原理分析 266 - 8.3.2 源码解读 267 - 8.3.3 安装与运行 270 + 8.4 本章小结 270 * 第9章 视觉SLAM系统 272 + 9.1 ORB-SLAM2算法 274 - 9.1.1 原理分析 274 - 9.1.2 源码解读 310 - 9.1.3 安装与运行 319 - 9.1.4 拓展 327 + 9.2 LSD-SLAM算法 329 - 9.2.1 原理分析 329 - 9.2.2 源码解读 334 - 9.2.3 安装与运行 337 + 9.3 SVO算法 338 - 9.3.1 原理分析 338 - 9.3.2 源码解读 341 + 9.4 本章小结 341 * 第10章 其他SLAM系统 344 + 10.1 RTABMAP算法 344 - 10.1.1 原理分析 344 - 10.1.2 源码解读 351 - 10.1.3 安装与运行 357 + 10.2 VINS算法 362 - 10.2.1 原理分析 364 - 10.2.2 源码解读 373 - 10.2.3 安装与运行 376 + 10.3 机器学习与SLAM 379 - 10.3.1 机器学习 379 - 10.3.2 CNN-SLAM算法 411 - 10.3.3 DeepVO算法 413 + 10.4 本章小结 414 * 自主导航篇 * 第11章 自主导航中的数学基础 418 + 11.1 自主导航 418 + 11.2 环境感知 420 - 11.2.1 实时定位 420 - 11.2.2 环境建模 421 - 11.2.3 语义理解 422 + 11.3 路径规划 422 - 11.3.1 常见的路径规划算法 423 - 11.3.2 带约束的路径规划算法 430 - 11.3.3 覆盖的路径规划算法 434 + 11.4 运动控制 435 - 11.4.1 基于PID的运动控制 437 - 11.4.2 基于MPC的运动控制 438 - 11.4.3 基于强化学习的运动控制 441 + 11.5 强化学习与自主导航 442 - 11.5.1 强化学习 443 - 11.5.2 基于强化学习的自主导航 465 + 11.6 本章小结 467 * 第12章 典型自主导航系统 470 + 12.1 ros-navigation导航系统 470 - 12.1.1 原理分析 470 - 12.1.2 源码解读 475 - 12.1.3 安装与运行 479 - 12.1.4 路径规划改进 492 - 12.1.5 环境探索 496 + 12.2 riskrrt导航系统 498 + 12.3 autoware导航系统 499 + 12.4 导航系统面临的一些挑战 500 + 12.5 本章小结 500 * 第13章 机器人SLAM导航综合实战 502 + 13.1 运行机器人上的传感器 502 - 13.1.1 运行底盘的ROS驱动 503 - 13.1.2 运行激光雷达的ROS驱动 503 - 13.1.3 运行IMU的ROS驱动 504 - 13.1.4 运行相机的ROS驱动 504 - 13.1.5 运行底盘的urdf模型 505 - 13.1.6 传感器一键启动 506 + 13.2 运行SLAM建图功能 506 - 13.2.1 运行激光SLAM建图功能 507 - 13.2.2 运行视觉SLAM建图功能 508 - 13.2.3 运行激光与视觉联合建图功能 508 + 13.3 运行自主导航 509 + 13.4 基于自主导航的应用 510 + 13.5 本章小结 511 * 附录A Linux与SLAM性能优化的探讨 512 * 附录B 习题 523 ## 学习思维导图 * (学习思维导图)机器人SLAM导航核心技术与实战: http://www.xiihoo.com/static/video/learn_xmind.mp4 * 下载高清原图: http://xiihoo.com/static/file/%E5%AD%A6%E4%B9%A0%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE.png * 下载思维导图: http://xiihoo.com/static/file/%E5%AD%A6%E4%B9%A0%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE.xmind ## 关于 * 作者: (英文名)xiihoo(中文名)张虎(网名) 小虎哥哥爱学习 * 官网: http://www.xiihoo.com * QQ群: + QQ技术1群:728661815(1群已满,请加2群) + QQ技术2群:117698356 * 邮箱: robot4xiihoo@163.com * 源码: https://github.com/xiihoo/Books_Robot_SLAM_Navigation * 购书链接:https://item.jd.com/13041503.html ## 环境要求 * ubuntu 18.04 LTS * ROS melodic ## 仓库内容说明 * **1.例程源码** + chapter_01: **ROS入门必备知识** - topic_example 话题通信 - service_example 服务通信 - action_example 动作通信 + chapter_02: **C++编程范式** - g++_compile 利用g++编译 - make_compile 利用make编译 - cmake_compile 利用cmake编译 + chapter_03: **OpenCV图像处理** - image_from_img 从图片文件中获取图像数据 - image_from_vid 从视频文件中获取图像数据 - image_from_cam 从相机设备中获取图像数据 - calc_hist 直方图均衡 - xfeatures2d_example 图像特征点提取 + chapter_04: **机器人传感器** - imu_tk IMU内参标定 - imu_utils IMU内参标定 - imu_tools Madgwick姿态融合 - ManhonyAHRS Manhony姿态融合 + chapter_05: **机器人主机** + chapter_06: **机器人底盘** + chapter_07: **SLAM中的数学基础** + chapter_08: **激光SLAM系统** - gmapping gmapping激光SLAM系统 - cartographer cartographer激光SLAM系统 - loam LOAM激光SLAM系统 + chapter_09: **视觉SLAM系统** - orb_slam2 ORB_SLAM2视觉SLAM系统 - lsd_slam LSD_SLAM视觉SLAM系统 - svo SVO视觉SLAM系统 + chapter_10: **其他SLAM系统** - rtabmap rtabmap激光视觉融合SLAM系统 - vins VINS视觉惯导融合SLAM系统 - LeNet-5-tensorflow LeNet-5卷积神经网络 - CNN_SLAM 基于CNN的SLAM系统 - DeepVO 基于深度学习的端到端SLAM系统 + chapter_11: **自主导航中的数学基础** + chapter_12: **典型自主导航系统** - ros-navigation - riskrrt - autoware + chapter_13: **机器人SLAM导航综合实战** - patrol_fsm 多目标点巡逻 + 更新中...... * **2.课件PPT** + 0-先导课:课程大纲.pdf + 0-先导课:课程大纲.pptx + 更新中...... * **3.习题答案** + 附录B_习题.pdf + 更新中...... * **4.学习思维导图** + 学习思维导图.png + 学习思维导图.xmind + learn_xmind.mp4 ## 知乎专栏教程 * 知乎:https://www.zhihu.com/people/hiram_zhang * 知乎专栏: + 《机器人SLAM导航核心技术与实战》笔记 https://www.zhihu.com/column/c_1363309952996577280 + 自己动手做一台SLAM导航机器人 https://www.zhihu.com/column/c_1084087088789569536 ## 视频教程 * B站:https://space.bilibili.com/66815220 * 视频列表: + 一本书打通机器人SLAM导航中的软件技术、硬件技术、数学理论、工程落地等一系列问题-视频解读 + 《机器人SLAM导航核心技术与实战》前言部分-视频解读 + 机器人SLAM导航书内容导读与学习方法-视频解读 + 更多精彩内容,正在更新...