I'm making a differential-drive rover with wheel encoders and planar LIDAR, but at the moment no other sensors.
I understand why it's useful to have [separate `map` and `odom` frames](http://answers.ros.org/question/237295/confused-about-coordinate-frames-can-someone-please-explain/)--if my wheel odometry was perfect, the transform between the two would be zero, but it's not, so mapping (gmapping at the moment) is needed to find ithe correcting transform. I've implemented a publisher of both `nav_msgs.msg.Odometry` as topic `/odom` and `tf.TransformBroadcaster` as a transform between `odom` and `base_link`, according to [this tutorial](http://library.isr.ist.utl.pt/docs/roswiki/navigation(2f)Tutorials(2f)RobotSetup(2f)Odom.html).
However, it doesn't seem that the `odom -> base_link` transformation provides any information that isn't already present in my `/odom` topic. Are there other cases in which these would be different, and I'm just not very imaginative? Is the separate existence of the tf just for the (perhaps significant) convenience of having a homogeneous way to transform between `odom` and `map` frames? In that case, maybe it would be possible not to publish the `/odom` topic, since the only extra thing it has is velocities, which I just approximate as the difference from the last message over time increment.
FWIW, my code is [here](https://github.com/tsbertalan/gunnar), and in particular **[this script](https://github.com/tsbertalan/gunnar/blob/master/scripts/hardwareDriver) contains the publisher of both the `/odom` topic and the broadcaster of the `odom -> base_link` transformation**. I might later solicit comments on the larger project, but at the moment it's a bit disorganized because of a relatively recent jettisoning of Arduino as a bridge to hardware.
↧