Hi,
It is only for convenience with rtabmap.launch (it is not ros-related standard). If you set odom_topic to rtabmap_odom, then its TF will be rtabmap_odom. If you don't want the TF frame to be modified when changing the default odom topic name, then set explicitly vo_frame_id back to "odom".
rtabmap.launch is a convenient launch file to start visual odometry and rtabmap nodes at the same time. Here some cases:
1) default: visual odometry publishes odometry topic under odom_topic name and TF frame under vo_frame_id name, which is "odom" by default. With odom_frame_id="", rtabmap will subscribe to visual odometry topic to get the pose covariance.
2) we want to use wheel odometry as guess for visual odometry: we set odom_guess_frame_id (which may be "odom" from the wheel odometry), then we set odom_topic to "vo_odom" (thus vo_frame_id="vo_odom") to not clash with already published "odom" frame, then rtamap will subscribe to "vo_odom" topic. We just changed two arguments: guess_frame_id and odom_topic.
3) we want to use external odometry only: we set visual_odometry to false, and odom_topic to our external odometry topic.
4) we want to use external odometry only but its covariance is not set: we set visual_odometry to false, and odom_frame_id to our odometry TF, then set odom_tf_angular_variance and odom_tf_linear_variance to some fixed covariance. rtabmap will get odometry from TF and sets the corresponding covariance.
5) we want to use robot_localization to do odometry fusion from wheel odometry, imu and visual odometry: set publish_tf_odom to false, set odom_topic to "vo_odom" to not publish on same topic name than wheel odometry, make sure wheel odometry is not publishing TF too, then connect both odom topics to EKF localization node. Set odom_frame_id so that rtabmap subscribes to TF published from ekf localization (while setting odom_tf_angular_variance and odom_tf_linear_variance).
When using odometry from rtabmap.launch, I generally not set odom_frame_id unless there is some sensor fusion like above. Note also that when you have a complicated setup, it is preferred to launch the nodes individually (like in those
examples) than using rtabmap.launch.
cheers,
Mathieu