Ask Your Question

Febert's profile - activity

2016-01-12 07:30:15 -0600 received badge  Good Question (source)
2016-01-06 04:57:42 -0600 received badge  Supporter (source)
2016-01-06 04:01:27 -0600 received badge  Scholar (source)
2016-01-06 02:27:26 -0600 received badge  Enthusiast
2016-01-05 16:06:17 -0600 received badge  Famous Question (source)
2016-01-05 13:58:47 -0600 answered a question Fusing absolute position information and IMU-data using the ekf_localization_node

Here is a sample from the /imu data: ( It is from a gazebo simulation, I can provide the real data on Friday)

header: 
  seq: 44640
  stamp: 
    secs: 446
    nsecs: 700000000

  frame_id: base_link

orientation: 
  x: -0.0239752552915
  y: -0.000348687880234
  z: -0.997080646516
  w: -0.0724931023903
orientation_covariance: [0.0012755102040816321, 0.0, 0.0, 0.0, 0.0012755102040816321, 0.0, 0.0, 0.0, 0.0]

angular_velocity: 
  x: -0.207346366252
  y: 0.0202127792674
  z: -0.0457584426013
angular_velocity_covariance: [0.0025000000000000005, 0.0, 0.0, 0.0, 0.0025000000000000005, 0.0, 0.0, 0.0, 0.000225]

linear_acceleration: 
  x: 0.726588580842
  y: 0.193814955902
  z: 9.78251465653

linear_acceleration_covariance: [0.12249999999999998, 0.0, 0.0, 0.0, 0.12249999999999998, 0.0, 0.0, 0.0, 0.09]

and here is a sample from the /poseupdate:

---
header: 
  seq: 1976
  stamp: 
    secs: 887
    nsecs: 479000000
  frame_id: map
pose: 
  pose: 
    position: 
      x: 0.0102119445801
      y: -0.00177955627441
      z: 0.0
    orientation: 
      x: 0.0
      y: 0.0
      z: -0.0152736048181
      w: 0.999883351695
  covariance: [31.761859893798828, -3.0734965801239014, 0.0, 0.0, 0.0, -455.1424560546875, -3.0734965801239014, 47.1007080078125, 0.0, 0.0, 0.0, 3407.331787109375, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -455.1424560546875, 3407.331787109375, 0.0, 0.0, 0.0, 846946.375]
---

Side note: The /imu data comes at 100Hz, the poseupdate at 39Hz, I changed the ekf update rate to be also 100Hz.

2016-01-05 03:28:03 -0600 received badge  Nice Question (source)
2016-01-05 02:39:18 -0600 received badge  Editor (source)
2016-01-05 02:35:15 -0600 received badge  Notable Question (source)
2015-12-27 00:47:34 -0600 received badge  Popular Question (source)
2015-12-23 09:41:01 -0600 received badge  Student (source)
2015-12-22 09:47:10 -0600 asked a question Fusing absolute position information and IMU-data using the ekf_localization_node

Hello,

I have a robot car with a laser-scanner and an imu and would like to fuse the position information of the two sensors.

For laser based localization I am using the hector_mapping node which produces a /poseupdate topic. Additionally I am using an imu producing the /imu/data topic.

Those two shall be fused to provide a more accurate position estimate at a higher rate.

After incorporating the suggestions from Tom Moore my launch files look like this:

Edit 1

I am getting better behaviour now. What I did is based on the following thoughts: The odom->baselink transformation according to Rep105 should only be computed by odometry sources (by def. relativ/differential information). However before I was using differential set to false in the /imu0 data of the odom->baselink ekf, so the odometry got the absolute heading information from the imu. Could this have caused the orientation errors?

As I understood Rep105 the map->odom transform is computed indirectly by using absolute sensory information. So I thought it needs the absolute information from all source. That is why I set, differential to false for the imu topic of the map->odom ekf.

Here are my updated launchfiles (the mess with hector frames reverted):

The odom-baselink ekf-instance:

    <launch>
  <!-- Start Navigation Stack -->

  <node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
    <param name="map_frame" value="map"/>   
    <param name="odom_frame" value="odom"/>  

    <param name="map_size" value="2048"/>
    <param name="pub_map_odom_transform" value="false"/>
    <param name="pub_map_scanmatch_transform" value="false"/>
  </node>


  <node pkg="robot_localization" type="ekf_localization_node" name="ekf_localization_node" output="screen">
  <param name="print_diagnostics" value="true"/>
  <param name="frequency" value="100"/>
  <param name="two_d_mode" value="true"/>

  <param name="map_frame" value="map"/>  
  <param name="odom_frame" value="odom"/>
  <param name="world_frame" value="odom"/>   
  <param name="base_link_frame" value="base_link"/>

  <param name="pose0" value="/poseupdate"/>
  <rosparam param="pose0_config">  
    [true, true,  false,    <!-- You have two_d_mode on, so making Z true does nothing -->
    false, false, true,  
    false, false, false,
    false, false, false,
    false, false, false]
  </rosparam>
  <param name="pose0_differential" value="true"/>

  <param name="imu0" value="/imu"/>
  <param name="imu0_remove_gravitational_acceleration" value="true"/>    

  <rosparam param="imu0_config">  
    [false, false, false,
     false,  false,  true,     <!-- 2D mode, so roll and pitch do nothing -->
     false, false, false,
     false,  false,  true,     <!-- As above -->
     true,  true,  false]    <!-- Start with these turned off, verify that everything works, then turn X and Y back on (Z does nothing in 2D mode) -->
  </rosparam>
  <param name="imu0_relative" value="true"/>
  <param name="imu0_differential" value="true"/> 

  </node>

The map-odom ekf:

<launch>

  <node pkg="robot_localization" type="ekf_localization_node" name="aux_ekf_localization_node" output="screen">
   <param name="print_diagnostics" value="true"/>
  <param name="frequency" value="100"/>
  <param name="two_d_mode" value="true"/>

  <param name="map_frame" value="map"/>  
  <param name="odom_frame" value="odom"/>
  <param name="world_frame" value="map"/>   
  <param name="base_link_frame" value="base_link"/>

  <param name="pose0" value="/poseupdate"/>
  <rosparam param="pose0_config">  
    [true, true,  false,
    false, false, true,  
    false, false, false,
    false, false, false,
    false, false, false]
  </rosparam>
  <param name="pose0_differential" value="false"/>

  <param name="imu0" value="/imu"/>
  <param name="imu0_remove_gravitational_acceleration" value="true"/>    

  <rosparam param="imu0_config">  
    [false, false, false,
     false,  false,  true,    
     false ...
(more)