cartographer调试与原理详细解读

cartographer调试与原理详细解读

简记,今天时今年上班的最后一天,记录一下毕业后开始工作的这半年的主要工作,对cartographer这一大魔王的理解。

1 使用效果,建图

cartographer代码很多很复杂对于一个新手来说看起来简直要命,但是不得不说他的建图效果很棒。使用二维激光雷达+use_online_correlative_scan_matching没有用里程计和imu。
下面是办公室和地下车库的建图效果。
cartographer调试与原理详细解读_第1张图片
地下车库场景,图已经被我二值化了。
cartographer调试与原理详细解读_第2张图片
在地下车库扫图中还会不断的有行人和车辆经过,但是因为有submap的概念最终不会出现在地图中。地下车库大学5000平米。只要最终回环判断成功,建图效果基本都很不错。

2 定位效果

由于AMCL定位效果一般,所以直接使用cartographer中的纯定位模式,开启pure_localization 。倒入之前已经建立好的pbstream地图就可以开启纯定位模式了

定位中的位姿发布

位姿发布cartographer是使用tf转换来发布的,导航是可以使用tf来监听相关变换实现实时定位。如果想直接以某一个topic发布出来类似与amcl_pose那样的话题,可以在node.cc中修改

 else {        stamped_transform.header.frame_id = node_options_.map_frame;        stamped_transform.child_frame_id =            trajectory_state.trajectory_options.published_frame;        stamped_transform.transform = ToGeometryMsgTransform(            tracking_to_map * (*trajectory_state.published_to_tracking));        tf_broadcaster_.sendTransform(stamped_transform);

在这一段后面加入(如果你选择provide_odom_frame=ture,那就再else前面加入)以下代码

    pose_carto.pose.pose.position = stamped_transform.transform.translation;
    pose_carto.pose.pose.orientation = stamped_transform.transform.rotation;
    pose_pub.publish(pose_carto);
    //当然在这之前你需要定义好发布的话题、发布的消息格式。以及在node.h中提前声明。具体我就不在多说了,我想聪明的你一定可以明白

手动重定位

这个说来话长,可以参考一个博主的建议,https://blog.csdn.net/xiekaikaibing/article/details/80080506
但是我想说的是,按这位博主的launch文件的位姿智能定位在当前轨迹的坐标系下
需要对launch文件中的参数做一些修改


这个timestamp很重要!!!!!至于细节这里没时间写了,之后有机会补上。

不同地图的拼接

这个之前博客已经写过了,大致内容差不多,可以翻看之前的博客。

总体效果

cartographer定位效果在室内还是很准确的小于5cm,甚至小于3cm。比amcl好很多,而且对于行人等各种环境变化都有适应性。

你可能感兴趣的:(cartographer)