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

Using ekf_localization_node from robot_localization package for IMU only navigation

asked 2018-01-29 22:55:57 -0600

vik748 gravatar image

Hi, I have a pretty high quality IMU (VN-100) for which I want to test the performance with IMU-only EKF filter. I have setup my system inspired this post. However, I am experiencing the issue that the resulting /filtered/odometry shows zeros for linear displacements x,y and z.
Any hints or suggestions would be very welcome. Thanks in advance. I am setting up the system as follows:imu_ekf.launch :

 <launch>    
  <node pkg="tf2_ros" type="static_transform_publisher" name="bl_imu" args="0 0 0 1.5708 0 3.1416 base_link imu" />    
  <node pkg="robot_localization" type="ekf_localization_node" name="ekf_se" clear_params="true">
    <rosparam command="load" file="$(find imu_vn_100)/launch/imu_only_ekf.yaml" />
     <param name="odom_used" value="false"/>
      <param name="imu_used" value="true"/>
      <param name="vo_used" value="false"/>        
  </node>
</launch>

imu_only_efk.yaml:

frequency: 50
sensor_timeout: 0.1
two_d_mode: false
transform_time_offset: 0.0
transform_timeout: 0.0
print_diagnostics: true
debug: false
debug_out_file: /path/to/debug/file.txt
publish_tf: true
publish_acceleration: false
odom_frame: odom            # Defaults to "odom" if unspecified
base_link_frame: base_link #base_link  # Defaults to "base_link" if unspecified
world_frame: odom           # Defaults to the value of odom_frame if unspecified
imu0: /imu/imu
imu0_config: [true, true, true,
              true,  true,  true,
              true, true, true,
              true,  true,  true,
              true,  true,  true]
imu0_nodelay: false
imu0_differential: false
imu0_relative: false
imu0_queue_size: 5
imu0_pose_rejection_threshold: 0.8                 # Note the difference in parameter names
imu0_twist_rejection_threshold: 0.8                #
imu0_linear_acceleration_rejection_threshold: 0.8  #
imu0_remove_gravitational_acceleration: true
use_control: false
stamped_control: false
control_timeout: 0.2
control_config: [true, false, false, false, false, true]
acceleration_limits: [1.3, 0.0, 0.0, 0.0, 0.0, 3.4]
deceleration_limits: [1.3, 0.0, 0.0, 0.0, 0.0, 4.5]
acceleration_gains: [0.8, 0.0, 0.0, 0.0, 0.0, 0.9]
deceleration_gains: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0]

Cheers...

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
2

answered 2018-02-19 06:15:46 -0600

Tom Moore gravatar image

I can't say for certain what's wrong unless you post sample IMU messages (please do), but I note the following:

  • Is your IMU topic really imu/imu?
  • You have every single variable set to true for your IMU configuration, but I'm guessing it doesn't actually provide position (the first three true variables) or linear velocity (the seventh through the ninth true variables).
  • Get rid off all of the _threshold parameters. Those are advanced parameters that should only be used once you have the rest of the system functioning.
  • It won't make any difference, but you still have robot_pose_ekf parameters in your launch file.
  • Finally, I have never seen IMU-only state estimation produce anything usable. Double-integration of linear acceleration is going to make your life unpleasant, unless your IMU (or you) are actively handling biases.
edit flag offensive delete link more

Comments

I got the same problem . My robot frame is /thrbot/base_link and IMU frame is thrbot/imu_link .Any help?

Astronaut gravatar image Astronaut  ( 2021-09-26 07:05:32 -0600 )edit

Question Tools

1 follower

Stats

Asked: 2018-01-29 22:55:57 -0600

Seen: 2,259 times

Last updated: Feb 19 '18