robot_localization Behavior when fusing delayed odometry messages
Hi everyone,
I use the ukf_localization_node to fuse a laserscan based odometry with a camera based odometry. Unfortunately the camera postprocessing delays the update by about 60-80 ms per localization update. So when the filter encounters these measurements, the time delta against the last measurement is negative as the other odometry source has higher frequency as well as lower latency.
Will the filter still behave correctly when dealing with negative deltas? Is there a better way I should set things up?
Thanks, Marc
EDIT: Thanks for your suggestion! I indeed use two seperate odometry topics which are both registered with the ukf node as follows:
<node pkg="robot_localization" type="ukf_localization_node" name="MapFusion" >
<param name="two_d_mode" value="true"/>
<param name="frequency" value="100"/>
<param name="map_frame" value="map"/>
<param name="odom_frame" value="odom"/>
<param name="world_frame" value="map"/>
<!-- Inputs -->
<!-- **** IMU0 : Orientation roll, pitch yaw from IMU **** -->
<param name="imu0" value="sensor/imu"/>
<rosparam param="imu0_config">[false, false, false, <!-- x,y,z -->
true, true, true, <!-- roll, pitch, yaw -->
false, false, false, <!-- x,y,z velocities -->
false, false, false, <!-- roll, pitch , yaw velocity -->
false, false, false ] <!-- x,y,z acceleration -->
</rosparam>
<param name="imu0_differential" value="false"/>
<!-- **** ODOM0 : odometry from Scanreg (highfreq) **** -->
<param name="odom0" value="sensor/scanreg/odometry"/>
<rosparam param="odom0_config">[true, true, true, <!-- x,y,z -->
false, false, false, <!-- roll, pitch, yaw -->
false, false, false, <!-- x,y,z velocities -->
false, false,false, <!-- roll, pitch , yaw velocity -->
false, false, false] <!-- x,y,z acceleration -->
</rosparam>
<param name="odom0_queue_size" value="20"/>
<param name="odom0_differential" value="false"/>
<param name="odom0_pose_rejection_threshold" value="4"/>
<!-- **** ODOM1 : odometry from VisGlob **** -->
<param name="odom1" value="sensor/visglob/odometry"/>
<rosparam param="odom1_config">[true, true, true, <!-- x,y,z -->
false, false, false, <!-- roll, pitch, yaw -->
false, false, false, <!-- x,y,z velocities -->
false, false,false, <!-- roll, pitch , yaw velocity -->
false, false, false] <!-- x,y,z acceleration -->
</rosparam>
<param name="odom1_queue_size" value="20"/>
<param name="odom1_differential" value="false"/>
<param name="odom0_pose_rejection_threshold" value="7"/>
</node<>