基于激光SLAM的机器人
基于激光SLAM的机器人
实习过程中在做一款扫地机器人,要求不用ROS,自己搭建系统,这里先介绍下,后面一点一点的记录说明。
主要传感器
激光雷达:用的是镭神16线的。
双目摄像头:INDEMIND
处理器:NVIDIA JETSON AGX XAVIER
六轴IMU,以及轮式里程计。
建图
由于本人研究生方向是视觉的方向,所以对点云数据了解不是很深,所以采用的最简单的方法,基于PCL库的ICP(ICP的介绍网上很多),但是ICP只能匹配两帧变化不大的点云,根据我的实际测量,点云距离超过两米或者角度超过15度以上就匹配不上了,由于不想采用PL—ICP,LOAM里面的分点和面进行匹,然后就用IMU和ODOM经过Kalman滤波的位姿作为ICP的初始然后匹配得到点云的转换矩阵。由于ODOM的角度结果十分不准确,以至于IMU的角度无法纠正(滤波后的20m直线误差差不多10cm, 90度的误差有0.2弧度),所以采用子图的方法。五帧关键帧重启IMU和ODOM的数据第五帧既是上一子图的最后一帧,又是下一子图的第一帧,这虽然不能减少累计误差,但是可以减少转弯后角度对x和y的误差。累计误差通过位姿图优化解决。网上查的信息说九轴IMU能够通过磁力计有效减少角度误差,但是车的结构和硬件在设计的时候没有考虑到EMC,导致车体有着杂乱的强磁场,以至于磁力计无法正常工作。
这是建的楼道的图,面积在400平米左右,然后可以得到关键帧和关键帧的位姿。
重定位
现在机器人有点没考虑到的是,不能在任何地方重新启动,只能在建图原点附近进行重启动定位。首先根据关键帧的位姿建立八叉树,然后根据ODOM和IMU融合后的结果,从八叉树中找到关键帧的点云数据和位姿,然后根据雷达实际采集的数据与对应的关键帧进行匹配得到机器人目前的一个位姿,然后把当前机器人位姿传入kalman滤波中根据IMU和ODOM,进行融合。后面单写一篇自己对kalman滤波算法的理解。
双目视觉定位
双目视觉主要通过YOLO算法把常见移动目标(人,车)识别出来,然后用3D重建的方式来对目标进行重建,得到目标的位置,然后根据上下两帧,机器人的位姿变化以及移动目标的位姿变化,来预测目标的下一位置。后面也会写一篇对YOLO模型的学习和训练过程。
后面会记录SLAM学习过程,一个CV渣渣转SLAM的学习过程