ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Autoware.Universe Behavior Path Planner深度调试与优化指南

Autoware.Universe Behavior Path Planner深度调试与优化指南 1. 为什么Behavior Path Planner是Autoware.Universe里最常被“调不通”的模块在Autoware.Universe的实际工程落地中我见过太多团队卡在同一个地方车辆能正常启动、感知模块输出的障碍物框很准、定位精度也稳定在10cm以内但一到规划环节车就“愣住”——要么原地打转要么路径生成后立刻报错中断要么明明前方空旷却反复规划出绕行30米的诡异曲线。这种现象在城市道路测试初期出现频率极高而背后90%以上的根因都指向Behavior Path PlannerBPP这个模块。它不是Autoware.Universe里代码量最大的模块相比perception或localization但却是逻辑耦合最深、配置维度最多、对上下游数据质量最敏感的“中枢神经”。它的名字里带“Behavior”就决定了它不只做几何路径还要做驾驶意图判断它叫“Path Planner”却必须和Motion Velocity Planner协同输出带速度剖面的轨迹它被放在planning包下实则重度依赖common里的behavior_velocity_planner、scene_module的插件注册机制甚至要反向校验vehicle_info参数是否与真实底盘匹配。这种跨层依赖让很多开发者误以为“只要把BPP的launch文件跑起来就算集成成功”结果在实车闭环时才发现路径生成延迟高达800ms或者遇到无保护左转时直接fallback到停车状态连日志里都找不到明确报错——因为问题不在BPP内部而在它上游输入的PredictedObjects时间戳错位了50ms或下游VehicleCmd接口的加速度限值设成了0.3m/s²而实车底盘实际支持1.2m/s²。这也是为什么我在过去三年参与的7个Autoware.Universe落地项目中有5个把BPP的调试周期拉得最长。它不像感知模块那样有直观的图像输出可debug也不像控制模块那样能用阶跃响应快速验证。它的调试更像中医把脉要同时看/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/objects话题里障碍物预测轨迹是否平滑要查/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lanes里车道线拓扑是否闭合还要比对/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/behavior里当前行为状态机LaneFollowing/Stop/ChangeLane等的跳变是否合理。三者稍有不一致路径就失效。这种多维耦合性正是BPP被称作“规划模块中最难啃的骨头”的根本原因。提示如果你刚接触Autoware.Universe千万别一上来就改BPP源码。先用ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/behavior确认行为状态机是否稳定在LaneFollowing再用ros2 topic hz /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/output看输出频率是否稳定在10Hz。这两步通不过后面所有调参都是徒劳。2. Behavior Path Planner的三层架构从行为决策到路径生成的完整链路Behavior Path Planner不是单个算法而是一个分层决策系统。它的设计哲学非常清晰把“开什么车”和“怎么开”彻底解耦。整个流程分为三层每一层都有明确的输入输出契约且允许独立替换——这才是它能支撑城市NOA、高速领航、泊车等多种场景的根本原因。2.1 行为决策层Behavior Decision Layer这是BPP的“大脑”核心任务是回答“此刻该做什么”输入来自scene_module的场景信息如交叉口类型、交通灯状态、周围车辆运动趋势、map_loader提供的高精地图语义车道连接关系、停止线位置、以及vehicle_info中的本车动力学约束最小转弯半径、最大加速度。输出一个Behavior枚举值如LANE_FOLLOWING,STOP,LANE_CHANGE_LEFT和对应的决策置信度。关键细节在于它的状态机实现。BPP没有用简单的if-else判断而是基于autoware/universe/autoware_planning_msgs/msg/Behavior消息定义了一套可扩展的状态协议。比如LANE_CHANGE_LEFT行为会触发两个子状态PREPARATION观察左侧车道安全距离和EXECUTION开始转向。这两个状态的切换条件不是硬编码的阈值而是通过behavior_velocity_planner提供的LongitudinalAcceleration和LateralAcceleration预测值动态计算的。我曾在一个项目中发现当behavior_velocity_planner的max_lateral_acceleration参数设为1.0m/s²时LANE_CHANGE_LEFT永远卡在PREPARATION因为系统预测本车在变道过程中侧向加速度会超过1.0判定为不安全。将该值调至1.5后变道行为才正常触发——这说明行为决策层的“安全性”判断本质是动力学可行性校验而非单纯的距离判断。2.2 路径生成层Path Generation Layer这是BPP的“手”负责把行为决策翻译成具体的几何路径。输入行为决策层输出的行为类型、当前自车位置/localization/kinematic_state、高精地图车道中心线/vector_map、以及障碍物预测轨迹/perception/object_recognition/objects。输出一条由autoware/universe/autoware_planning_msgs/msg/Path定义的路径点序列每个点包含x/y/z坐标、曲率、航向角。这里最易被忽略的是路径点密度的设计逻辑。BPP默认生成的路径点间隔不是固定值而是根据曲率动态调整直道上每0.5米一个点曲率大于0.02/m的弯道上加密到0.2米/点。这个策略源于车辆控制环的稳定性需求——如果弯道上点太稀疏下游控制器插值时会产生高频抖动如果全路段统一用0.1米间隔又会导致内存占用激增尤其在长隧道场景。我在调试某款线控底盘时发现当路径点间隔小于0.15米时motion_velocity_planner的QP求解器耗时从12ms飙升至45ms直接导致规划频率跌破5Hz。最终解决方案是修改behavior_path_planner的path_point_interval参数在保证曲率精度的前提下将最小间隔设为0.18米既满足控制需求又守住实时性底线。2.3 路径优化层Path Optimization Layer这是BPP的“打磨师”负责把生成的路径变得“可执行”。输入路径生成层输出的原始路径、车辆动力学模型vehicle_info、以及scenario_planning模块下发的全局约束如限速区段、施工区域减速要求。输出一条经过平滑处理、满足曲率连续性、加速度约束、且与全局约束对齐的优化路径。其核心算法是基于B样条的路径优化。BPP不直接优化原始路径点而是先将路径拟合成三次B样条曲线再以曲率导数即挠率为优化目标通过非线性优化器默认使用ipopt最小化整条路径的挠率峰值。这个设计非常巧妙曲率导数小意味着车辆转向过程更平顺方向盘不会突然打满。但这也带来一个隐藏陷阱——当高精地图车道线本身存在微小锯齿常见于早期HD Map采集误差B样条拟合会放大这些噪声导致优化后的路径出现高频振荡。我们曾因此在某十字路口实测时车辆方向盘以5Hz频率小幅抖动。解决方法是在behavior_path_planner的lane_departure_checker中启用enable_smoothing开关并将smoothing_window_size从默认的3提高到7用滑动窗口平均滤波预处理原始车道线再送入B样条拟合。这个细节在官方文档里几乎没提却是实车平顺性的关键开关。3. 配置文件深度解析那些决定BPP成败的12个关键参数Behavior Path Planner的配置不是“填完就跑”而是需要根据实车硬件、测试场景、地图质量进行精细化标定。我整理了在7个项目中反复验证过的12个核心参数按影响权重排序并附上实测调整逻辑。3.1 决策类参数直接影响行为状态机参数名默认值实测建议值调整逻辑min_stop_distance3.01.8~2.5城市工况下若红灯停车距离过长3m易被后车追尾。需结合本车制动距离标定实测0-50km/h制动距离为18m则min_stop_distance应设为18×0.11.8m预留10%冗余lane_change_prepare_duration3.02.0~4.0左转准备时间。值过小2s导致变道仓促过大4s引发后车鸣笛。实测发现当本车速度40km/h时需延长至3.5s以确保安全切入object_ignore_distance100.060.0~80.0忽略远距离障碍物的阈值。设为100m时远处施工车会被持续跟踪消耗算力。实测60m已覆盖99%紧急避让场景且CPU占用下降35%注意min_stop_distance的单位是米但它的物理意义不是“看到障碍物就停”而是“当预测障碍物将在X米内进入本车轨迹时触发STOP行为”。因此它必须与behavior_velocity_planner的prediction_time_horizon默认3.0s联动计算。例如若本车速度为20m/s72km/hprediction_time_horizon为3s则障碍物预测范围是60m此时min_stop_distance设为60m才合理——否则会出现“预测到60m外障碍物却提前30m停车”的矛盾。3.2 路径生成类参数决定路径几何质量参数名默认值实测建议值调整逻辑max_path_length100.080.0~120.0最大路径长度。高速场景需设为120m以覆盖长下坡城市则80m足够。值过大导致规划耗时增加且超出视野的路径对控制无意义min_curvature0.0010.0005~0.002最小曲率阈值。设为0.001时半径1000m的缓弯会被强制拉直影响车道居中精度。实测0.0005可保留半径2000m的弯道特征且不增加计算负担use_skip_filtertruefalse是否启用路径点跳过滤波。开启后会删除曲率变化平缓的中间点但可能导致下游控制器插值失真。实测关闭后路径跟踪误差降低22%3.3 优化类参数保障路径可执行性参数名默认值实测建议值调整逻辑curvature_smoothing_parameter0.10.05~0.15B样条平滑系数。值越大路径越圆滑但可能偏离原始车道线。城市道路推荐0.08兼顾平顺性与车道保持精度max_acceleration0.30.8~1.2最大加速度约束m/s²。必须严格匹配实车底盘能力。设为0.3时本车0-50km/h加速需23秒远超实际性能导致路径频繁重规划enable_lane_departure_checktruetrue启用偏离检测。关闭后车辆可能压线行驶但某些特殊场景如窄路会车需临时禁用这些参数不是孤立存在的。比如max_acceleration和max_path_length必须协同调整当max_acceleration从0.3提升到1.0时若max_path_length仍为100m系统会规划出更激进的加速路径但若下游控制器无法跟上就会出现“规划快、执行慢”的脱节。我们的做法是先固定max_path_length80m将max_acceleration逐步从0.3调至1.0同步监控/control/trajectory_follower/status中的tracking_error当误差稳定在±0.15m内时再尝试将max_path_length增至100m。这种阶梯式标定法比一次性调所有参数可靠得多。4. 实车调试全流程从仿真验证到闭环测试的7个关键节点Behavior Path Planner的调试不能只靠Gazebo仿真。我总结了一套从虚拟到现实的7步闭环流程每一步都有明确的通过标准和失败归因路径。这套流程已在3个量产项目中验证有效。4.1 Gazebo基础功能验证通过标准100%路径生成成功率在autoware_launch中启动scenario_simulator.launch.py加载sample_moriyama_150324地图设置静态障碍物。重点验证ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/output是否稳定输出Path消息ros2 topic hz /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/output频率是否≥9.5Hz在RViz中检查/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lanes是否正确显示所有可行驶车道。常见失败归因若路径生成失败90%是map_loader未正确加载lanelet2_map.osm。需检查/map/vector_map话题是否有数据以及lanelet2_map_loader节点日志中是否报Failed to parse OSM file。此时应使用lanelet2_validation工具校验OSM文件完整性而非直接修改BPP代码。4.2 行为状态机压力测试通过标准状态跳变延迟≤200ms在仿真中模拟复杂场景前车急刹→本车触发STOP→前车起步→本车恢复LANE_FOLLOWING→右侧车辆切入→本车触发LANE_CHANGE_LEFT。用ros2 topic hz /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/behavior监测状态跳变时间。关键发现状态跳变延迟主要来自scene_module的障碍物预测耗时。当perception模块输出的PredictedObjects频率低于5Hz时BPP的行为决策会滞后。解决方案是调整perception的object_recognition节点参数将prediction_time_horizon从3.0s降至2.0s牺牲部分远期预测精度换取决策实时性。4.3 实车静态场景验证通过标准路径跟踪横向误差≤0.2m将车辆静止于直道中央启动Autoware.Universe用ros2 topic pub /control/trajectory_follower/control_mode autoware/universe/autoware_control_msgs/msg/ControlMode {mode: 1}切换至自动模式。观察车辆是否沿规划路径缓慢移动。踩坑经验实车首次运行常出现“原地画圈”。根源在于vehicle_info中的wheel_base参数错误。某次项目中底盘供应商提供的轮距是2.78m但BPP配置文件里写成了2.82m导致阿克曼转向模型计算偏差路径跟踪误差达0.8m。用激光雷达扫描实车前后轴中心点距离实测为2.785m修正后误差降至0.12m。4.4 实车动态障碍物测试通过标准100%成功避让在封闭场地放置移动障碍车速度10km/h测试BPP的OBSTACLE_AVOIDANCE行为。重点记录障碍物进入object_ignore_distance范围后BPP是否在1.5s内生成避让路径避让路径是否满足曲率连续性用ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/path检查相邻点曲率差值。实测技巧避让路径的“优雅度”取决于behavior_velocity_planner的lateral_jerk_limit参数。设为0.3m/s³时车辆避让动作生硬调至0.15m/s³后方向盘转动更柔和乘客眩晕感显著降低。4.5 城市交叉口专项测试通过标准无保护左转成功率≥95%在真实十字路口测试无保护左转。需确保traffic_light模块已接入真实信号机且scenario_planning的intersection场景插件已启用。致命陷阱BPP默认的左转路径是“先靠右再左转”这在双车道左转专用道场景下会引发冲突。解决方案是修改behavior_path_planner的lane_change配置将left_turn_strategy设为DIRECT直行切入并调整direct_left_turn_min_distance至15m确保有足够距离完成转向。4.6 长距离路径稳定性测试通过标准10km连续行驶无路径中断在高速路段进行10km测试全程记录/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/output的丢帧率。根本原因分析路径中断往往源于内存泄漏。BPP在处理长隧道场景时会持续累积PredictedObjects的历史轨迹若object_history_size参数默认10未限制内存占用每分钟增长12MB。将该值设为5后10km测试内存占用稳定在180MB以内。4.7 多传感器融合验证通过标准GNSS拒止下路径连续性≥5分钟关闭GNSS信号仅依赖IMU轮速计视觉里程计测试BPP在定位降级下的表现。关键配置必须启用behavior_path_planner的enable_map_based_prediction开关让系统在定位漂移时优先依据高精地图车道线拓扑进行行为预测而非完全依赖定位精度。实测表明此开关开启后GNSS拒止5分钟内路径生成成功率从42%提升至91%。5. 常见故障排查手册5类高频问题的根因定位与修复方案在Autoware.Universe的工程实践中Behavior Path Planner的故障有高度规律性。我将7个项目中积累的故障案例归纳为5类每类提供完整的排查链路、根因证据和修复方案避免“试错式调试”。5.1 故障现象路径生成频率骤降从10Hz跌至2Hz完整排查链路首先确认/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/output话题是否真的丢帧用ros2 topic hz -w 100统计100帧若确认丢帧检查/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/behavior行为状态是否频繁跳变如每秒多次在LANE_FOLLOWING/STOP间切换若状态稳定用ros2 topic echo /perception/object_recognition/objects查看障碍物数量是否突增50个若障碍物数量正常用ros2 node info /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner检查节点CPU占用率若CPU占用90%用ros2 run tracetools_tracepoint trace抓取BPP节点内部函数耗时。根因定位85%的案例是behavior_velocity_planner的QP求解器超时。当max_acceleration设为0.3而实车能力为1.2时QP求解器需迭代200次才能收敛单次耗时超100ms。修复方案立即措施将behavior_velocity_planner的qp_solver_timeout_ms从100调至300根本解决重新标定max_acceleration为实车能力值并在BPP配置中启用enable_qp_warm_start利用上一帧解作为初值减少迭代次数。5.2 故障现象车辆在直道上持续偏航横向误差0.5m完整排查链路检查/localization/kinematic_state中pose的position和orientation是否跳变定位抖动若定位稳定用ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lanes确认车道线中心线是否偏移若车道线正常用ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/output提取首末路径点计算其与车辆当前位置的横向偏差若偏差0.3m检查vehicle_info中的front_overhang参数是否准确影响坐标系转换。根因定位70%的案例是front_overhang参数错误。该参数定义前轴中心到车头的距离若设为0.8m而实车为0.92m会导致BPP计算的“车辆前端位置”比实际靠前12cm路径规划时自动向右偏移以补偿形成持续偏航。修复方案实测front_overhang用车辆停稳后用卷尺测量前轴中心到车头最前端距离在vehicle_info.param.yaml中更新该值并重启vehicle_info节点验证重启后/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/path中首点与车辆位置的横向偏差应0.05m。5.3 故障现象无保护左转时车辆长时间等待30秒完整排查链路用ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/behavior确认行为状态是否卡在LANE_CHANGE_LEFT_PREPARATION若卡在此状态检查/perception/object_recognition/objects中左侧车道障碍物的predicted_path是否被标记为ABORT预测失败若预测失败用ros2 topic echo /perception/object_recognition/objects查看障碍物velocity字段是否为0静止物体被误判为不可预测若障碍物速度为0检查perception模块的object_recognition节点是否启用了static_object_filter。根因定位BPP的左转准备逻辑要求左侧车道障碍物必须有有效的预测轨迹。当static_object_filter启用时静止车辆被过滤掉BPP认为左侧车道“无车”反而不敢变道——因为它需要预测轨迹来计算安全时间窗。修复方案关闭static_object_filter或将其min_velocity_threshold从0.1调至0.05在BPP配置中启用enable_static_object_prediction让系统对静止障碍物生成保守预测匀速0m/s验证左侧静止车辆出现后/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/objects中其predicted_path应显示为直线。5.4 故障现象隧道内路径突然中断无任何日志报错完整排查链路检查/localization/kinematic_state中status字段是否变为UNAVAILABLE定位失效若定位失效用ros2 topic echo /sensing/gnss/ublox/nav_sat_fix确认GNSS信号强度若GNSS信号弱检查/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lanes是否为空地图加载失败若车道线为空用ros2 topic echo /map/vector_map确认矢量地图是否持续发布。根因定位隧道内GNSS拒止时BPP依赖map_based_prediction进行行为推断。但若vector_map话题因网络延迟或内存不足中断BPP会因缺少车道拓扑而无法生成路径且不报错——因为它的设计哲学是“无地图则不规划”而非报错退出。修复方案在map_loader节点中启用enable_map_caching将矢量地图预加载至内存修改BPP的map_update_timeout_sec参数默认5.0为10.0延长地图失效判定时间验证隧道内GNSS信号为0时/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lanes应持续显示车道线。5.5 故障现象雨天路径抖动方向盘高频小幅摆动完整排查链路用ros2 topic echo /perception/object_recognition/objects检查障碍物classification是否大量出现UNKNOWN感知置信度低若UNKNOWN占比30%检查/sensing/camera/rectified_image是否过曝雨滴反光若图像异常检查perception模块的camera_rectifier节点参数gamma_correction是否启用若未启用开启后观察/perception/object_recognition/objects中UNKNOWN比例是否下降。根因定位雨天摄像头过曝导致障碍物识别置信度暴跌BPP收到大量低置信度障碍物后在路径优化层反复调整避让策略造成路径高频抖动。这不是BPP的bug而是感知-规划链路的脆弱性体现。修复方案启用camera_rectifier的gamma_correction并将gamma_value从1.0调至0.7增强暗部细节在BPP配置中启用enable_uncertainty_aware_planning让系统对低置信度障碍物采用保守避让半径默认1.5m调至2.2m验证雨天测试中/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/output的路径点曲率标准差应0.005/m抖动抑制达标。6. 进阶实践如何基于Behavior Path Planner构建自定义行为插件Behavior Path Planner的真正威力在于其插件化架构。官方提供的LaneFollowing、Stop等行为只是参考实现实际项目中往往需要定制化行为比如“施工区绕行”、“公交站台避让”、“无信号灯人行横道礼让”。我以“施工区绕行”为例详解从零开发一个BPP行为插件的完整流程。6.1 插件开发环境准备首先确认Autoware.Universe版本兼容性。BPP插件接口在v2023.03后稳定需使用ament_cmake构建系统。创建插件包cd ~/autoware/src/autoware/planning ros2 pkg create --build-type ament_cmake construction_zone_planner --dependencies behavior_path_planner_core rclcpp autoware_planning_msgs关键依赖behavior_path_planner_core提供了SceneModuleInterface基类所有自定义行为必须继承它。6.2 核心插件类实现在src/construction_zone_planner_node.cpp中定义ConstructionZonePlanner类#include behavior_path_planner_core/scene_module_interface.hpp #include autoware_planning_msgs/msg/path.hpp class ConstructionZonePlanner : public SceneModuleInterface { public: explicit ConstructionZonePlanner(const std::string name, const rclcpp::NodeOptions options) : SceneModuleInterface{name, options} { // 加载施工区地图图层从vector_map中提取construction_zone图层 declare_parameter(construction_zone_layer_name, construction_zone); } BehaviorModuleOutput plan() override { // 1. 从vector_map获取施工区多边形 auto construction_zones getConstructionZones(); // 2. 检查本车是否即将进入施工区预测轨迹与施工区多边形相交 if (isApproachingConstructionZone(construction_zones)) { // 3. 生成绕行路径在施工区左侧生成平行偏移路径 auto offset_path generateOffsetPath(construction_zones, -1.5); // 左偏1.5m // 4. 确保绕行路径满足曲率约束调用BPP内置的path_smoother return smoothPath(offset_path); } // 未进入施工区返回空输出由上级模块处理 return {}; } private: std::vectorPolygon getConstructionZones() { // 从/map/vector_map话题中解析construction_zone图层 // 此处省略具体解析逻辑实际需调用lanelet2::utils::findRelations } };6.3 插件注册与配置在pluginlib_plugins.xml中注册插件library pathlibconstruction_zone_planner class nameconstruction_zone_planner/ConstructionZonePlanner typeConstructionZonePlanner base_class_typebehavior_path_planner_core::SceneModuleInterface/ /library在config/behavior_path_planner.param.yaml中启用插件/**: ros__parameters: scene_modules: construction_zone_planner: module_type: construction_zone_planner/ConstructionZonePlanner priority: 100 # 优先级高于LaneFollowing默认50 enable: true6.4 实车验证要点开发完成后必须验证三个关键点安全性绕行路径是否始终与施工区保持≥0.5m安全距离需用ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/path提取路径点计算其到施工区边界的最小距离。平顺性绕行路径的曲率变化率挠率是否0.01/m²过高会导致方向盘抖动。可用Python脚本计算相邻三点曲率差值。鲁棒性当施工区地图图层缺失时插件是否优雅降级返回空输出而非崩溃需在无施工区地图的仿真中测试。我在某智慧高速项目中开发的施工区绕行插件实测将施工区通行效率提升40%避免了人工接管且未发生一次碰撞。其核心经验是所有自定义行为必须遵循BPP的“最小干预原则”——只在必要时生成路径其余时间交由默认行为处理。这比强行覆盖所有场景更可靠。7. 性能优化实战将BPP端到端耗时从120ms压缩至35ms的4个关键操作Behavior Path Planner的实时性是实车落地的生命线。在某量产项目中我们面临严苛指标端到端规划耗时必须≤50ms对应20Hz。初始实测为120ms通过以下4个关键操作最终稳定在35ms±5ms。7.1 操作一障碍物预筛选耗时降低42ms默认BPP会对所有PredictedObjects进行全量碰撞预测但实际只需关注本车轨迹前方60m内的障碍物。我们在behavior_path_planner的obstacle_cruise_planner中插入预筛选逻辑// 在obstacle_cruise_planner.cpp的processObstacles()函数开头添加 std::vectorObject filtered_objects; for (const auto obj : input_objects) { const double distance calcDistance2d(obj.pose.position, self_pose.position); if (distance 60.0 isObjectInFront(obj, self_pose)) { // 只保留前方60m内 filtered_objects.push_back(obj); } } // 后续所有碰撞预测均基于filtered_objects效果障碍物处理耗时从58ms降至16ms降幅72%。关键点在于isObjectInFront()使用向量点积快速判断方位避免三角函数计算。7.2 操作二路径点稀疏化耗时降低28msBPP默认生成的路径点过于密集。我们将path_point_interval参数从0.25m改为0.4m并在路径优化层启用二次采样// 在path_optimizer.cpp中B样条拟合后添加 std::vectorPathPoint sparse_path; for (size_t i 0; i optimized_path.size(); i 2) { // 每2个点取1个 sparse_path.push_back(optimized_path[i]); } return sparse_path;效果路径生成耗时从32ms降至4ms且实测跟踪误差仍在0.18m内满足ISO
返回列表