2. 矿山场景ROS2导航参数体系总览

在矿山巷道中运行的巡检机器人,导航行为几乎完全由一组参数决定:机器人离巷帮多远算安全、在粉尘遮挡激光时如何保守地重规划、遇到矿车临时占道时先等待还是先绕行。ROS2 Navigation2(Nav2)把这些可调量按职责划分为四大类——代价地图参数、规划器参数、控制器参数、恢复行为参数。理解这套分类,比记住某个具体数值更重要,因为调参时的第一步永远是判断"这个现象该归哪一类参数管"。

四类参数各管什么

代价地图参数决定机器人"眼中的世界"。它包含各层地图的开关与尺寸(静态层、障碍层、膨胀层、体素层)、分辨率、更新频率,以及最关键的膨胀半径 inflation_radius 与代价衰减系数 cost_scaling_factor。矿山巷道宽度常只有 2.5~3.5 m,膨胀半径设大了会把整条巷道"堵死",设小了又贴着巷帮擦碰,这是矿山场景最典型的矛盾点。

规划器参数决定"走哪条路"。全局规划器(如 NavFn、Smac Planner)关注路径是否最短、是否满足机器人最小转弯半径。矿用巡检机器人多为差速或四轮转向底盘,若使用 Smac Planner 的 Hybrid-A 模式,就必须给出 minimum_turning_radius,否则规划出的路径机器人根本执行不了。

控制器参数决定"怎么沿着路走"。包括最大线速度/角速度、加速度限制、目标容差、控制频率,以及 DWB 等局部控制器的采样空间与评分权重。井下路面湿滑、坡度变化大,速度与加速度上限往往要比地面场景压低 30%~50%。

恢复行为参数决定"走不通时怎么办"。Nav2 提供清除代价地图、原地旋转、后退、等待等恢复插件,参数包括触发阈值、重试次数、超时时间。矿车占道属于短时障碍,配置"等待 + 清除障碍层"通常比"后退重规划"更合理。

Nav2 参数体系与 YAML 配置映射 ROS2 参数服务器 节点名 / 参数名 / 值 三元组 nav2_params.yaml 层级:节点 → ros__parameters 加载 ① 代价地图参数 global_costmap / local_costmap inflation_radius cost_scaling_factor resolution / update_frequency 决定"世界长什么样" ② 规划器参数 planner_server minimum_turning_radius tolerance / motion_model expected_planner_frequency 决定"走哪条路" ③ 控制器参数 controller_server max_vel_x / max_vel_theta acc_lim_x / acc_lim_theta xy_goal_tolerance 决定"怎么沿路走" ④ 恢复行为参数 bt_navigator recovery_plugins retry_count / timeout wait_duration 决定"走不通怎么办" YAML 结构:节点名 → ros__parameters → 参数键值 controller_server: ros__parameters: max_vel_x: 0.6 # 井下限速 m/s acc_lim_x: 0.3 # 湿滑路面降加速 xy_goal_tolerance: 0.15 local_costmap: ros__parameters: inflation_radius: 0.45 cost_scaling_factor: 3.0 update_frequency: 5.0

参数服务器机制:从 YAML 到节点

ROS2 的参数不是全局变量,而是挂在每个节点名下的键值对。启动时,ros2 launch 通过 --params-file 把 YAML 交给各节点,节点在构造阶段声明参数(declare_parameter)并读取默认值,YAML 中的同名键会覆盖默认值。因此 YAML 的第一层键必须是节点名(如 controller_server),第二层固定为 ros__parameters,第三层才是参数键。写错节点名不会报错,只会静默地"参数没生效"——这是新手最常见的坑。

运行中可用 ros2 param get /controller_server max_vel_x 查看实际生效值,用 ros2 param set 临时修改(重启即失效)。诊断时先 get 再怀疑代码,能快速排除"配置没加载"这一类问题。

矿山场景的配置组织建议

建议按"公共 + 场景覆盖"组织 YAML:把巷道宽度、限速、膨胀半径等矿山通用值放在 nav2_params_mine.yaml,再为"主运输巷""采场联络道""斜坡道"分别写覆盖文件,启动时按任务加载。这样同一台机器人在不同区段切换参数集,而不必维护多份几乎相同的完整配置。

调参顺序建议:先代价地图(世界是否合理)→ 再规划器(路径是否可执行)→ 再控制器(跟踪是否平稳)→ 最后恢复行为(异常是否兜底)。顺序颠倒会导致在上游错误的基础上反复调下游,越调越乱。

下表给出一组矿山巡检机器人的示例参数(巷道净宽约 3 m,差速底盘,激光雷达安装高度 0.4 m),仅作教学参考,实际值需按车体尺寸与现场标定:

类别参数示例值矿山场景考量
代价地图inflation_radius0.45 m车宽 0.8 m,留半车宽余量,避免堵死 3 m 巷道
代价地图cost_scaling_factor3.0粉尘导致障碍层噪声大,衰减稍快可减少"幽灵障碍"
规划器minimum_turning_radius0.9 m按底盘实测最小转弯半径设定
控制器max_vel_x0.6 m/s湿滑、低照度,限速保守
控制器acc_lim_x0.3 m/s²抑制打滑与急停
恢复行为wait_duration8.0 s矿车短时占道,先等待再绕行