Utm->odom tf is not being published (robot_localization eloquent-devel)

asked 2020-03-24 07:14:57 -0500

ashwinsushil gravatar image

updated 2020-03-24 10:18:06 -0500

Hi everyone,

I'm using the robot_localization package for getting the position and velocity of my robot by using IMU and GPS. I am able to get the /odometery/filtered data.

However, Utm->odom frame is not being published even when broadcast_utm_transform: true.

Sensors used

  1. IMU data of type sensor_msgs/Imu (IMU has a magnetometer from which it derives its yaw)
  2. GPS data of type sensor_msgs/NavSatFix


To get a tf setup as shown below


Robot_localization setup


  • Inputs:
    • IMU
    • Transformed GPS data as an odometry message (navsat_transform_node output)
  • Outputs
    • Odometry message


  • Inputs
    • IMU
    • Raw GPS (NavSatFix)
    • Odometry (output of ekf_localization_node)
  • Outputs
    • Transformed GPS data as odometry message

The broadcast utm tranform is set to true: broadcast_utm_transform: true

Required Info:

  • Operating System:
    • Ubuntu 18.04.4 LTS
  • Installation type:
    • robot_localization installed from source
  • Version or commit hash:
    • eloquent-devel

Steps to reproduce issue

After installing robot_localization from the source. Run the following in a terminal.

a. ros2 launch robot_localization ekf_map.launch.py &

with parameters as shown below

    sensor_timeout: 0.1
    two_d_mode: true
    transform_time_offset: 0.0
    transform_timeout: 0.0
    publish_tf: true

    map_frame: map  
    odom_frame: odom  
    base_link_frame: base_link  
    world_frame: odom          

    odom0: odometry/gps
    odom0_config: [true,  true,  false,
                   false, false, false,
                   false, false, false,
                   false, false, true,
                   false, false, false]
    odom0_queue_size: 2
    odom0_nodelay: false
    odom0_differential: false
    odom0_relative: false
    odom0_pose_rejection_threshold: 5.0
    odom0_twist_rejection_threshold: 1.0

    imu0: example/imu
    imu0_config: [false, false, false,
                  true,  true,  true,
                  false, false, false,
                  true,  true,  true,
                  true,  true,  true]
    imu0_nodelay: false
    imu0_differential: false
    imu0_relative: true
    imu0_queue_size: 5
    imu0_remove_gravitational_acceleration: true

b. ros2 launch robot_localization navsat_transform.launch.py

with parameters as shown below:

    frequency: 30.0
    delay: 3.0
    magnetic_declination_radians: 0.0
    yaw_offset: 0.0
    zero_altitude: false
    broadcast_utm_transform: true
    broadcast_utm_transform_as_parent_frame: true
    publish_filtered_gps: false
    use_odometry_yaw: false
    wait_for_datum: false

Expected behavior

To get a tf tree like


Actual behavior


Please let me know if someone can help me figure this out. Thanks in advance.

edit retag flag offensive close merge delete


I have the same problem but in Dashing.Did you manage to fix it?

DanielRobotics gravatar image DanielRobotics  ( 2020-04-30 02:52:48 -0500 )edit

@DanielRobotics Unfortunately I did not find a fix yet.

ashwinsushil gravatar image ashwinsushil  ( 2020-04-30 06:38:00 -0500 )edit

@ashwinshushil, Please update if you get it to work. I am still trying myself to get it running

DanielRobotics gravatar image DanielRobotics  ( 2020-05-17 07:00:53 -0500 )edit

I had a quite similar Problem and I just fixed it. For me it was a Namespace Problem where the .yaml wasn't in the correct Namespace. I had two working Options: either delete navsat_transform_node: in your navsat.yaml file or type in the complete namespace in which it was loaded in your .launch file.

I hope this helps you and isn't a few months to late.

JHBraun gravatar image JHBraun  ( 2020-11-13 08:47:28 -0500 )edit