激光雷达SLAM算法

激光雷达SLAM算法,第1张

机器人研究的问题包含许许多多的领域,我们常见的几个研究的问题包括:建图(Mapping)、定位(Localization)和路径规划(Path Planning),如果机器人带有机械臂,那么运动规划(Motion Planning)也是重要的一个环节,SLAM需要机器人在未知的环境中逐步建立起地图,然后根据地区确定自身位置,从而进一步定位。

ROS系统通常由大量节点组成,其中任何一个节点均可以通过发布/订阅的方式与其他节点进行通信。举例来说,机器人上的一个位置传感器如雷达单元就可以作为ROS的一个节点,雷达单元可以以信息流的方式发布雷达获得的信息,发布的信息可以被其他节点如导航单元、路径规划单元获得。

ROS的通信机制:

ROS(机器人 *** 作系统)中SLAM的一些功能包,也就是一些常用的SLAM算法,例如Gmapping、Karto、Hector、Cartographer等算法。我们不会去关注算法背后的数学原理,而是更注重工程实现上的方法,告诉你SLAM算法包是如何工作的,怎样快速的搭建起SLAM算法。

地图 : ROS中的地图很好理解,就是一张普通的灰度图像,通常为pgm格式。这张图像上的黑色像素表示障碍物,白色像素表示可行区域,灰色是未探索的区域

地图在ROS中是以Topic的形式维护和呈现的,这个Topic名称就叫做 /map ,由于 /map 中实际上存储的是一张图片,为了减少不必要的开销,这个Topic往往采用锁存(latched)的方式来发布。地图如果没有更新,就维持着上次发布的内容不变,此时如果有新的订阅者订阅消息,这时只会收到一个 /map 的消息,也就是上次发布的消息;只有地图更新了(比如SLAM又建出来新的地图),这时 /map 才会发布新的内容。 这种方式非常适合变动较慢、相对固定的数据(例如地图),然后只发布一次,相比于同样的消息不定的发布,锁存的方式既可以减少通信中对带宽的占用,也可以减少消息资源维护的开销。

Gmapping ,Gmapping算法是目前基于激光雷达和里程计方案里面比较可靠和成熟的一个算法,它基于粒子滤波,采用RBPF的方法效果稳定,许多基于ROS的机器人都跑的是gmapping_slam。

gmapping的作用是根据激光雷达和里程计(Odometry)的信息,对环境地图进行构建,并且对自身状态进行估计。因此它得输入应当包括激光雷达和里程计的数据,而输出应当有自身位置和地图。

论文支撑:R-LINS: A Robocentric Lidar-Inertial State Estimator for Robust and Efficient Navigation

6轴 IMU:高频,聚焦自身运动,不采集外界环境数据

3D LiDAR:低频,聚焦车体运动,采集外界环境数据

R-LINS使用以上两种传感器来估计机器人的运动姿态, 对于任一传感器而言,单独的依靠自己的数据是很难实现地图构建的, 比如纯雷达模型使用的传感器是激光雷达,可以很好的探测到外界的环境信息。但是,同样的,也会受到这些信息的干扰,再长时间的运算中会产生一定的累计误差。为了防止这种误差干扰到后续的地图构建中,需要使用另一种传感器来矫正机器人自身的位姿信息, 即IMU传感器,IMU传感器由于是自身运动估计的传感器,所以,采集的都是自身运动的姿态信息。可以很好的矫正激光雷达里程计的位姿信息。所以,通常使用激光雷达和惯导来进行数据融合,实现姿态信息的矫正。

一共分为三大块:

RGBD SLAM属于视觉SLAM中的一种,使用的RGBD传感器包括zed(双目立体,适用于室外)、Kinect(结构光,仅限室内)、Kinect v2(TOF,主要用于室内)等。

功能包

现在有比较多的现成的功能包可以进行学习和二次开发:

gmapping:

实时构建室内地图,在构建小场景地图所需的计算量较小且精度较高。相比Hector SLAM对激光雷达频率要求低、鲁棒性高(Hector 在机器人快速转向时很容易发生错误匹配,建出的地图发生错位,原因主要是优化算法容易陷入局部最小值)。

而相比Cartographer在构建小场景地图时,Gmapping不需要太多的粒子并且没有回环检测因此计算量小于Cartographer而精度并没有差太多。但是,不适合构建大场景地图,并且没有回环检测,因此在回环闭合时可能会造成地图错位,虽然增加粒子数目可以使地图闭合但是以增加计算量和内存为代价,不能像Cartographer那样构建大的地图。

hector_slam:

设计初衷Hector主要用于救灾等地面不平坦的情况,因此无法使用里程计,特点是用IMU解决了激光的运动畸变问题。虽然系统不提供明确的循环关闭能力,但对于许多真实世界场景来说它足够准确。

cartographer:

累计误差较前两种算法低,能天然的输出协方差矩阵,后端优化的输入项。成本较低的雷达也能跑出不错的效果。是Google开源的一个ROS系统支持的2D和3D SLAM(simultaneous localization and mapping)库。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11594029.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存