1. 环境配置
global_planner已集成在ROS的navigation包中。若未安装,安装navigation包:
sudo apt-get install ros-noetic-navigation
# 验证安装:
rospack find global_planner
二、配置全局规划器(global_planner)
2.1 创建global_planner_params.yaml,配置算法行为参数(关键参数):
GlobalPlanner:
#use_dijkstra=true:Dijkstra算法,保证最优路径但计算较慢。
#use_dijkstra=false:A*算法,启发式搜索更快,但路径可能非最优。
use_dijkstra: false # true=Dijkstra, false=A*
use_grid_path: false # true=沿栅格边界生成路径,false=梯度下降法(启用梯度下降法,生成更平滑路径)
allow_unknown: true # 允许路径穿越未知区域
old_navfn_behavior: false # 禁用navfn兼容模式
visualize_potential: true # 可视化势场(用于调试)
default_tolerance: 0.5 # 目标点容差(m)
2.2 创建move_base_globalplanner.launch文件,并指定move_base的base_global_planner参数为global_planner:
base_global_planner: "global_planner/GlobalPlanner"
2.3 加载参数文件:
<launch>
<node pkg="move_base" type="move_base" name="move_base">
<!-- 加载全局规划器参数 -->
<rosparam file="$(find nav)/param/global_planner_params.yaml" command="load" />
。。。。
三、修改启动文件并生成
turtlebot3_navigation.launch文件中,move_base_globalplanner.launch代替初始move_base.launch
<include file="$(find nav)/launch/move_base_globalplanner.launch">
<arg name="model" value="$(arg model)" />
<arg name="move_forward_only" value="$(arg move_forward_only)"/>
</include>
cd ~/catkin_ws
catkin_make_isolated --pkg nav --install
四、启动仿真
roslaunch nav turtlebot3_navigation.launch
五、启动导航(设置目标位姿)
use_dijkstra=true(默认值):Dijkstra算法,保证最优路径但计算较慢。
use_dijkstra=false:A*算法,启发式搜索更快,但路径可能非最优,可能导致贴着墙走
六、对比(NavfnROS)
global_planner是对 NavfnROS 的改进版本,提供更高质量的路径规划,是 ROS Indigo(Ubuntu 14.04) 及以后版本中的默认全局规划器。
对比项 | NavfnROS | global_planner |
---|---|---|
默认使用 | ROS Hydro 及之前版本 | ROS Indigo 及之后版本 |
算法 | Dijkstra / A* | A* / Dijkstra / Greedy Best First |
路径质量 | 一般,锯齿较多 | 更平滑,更适合机器人运动 |
性能 | 小地图好,大地图慢 | 性能更优,适合大地图 |
参数配置 | 较少 | 丰富,可高度定制 |
实时性 | 较差 | 更好 |
是否推荐 | 已逐渐淘汰 | 推荐使用 |
功能扩展 | 不支持插值等高级功能 | 支持路径插值、启发函数选择等 |
七、配置避障参数
inflation_layer:
# 启用膨胀层,负责在障碍物周围生成一个“禁止通行”的安全区域,防止路径规划器生成贴着障碍物的路径。
enabled: true
# 定义膨胀区域的半径(单位:米)。表示从障碍物向外扩展的“危险区域”范围,路径规划时会避开这些区域。
inflation_radius: 1.0
# 控制膨胀代价的衰减速度(即从障碍物到自由空间的代价梯度)。数值越大,代价衰减越快,路径会更远离障碍物。
cost_scaling_factor: 3.0
rosrun rqt_reconfigure rqt_reconfigure
代价值(cost value)在ROS的代价地图中表示机器人在某个位置或路径段的可行性和安全性 ,其数值范围通常为0到255,具体含义如下:
- 代价值越高 :表示该区域越危险或不可行,路径规划器会尽量避开该区域。例如,障碍物附近或狭窄通道的代价较高。
- 代价值越低 :表示该区域越安全或可通行,路径规划器倾向于选择低代价区域。
在ROS的代价地图(costmap_2d)中,cost_scaling_factor 和 inflation_radius 是 相互关联的参数,共同决定了机器人路径规划时对障碍物的避让行为,代价值的计算公式为:
cost=e−1.0∗cost_scaling_factor∗(d−r)cost=e^{ −1.0 * cost\_scaling\_factor * (d-r)}cost=e−1.0∗cost_scaling_factor∗(d−r)其中 d 是当前点到障碍物的距离,r 是机器人内切圆半径,
7.1 inflation_radius 是膨胀半径
表示从障碍物向外扩展的“安全区域”范围(单位:米,表示用于计算的区域,区域外默认安全则不计算),在这个区域内,代价值会根据 cost_scaling_factor 计算,路径规划器会尽量避开高代价区域。
- 全局参数用于全局路径规划时避开障碍物,增大该值会使全局路径更远离障碍物,但可能限制可通行区域。
- 局部参数用于局部避障(DWA控制器),但某些场景下可能不启用膨胀层,通常比全局值小(如 0.2~0.5 米),以允许更灵活的动态避障。
7.2 cost_scaling_factor
是膨胀代价的衰减因子 ,控制代价值从障碍物向外递减的速度,数值越大代价衰减越快,数值越小代价衰减越慢路径可能更贴近障碍物。
- 全局参数控制全局代价地图中代价值的衰减速度。数值越大,代价衰减越快,路径更远离障碍物。若值过高(如 20),即使增大 inflation_radius,实际有效膨胀区域可能受限,导致路径差异不明显 。
- 局部参数影响局部避障的保守程度。数值较小允许更贴近障碍物的动态避障。
7.3 cost_scaling_factor 与 inflation_radius 需要协同设置:
参数 | 全局代价地图 | 局部代价地图 |
---|---|---|
inflation_radius | 设置机器人与障碍物的最小安全距离(如 0.55~1.0 米),避免全局路径贴墙 | 可选,用于局部避障(如 0.2~0.5 米),或禁用(依赖局部规划器功能) |
cost_scaling_factor | 控制全局路径避障的保守程度(推荐 3.0~5.0) | 调整局部避障的灵活性(推荐 1.0~2.0) |
7.4 不同带价值颜色表示
在ROS的代价地图(costmap)中,代价值的不同颜色表示机器人在该位置的通行可行性和障碍物接近程度 。具体含义如下:
- 白色(代价值=0) :表示自由空间,无障碍物,机器人可以安全通过。
- 浅灰色/浅红色(代价值=1~127) :表示靠近障碍物的区域,但仍可通行。数值越接近127,越接近障碍物边界,可能存在风险。
- 深红色(代价值=128~254) :表示高代价区域(如障碍物膨胀层),路径规划器会尽量避免通过。
- 黑色(代价值=255) :表示致命障碍物区域,路径规划器完全禁止通行。
7.5 注意
- 降低 cost_scaling_factor :
例如将 cost_scaling_factor 从20降至3~5,代价衰减速度变慢,inflation_radius 的增大将更明显地扩展安全区域。 - 匹配参数比例 :
若 inflation_radius=10 米,可设置 cost_scaling_factor=0.5~1.0。
若 inflation_radius=20 米,可设置 cost_scaling_factor=0.2~0.5。
这样代价衰减速度与膨胀半径更匹配,路径避障行为差异更显著 。 - 结合机器人尺寸 :
inflation_radius 应至少大于机器人半径(如机器人半径0.3米,inflation_radius 推荐0.5~1.0米)。
cost_scaling_factor 可根据实际路径平滑度调整,推荐初始值3~5 - 当 cost_scaling_factor 设置为较高值(如20) 时,代价衰减速度非常快,代价值会在距离障碍物很近的范围内(如 d=0.5 米)迅速衰减到接近0。此时,inflation_radius=10 或 20 的区别仅体现在代价趋近于0的区域,对路径规划的约束几乎相同。