i have problem with my odometry when use robot_localization. before use this package, my pose odometry is so bad but no glitching. but when use this package, my odometry is better then before but the problem is glitching. anyone can help me with this problem? i'm sorry for my bad english :)

this is my problem, you can look my robot is glitching when use robot_localization package with wheel encoder and imu bno055

this is my ekf.yaml

frequency: 30  # Frekuensi estimasi (Hz)
sensor_timeout: 0.1  # Timeout (detik) untuk setiap sensor
two_d_mode: false  # Mode dua dimensi (true/false)

transform_time_offset: 0.0  # Waktu offset transform (detik)
transform_timeout: 0.0  # Timeout untuk transform (detik)

odom_frame: odom  # Nama frame odom
base_link_frame: base_link  # Nama frame base_link

world_frame: odom  # Nama frame world
map_frame: map  # Nama frame map

odom0: /odomwheel  # Topik odometri
odom0_config: [false,  false, false,
               false, false,  true,
               true,  false, true,
               false, false,  true,
               false, false, false]  # Konfigurasi odometri (position, linear velocity)
odom0_remove_gravitational_acceleration: true

        #        [x_pos   , y_pos    , z_pos,
        #         roll    , pitch    , yaw,
        #         x_vel   , y_vel    , z_vel,
        #         roll_vel, pitch_vel, yaw_vel,
        #         x_accel , y_accel  , z_accel]

imu0: /imu/data  # Topik IMU
imu0_config: [false, false, false,
              false, false, true,
              false, false, false,
              false, false, true,
              false, false, false]
 # Konfigurasi IMU (orientation, angular velocity, linear acceleration)
imu0_remove_gravitational_acceleration: true
imu0_rejection_treshold: 3

1 Answer 1


You should include a sample message from every sensor input, but right off the bat, I see some issues.

Your odom0 config shows that you are fusing absolute yaw, X velocity, Z velocity, and Z acceleration. There are multiple issues with this:

  • Odometry data (nav_msgs/Odometry) do not contain fields for acceleration, so your Z acceleration term is being ignored
  • You have two_d_mode set to false, but you don't have any measurement for Y or Y velocity, roll or roll velocity, or pitch or pitch velocity. Your state estimate covariance is going to explode. If your robot is in a 2D world, turn on two_d_mode. If it's operating in 3D, you need to provide references (absolute pose or velocity) for all dimensions.
  • You are fusing absolute yaw from your IMU and the wheel encoders. Those aren't going to agree, so at time step 1, you'll get a measurement from the IMU, and the filter will jump some amount towards that measurement. In time step 2, you'll get a measurement from your wheel encoders, and the filter will jump some to that value (or near it). Then another IMU measurement at time step 3, and so on.

This kind of thing is covered in the r_l wiki, so I recommend reading over it.

  • $\begingroup$ I still don't understand what you are saying, can you explain it easily? $\endgroup$ yesterday

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.