ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

What is good practice to fuse pose from a unique odom message in robot_localization in both ekf_se_odom and ekf_se_map ?

asked 2017-06-28 06:59:51 -0500

Yvonnn gravatar image


I am fusing odometry from a lidar (I have it thanks to undocumented pub_odometry parameter of hector_slam), IMU and GPS data. I am using the dual_ekf_navsat_example. My odom message has no twist information, only pose. So that it is taken into account by ekf_se_odom, I need to publish it with frame_id = odom, because world_map of ekf_se_odom is odom. Then, if I want my odom message to be fused again in ekf_se_map, I need to publish it with frame_id = map, because world_map of ekf_se_map is map. So... I guess I have to duplicate my odom message... am I right or am I missing something ?


edit retag flag offensive close merge delete


You only need one message. The frame_id of the message depends upon which frame hector_slam is estimating your position in. I haven't used the package myself, but as long as you have set the package map and odom frame parameters correctly, then the default message frame_id is correct for both ekf's.

ufr3c_tjc gravatar image ufr3c_tjc  ( 2017-06-28 18:07:30 -0500 )edit

Not sure you got it. My pb is strongly linked to this simpler question : will an instance of robot_state_estimator with parameter world_frame = map use the pose part of a odometry message with frame_id = odom ? My answer is : NO. That's why I need to publish a odometry message with frame_id = map.

Yvonnn gravatar image Yvonnn  ( 2017-06-29 07:08:58 -0500 )edit

The answer to that simpler question is actually YES. The ekf node then transforms the data itself. You only need one message, with the frame_id of odom, and send it to both.

ufr3c_tjc gravatar image ufr3c_tjc  ( 2017-06-29 18:04:24 -0500 )edit

2 Answers

Sort by ยป oldest newest most voted

answered 2017-06-30 12:11:58 -0500

Yvonnn gravatar image

Well, I've just checked it one more time : pose with frame_id = odom not used by ekf_se_map with world_frame = map but used if I set frame_id = map. I am quite confident on this.

edit flag offensive delete link more



Then there is something wrong in your system, as this is not the correct behavior. Also, what you're doing is wrong, because the odometry is only being estimated in the odom frame, and setting the frame_id to map will make the ekf node think that the odometry is really in the map frame, but it isnt!

ufr3c_tjc gravatar image ufr3c_tjc  ( 2017-07-02 18:05:48 -0500 )edit

Make sure that the transform from map -> odom is being published by the ekf_se_map node, and that odom -> base_link is published by the ekf_se_odom node.

ufr3c_tjc gravatar image ufr3c_tjc  ( 2017-07-02 18:07:47 -0500 )edit

answered 2017-09-24 10:47:15 -0500

Tom Moore gravatar image

It depends on what data you are fusing in the filter. If you fuse pose data in the odom frame into an EKF whose world_frame parameter is set to map, then you will probably not like the results. If you are fusing velocity data, then it will work fine, as the velocity data is reported in the message's child_frame_id, which just gets transformed to your EKF's base_link_frame.

In any case, it will be a lot easier for me to answer if you post sample input messages from all inputs, and also post your EKF configurations.

edit flag offensive delete link more

Question Tools


Asked: 2017-06-28 06:59:51 -0500

Seen: 693 times

Last updated: Sep 24 '17