学ROS大半年了,以前一直没搞明白odom和map,今天从新查资料看博客加本身思考才真正理解了。深深怀疑本身的理解能力。。。html
此处参考了https://blog.youkuaiyun.com/flyinsilence/article/details/51854123,博主的解释一开始我仍是没太看明白,看了好几遍才看懂,懂了以后才发现人家写的真的是言简意赅啊!dom
我就详细的把本身的理解以及想到的例子写出来,万一有人也是不太明白这个呢。ui
举个栗子this
好比说我如今算出来了一个一维的坐标X=10(odom-->base_link),可是这个位置的真实坐标应该是X'=2(map-->base_link),也就是说我计算的坐标和真实坐标出现了误差。可是ROS在说的时候换了个说法,不说计算出来的坐标在map中漂了8,而是说是odom坐标系相对于map坐标系漂了8。因此此时base_link相对odom坐标是真实坐标x=2(由于odom坐标系短期是准确的,若是是刚开始时odom和map重合,odom中的该坐标就是真实坐标);odom相对于map坐标是driftX=8(map-->odom);最后计算出来的base_link相对于map的坐标就是X=drixfX+X'=10了。.net
若是用IMU做积分的话,经过IMU得到的是odom坐标系下的坐标,初始时odom和map重合,都为0。那么短期内,因为IMU的漂移很小,因此得到的位移deltaX是准确的,最终的在odom坐标系下的坐标是X=dextaX,在map中的坐标X'也是deltaX。可是时间长了以后,IMU积分开始产生漂移driftX了,最终在map下的坐标X=deltaX+driftX。因为咱们定义IMU在短期内产的的位移deltaX是准确的,因此deltaX是就是IMU在odom坐标系下的真实位移,可是此时odom相对于map则漂移了driftX。htm
因此odom至关因而根据实际计算获得的坐标和真实坐标之间的变换虚拟出来的一个坐标系。blog
Relationship between Frames
The map frame is the parent of odom, and odom is the parent of base_link. Although intuition would say that both map and odom should be attached to base_link, this is not allowed because each frame can only have one parent.ip
(尽管直觉上map和odom都应该和base_link链接,可是这是不行的,因为每一个坐标系只能有一个父坐标系)