Navigation stack parameter tuning for high accurate localization
Hi, everyone.
I'm using nav stack and tuning parameters.
I tuned parameters as followings because high accurate localization is required.
(base_local_planner's parameters)
xy_tolerance: 0.03 (<- small value)
yaw_tolerance: 0.05 (<- small value)
max_vel_x: 0.50
min_vel_x: 0.01
max_vel_theta: 1.57
min_vel_theta: 0.01
max_rotational_vel: 1.57
min_in_place_rotational_vel: 0.01
acc_lim_th: 1.57
acc_lim_x: 0.5
acc_lim_y: 0.5
(amcl's parameters)
min_particles: 500
max_particles: 1000(<- I can't change this value for some reason)
kld_err: 0.01
kld_z: 0.99
update_min_d: 0.1
update_min_a: 0.2
resample_interval: 1
transform_tolerance: 0.5
laser_z_hit: 0.99
laser_z_rand: 0.01
laser_sigma_hit: 0.3
laser_model_type: likelihood_field
odom_alpha1~alpha5: 0.2
move_base's frequency is set to 10[Hz].
I think that my robot has enough small minimum translational and rotational velocities,
however it often oscillates at a goal point.
When the oscillation occurs, navigation takes so much time.
How can I avoid the above problem ?
Any other effective parameters ??
(I think amcl parameters are not related to accuracy of a localization but robustness of it.)
Configuration
The robot can realize very low velocity(At least 0.005[m/s], 0.005[rad/s]).
Sensor: LRF (error: +/- 0.010[m])
Map resolution: 0.010[m/pixel]
Map was drawn manually and the width of the wall is 1 pixel.
Thanks in advance.
What oscillates the robot motion or the localization? Is this also happening when the goal is in open space without obstacles? Did you verify that the manually drawn map fits the laser measurements?
Thank you for your comment! It happens in open space. I think Localization causes oscillation and the robot repeatedly rotates and moves forward because of it. I've verified my map is well suited to the laser measurements.
If you suspect localization, you should test that without the navigation and just teleoperate the robot by hand. Localization should match your actual robot pose in the world and laser scans should lie on the map's walls. If not, check back.
Thank you for your good advice. I've checked it. The result showed that the robot could move very accurately, even if its velocity was very low (0.01m/s).
So localization is fine, right? Although low velocities usually are not the problem, but high velocities. In that case, what can you robot do kinematically (diff drive?). The parameters you have set (3cm, 3deg) are impossible to reach by the simple base_local_planner
Even if the maximum velocity is set to low, the oscillation occurs and my robot is omni-driven. Recently I doubt of the adequacy of amcl's params(update_min_a = 0.2 and update_min_d = 0.2). Would you mind if I ask why the parameters are impossible and how big parameters are possible ?
First, if you have omni-drive, make sure holonomic_robot is set to true. If you had a diff-drive robot only a full motion planner could reach position and orientation at the same time, which base_local_planner isn't.
How to check whether laser measurements fits the built map. What is the test procedure