前言
本文将详细讲解机器人领域中的SLAM技术——同步定位与建图(Simultaneous Localization and Mapping,简称SLAM)。读者将学习到如下内容:无人机概述、SLAM概述、项目实例。在项目实例中,以卡耐基梅隆大学(CMU)机器人团队的项目为例,进行详细地讲解,指导大家配置环境,并运行项目的仿真代码,带大家感受SLAM的无穷乐趣。
一、无人机概述
1.1 无人机飞行器的定义
无人驾驶飞行器(unmanned aerial vehicle),简称无人机, 是一种由自身程序控制或无线电遥控的,用来执行特定任务的。无人驾驶飞行器,“平台无人,系统有人”是无人机的基本特征。在执行3D任务—枯燥(Dull)、恶劣(Dirty)和危险(Dangerous)任务时,无人机相比有人机能够体现出更大优势。
1.2 无人机的分类
无人飞行器的种类繁多,主要包括飞艇、固定翼无人机、伞翼无人机、扑翼无人机、变翼无人机、旋翼式无人机等。
1.3 无人机的应用领域
无人飞行器的应用非常广泛,可以用于军事,也可以用于民用和科学研究。在民用领域,无人飞行器已经和即将使用的领域多达40多个,例如影视航拍、农业植保、海上监视与救援、环境保护、电力巡线、渔业监管、消防、城市规划与管理、气象探测、交通监管、地图测绘、国土监察等。
二、SLAM概述
2.1 基本概念
同步定位与建图(Simultaneous Localization and Mapping,简称SLAM)问题可以描述为:机器人在未知环境中从一个未知位置开始移动,在移动过程中根据位置和地图进行自身定位,同时在自身定位的基础上建造增量式地图,实现机器人的自主定位和导航。
2.2 自主导航框架
自主导航框架包括定位、建图、运动规划(包括路径规划和轨迹优化)、控制等部分,如下所示:
2.2.1 定位部分
传感器包括:惯性测量单元(Inertia Measure Uint,简称IMU)、惯性里程计(视觉&激光)等
定位包括:GPS、动作捕捉仪等
2.2.2 建图部分
地图有很多种类型,包括点云地图、栅格地图、欧氏距离场、八叉树地图等,常用的地图主要是点云地图和栅格地图。
2.2.3 运动规划部分
运动规划主要包括路径规划和轨迹优化:路径规划指的是机器人自主导航循迹的算法(包括Dijkstra算法、A*算法、RRT算法、人工势场法等),其中Dijkstra算法和A*算法为基于搜索的算法,RRT算法为基于采样的算法;轨迹优化指的是机器人在规划好的路径上进行移动,但由于路况、天气等环境影响,可能不完全循迹,存在误差,需要通过优化轨迹来使得机器人运动更加平滑和完善。
路径规划如下所示:
轨迹优化如下所示:
2.2.4 控制部分
- 线性控制
- 非线性控制:自适应、滑模等
- 抗干扰控制:ESO、NOB
- 鲁棒控制
- 智能控制(强化学习控制等)
三、项目实例
接下来,我们将了解一个实际的自主导航项目,对于无人机的自主导航,读者可以看看之前本人写的一篇文章:
在Docker上运行ROS(melodic版本)机器人项目_猪猪的超超的博客-CSDN博客https://blog.csdn.net/weixin_65688914/article/details/133520612?spm=1001.2014.3001.5501上面文章运行的是港科大的一个叫做 FUEL 的无人机项目。
接下来,我将给读者展示一下CMU团队的项目仿真结果,而具体的运行指南,请大家参考官方网站,后续我将撰写中文版的项目运行指南,还请各位读者关注:Development Environment
下面是运行该团队的自主导航项目的仿真结果:
校园环境(Gazebo):
DSVP算法在校园环境下的运行(Rviz):
森林环境(Gazebo):
DSVP算法在森林环境下的运行(Rviz):
总结
本文从无人机的基本概念开始,讲解无人机的分类和应用领域,引出SLAM自主导航框架,并详细讲解了定位、建图、运动规划(包括路径规划和轨迹优化)、控制这几个部分,最后以CMU团队的自主导航项目为例,展示了仿真结果,从实例的角度讲解SLAM。
后续我将撰写中文版的项目运行指南,还请各位读者关注!