任务动机:使用Cartographer在已有地图准确定位。
任务描述:使用Cartographer建立地图,在已有地图上开启纯定位模式,使其在性能较低的处理器上依然可以实时定位。
1. 前言
Cartographer纯定位模式在lua中配置,官方配置在back_pack_2d_localization.lua中设置
include "backpack_2d.lua"
TRAJECTORY_BUILDER.pure_localization = true
POSE_GRAPH.optimize_every_n_nodes = 20
return options
开启后打开rviz中的submap,会看到如下显示
在已有的trajectory 0 轨迹上新建了一条trajectory 1 的轨迹,该轨迹上即实时执行前端匹配,也同时执行后端优化,后端优化会与trajectory 0已有的submap进行匹配,确定当前激光帧的准确位姿。在trajectory 1轨迹上只同时维护3个submap,这样不会造成内存堆积,可以一直持续定位,而且精度很高,前提是有一张质量较好的地图。但是Cartographer运行时对计算力要求较高,如果当前cpu计算能力较差时,或者定位时生成node与submap之间的约束不能够及时计算优化,则会进入排队优化状态,这样,生成约束的速度大于处理约束的速度,造成约束队列越来越来多,影响机器人正常定位状态。终端会有如下打印
“There are too many remai