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
遷移到博客園