TransformMaintenance
来到了最后一个模块,代码不是很长,我们在看完代码之后,再详细说明这个模块的功能
依然主函数开始
主函数非常简单,可以看出integrated_to_init消息是由发布器pubLaserOdometry2发布的,实际上就是由发布器pubLaserOdometry2Pointer发布的。我们找到pubLaserOdometry2Pointer,发现回调函数laserOdometryHandler就是pubLaserOdometry2Pointer的发布函数,这意味着,发现每次接收到laser_odom_to_init消息并调用回调函数laserOdometryHandler时,就发布一次integrated_to_init消息。
看来重点是这个回调函数laserOdometryHandler,我们来仔细看看
但是,这里还是有个小坑的。这个节点接收了两个消息,分别是laserOdometry节点和laserMapping节点发布的,而这两个节点发布的频率不同,那么是怎么处理的呢?
我们仔细看一看剩下的一个回调函数
也是很简单的解析函数,作用是在接收到了laserMapping的消息后,更新位姿,这里注意,laserMapping发布的是优化过后的位姿!看到这里,就逐渐能明白作者如何完成两个不同频率之间的协调了。
当接收到laserMapping的消息后,立马更新位姿,这样得到了优化的结果;而这个优化结果会被回调函数laserOdometryHandler里的transformAssociateToMap这一个函数一直利用来建图,一直到下一次接收到laserMapping的消息,再一次更新位姿,我们画图来说明:
也就是说,最后采用的位姿是TransformMaintenance发布的integrated_to_init消息。而且由上面的分析可知,TransformMaintenance的发布频率和laserOdometry的发布频率是一致的。
捞一下https://blog.csdn.net/qq_21842097/article/details/81094922
迁移到博客园