在使用 move_base
进行导航时,如果全局路径规划在遇到障碍物时频繁在障碍物左右两侧跳变,导致机器人绕障失败,通常可以通过调整参数优化来解决。以下是具体原因分析和解决方案:
问题原因分析:
-
全局路径规划的震荡(Oscillation)
-
全局路径规划器(如
navfn
或global_planner
)在动态障碍物环境下,可能会因局部障碍物更新频繁,导致路径在障碍物两侧反复切换。 -
路径平滑性不足:全局路径生成时未充分考虑平滑性,导致路径突变。
-
-
代价地图(Costmap)配置不合理
-
障碍物膨胀层(Inflation Layer) 参数(如
inflation_radius
)设置过小,路径紧贴障碍物边缘,易受传感器噪声或动态障碍物影响。 -
障碍物更新策略 过于敏感(如
obstacle_range
或cost_scaling_factor
设置不合理)。
-
-
局部路径规划与全局路径的协调问题
-
局部规划器(如
DWA
或TEB
)在跟踪全局路径时,可能因路径跳变而无法稳定执行。
-
参数调整与优化:
1. 调整全局路径规划器参数
navfn
/ global_planner
参数:
# 全局路径规划器参数(通常在 global_planner_params.yaml 中)
GlobalPlanner:# 路径平滑性权重smoothness_weight: 0.5# 路径长度权重path_distance_bias: 0.5# 是否允许路径贴近障碍物(设为 false 可远离障碍物)allow_unknown: false# 路径搜索的启发式权重(A* 算法)heuristic_weight: 2.0
-
增大
smoothness_weight
,使路径更平滑。 -
减小
path_distance_bias
,避免路径紧贴障碍物。
2. 优化代价地图配置
膨胀层(Inflation Layer):
# 代价地图参数(通常在 costmap_common_params.yaml 中)
inflation_layer:enabled: true# 膨胀半径(增大以远离障碍物)inflation_radius: 0.5# 障碍物代价衰减系数(减小使路径更远离高代价区域)cost_scaling_factor: 5.0
-
增大
inflation_radius
:使路径远离障碍物边缘。 -
减小
cost_scaling_factor
:加速障碍物代价的衰减,避免路径在障碍物附近震荡。
障碍物层(Obstacle Layer):
obstacle_layer:# 最大障碍物检测范围(避免检测过远障碍物)obstacle_range: 2.5# 障碍物衰减范围(与 inflation_radius 配合使用)raytrace_range: 3.0
3. 调整局部路径规划器参数
DWA 局部规划器:
# DWA 参数(通常在 local_planner_params.yaml 中)
DWAPlannerROS:# 最大速度(降低速度以减少路径震荡)max_vel_x: 0.5# 路径跟随权重(增大以更严格跟踪全局路径)path_distance_bias: 32.0# 目标朝向权重(增大以稳定朝向)goal_distance_bias: 24.0# 障碍物回避权重(增大以更远离障碍物)occdist_scale: 0.1
4. 全局路径规划频率调整
降低全局路径规划的更新频率,减少路径跳变:
move_base:# 全局规划器调用频率(Hz)planner_frequency: 0.5