robot_localization using UTM grid as map
Hi all,
I'm trying to use robot_localization
in Groovy to fuse information from several sensors (IMU, turn rate sensor and GPS). I'm using version x.1.6 from the hydro-devel branch (Check previous question regarding problems running in Groovy).
I've followed the tutorials from robot_localization
( http://wiki.ros.org/robot_localization ) and GPS integration ( http://wiki.ros.org/robot_localization ). Two instances of ekf_localization_node
are running. One fuses IMU and turn rate sensor data, and the second one fuses IMU, turn rate and GPS. world_frame of the 1st instance is set to odom, and world_frame of 2nd one is set to map.
IMU sensor provides roll, pitch, yaw and X,Y,Z accelerations. Turn rate sensor provides Z axis angular speed (yaw rate). GPS data is feed through the navsat_transform_node
.
All testing has been made with the platform static (it is an USV that is for the moment dry-docked).
Everything seem to be working, as the respective TFs and topics are published but I have two issues:
1.- I expected that "map" frame would be the UTM grid and the map->odom TF would give me basically a filtered transformation between the UTM grid and odom (the output of the now deprecated utm_transform_node
, gone through the EKF with the IMU and turn rate sensor). However, what it seems to give me is the drift of the odom frame with respect of the initial point which is (0,0) and not the original UTM coordinates that should be something around (582409, 4793246).
Is this correct? Is there a way to get that the second instance of the ekf_localization_node
gives me that transformation (UTM map --> odom)?
If I use the utm_transform node
, whould be the map->utm transform equivalent to what I'm looking for? It seems that navsat_transform_node
doesn't publish the odom-->utm transform.
2.- Is it enough an IMU with accelerations to have good estimations with ekf_localization_node
? The IMU I'm using (RPY and accelerations, plus yaw rate from other sensor) in static is giving some accelerations, probably because it is not perfectly planar, and the EKF seems to be integrating them without any filtering, so in a few minutes it is giving me speeds of Km/s. I undertand that this should be normal, as no other source of positioning is present, but it doesn't seem to be compensated at all by the GPS input in the second instance.
Is there any roll-pitch gravity compensation introduced in the EKF or is it necessary to introduce it before feeding the EKF with the accelerations?
I understand that it is still a feature under development, so I don't know if this question should be put here or in another forum.
Thank you.
UPDATE:
I've fixed the errors pointed out in the comments (negative Z acceleration when static and using /imu/pseaa in navsat_transform_node). Results are now much better than before, but still the accelerations add up and in a couple of minutes I get a drift ...