SLAM导航机器人零基础实战系列:(三)感知与大脑——1.ydlidar-x4激光雷达

SLAM导航机器人零基础实战系列:(三)感知与大脑——1.ydlidar-x4激光雷达

摘要                                              

在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话。朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人。实现的关键是让机器人能通过传感器感知周围环境,并通过机器人大脑处理并输出反馈和执行动作。本章节涉及到的传感器有激光雷达、IMU、轮式里程计、麦克风、音响、摄像头,和用于处理信息的嵌入式主板。关于传感器的ROS驱动程序开发和在机器人上的使用在后面的章节会展开,本章节重点对机器人传感器和嵌入式主板进行讲解,主要内容:

1.ydlidar-x4激光雷达

2.带自校准九轴数据融合IMU惯性传感器

3.轮式里程计与运动控制

4.音响麦克风与摄像头

5.机器人大脑嵌入式主板性能对比

6.做一个能走路和对话的机器人


温馨提示:

本篇文章已经收录在我最新出版的书籍《机器人SLAM导航核心技术与实战》,感兴趣的读者可以购买纸质书籍来进行更加深入和系统性的学习,购买链接如下:

点这里购买:《机器人SLAM导航核心技术与实战》购买链接


1.ydlidar-x4激光雷达                  

在移动机器人中,获取机器人周围障碍物和环境的轮廓形状是非常重要的。使用激光雷达正是为了实现这个目的。利用扫描得到的障碍物信息,机器人就可以利用SLAM建立地图、并进行避障和自主导航。考虑到成本,推荐大家选用低成本的2D激光雷达,这里推荐的ydlidar-x4激光雷达正是一款极低成本的2D激光雷达,作为学习性能足够用了。

1.1.硬件概述                  

(图1)ydlidar-x4激光雷达实物

雷达主体由激光测距模组和电机构成,雷达主体需要连接转接板,用于实现外部供电和UART转USB,如图1。

(图2)ydlidar-x4激光雷达性能参数

测距频率是指每秒钟测距的次数(即激光测距模组的采样率),测距频率默认为5KHz;扫描频率是指电机每秒钟转过的圈数,扫描频率默认为8Hz;测距范围是指落在此距离范围的障碍物才能被测量,测距范围为0.12~10m;扫描角度为0~360度,也就是能够360度全方位扫描;测距分辨率就是测距精度;角度分辨率就是两个相邻扫描点之间的夹角。ydlidar-x4激光雷达性能参数,如图2。

关于激光雷达的性能参数对SLAM建图与避障导航的影响,这里做一个简短的分析。

扫描频率:

扫描频率越高,电机转动一圈的时间约短,扫描获取1帧雷达数据的时间越短,这样可以使SLAM建图和避障导航实时性更好。简单点说就是机器人运动速度很快时,扫描到的点云数据连续性也比较好,这有利于SLAM算法建立稳定的地图,有利于避障导航算法及时发现并避开障碍物。

测距范围:

小于测距范围最小值的区域就是雷达的测量盲区,处于盲区中的障碍物无法被探测,所以,盲区当然是越小越好以保证机器人不发生碰撞;大于测距范围最大值的区域就是雷达超量程的区域,在超量程的区域的障碍物无法被探测或者可以探测但误差很大,所以,在比较开阔的环境下应该采用远距离量程的雷达。

扫描角度:

大部分雷达都是0~360度全方位扫描的,所以就没什么太大的区别了,其实就是机器人不用转动身体的情况下就能一次性扫描出四周的障碍物信息。

测距分辨率:

测距分辨率也就是测距精度,测距精度越高当然有利于SLAM建图和避障导航,但是测距精度越越高的雷达成本当然也越高,现在国产低成本的雷达普遍为厘米级(cm)的精度,差一点的雷达5cm左右的精度,稍微好一点的雷达2cm左右的精度,如果要达到毫米级(mm)的精度成本就非常高了。

角度分辨率:

角度分辨率决定了两个相邻点云之间的夹角,由于雷达是通过旋转进行扫描的,随着距离增加点云会越来越稀疏。如果角度分辨率比较低,在扫描远距离物理时只能得到非常稀疏的几个点云,这样的点云基本上没有什么用处了。

角度分辨率 = 360 /(测距频率 / 扫描频率)  

从上面的角度分辨率计算公式来看,一般测距频率为常数值(由激光模组特性决定),那么通过降低扫描频率可以提升角度分辨率,但同时扫描频率降低会影响雷达的实时性,所以这是一个权衡的过程,根据实际情况做选择。

1.2.工作原理                 

激光雷达之所以流行,得益于它能够精确的测距。主流的激光雷达基于两种原理:一种是三角测距法,另一种是飞行时间(TOF)测距法。其实很好理解,就是利用了最基本的数学与物理知识。

(图3)三角测距原理

三角测距原理如图3,激光器发射一束激光,被物体A反射后,照射到图像传感器的A’,这样就形成了一个三角形,通过解算可以求出物体A到激光器的距离。激光束被不同距离的物体反射后,形成不同的三角形。我们不难发现随物体距离不断变远,反射激光在图像传感器上的位置变化会越来越小,也就是越来越难以分辨。这正是三角测距的一大缺点,物体距离越远,测距误差越大。

(图4)TOF测距原理

飞行时间(TOF)测距原理如图4,激光器发出激光时,计时器开始计时,接收器接收到反射回来的激光时,计时器停止计时,得到激光传播的时间后,通过光速一定这个条件,很容易计算出激光器到障碍物的距离。由于光速传播太快了,要获取精确的传播时间太难了。所以这种激光雷达自然而然成本也会高很多,但是测距精度很高。

1.3.在机器人中使用ydlidar-x4激光雷达  

(图5)在机器人中使用ydlidar-x4激光雷达

ydlidar-x4激光雷达通过串口与机器人相连接,机器人中通过运行雷达ROS驱动,来实现读取串口的雷达数据和将雷达数据发布到/scan这个主题,这样机器人上的其它节点就可以通过订阅/scan主题来获取激光雷达数据了。关于雷达ROS驱动在机器人上的具体使用,将在后面的章节中具体讲解。

后记                

如果大家对博文的相关类容感兴趣,或有什么技术疑问,欢迎加QQ技术交流群(117698356

参考文献

[1] 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

 购书链接:https://item.jd.com/13041503.html

下载更多资料:www.xiihoo.com

QQ技术讨论群: 117698356

B站视频教程:https://space.bilibili.com/66815220

Github源码:https://github.com/xiihoo/Books_Robot_SLAM_Navigation

Gitee源码(国内访问速度快):https://gitee.com/xiihoo-robot/Books_Robot_SLAM_Navigation

前言

编程基础篇

第1章 ROS入门必备知识

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++编程范式

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图像处理

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章 机器人传感器

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章 机器人主机

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章 机器人底盘

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中的数学基础

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系统

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系统

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系统

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章 自主导航中的数学基础

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章 典型自主导航系统

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导航综合实战

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性能优化的探讨

附录B 习题

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值