Output of robot_localization node cannot converge until fusing absolute pose data
Hi There,
I am working with a mobile robot CLEARPATH Jackal. It has two instances ekf_localization_node
running inside, one for local and one for global.
For the first test, ekf_local_node
was fused with wheel odometry
and IMU
. ekf_global_node
was fused with wheel odometry
, IMU
and the output of RTabMap
which took /odometry/filtered/local
as the input. The launch files are shown below:
ekflocalnode:
<param name="odom_frame" value="odom"/>
<param name="base_link_frame" value="base_link"/>
<param name="world_frame" value="odom"/>
<param name="transform_time_offset" value="0.0"/>
<param name="odom0" value="/jackal_velocity_controller/odom"/> <!-- jackal odometry -->
<param name="imu0" value="/imu/data"/> <!-- IMU -->
<!-- The order of the values is x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az. -->
<rosparam param="odom0_config">[false, false, false,
false, false, false,
true, true, false,
false, false, true,
false, false, false]</rosparam>
<rosparam param="imu0_config">[false, false, false,
false, false, true,
false, false, false,
false, false, true,
false, false, false] </rosparam>
<param name="odom0_differential" value="false"/>
<param name="imu0_differential" value="false"/>
<param name="odom0_relative" value="true"/>
<param name="imu0_relative" value="true"/>
ekfglobalnode:
<node pkg="robot_localization" type="ekf_localization_node" name="ekf_localization_global_1" output="screen" >
<remap from="/odometry/filtered" to="/odometry/filtered/global1"/>
<param name="frequency" value="50"/>
<param name="sensor_timeout" value="0.1"/>
<param name="two_d_mode" value="false"/>
<param name="odom_frame" value="odom"/>
<param name="base_link_frame" value="base_link"/>
<param name="world_frame" value="map"/>
<param name="transform_time_offset" value="0.0"/>
<param name="odom0" value="/jackal_velocity_controller/odom"/>
<param name="pose0" value="/rtabmap/localization_pose"/>
<param name="imu0" value="/imu/data"/>
<!-- The order of the values is x, y, z, roll, pitch, yaw, vx, vy, vz, vroll, vpitch, vyaw, ax, ay, az. -->
<rosparam param="odom0_config">[false, false, false,
false, false, false,
true, true, true,
false, false, true,
false, false, false]</rosparam>
<rosparam param="pose0_config">[true, true, true,
false, false, true,
false, false, false,
false, false, false,
false, false, false]</rosparam>
<rosparam param="imu0_config">[false, false, false,
false, false, true,
false, false, false,
false, false, true,
false, false, false]</rosparam>
<param name="odom0_differential" value="false"/>
<param name="pose0_differential" value="true"/>
<param name="imu0_differential" value="false"/>
<param name="odom0_relative" value="false"/>
<param name="pose0_relative" value="false"/>
<param name="imu0_relative" value="true"/>
The first test worked perfectly. I generated plots of positions x versus y for ekfnodes (both ekflocal and ekf_global) and they have good agreements with those obtained fromvicon
cameras. However, after a few days when I did the second test with the same launch file, both ekf nodes had convergence problems, i.e. position x grew boundlessly which is unphysical. This problem is weird because I used the same launch file and the experiment environment was the same as before.
I investigated the problem for a bit, and I found fusing the absolute pose of wheel odometry with ekf_local
node can fix the convergence problem for 'ekflocalnode'. For ekf_global_node
, if I fuse absolute poses from both wheel odometry
and Rtabmap
, or only one of them, it showed a discontinuous plot of position x-y, but the trend looks nice.
I am wondering is this normal for that discontinuous plot, and why the initial launch file did not work?
Asked by raewu on 2018-06-12 14:38:31 UTC
Answers
Hi Tom,
Thank you for your reply. After reinstalling the robot_localization
package. It worked all of a sudden. I still don't know what caused this though.
Asked by raewu on 2018-07-17 14:48:27 UTC
Comments
This will be impossible to answer without sample input messages from each of your sensor inputs, I'm afraid.
Asked by Tom Moore on 2018-06-19 05:42:31 UTC
Any update on this? I may be able to help if you provide sample sensor messages.
Asked by Tom Moore on 2018-07-17 05:51:15 UTC