激光雷达的SLAM算法
ROS系统通常由大量节点组成,其中任何一个节点都可以通过发布/订阅的方式与其他节点进行通信。例如,机器人上的位置传感器,如雷达单元,可以用作ROS的节点。雷达单元可以将雷达获取的信息以信息流的形式发布,发布的信息可以由其他节点获取,如导航单元、路径规划单元等。
ROS的通信机制:
ROS(机器人操作系统)中SLAM的一些功能包也是一些常用的SLAM算法,比如Gmapping,Karto,Hector,Cartographer等等。我们不会关注算法背后的数学原理,而是更关注工程实现的方法,告诉你SLAM算法包是如何工作的,如何快速构建SLAM算法。
地图:ROS中的地图很好理解,只是普通的灰度图像,通常是pgm格式。该图中黑色像素代表障碍物,白色像素代表可行区域,灰色为未探索区域。
地图在ROS中是以主题的形式维护和呈现的,这个主题名叫做/map。因为/map实际上存储的是一张图片,所以为了减少不必要的开销,这个话题经常以锁存的方式发布。如果地图不更新,上次发布的内容不变。此时,如果有新的订阅者订阅该消息,则只会收到一条/map的消息,也就是上次发布的消息。只有在地图更新的时候(比如SLAM建立新的地图)才会/map发布新的内容。这种方法非常适合变化缓慢、相对固定的数据(比如地图),然后只发布一次。与发布相同的不确定消息相比,锁存方法不仅可以减少通信中的带宽占用,还可以减少消息资源维护的开销。
Gmapping,Gmapping算法是目前基于lidar和里程计方案的比较可靠和成熟的算法。它基于粒子滤波,RBPF方法效果稳定。很多基于ROS的机器人都在运行gmapping_slam。
gmapping的功能是根据激光雷达和里程计的信息,构建环境地图,估计自身状态。所以它的输入应该包括激光雷达和里程表的数据,输出应该有自己的位置和地图。
论文支持:R-Lins:Robo中央激光雷达——鲁棒和有效导航的惰性状态估计器。
6轴IMU:高频,专注自身运动,不采集外界环境数据。
3D LiDAR:低频,聚焦车身运动,收集外部环境数据。
R-LINS使用上述两个传感器来估计机器人的运动姿态。对于任何传感器来说,仅仅依靠自身的数据很难构建地图。比如纯雷达模型中使用的传感器是激光雷达,可以很好的探测外界环境信息。但同样也会受到这些信息的干扰,在长期的运行中会产生一定的累积误差。为了防止这种误差干扰后续的地图构建,需要使用另一种传感器来修正机器人本身的位姿信息,即IMU传感器。因为IMU传感器是用于自身运动估计的传感器,它收集自身运动的所有姿态信息。它可以很好地修正激光雷达里程计的位置和姿态信息。因此,通常采用激光雷达和惯性导航进行数据融合,修正姿态信息。
一个* * *分为三大块: