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

Robot localization EKF pose estimation drift during acceleration / deceleration

asked 2019-05-08 14:57:32 -0500

asafeniger gravatar image

updated 2019-05-08 17:30:40 -0500

jayess gravatar image

Hello,

I'm using robot localization's EKF on my robot and I have some issues with it. I'm using ROS kinetic version on Ubuntu 16.04 and I install robot localization pkg from apt-get install.

My inputs to the EKF are IMU (UM7), wheel encoders and fixed position from aruco tags. I'm using Optitrack motion capture system for position reference.

When the robot accelerates I noticed that the ekf estimation tends be behind the reference position and when its decelerates the ekf estimation is ahead of the referenced position. When I compared the odometry and aruco detection to the reference the error seems reasonable and significantly smaller than the ekf estimation error. My guess is that its related to the prediction phase. The bottom line is that the robot is stopping, approximately, 10 cm before its target.

I'm using the following configurations:

ekf_se_odom:
  odom_frame: odom
  base_link_frame: base_link
  world_frame: odom

  two_d_mode: true

  frequency: 40

  odom0: velocity_controller/odom
  odom0_config: [false, false, false,
                 false, false, false,
                 true, true, false,
                 false, false, true,
                 false, false, false]
  odom0_differential: false
  odom0_relative: true
  odom0_queue_size: 1

  imu0: imu/data_filtered
  imu0_config: [false, false, false,
                  false,  false,  false,
                  false, false, false,
                  false,  false,  true,
                  false,  false,  false]
  imu0_differential: false
  imu0_queue_size: 1
  imu0_remove_gravitational_acceleration: true

  debug: false

  process_noise_covariance: [1e-3, 0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                               0,    1e-3, 0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                               0,    0,    1e-3, 0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                               0,    0,    0,    0.3,  0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                               0,    0,    0,    0,    0.3,  0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                               0,    0,    0,    0,    0,    0.01, 0,     0,     0,    0,    0,    0,    0,    0,    0,
                               0,    0,    0,    0,    0,    0,    0.5,   0,     0,    0,    0,    0,    0,    0,    0,
                               0,    0,    0,    0,    0,    0,    0,     0.5,   0,    0,    0,    0,    0,    0,    0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0.1,  0,    0,    0,    0,    0,    0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0,    0.3,  0,    0,    0,    0,    0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0.3,  0,    0,    0,    0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0.3,  0,    0,    0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0.3,  0,    0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0.3,  0,
                               0,    0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0.3]

  initial_estimate_covariance: [1e-9, 0,    0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                0,    1e-9, 0,    0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                0,    0,    1e-9, 0,    0,    0,    0,    0,    0,    0,     0,     0,     0,    0,    0,
                                0,    0,    0,    1.0,  0,    0 ...
(more)
edit retag flag offensive close merge delete

Comments

For future questions/edits, to enable syntax highlighting please don't wrap code/terminal out/etc. in ''', you can use the preformatted text (101010) button. To use it, highlight the text and then click on the preformatted text (101010) button.

jayess gravatar image jayess  ( 2019-05-08 17:36:27 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted
1

answered 2019-05-15 04:51:30 -0500

Tom Moore gravatar image

My guess is that it's more a function of covariance values. They don't look terrible at first glance, but I'd have to see it in action. Some lag is to be expected - it is a filter, after all - but it shouldn't impact overall accuracy, and certainly should result in overshooting to that level (assuming that's the cause of the overshoot).

Can we step back and simplify the setup? Can you just run the first-tier (odom) EKF and compare the pose to the OptiTrack pose? I realize the frames won't agree, but you're more concerned with lag in starting and stopping.

BTW, I assume you have a base_link -> base_imu_link specified somewhere?

edit flag offensive delete link more

Question Tools

2 followers

Stats

Asked: 2019-05-08 14:57:32 -0500

Seen: 497 times

Last updated: May 15 '19