RTK GPS's for absolute position and Orientation w/ Robot Localization
Hello All,
I have asked a question before about using a RTK GPS + IMU + Wheel Encoder Setup and received good feedback.
Now i ask about a system with 2 RTK GPS units + Wheel Encoder.
The RTK units are mounted on opposite ends of the robot frame. I am able to obtain position and orientation from this setup.
I want to clarify my settings of the frames for the robot_localization package.
I plan on publishing 2 Odometry messages from the RTK system, one for the position, the other for the orientation. The frameid in the Odometry message from the RTK system was originally "gps". Since the gps is mounted on the side of the robot, i have defined a static transform from gps->baselink.
For the first Odometry message (in which only the linear positions and linear velocities are populated), i changed the frameid of the message to "map", as well as set the childframe_id to "gps". In this way, the RTK solution gives me a transform from map to gps, and the defined static transform gives me gps to base-link, therefore i obtain the map-> base-link transform.
For the second Odometry message (in which only the yaw is obtained, none of the velocities, and none of linear positions), this is provided relative to true north, which is a world fixed frame. So for that i was thinking having frameid map, and childframeid as baselink, because the yaw described in this message is relative to true north.. This would be published as a separate Odometry message.
For the wheel encoder node, i have it publishing Odometry message with frameid being odom, and child frame id being baselink. All the fields are populated (pose, twist).
And now, i fuse them with one instance of EKF in robot_localization package. From each odometry message, i fuse the following:
- only xyz position and linear velocity xyz (map->gps + gps->baselink static transform = map->baselink)
- yaw and only yaw (relative to earth and so map->base_link)
- linear and angular velocity (odom->base_link)
Does this setup make sense?
Thank you, Jad
Asked by JadTawil on 2018-04-22 10:58:59 UTC
Answers
I can see 2 possible problems in your setup:
1) You might have a broken tf tree since you do not have anything that handles map->odom transform. If you plan to use robot_localization packet, you might want to read the note on fusing gps.
2) I assume "linear velocity xyz" will be "velocity" measurements from your RTK node? In that case, you will feed the filter the same information twice, e.g velocity measurement xyz is obtained by differentiating GPS locations, which you already fuse.
Asked by tuandl on 2018-04-22 14:57:16 UTC
Comments
I am under the impression that the map->odom transform is derived from map->base_link transform and odom->base_link transform
Asked by JadTawil on 2018-04-22 19:45:16 UTC
if you know the transfrom from A->B, and the transform from B->C, then A->C is implicitly known. So map->base-link, base-link->odom, gives you map->odom.. true?
Asked by JadTawil on 2018-04-23 08:24:32 UTC
Re. your first comment, you can't have a map->base_link tf and an odom->base_link tf as this would mean base_link has two parents.
Asked by stevejp on 2018-04-27 15:08:05 UTC
Right, that is correct.
Asked by JadTawil on 2018-04-28 06:26:23 UTC
Comments
@JadTawil I'm a little confused on what the 'gps' frame is in your setup. If the GPS is reporting pose odometry (presumably of gps_link in the gps frame), why are you defining a static transform between gps and base_link? I'm guessing the 'gps' frame is being confused with a 'gps_link' frame.
Asked by stevejp on 2018-04-26 07:32:43 UTC
yes gps_link is what it really means.
Asked by JadTawil on 2018-04-26 15:46:34 UTC