资讯动态

ROS2 nav2全局规划器和局部规划器参数说明

发布时间:2026/10/24 1:52:09 来源:尧图企业网站定制
1 全局规划器全局规划器planner_server配置全局规划负责从起点到目标点生成一条全局参考路径。1.1 NavfnPlannerNavfn 老规划器现在新项目很多换成SmacPlannerSmac Hybrid A*支持非完整约束对差速轮、阿克曼底盘效果更好Navfn 默认是按全向机器人模型算路径。#### yaml planner_server: ros__parameters: # 预期全局规划运行频率单位 Hz。 # - 含义期望每秒尝试重新规划全局路径 20 次 # - 注意不是一定 20 次只是期望值。当环境变化、障碍物挡住原路径时 # 规划器会重新计算全局路径如果路径通畅很多时候不会反复重算 # - 调参移动机器人常用 1~10Hz 居多20Hz 算比较高CPU 负载会更高 # 低速底盘可以保留嵌入式板树莓派等建议降到 5~10。 expected_planner_frequency: 20.0 use_sim_time: False # 加载的全局规划插件列表这里只启用名字叫 GridBased 的规划器 # 可以同时加载多个规划器导航时切换 planner_plugins: [GridBased] # Navfn 是 Nav2 默认的**势场法全局规划器**不是 A* # 是 Dijkstra 变种计算代价场然后沿着梯度生成路径。 GridBased: plugin: nav2_navfn_planner::NavfnPlanner # 目标点容差单位m全局规划时如果目标点本身落在障碍物里 # 会在目标周边半径 0.5m 范围内找一个可行的替代终点**。 # - 不是机器人到达判断到达判断是 goal_checker #general_goal_checker负责不要搞混 # - 调参狭窄环境缩小0.1~0.2宽松环境 0.5~1.0。 tolerance: 0.5 # 是否切换成 A * 算法默认 false。 # - falseNavfn 原生 Dijkstra 势场规划路径平滑适合大多数场景 # 缺点整张地图计算大地图开销大 # - true底层换成 A*搜索更快大地图友好但路径更容易出现折线、尖角。 use_astar: false # 是否允许路径穿过地图上「未知区域unknown灰色区域」 # - true规划器认为未知区域可以通行机器人会往未知区域走、去探索 # 适合 SLAM 建图、自主探索 # - false未知区域直接当成障碍物路径只在已经扫描到的已知空闲区域白色里规划 # 适合已经建好、完全确定的静态地图防止机器人冲进没扫描的地方。 allow_unknown: true1.2 SmacPlanner2DSmacPlanner2D适合差速轮机器人。### yaml planner_server: ros__parameters: expected_planner_frequency: 20.0 use_sim_time: False planner_plugins: [GridBased] GridBased: # 2D A*适合**差速轮、全向轮圆形机器人会考虑机器人姿态输出路径更贴合机器人运动约束 # 不像 Navfn 只算势场经常出现机器人转不过来的尖角路径 plugin: nav2_smac_planner::SmacPlanner2D # 和 Navfn 含义一致目标点在障碍物内时在 0.5m 半径内找可行替代终点不是到达判定 tolerance: 0.5 # true允许穿过地图灰色未知区适合 SLAM 建图导航 # 静态建好的地图改成 false防止冲进未知区域 allow_unknown: true # 是否降采样代价图加速规划。算力弱树莓派可以开 true factor2 # 地图分辨率减半速度更快但路径精度下降 downsample_costmap: false downsampling_factor: 1 # A* 最大扩展节点数防止死循环搜很久-1 不限制 max_iterations: 1000000 # 已经进入目标容差范围内后额外尝试搜索的次数 max_on_approach_iterations: 1000 # 单次规划最大耗时单位 s超时直接规划失败返回。 # 嵌入式板建议 1.0~2.0PC 上可以放宽到 3.0 max_planning_time: 2.0 # 代价权重越大路径越偏向走通道中间、远离障碍物代价更高搜索略慢 cost_travel_multiplier: 2.0 # false严格使用目标点给的 theta 姿态 # true路径最后一段朝向作为终点姿态适合只关心 (x,y)、不关心朝向的场景Nav2 use_final_approach_orientation: false # Smac 自带平滑把 A* 折线路径顺滑化 # w_smooth越大路径越平滑 # refinement_num是平滑迭代次数默认 2想要更顺滑改成 4 smoother: max_iterations: 1000 w_smooth: 0.3 w_data: 0.2 tolerance: 1.0e-10 do_refinement: true refinement_num: 21.3 SmacPlannerHybrid适合阿克曼车、有最小转弯半径的车不能原地自转比如遥控车、巡检小车。针对非完整约束车辆的全局规划器底层 Hybrid A* Reeds-Shepp/Dubins 曲线。说明a.Hybrid A* 规划出来的路径自带航向约束必须搭配适合阿克曼的局部控制器比如 TEB、MPPIDWB 也能用但 DWB 原生对阿克曼支持一般b.它的搜索是 (x,y,theta)CPU 开销远大于 Navfn、Smac2Dc.这个规划器不支持原地转向本身就是为 “不能原地自转” 的车设计的d.没有内置 smoother 参数Hybrid A* 的解析曲线本身就是光滑 Reeds-Shepp 曲线不像 Smac2D 带单独平滑器。planner_server: ros__parameters: # 单位 Hz期望全局规划器重新规划路径的频率。 # - 阿克曼车规划计算量更大一般不建议 20Hz10Hz 比较稳妥 # - 含义导航框架尝试以 10Hz 触发全局重规划不是强制每次都算出新路 # 路径没有被挡住时会复用旧路径 # - 算力弱的板子树莓派建议降到 2~5Hz。 expected_planner_frequency: 10.0 use_sim_time: False planner_plugins: [GridBased] GridBased: # Hybrid A* 和普通 A * 区别搜索节点是 (x,y,theta) 三维位置 航向角 # 考虑车辆转弯约束规划出来的路径车辆可以直接走不会出现原地掉头的非法路径 plugin: nav2_smac_planner::SmacPlannerHybrid # 如果设置的目标坐标落在障碍物里面规划器会在目标点半径 0.5m 范围内寻找一个可行、 # 无碰撞的替代终点。窄通道场景改成 0.2开阔场地 0.5~1.0 tolerance: 0.5 allow_unknown: false # 与smacplanner2d相同 downsample_costmap: false # 与smacplanner2d相同 downsampling_factor: 1 max_iterations: 1000000 # 与smacplanner2d相同 max_planning_time: 3.0 # 与smacplanner2d相同 # 搜索阶段使用的运动曲线模型二选一 # -REEDS_SHEPP支持**前进 后退**可以倒车适合室内、需要掉头的场景 # - DUBIN只支持单向前进不能倒车适合公路单向行驶的小车。 # 注意这只是搜索的启发式模型不是控制器的速度指令。 motion_model_for_search: REEDS_SHEPP # 航向角的离散分箱数量 # 一圈 360°72 份 → 每份 5°。 # - 数值越大角度离散越精细路径姿态过渡顺滑但是节点数量暴涨、规划更慢 # - 数值越小搜索更快但角度很粗糙路径姿态跳跃大 # 常用区间3610°~725°不建议超过 144。 angle_quantization_bins: 72 # 解析扩展Analytic Expansion触发阈值Hybrid A*核心参数 # Hybrid A* 分两部分 # 1.栅格搜索扩展2.每隔一段时间尝试直接用 Reeds-Shepp 曲线直接尝试一条直达 # 目标的光滑曲线(解析扩展快速收敛 # ratio 含义当启发值 h 乘以这个系数 小于 当前代价 g就触发解析直达尝试。 # - 数值大更早、更频繁尝试直接曲线直达规划更快 # 但更容易碰到障碍物导致解析曲线碰撞失败 # - 数值小更少触发直达更多依赖栅格搜索路径更稳妥速度慢。 # 推荐区间2.0 ~ 4.03.5 是比较均衡的默认值。 analytic_expansion_ratio: 3.5 # 解析直达曲线的最大允许长度单位 m。 # 当 Reeds-Shepp 直达曲线长度超过 3m 时不再尝试解析直达 # 避免长距离曲线穿过一堆障碍物。 # 开阔场地可以放大到 5.0室内狭小场景缩小到 2.0~3.0 analytic_expansion_max_length: 3.0 # 阿克曼底盘**最重要参数**单位 m # 小车物理上最小转弯半径必须和真实底盘保持一致。 # - 比如前轮转向小车最小转弯半径实测 0.4m这里就填 0.4 # - 如果填的比真实值偏小规划出转不过去的路径DWB 跟踪失败、卡在弯道 # - 如果填的比真实值偏大路径保守绕很远空间利用率差 minimum_turning_radius: 0.4调参建议现象推荐调整规划很慢、超时降低 angle_quantization_bins开启 downsample_costmap规划出来的弯道车子转不过去增大 minimum_turning_radius填真实更大的值明明有路解析直达总撞障碍物降低 analytic_expansion_ratio想让它更快找到终点调高 analytic_expansion_ratio、放大 analytic_expansion_max_length1.4 其他全局规划器插件类全名算法适用底盘特点nav2_navfn_planner::NavfnPlannerNavfn势场 / Dijkstra可选 A*差速轮、全向轮圆形机器人默认老规划器速度快不考虑姿态约束容易出尖角路径nav2_smac_planner::SmacPlanner2D2D A*差速轮、全向轮圆形带自带平滑器路径质量比 Navfn 好nav2_smac_planner::SmacPlannerHybridHybrid A*Reeds-Shepp/Dubins阿克曼小车有最小转弯半径不能原地转SE2 三维搜索 (x,y,θ)符合车辆运动学nav2_smac_planner::SmacPlannerLattice状态格点规划 State Lattice任意底盘非圆形差速、阿克曼、自定义构型机器人预先生成控制原语适合异形、高速机器人配置复杂nav2_theta_star_planner::ThetaStarPlannerTheta任意角度 A差速、全向轮善于生成直线、斜向路径减少锯齿折线选型速记圆形差速轮 / 全向轮室内导航新手、算力弱Navfn圆形差速轮想要顺滑路径推荐主流SmacPlanner2D圆形差速轮想要少拐弯、尽量走直线ThetaStar阿克曼小车车模、巡检车有最小转弯半径SmacPlannerHybrid长方形异形底盘、自定义运动学SmacPlannerLattice补充第三方生态还有一些小众插件RRT、RRT * 等不属于官方内置包需要单独编译安装稳定性不如上面这几个2 局部规划器2.1 DWB(dynamic window approach)Nav2 默认局部控制器局部轨迹规划器ROS1 时代 DWA 的插件化重构升级版插件全名dwb_core::DWBLocalPlanner运行在controller_server里面负责跟踪全局路径 实时动态避障。适用底盘优先差速轮差分驱动 differential、全向轮omni阿克曼小车不推荐原生 DWB原生采样不自带最小转弯半径约束容易输出走不过去的曲线阿克曼优先 MPPI / TEB / RPPRegulated Pure Pursuit。controller_server: ros__parameters: use_sim_time: False # 局部规划控制频率 controller_frequency: 20.0 # **里程计速度滤波死区阈值单位 m/s** # controller_server 在把 odom 送给局部控制器插件之前先对 odom 里的速度做过滤 # **速度绝对值小于该阈值 → 强制置 0**用来滤编码器 / 里程计微小噪声避免误判机器人在移动 # 注当前时差速轮所以min_y_velocity_threshold很大如果是麦轮全向车 # 这个参数一般要改成很小比如 0.001不然侧向运动直接被吃掉无法横移 # min_x_velocity_threshold过滤前进 / 后退方向微小抖动噪声 # 差速轮、阿克曼机器人一般都很小默认 0.0001 min_x_velocity_threshold: 0.001 # 差速轮机器人本身理论上不能侧向移动里程计出来的 vy 全部都是噪声 # 设一个很大阈值直接把所有正常情况下的侧向速度全部清零防止导航误以为 # 机器人在横向漂移、导致进度检查 /goal checker 异常、误报卡住、失败 min_y_velocity_threshold: 0.5 min_theta_velocity_threshold: 0.001 # ***制器插件FollowPath 对应的控制器如 RegulatedPurePursuit、MPPI 等的 # computeVelocityCommands() 抛出异常、计算失败时 # 允许连续失败的最长时间是 0.3s # 在 0.3s 以内只是本次算不出速度指令**不会直接让 FollowPath 动作失败**继续重试 # 连续失败超过 0.3s判定 FollowPath 失败向上通知 BT # 触发恢复行为spin、backup 等或者直接导航失败 # 0.0无容错控制器只要一次异常立刻失败 # -1.0无限容错控制器就算一直报错也永不判定 FollowPath 失败 # - 狭小、障碍物密集场景可以给到 0.51.0 # - 高速、安全要求高的场景缩小到 0.10.2更快报故障 failure_tolerance: 0.3 # 指定**进度检查器插件别名**下面必须有一个同名 progress_checker{ plugin: xxx } 块 # 职责判断**机器人有没有在往前走、有没有卡住** # - 核心参数required_movement_radius、movement_time_allowance # - 逻辑给你一段时间如果机器人移动距离达不到半径 → 判定卡住FollowPath 失败 # BT 进入恢复动作spin/backup # jazzy已经换成数组写法[progress_checker]但是向下兼容 progress_checker_plugin: progress_checker progress_checker: plugin: nav2_controller::SimpleProgressChecker required_movement_radius: 0.5 movement_time_allowance: 10.0 #10s内必须走0.05m否则判定为卡住 # 加载**终点到达判定插件列表**别名 general_goal_checker下面对应 # general_goal_checker{ plugin: ... } # - 两个常用插件注释里的 precise_goal_checker 是备选 # - **general_goal_checker就是 SimpleGoalChecker**只判断位姿是否在容差内 # xy_goal_tolerance / yaw_goal_tolerance**不检查机器人是否静止** # 到位就算到达差速车最常用 # - **precise_goal_checkerStoppedGoalChecker**到位 # **速度小于阈值机器人停稳** 两个条件同时满足才算到达适合对接机械臂、取放料场景 # 防止冲过目标 # - 可以同时加载多个在 BT 的 FollowPath 节点里通过 goal_checker_id 切换使用哪一个 goal_checker_plugins: [general_goal_checker] # precise_goal_checker general_goal_checker: stateful: True plugin: nav2_controller::SimpleGoalChecker xy_goal_tolerance: 0.25 yaw_goal_tolerance: 0.25 # ***************DWB parameters****************** # DWB 核心原理在速度空间采样一堆 (vx,vy,w) 速度候选 → # 前向仿真 sim_time 时间得到多条轨迹 → 各个 critic代价评价器打分 → # 选总分最小的速度发给底盘** controller_plugins: [FollowPath] FollowPath: plugin: dwb_core::DWBLocalPlanner # 使用DWB局部规划器还有RPP、MPPI更改时必须更改参数段 debug_trajectory_details: True # 在 topic 输出采样轨迹、每条轨迹各个 critic 的分数用于 rviz 看轨迹、定位哪个代价项主导 min_vel_x: -1.0 # x最小速度后退最大速度 -1.0 m/s min_vel_y: 0.0 # 侧向最小速度差速车固定0 max_vel_x: 1.0 # 前进最大速度 1.0 m/s max_vel_y: 0.0 # 侧向最大速度差速车固定0 max_vel_theta: 0.5 # 最大角速度 0.5 rad/s min_speed_xy: 0.0 # xy合速度下限允许0可以停 max_speed_xy: 1.0 # xy合速度上限和max_vel_x对齐 min_speed_theta: 0.0 # 角速度下限可以0 # Add high threshold velocity for turtlebot 3 issue. # https://github.com/ROBOTIS-GIT/turtlebot3_simulations/issues/75 acc_lim_x: 0.5 # x方向最大加速度 0.5 m/s² acc_lim_y: 0.0 # y侧向加速度差速车0 acc_lim_theta: 1.0 # 角加速度 1.0 rad/s² decel_lim_x: -0.5 # x最大减速度 -0.5 m/s²负代表减速避障急停靠这个 decel_lim_y: 0.0 decel_lim_theta: -1.0 # 角减速度 vx_samples: 20 # vx一共采样20个档位 vy_samples: 0 # 不采样vy差速车固定填0 vtheta_samples: 20 # ω采样20个档位 sim_time: 1.7 # 每条轨迹向前仿真多久1.7s linear_granularity: 0.05 # 仿真轨迹上相邻两个位姿点之间的步长(m)越长提前看更远适合高速太短容易临近障碍物才反应 angular_granularity: 0.025 # 仿真点角度步长(rad) transform_tolerance: 0.2 # 等待tf变换的超时时间(s)tf延迟超过0.2s就报错 xy_goal_tolerance: 0.25 # DWB内部终点xy容差但是最终是否到达由上层goal_checker插件说了算这个只是DWB自己参考 trans_stopped_velocity: 0.25 # 判定机器人“已经停下”的平移速度阈值(m/s) short_circuit_trajectory_evaluation: True #一旦某条轨迹被障碍物代价直接判成无穷大直接跳过剩下 critic 打分节省算力推荐开 stateful: True #有状态DWB采样会以上一帧输出速度为中心采样推荐False 是纯全局均匀采样容易震荡 # 代价评价器列表 criticsDWB 会对每一条采样轨迹依次跑下面这些评价项加权求和总分越小越好 # BaseObstacle 障碍物代价轨迹离障碍物越近分越高惩罚碰撞 # PathDist 离全局参考路径横向距离偏离路径就罚分 # GoalDist 这条轨迹仿真终点离目标点的距离越远越罚 # PathAlign 轨迹朝向和全局路径切线方向是否一致 # GoalAlign 轨迹朝向是否对准最终目标点 # RotateToGoal 靠近终点时优先对齐目标航向 yaw # Oscillation 震荡惩罚来回加减速、左右反复转向会被扣分抑制抖动 critics: [RotateToGoal, Oscillation, BaseObstacle, GoalAlign, PathAlign, PathDist, GoalDist] # 评价权重这套权重特点 # PathAlign、PathDist 权重极高 → **严格贴全局路径走不喜欢抄近路** # BaseObstacle 权重很低 → 遇到障碍物容易卡在路径上不动适合环境开阔、障碍物少的场景 # 如果场景障碍物多、容易卡死需要提高 BaseObstacle.scale**比如调到 0.4~2.0降低 PathAlign/PathDist 权重。 BaseObstacle.scale: 0.04 # 障碍物权重偏低说明这套配置优先跟踪路径不是激进避障 PathAlign.scale: 50.0 # 【很高】强约束必须沿着全局路径的方向走 GoalAlign.scale: 10.0 PathAlign.forward_point_distance: 0.1 GoalAlign.forward_point_distance: 0.1 PathDist.scale: 50.0 # 【很高】强烈惩罚偏离全局路径贴线走 GoalDist.scale: 10.0 RotateToGoal.scale: 32.0 # 终点附近优先对准目标角度 RotateToGoal.slowing_factor: 5.0 RotateToGoal.lookahead_time: -1.0 # -1自动不用手动设置前视时间常见评价权重调参方向参考差速车1. 跟踪路径歪、容易跑偏加大 PathDist / PathAlign.scale2. 遇到障碍物不避让、直接贴上去卡死提高 BaseObstacle.scale3. 到达终点前冲过头调大 RotateToGoal.slowing_factor、降低 max_vel_x4. 导航震荡、来回拐加大 Oscillation.scale或者降低 vx_samples、减小 sim_time5. 算力不够、延迟高减少 vx_samples/vtheta_samples关掉 debug_trajectory_details2.2 RPP(Regulated Pure Pursuit)在原版 PP、自适应 PPAPP之上增加了 3 大速度调节Regulated规则这就是名字里 Regulated 的来源曲率调速弯道越急、曲率越大 → 自动降速防止过冲、甩尾障碍物距离调速离障碍物越近 → 自动减速提升安全性终点接近调速靠近目标点时平滑减速平稳停稳还支持自适应前视距离速度越快前视距离lookahead_dist拉得越长高速更稳低速前视变短转弯更精准ROS。 另外可选开启 DWPPDynamic Window Pure Pursuit加入加减速物理约束校验输出速度不会超出底盘极限。适合底盘差速轮、阿克曼、足式机器人都支持不适合全向轮 omni没法利用横向移动能力ROS重点RPP 非常适合搭配SmacPlannerHybrid / SmacLattice运动学可行的全局路径因为 RPP 强在严格贴路径本身避障能力弱假设给它的全局路径就是可通行的。要精准沿路线跑、环境简单静态 选RPP环境复杂、人来回走动需要主动绕障碍物 选DWB / MPPI。controller_server: ros__parameters: controller_plugins: [FollowPath] FollowPath: plugin: nav2_regulated_pure_pursuit_controller::RegulatedPurePursuitController # 期望最大线速度m/s机器人正常直行时的目标速度弯道、靠近障碍物、靠近终点时会自动降速 desired_linear_vel: 0.5 # 最大线加速度m/s²从静止加速到目标速度的上限防止打滑 max_linear_accel: 0.8 # 最大线减速度m/s²刹车上限紧急减速、弯道减速都受这个限制 max_linear_decel: 0.8 # 最大角速度/加速度rad/s rad/s2转向角速度上限 max_angular_vel: 1.0 max_angular_accel: 1.0 # 是否开启**速度自适应前视距离** # truelookahead_dist v * lookahead_time越快看越远高速走线顺滑 # false使用固定 lookahead_dist低速高精度场景用 use_velocity_scaled_lookahead_dist: true # 前视时间s只有上面开关 true 生效 # 前视距离 当前速度 × lookahead_time # 数值大轨迹顺滑跟踪误差变大数值小贴线很紧容易震荡 lookahead_time: 0.6 # 自适应模式下前视距离的**下限**。速度极低时前视距离不会比这个更小防止控制器抖动 # 如果关闭自适应就需要写固定参数lookahead_dist: 0.6 min_lookahead_dist: 0.3 # 自适应模式下前视距离**上限**。速度再快前视也不会超过这个值防止离路径太远 max_lookahead_dist: 1.2 # 曲率调速RPP核心 regulated 功能 # 开启**曲率调速**弯道曲率越大转弯半径越小自动降速。阿克曼小车强烈建议打开 use_regulated_linear_velocity_scaling: true # 触发曲率降速的临界转弯半径 (m)。 # - 实际转弯半径 0.9m → 开始降速 # - 转弯半径很大接近直行→ 不减速。 regulated_linear_scaling_min_radius: 0.9 # 曲率调速模式下允许降到的最低速度防止弯道直接停死 regulated_linear_scaling_min_speed: 0.25 # 代价地图障碍物减速 # 开启代价地图调速离障碍物越近代价越高速度越低 # RPP**不会偏离路径绕开障碍物**只会减速障碍物挡死路径后直接堵停交给行为树恢复动作 use_cost_regulated_linear_velocity_scaling: true cost_scaling_dist: 0.6 # 距离障碍物多少米以内开始减速。 cost_scaling_gain: 1.0 # 减速强度系数越大靠近障碍物时速度下降越猛 # 终点减速 approach_velocity_scaling_dist: 0.6 # 距离终点还有 0.6m 时开始平滑减速 min_approach_linear_velocity: 0.1 # 靠近终点时最低行驶速度保证机器人有前进能力防止卡在终点前不动 # 对准朝向 use_rotate_to_heading: true # 到达终点附近后单独原地旋转对准目标姿态goal 的 theta rotate_to_heading_angular_vel: 0.4 # 对准姿态时原地旋转的角速度rad/s # 角度误差阈值rad0.78545° # 当机器人朝向和目标角度差值大于这个值就触发原地旋转对准小于该值直接认为朝向合格 rotate_to_heading_min_angle: 0.785 # 底盘运动约束 # 机器人物理最小转弯半径 (m)。 # - 阿克曼**必须填真实底盘最小转弯半径和 SmacPlannerHybrid 保持一致** # - 差速轮原地可转填很小值比如 0.01。 # 控制器会拒绝输出小于该半径的曲率防止跟踪规划不出来的急转弯 min_turning_radius: 0.4 # 是否允许倒车 # - false只允许前进 # - true允许向后跟踪路径配合 Reeds-Shepp 倒车路径 allow_reversing: false # 碰撞检查 # 开启前向碰撞时间检测预判多久会撞上障碍物 use_collision_detection: true # 到前视胡萝卜点的预估碰撞时间如果小于 1s直接减速 / 停止 max_allowed_time_to_collision_up_to_carrot: 1.0 # TF与搜索 # TF 坐标变换容忍时间sTF 延迟超过这个值控制器报错。实物一般 0.1~0.2 transform_tolerance: 0.2 # 沿着全局路径从机器人位置向前最多搜索多远来找最近路径点长路径给大一点 max_robot_pose_search_dist: 10.0调参口诀走线贴太紧、来回抖加大 lookahead_time过弯甩尾、冲出路径减小 regulated_linear_scaling_min_radius、降低 desired_linear_vel离障碍物很远就刹车减小 cost_scaling_gain、cost_scaling_dist到终点不转角度对准确认use_rotate_to_heading: true调小 rotate_to_heading_min_angle阿克曼跟踪 Hybrid A * 路径min_turning_radius 和规划器保持一模一样搭配推荐SmacPlannerHybrid RPP适合阿克曼巡检车、AGV 固定路线导航 不适合人流多、动态障碍物需要主动绕开的场景改用 DWB / MPPI2.3 MPPIModel Predictive Path IntegralMPPI基于采样的模型预测路径积分控制器是阿克曼小车主流选择和 RPP 对比 MPPI自带主动绕障、预测未来一段轨迹、优化控制序列计算量大动态环境强 RPP几何纯跟踪只贴线仅障碍物减速不会绕障计算极轻静态固定路线稳.controller_server: ros__parameters: controller_plugins: [FollowPath] FollowPath: plugin: nav2_mppi_controller::MPPIController # 预测窗口 采样核心参数 time_steps: 40 model_dt: 0.05 batch_size: 1200 iteration_count: 1 temperature: 0.3 gamma: 0.015 prune_distance: 2.5 # 速度边界阿克曼 vy0不能横向平移 vx_max: 0.8 vx_min: -0.4 vy_max: 0.0 wz_max: 1.2 # 采样噪声标准差探索范围 vx_std: 0.25 vy_std: 0.0 wz_std: 0.35 # 运动模型阿克曼 motion_model: ackermann ackermann: plugin: mppi::AckermannMotionModel min_turning_r: 0.4 # 评价器Critic列表核心代价项 critics: [ConstraintCritic, ObstaclesCritic, GoalCritic, GoalAngleCritic, PathFollowCritic, PathAlignCritic, PathAngleCritic, PreferForwardCritic] # 约束代价禁止超出运动学、速度极限 ConstraintCritic: enabled: true cost_weight: 4.0 cost_power: 1 # 障碍物代价主动避障核心MPPI最强项 ObstaclesCritic: enabled: true cost_weight: 8.0 inflation_radius: 0.35 cost_power: 1 # 距离终点代价 GoalCritic: enabled: true cost_weight: 3.0 cost_power: 1 # 终点姿态对准代价 GoalAngleCritic: enabled: true cost_weight: 2.5 cost_power: 1 threshold_to_consider: 0.5 # 跟踪全局路径距离代价贴近路径 PathFollowCritic: enabled: true cost_weight: 5.0 cost_power: 1 # 轨迹朝向和路径走向对齐 PathAlignCritic: enabled: true cost_weight: 3.0 cost_power: 1 # 路径角度平滑代价抑制急转弯抖动 PathAngleCritic: enabled: true cost_weight: 2.0 cost_power: 1 # 优先向前行驶惩罚后退 PreferForwardCritic: enabled: true cost_weight: 6.0 cost_power: 1 # 调试、TF、可视化 transform_tolerance: 0.15 visualize: true publish_optimal_trajectory: true TrajectoryVisualizer: trajectory_step: 4 time_step: 2顶层标识plugin: nav2_mppi_controller::MPPIController指定加载 MPPI 控制器插件。预测窗口 采样核心MPPI 灵魂time_steps: 40预测轨迹总步数预测总时长 time_steps × model_dt40 × 0.05 2s 预测窗口控制器向前看未来 2 秒的轨迹。更大预判更远提前避障但计算量暴涨更小反应灵敏适合高速容易短视model_dt: 0.05每一步仿真时间间隔单位 s。0.0550Hz 仿真步长。batch_size: 1200每一轮迭代随机采样多少条候选轨迹。越多搜索空间大更容易找到优质避障轨迹CPU 压力大越少跑得更快但容易陷入次优、绕障能力下降PC 工控机 1000~2000树莓派等嵌入式建议 400~800。iteration_count: 1MPPI 内循环优化迭代次数官方推荐默认 1优先加大 batch_size 而不是迭代次数。temperature: 0.3温度系数控制代价权重选择的锐利程度越小只选代价最低的最优轨迹选择很保守越大很多轨迹都会被加权平均平滑但是容易差一般 0.2~0.5。gamma: 0.015控制控制量更新平滑性抑制控制指令跳变、抖动一般不动。prune_distance: 2.5沿着全局路径控制器只关心机器人前方 2.5m 内的路径远处路径截断减少计算。速度边界约束阿克曼vx_max: 0.8最大前进线速度 m/svx_min: -0.4最大倒车速度 m/s不想倒车改成 0vy_max: 0.0阿克曼不能横向移动固定 0wz_max: 1.2最大角速度 rad/s采样噪声探索幅度vx_std / vy_std / wz_std采样时速度的高斯标准差代表探索范围std 大敢于尝试大速度、大转向绕障更激进std 小轨迹比较保守平滑变化小。阿克曼运动模型motion_model: ackermann ackermann: plugin: mppi::AckermannMotionModel min_turning_r: 0.4min_turning_r: 0.4阿克曼最小转弯半径必须和 SmacPlannerHybrid 里面的 minimum_turning_radius 完全一致否则规划出的路径控制器跟踪失败。Critics 评价器组打分插件可按需开关、调权重cost_weight权重越大该项代价越优先cost_power代价幂次一般保持 1ConstraintCritic硬约束惩罚超出速度、运动学极限的非法轨迹权重建议高一点保证输出指令底盘可执行。ObstaclesCritic【MPPI 核心】障碍物代价MPPI 和 RPP 最大区别就在这里 MPPI 会主动搜索一条绕开障碍物的轨迹RPP 只会减速不会偏离路径绕开。inflation_radius障碍物膨胀半径比 costmap 的 inflation 略大一点留安全距离。GoalCritic到目标点距离代价引导向终点前进。GoalAngleCritic靠近终点时对齐目标姿态threshold_to_consider距离终点小于 0.5m 才开始约束角度。PathFollowCritic轨迹到全局路径的横向距离代价保证不离全局路径太远。PathAlignCritic轨迹前进方向和路径走向对齐防止横着切路径。PathAngleCritic轨迹曲率平滑惩罚抑制频繁急打方向、车身抖动。PreferForwardCritic强烈惩罚后退轨迹适合室内优先前进场景需要频繁倒车掉头Reeds-Shepp可以降低权重。调试 TFtransform_tolerance:0.15TF 延迟容忍时间visualize: trueRviz 可视化所有采样轨迹调试时打开上线可关闭省性能publish_optimal_trajectory: true发布最优轨迹话题可视化、记录调试TrajectoryVisualizer可视化抽稀参数不用每条采样点都画防止 RViz 卡顿MPPI VS RPP 阿克曼对比项目MPPIRPPRegulated Pure Pursuit算法采样型模型预测 MPC几何纯跟踪胡萝卜点避障能力✅ 强主动绕开障碍物❌ 弱仅靠近障碍物减速不会绕障跟踪特性可以适度偏离全局路径找可行轨迹严格贴着全局路径偏离代价很高算力开销高batch 越大越吃 CPU极低几乎无压力动态环境人、移动障碍首选不适合容易卡死静态固定巡检路线可用但是浪费算力首选走线丝滑稳定对全局路径依赖有容错路径轻微不合理也能救强依赖全局路径必须完全可通行调参工作量大一堆 critic 权重、采样参数简单前视、曲率调速几个关键参数调参经验口诀绕障保守、不敢靠近障碍物提高 ObstaclesCritic 权重或者减小 inflation_radius老是脱离全局路径乱跑加大 PathFollowCritic 权重降低温度 temperature、vx_std/wz_std控制指令抖动、转向频繁跳变提高 gamma降低 wz_std、PathAngleCritic 权重CPU 负载太高、卡顿降低 batch_size减小 time_steps关闭 visualize弯道甩尾、跟踪不上 Hybrid A * 路径核对两边 min_turning_r 保持一致降低 vx_max推荐组合室内有人走动、动态障碍物、需要灵活避障SmacPlannerHybrid MPPI工厂固定巡检路线、静态环境、追求走线稳定、低算力SmacPlannerHybrid RPP

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑