Robotics StackExchange | Archived questions

tune efk_localization_node

Hello everyone, first, here is my setup: Ubuntu 14.04 + ROS Jade

I simulated a two-wheeled robot driving circles, its width is 1m20, the radius of its wheels is 30 cm. It means that both the linear velocity (following the x-axis) and the angular velocity (following the z-axis) are always constant in this case.

Actually, I fused the data into the ekflocalizationnode using a TwistWithCovarianceStamped message (published in the "odom" frame) and thanks to this launchfile:

<!-- Launch file for ekf_localization_node -->

<node pkg="robot_localization" type="ekf_localization_node" name="ekf_localization" clear_params="true">

  <!-- ======== STANDARD PARAMETERS ======== -->


  <param name="frequency" value="20"/>


  <param name="sensor_timeout" value="0.06"/>


  <param name="two_d_mode" value="true"/>



  <!-- Defaults to "odom" if unspecified -->
  <param name="odom_frame" value="odom"/>
  <!-- Defaults to "base_link" if unspecified -->
  <param name="base_link_frame" value="base_link"/>
  <!-- Defaults to the value of "odom_frame" if unspecified -->
  <param name="world_frame" value="odom"/>

  <param name="transform_time_offset" value="0.0"/>


    <param name="twist0" value="/turtle1/cmd_vel"/>


  <rosparam param="twist0_config">[false, false, false,
                                  false, false, false,
                                  true,  true, false,
                                  false, false, true,
                                  false, false, false]</rosparam>



  <param name="print_diagnostics" value="true"/>


  <param name="twist0_queue_size" value="2"/>


  <param name="debug"           value="false"/>

  <param name="debug_out_file"  value="debug_ekf_localization.txt"/>


  <rosparam param="process_noise_covariance">[0.05, 0,    0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                                              0,    0.05, 0,    0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                                              0,    0,    0.06, 0,    0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                                              0,    0,    0,    0.03, 0,    0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                                              0,    0,    0,    0,    0.03, 0,    0,     0,     0,    0,    0,    0,    0,    0,    0,
                                              0,    0,    0,    0,    0,    0.06, 0,     0,     0,    0,    0,    0,    0,    0,    0,
                                              0,    0,    0,    0,    0,    0,    0.025, 0,     0,    0,    0,    0,    0,    0,    0,
                                              0,    0,    0,    0,    0,    0,    0,     0.025, 0,    0,    0,    0,    0,    0,    0,
                                              0,    0,    0,    0,    0,    0,    0,     0,     0.08, 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.01, 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.01, 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.015]</rosparam>


       <rosparam param="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,    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,    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,    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,     0.042,  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,    1e-9]</rosparam>




</node>

Without any noise added, no problem (just the same signal, delayed, as output to the EKF). However, when random noise is added to the angular velocity (standard deviation equals 10% of the value of this angular velocity), it seems that the signal is not filtered, there is noise after the signal is beeing filtered.

Actually, I thought that tuning the process noise covariance at the raw and column corresponding to yaw velocity to a value equals to the amplitude of the noise would do the trick but it doesn't (0.08 in my case)... Could someone kindly explain to me how to set both the initial estimate covariance and process noise covariance? (Sorry for my poor english)

Asked by Cookie32 on 2015-08-21 08:46:05 UTC

Comments

Can you please post a sample twist message?

Asked by Tom Moore on 2015-08-21 14:46:12 UTC

sorry I gave up a bit on this. I will create a new question since I integrated all that in a TwistWithCovarianceStamped message

Asked by Cookie32 on 2015-08-26 06:46:17 UTC

Answers