How to navigate a rectangular robot in tight spaces eg narrow corridors?
I am using ROS Noetic on Ubuntu 20.04 and have been stuck on this problem for many days. I am using TEB local planner (I tried DWA planner before too but it performed worse than TEB). My robot is 82cm long, 63cm wide, thus we originally set its footprint to be: [ [0.41, 0.315], [0.41, -0.315], [-0.41, -0.315], [-0.41,0.315] ].
We realized it was unable to navigate tight spaces that are 0.9m-1m wide only. Thus I reduced the footprint to be squarish: [ [0.315, 0.315], [0.315, -0.315], [-0.315, -0.315], [-0.315,0.315] ] for costmaps. For TEB I am using a small circular footprint of radius 5cm for optimization, but I still get this message often TebLocalPlannerROS: trajectory is not feasible. Resetting planner...
I understand TEB is checking feasibility using the local costmap's footprint, but I cannot reduce the local costmap footprint further because I noticed it sometimes hit/scrape obstacles if I reduce it more. Currently, the robot can navigate a few goals in tight spaces successfully but often it will get stuck. I do notice its wheel odometry is a tad noisy and the localization drifts a little as it moves around, contributing to it unable to find global and/or local paths.
Here are my amcl parameters:
odom_model_type: "diff"
transform_tolerance: 0.2
gui_publish_rate: 10.0
laser_max_beams: 30
min_particles: 50
max_particles: 1000
kld_err: 0..01 #0.05
kld_z: 0.99
odom_alpha1: 0.2
odom_alpha2: 0.2
odom_alpha3: 1.25
odom_alpha4: 0.2
odom_alpha5: 0.1
laser_z_hit: 0.95 #0.5
laser_z_short: 0.1 #0.05
laser_z_max: 0.05
laser_z_rand: 0.05 #0.5
laser_sigma_hit: 0.2
laser_lambda_short: 0.1
laser_model_type: "likelihood_field"
laser_likelihood_max_dist: 2.0
update_min_d: 0.2
update_min_a: 3.14/6 #0.5
odom_frame_id: "odom"
resample_interval: 2 #1
transform_tolerance: 0.1
recovery_alpha_slow: 0.0
recovery_alpha_fast: 0.0
I increased odom_alpha3 to be higher and I noticed somewhat better localization than before, but it still drifts a little as the robot moves. Drifting localization is still okay when navigating in open spaces, but is an issue in tight spaces.
Please advise me on how to tune for navigation in tight spaces, thanks!
By adjusting
penalty_epsilon
you can do some wonders in tight spaces. Please take a look at this link:https://github.com/rst-tu-dortmund/te...
name>/penalty_epsilon (double, default: 0.1)
Add a small safety margin to penalty functions for hard-constraint approximations