The deep understanding about the config file of cartographer ROS. [closed]
Please check my understanding about the 'cartographer.lua.' (https://github.com/cartographer-proje...)
I have read https://www.ros.org/reps/rep-0105.html and https://navigation.ros.org/setup_guides/transformation/setup_transforms.html.
The basic relationship between ROS frames can be represented by the following figure.
earth --> map --> odom --> base_link
map_frame The ROS frame ID to use for publishing submaps, the parent frame of poses, usually “map”.
Since the SLAM can draw a map, using some number to represent the object of the world, the object should be placed in the frame 'map.' Meanwhile, it can locate the robot, so the robot's pose should be also represented in 'map.'
tracking_frame The ROS frame ID of the frame that is tracked by the SLAM algorithm. If an IMU is used, it should be at its position, although it might be rotated. A common choice is “imu_link”.
A robot is an object, rather than an ideal point in the world. So, if the SLAM wants to locate the robot, it should locate which part of the robot. Is it the robot's head or its foot? The Cartographer algorithm suggests using the link where the IMU is installed. Good choice! This is usually the stable part of a robot.
This is strange!
Is it more direct if we use the same part that an odometry system is used to track the robot, e.g., the frame 'base_link?'
published_frame The ROS frame ID to use as the child frame for publishing poses. For example “odom”, if an “odom” frame is supplied by a different part of the system. In this case, the pose of “odom” in the map_frame will be published. Otherwise, setting it to “base_link” is likely appropriate.
I do not fully understand this frame. I think the algorithm should publish TF information, which should be the relation between the frame 'map' to the frame 'odom'. However, if the robot does not have an odometry system, the TF should directly connect 'map' to 'base_link.'
This is strange!
Why not directly connect the frame 'map' to the 'tracking_frame.' Since this robot does not have an odometry system.
odom_frame Only use if the provide_odom_frame is true. The frame between published_frame and map_frame to be used for publishing the (non-loop-closed) local SLAM result. Usually “odom”.
Is it the name of the odometry system's frame?
Can we do this? provide_odom_frame = false, but use_odometry = true ???
The robot does not provide an odometry system because it can not provide an odometry frame. How can we use odometry? It cannot subscribe to the weel coder information, and it does not know the structure of the robot.