Ask Your Question

ekf_localization_node navsat_transform_node

asked 2015-03-02 11:33:24 -0500

Porti77 gravatar image

updated 2015-03-23 12:51:13 -0500

Hi Tom! Remember mi system: -I have a IMU microstrain 3DMGX2 -GPS -I want integrate with ekf

My configuration:


    IMU/DATA output
    Tnavsat_transform_node output

    Odometry message


    IMU/DATA output
    nmea serial GPS (NavSatFix)
    Odometry message

    odometry gps

With rqt graph i can see:

image description

Then i include a broadcasting transform base_link -> IMU and when i do this mi rqt graph change: image description

When i echo gps/odometry not is correct, i need to do other broadcast? In upload to dropbox my launch file and debug:


EDIT 2: when I point to the imu towards magnetic north, on the positive x serial cable the opposite side. imu get data through the following: X: 0 Y: 0 Z: 0.7 W: 0.7 Is it right?

edit retag flag offensive close merge delete



Removed the comments for easier reading.

Tom Moore gravatar imageTom Moore ( 2015-03-02 18:54:32 -0500 )edit

I simplified the nodes and included the rostopic echo. Thank you very much

Porti77 gravatar imagePorti77 ( 2015-03-03 10:07:09 -0500 )edit

I think you're going to need to be more descriptive than "is not correct." What exactly is wrong with it? Is it always zero? Does it jump around too much? Feel free to record and post a bag file and I'll take a look when I get a chance.

Tom Moore gravatar imageTom Moore ( 2015-03-10 15:43:08 -0500 )edit

The odometry/filtered is giving a consistent value and suddenly begins to increase much and then returns to converge to values ​​consistent . I leave a link with a rosbag where you can view all the topics . Thank You

Porti77 gravatar imagePorti77 ( 2015-03-14 03:21:21 -0500 )edit

Cool, I'll check it out soon.

Tom Moore gravatar imageTom Moore ( 2015-03-17 14:13:09 -0500 )edit

1 Answer

Sort by » oldest newest most voted

answered 2015-03-02 19:02:44 -0500

Tom Moore gravatar image

updated 2015-03-23 19:36:32 -0500

Can you post a sample IMU message? At first glance, I'd say you should get rid of your xxx_rejection_threshold settings. As for your question about tf, ekf_localization_node publishes a tf transform from the world_frame to the base_link_frame, and navsat_transform_node (optionally) publishes a transform from the UTM grid to your world frame. Even though you have that parameter set to false, the TransformBroadcaster object gets declared anyway, and I'm guessing that's enough to cause the graph to draw the arrow.

EDIT in response to updates/comments: the rejection thresholds are intended to help reject outlier measurements. Given your measurement sources, I don't think you need them. Just delete them from your launch file.

I think you should back up and try one thing at a time. Just run ekf_localization_node, and start with just your IMU. Make sure that it's producing output, and then move on to integrating the navsat_transform_node. And to answer what I think you were asking, yes, if you have some other source of odometry for your robot, then you should definitely fuse that as well.

EDIT 2: The nav_msgs/Odometry message uses quaternions to represent orientations. This is common in ROS. If you want to transform it, you'll need to write a node that takes in the quaternion and converts it. Alternatively, you can use tf_echo to listen to the world_frame->base_link_frame transform being broadcast by ekf_localization_node. tf_echo does the conversion for you.

For the GPS, no, you don't currently need a base_link->gps transform.

EDIT 3 (in response to comments): I'm afraid I don't understand. What do you mean by you "adapted an EKF"? ekf_localization_node and navsat_transform_node are all you should need. Do rostopic echo /odometry/gps. If it's not publishing, then navsat_transform_node isn't getting all the data it needs, or there's an issue with the data it's getting. As to whether I'll revise the code, if you meant that I should fix navsat_transform_node, I think it's more likely that there's an issue with the data. If you meant can I revise your code, I'm afraid I don't have the spare time.

EDIT 4: After looking at your debug file, I have a few notes:

  1. Your position is definitely not 0. I don't know what topic you're listening to or for how long, but if you search through the debug file for "Corrected full state is," you'll see that it's definitely integrating your GPS and IMU data, and that your positions are not 0. Are you certain you're echoing the right topic?
  2. That said, the GPS odometry messages that are coming in are all over the place. Not sure why. Have you plotted raw data from all your sensors to make sure the incoming data is correct?
  3. Your IMU data has incorrect accelerations. If you have it mounted flat, then your linear acceleration should be +9.81 for Z. Are you using a Microstrain ...
edit flag offensive delete link more


When I connect the imu with single ekf not get to have / odometry / filtered. I have to throw something other than the node imu and the ekf? Or make a call to a service or change any settings? Thanks for your time

Porti77 gravatar imagePorti77 ( 2015-03-03 16:33:51 -0500 )edit

No. One sensor is enough. If you're not getting output, then something is wrong. Are you broadcasting a transform from base_link->imu?

Tom Moore gravatar imageTom Moore ( 2015-03-03 19:19:57 -0500 )edit

I'm broadcasting a transform from base_link->imu, now i need euler angles because is more easy to interpret. When i want integrate a GPS i need broadcasting a transform from base_link->gps too?

Porti77 gravatar imagePorti77 ( 2015-03-03 20:04:47 -0500 )edit

Thanks for all the help that you proporcionadao me. I'm using the same IMU that you and I want to place in the center of the vehicle, the transformed I do is correct? Because the message odometry filtered and leaves the imu are not consistent. The launch tf is above

Porti77 gravatar imagePorti77 ( 2015-03-05 02:26:47 -0500 )edit

Your parameters to static_transform_publisher are wrong. It accepts two different parameter sets. One lets you specify Euler angles, and one lets you specify a quaternion. You are using the quaternion, but have the 1 in qX location, when it should be the qW location.

Tom Moore gravatar imageTom Moore ( 2015-03-05 07:08:47 -0500 )edit

I´ve corrected it and when i see the frames with rviz is right!! Thanks. Now i want integrate gps with navsat, i adapted a ekf for this but when i see odometry filtered the position x and y is 0. However gps/odometry is true. Can you revise the code?

Porti77 gravatar imagePorti77 ( 2015-03-06 06:15:33 -0500 )edit

Ok thanks, asked if he thought my launch parameters are fine. When I echo on odometry / gps values are correct, but when I echo on odometry / filtered position is always 0 in X and Y. I've already edited the launch with nodes that I throw. Thank You

Porti77 gravatar imagePorti77 ( 2015-03-06 08:36:25 -0500 )edit

Set debug mode to true, run your launch file, wait until a few /odometry/gps messages have been published, stop everything, and then post the debug output file using DropBox or something similar.

Tom Moore gravatar imageTom Moore ( 2015-03-06 10:56:05 -0500 )edit
Porti77 gravatar imagePorti77 ( 2015-03-07 03:55:26 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools



Asked: 2015-03-02 11:33:24 -0500

Seen: 1,890 times

Last updated: Mar 23 '15