Ask Your Question
0

Dual_ekf and navsat_transform for outdoor GPS based navigation

asked 2022-04-23 10:04:56 -0500

Sid05 gravatar image

updated 2022-05-10 02:22:13 -0500

Hi,

I need help for implementing GPS based outdoor navigation for my project and I have spent weeks trying to figure out how I could improve the functioning. I am attaching a video here as to how the visualization on RVIZ looks like and the description of the problem is as follows

Issue:

1)The robot position drifts as I move it in its environment and the orientation of the robot on RVIZ is also not facing the correct way when compared to the actual orientation. There is a 180 degrees shift in its orientation.To help you understand the drift, on the video , the robot is actually moving in the direction indicated by the green arrow.

2) The odometry/gps output from navsat_transform doesnt match odometry/filtered and odometry/filtered_map. While both the local and global odometry (i.e odometry/filtered and odometry/filtered_map match each other). I tried adding the magnetic declination and the yaw_offset (imu/data yaw value was not zero when facing magnetic north) in the navsat_transform parameters.

3) On RVIZ, the odom frame position and orientaion on TF is not stable, it changes.

Frame convention :

Map_frame: map

Odom_frame: odom

Base_link frame: Base_footprint

I have been going through several ros answers and I am running out of ideas and time

Here are my file contents

1) Dual_ekf_navsat.yaml


    ekf_se_odom:
      frequency: 30
      sensor_timeout: 0.1
      two_d_mode: true  #false
      transform_time_offset: 0.0
      transform_timeout: 0.0
      print_diagnostics: true
      debug: false

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

      odom0: odom    #odometry/wheel
      odom0_config: [false, false, false,
                     false, false, false,
                     true,  true,  true,
                     false, false, true,
                     false, false, false]
      odom0_queue_size: 10
      odom0_nodelay: true
      odom0_differential: false
      odom0_relative: false

      imu0: imu/data
      imu0_config: [false, false, false,
                    true,  true,  false,
                    false, false, false,
                    true,  true,  true,
                    true,  true,  true]
      imu0_nodelay: false
      imu0_differential: false
      imu0_relative: false
      imu0_queue_size: 10
      imu0_remove_gravitational_acceleration: true



    use_control: 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 ...
(more)
edit retag flag offensive close merge delete

Comments

Hi,

I just added the frames that I am using , hope it helps

Sid05 gravatar image Sid05  ( 2022-04-24 01:25:59 -0500 )edit

Can somebody pls guide me ?

Sid05 gravatar image Sid05  ( 2022-04-25 04:26:23 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2022-05-10 04:28:46 -0500

dinesh gravatar image

Hello, here is the example ekf config file which you can use to adjust the sensor parameter so it will work:

frequency: 10

two_d_mode: true

odom_frame: odom
base_link_frame: base_footprint
world_frame: odom
publish_tf: true

odom0: base_controller/odom
odom0_config: [false, false, false,
               false, false, false,
               true, false, false,
               false, false, false,
               false, false, false]

odom0_differential: true

imu0: /imu/data_raw
imu0_config: [false, false, false,
              false, false, true,
              false, false, false,
              false, false, false,
              false, false, false]

imu0_differential: true
imu0_relative: true

As i saw your confi, you need to make some sensor parameter to false value. You can play for that yourself.

edit flag offensive delete link more

Comments

Hi,

Thank you for your reply. For the IMU configuration , both the differential and the relative parameter is set to true, is there a explanation why both should be set true simultaneously

Sid05 gravatar image Sid05  ( 2022-05-10 05:02:32 -0500 )edit

you can find this details in their official documentation.

dinesh gravatar image dinesh  ( 2022-05-12 04:05:44 -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

1 follower

Stats

Asked: 2022-04-23 10:04:56 -0500

Seen: 137 times

Last updated: May 10