這裏已經解釋的非常詳細:http://www.ros.org/reps/rep-0105.html#id5
簡單的描述:
1)在系統計算中,map的原點是fixed的,不會改變,而AMCL計算得到的機器人座標(map座標系下)我們認爲是絕對準確的。
2)odometry節點根據編碼器積分的結果不停地發佈odom到baselink的變換(換算到xy座標系了)
問題:
odom到baselink的變換長時間後不是準確的,爲什麼要一直髮布呢?這不會導致系統使用了錯誤的信息嗎?
解答:
在AMCL的代碼中我們可以看到,計算得到map座標系下機器人的座標後並沒有直接發佈map到baselink的變換,而是根據odom和baselink的關係、map和baselink的關係,反推出map和odom的關係,然後發佈map到odom的變換。而map和baselink的地圖中的實際位置是不可能改變的(意思是真實的),因此我們在rviz中能夠看到odom會隨着機器人的運動而改變。總結一下就是:通過改變odom座標系原點的位置使得機器人里程計的信息能夠正確表達機器人的位置(改變的odom原點的量,就是機器人打滑等原因產生的里程計誤差的量)。