# ekf_localization_node navsat_transform_node

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

My configuration:

ekf_localization_node

-Inputs
IMU/DATA output
Tnavsat_transform_node output

-Outputs
Odometry message


navsat_transform_node

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

-Outputs
odometry gps


With rqt graph i can see:

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

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

Thanks

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 close merge delete

1

( 2015-03-02 18:54:32 -0500 )edit

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

( 2015-03-03 10:07:09 -0500 )edit
1

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.

( 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 https://www.dropbox.com/s/rjqd6lc6tqt...

( 2015-03-14 03:21:21 -0500 )edit
1

Cool, I'll check it out soon.

( 2015-03-17 14:13:09 -0500 )edit

Sort by » oldest newest most voted

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 ...
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

( 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?

( 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?

( 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

( 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.

( 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?

( 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

( 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.

( 2015-03-06 10:56:05 -0500 )edit

## Stats

Seen: 1,887 times

Last updated: Mar 23 '15