在发布tf的时候下面的消息是等效的吗, 假设T是一个变换, inv(T)是T的逆变换
frame_id: map
child_frame_id: odom
transform: T
frame_id: odom
child_frame_id: map
transform: inv(T)
实际上并不是,下面的这种写法是无效的。因为TF是具有方向性的,而且一个frame可以有多个child_frame,但是一个child_frame只能有一个frame。而下面的写法违背了这个原则。对于odom,它的下一级frame正常应该是base_footprint,如果发布第二种TF变换,那么base_footprint和map的上一级frame就都是odom了,这是不允许的。
但是如果发布了第二种TF变换,通过tf2_tool view_frame 是看不出任何异常的。虽然没有异常,但是在具体使用的时候有些情况下能正常获取到TF变换,有些时候就获取不到,非常难定位到这个问题。希望各位遇到TF异常的时候可以检查一下上下层级是否正确。