写在前面
本文是一位毕业的研究生,研究生期间主要从事SLAM智能小车的研究。期间阅读过很多开源代码,也亲自动手复现,对一些算法也加入了一些自己独特的见解。毕业后工作换了个方向,与SLAM方向基本不沾边,所以想将自己在研究生期间的所有工作做一些总结,其中也遇到很多坑对一些问题进行记录,希望能对大家有些帮助。本系列文章主要围绕SLAM小车制作的整个过程进行描述,因此小白也能从头开始进行了解与学习
什么是SLAM
SLAM(simultaneous localization and mapping)全称即时定位与地图构建或并发建图与定位,它主要的作用是让机器人在未知的环境中,完成定位(Localization),建图(Mapping)和路径规划(Navigation)。
按照我的理解就是,机器人的无人驾驶。在一个陌生环境,机器人通过自生传感器,比如激光、摄像头,对环境进行探索,记录环境所有障碍物的位置,以地图的形式展现出来。使得机器人在路径规划和行进过程中可以提前做出避障得行为。
机器人得组成部分
机器人的部件包括车身、电机、编码器、底层控制器、上层计算机、传感器。
1、电机作为机器人的动力机构,提共机器人前进的同时通过编码器反馈机器人的里程信息。机器人需要知道行进距离,辅助自己定位。因此对电机需要精准的闭环控制,对电机的控制一般通过下层控制器PID算法进行闭环以及里程信息反馈。对于电机的布置也有两轮、三轮、四轮以及麦克拉姆轮的形式。需要对不同的驱动方式运动学建模,在数学层面上对电机精准控制。
2、下层控制器,主要对一些传感器数据进行采集,例如编码器、IMU,超声波等数据以及对电机模型进行数学建模算法实现,此外将数据以串口的形式传给上层计算机。
3、上册计算机,负责SLAM算法的运算机总程序的总控制。可以是笔记本计算机也可以是性能好一点的嵌入式设备。
4、传感器分为激光传感器,视觉传感器、IMU等。
制作步骤
1、底层驱动版设计
2、小车车身设计
3、电机运动控制代码编写
4、小车控制验证
5、IMU传感器程序编写
6、Ubuntu环境搭建
7、Linux基本命令
8、ROS环境搭建
9、ROS编程示例
10、底层和上层通信实现
11、上层控制小车程序编写
12、基于卡尔曼滤波里程计融合
13、Gmapping的基本原理
14、Gmapping算法复现
16、Karto基本原理
17、Karto复现
18、视觉SLAM框架
19、ORBSLAM基本原理
20、ORBSLAM运用于ROS
21、ORBSLAM3复现