Karto_SLAM研究

本文介绍了使用Karto_SLAM进行建图的过程,包括slam_karto的运行、IntelResearchLab数据集测试以及如何适配velodyne-VLP16激光雷达。在适配过程中遇到点数不匹配和Karto异常的问题,通过修改源代码解决了这些问题。实验结果显示,0.5倍速的建图效果优于1.0倍速。

今天开始试试karto进行建图。karto是一个项目,后端是SPA(Sparse Pose Adjustment),前端是Scan Matcher。

ros-perceptioin Git仓库中有关的repo有3个。其中open_karto是主要实现,包括scan matching和spa优化;slam_karto是ROS封装(Warper)版本;而sparse_bundle_adjustment用于slam_karto。

open_karto也被catkinize了,可用catkin进行编译,它不会生成可执行文件,只生成一个库。

slam_karto运行:

rqt_graph:

slam karto ros graph
slam_karto ros::rqt_graph

tf_tree:

tf_tree
tf_tree

 tf细节:

base_link到base_laser_link之间是固定的,应该是指激光雷达到底盘之间的变换。IntelLab的数据中它们之间变换为" 0 0 0 0 0 0 1 "。

odom到base_link之间是里程计提供的相对位姿,一般通过IMU或轮式里程计得到。

map到odom之间就是slam_karto算法计算出来的odom坐标系到map坐标系之间的变换,可以视为一个修正量,这个修正量使得base与map(world)之间的位置更准确。

IntelResearchLab数据集测试:

最终结果
最终运行结果
Cartographer主要理论是通过闭环检测来消除构图过程中产生的累积误差[1]。用于闭环检测的基本单元是submap。一个submap是由一定数量的laser scan构成。将一个laser scan插入其对应的submap时,会基于submap已有的laser scan及其它传感器数据估计其在该submap中的最佳位置。submap的创建在短时间内的误差累积被认为是足够小的。然而随着时间推移,越来越多的submap被创建后,submap间的误差累积则会越来越大。因此需要通过闭环检测适当的优化这些submap的位姿进而消除这些累积误差,这就将问题转化成一个位姿优化问题。当一个submap的构建完成时,也就是不会再有新的laser scan插入到该submap时,该submap就会加入到闭环检测中。闭环检测会考虑所有的已完成创建的submap。当一个新的laser scan加入到地图中时,如果该laser scan的估计位姿与地图中某个submap的某个laser scan的位姿比较接近的话,那么通过某种 scan match策略就会找到该闭环。Cartographer中的scan match策略通过在新加入地图的laser scan的估计位姿附近取一个窗口,进而在该窗口内寻找该laser scan的一个可能的匹配,如果找到了一个足够好的匹配,则会将该匹配的闭环约束加入到位姿优化问题中。Cartographer的重点内容就是融合多传感器数据的局部submap创建以及用于闭环检测的scan match策略的实现。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值