ROS-Navigation-odom、map坐标系的理解
本文链接:https://blog.csdn.net/u012686154/article/details/88174195
学ROS大半年了,之前一直没搞明白odom和map,今天重新查资料看博客加自己思考才真正理解了。深深怀疑自己的理解能力。。。
此处参考了https://blog.csdn.net/flyinsilence/article/details/51854123,博主的解释一开始我还是没太看明白,看了好几遍才看懂,懂了之后才发现人家写的真的是言简意赅啊!
我就详细的把自己的理解以及想到的例子写出来,万一有人也是不太明白这个呢。
举个栗子
比如说我现在算出来了一个一维的坐标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了。
如果用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。
所以odom相当于是根据实际计算得到的坐标和真实坐标之间的变换虚拟出来的一个坐标系。
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.