Is my odometry good enough for AMCL?
I am having problems with AMCL during navigating empty spaces where LiDAR can not sense much features or match with map. It jumps to a very different location after some time. I have tried changing recovery_alpha_fast
and recovery_alpha_slow
parameters to prevent resampling all over the map and also decreased the odom_alpha
parameters to prevent the particles to spread. However, AMCL pose still jumps to a distant location and most of the time its very close to an obstacle. I have also came across with the troubleshooting guide on the ros wiki http://wiki.ros.org/navigation/Troubleshooting which recommends running some tests to check if odometry is good for AMCL before tuning it. Forward motion tests seems ok but rotation doesn't look perfectly aligned and I am not sure if it looks like as it should be since there is always an error in odometry. So if anyone can confirm that its good enough or not. Recording of the test is attached. https://www.youtube.com/watch?v=ZHEdBvxV0cY
<launch>
<arg name="use_map_topic" default="false"/>
<arg name="scan_topic" default="scan" />
<node pkg="amcl" type="amcl" name="amcl">
<param name="tf_broadcast" value = "true"/>
<param name="use_map_topic" value="$(arg use_map_topic)"/>
<param name="odom_model_type" value="diff-corrected"/>
<param name="laser_max_beams" value="180"/>
<param name="laser_min_range" value="0.1"/>
<param name="laser_max_range" value="6.0"/>
<param name="min_particles" value="500"/>
<param name="max_particles" value="2000"/>
<param name="kld_err" value="0.05"/>
<param name="kld_z" value="0.99"/>
<param name="odom_alpha1" value="0.005"/>
<param name="odom_alpha2" value="0.005"/>
<param name="odom_alpha3" value="0.01"/>
<param name="odom_alpha4" value="0.005"/>
<param name="laser_z_hit" value="0.25"/>
<param name="laser_z_short" value="0.05"/>
<param name="laser_z_max" value="0.05"/>
<param name="laser_z_rand" value="0.5"/>
<param name="laser_sigma_hit" value="0.2"/>
<param name="laser_lambda_short" value="0.1"/>
<param name="laser_model_type" value="likelihood_field_prob"/>
<param name="laser_likelihood_max_dist" value="2.0"/>
<param name="update_min_d" value="0.1"/>
<param name="update_min_a" value="0.314"/>
<param name="odom_frame_id" value="odom"/>
<param name="base_frame_id" value="base_footprint"/>
<param name="global_frame_id" value="map"/>
<param name="resample_interval" value="1"/>
<param name="transform_tolerance" value="1.0"/>
<param name="recovery_alpha_slow" value="0.0"/>
<param name="recovery_alpha_fast" value="0.0"/>
<param name="initial_pose_x" value="0.0" />
<param name="initial_pose_y" value="0.0" />
<param name="initial_pose_a" value="0.0" /> -->
<param name="receive_map_topic" value="true"/>
<param name="first_map_only" value="true"/>
<remap from="scan" to="$(arg scan_topic)"/>
<remap from ="odom" to="odometry/filtered"/>
</node>
</launch>