Commit
f7ecf7b1dee5d6720bc871d7301910b4d6fd3b39
by wuyanjun110fix: 空Path取点断言与退化lane segment构造CHECK线上崩溃, 改优雅降级
- Path::GetIndexFromS/GetSmoothPoint 空路径不再fatal, 返回默认值并记ERROR日志 - PncMapPath lane segment构造函数点数不足2时清空path_points_留无效path, 下游经IsAvailable安全降级, 不再CHECK崩进程
|
 | data/common/path.cpp |
 | data/map/pnc_map/pnc_map_path.cpp |
Commit
f8233babbba259246c3ed95227f6b9e2a070d600
by wuyanjun110fix: Path/DiscretizedPath 空与单点场景既有隐患修复
- Path::Reset 补清 length_/num_sample_points_, 防复位后陈旧值残留 - path.hpp 给 num_sample_points_/length_ 加类内默认值, 防默认构造读未初始化垃圾 - Path::InitPoints 单点路径不再越界访问 path_pts_[-1] - DiscretizedPath::GetPathPtFromS/GetPathPtIdxFromS 空容器 front() UB 改空判降级, Evaluate/EvaluateReverse 的 CHECK(!empty()) fatal 同步改 LOG(ERROR)+默认点
|
 | data/common/path.cpp |
 | data/common/path_point.cpp |
 | data/common/path.hpp |
Commit
6087fa2830942d05011e37f9971570f912f11c23
by wuyanjun110fix: 堆场内open space场景误报REGION_OUT_BRIDGE提前降安全阈值, 改按guide line查挂尾所在路段类型, 挂出堆场后再切换
|
 | plan/prepare/prepare_status.cpp |
Commit
6762d53f760e626f1471f94fdd2ee82ef093e505
by wuyanjun110fix: MatchPtByS 对超末端 s 解引用 end() 迭代器的未定义行为
lower_bound 落在 end() 时原代码用 *end() 参与外插, 读垃圾内存, 结果不可信 且可崩溃; 与 MatchPtByt 的同款历史修复对齐, 夹到末点返回, 并补 size<2 的 begin 分支越界保护。动态边界收窄的 arrive_t 反查每帧命中该分支, 既有 cloud_trajectory/trajectory_combiner 调用点同受益。
|
 | data/common/trajectory_point.cpp |
Commit
b9defc7cc8a6bd2c81866bf3e0ebfc67f944ffd5
by wuyanjun110feat: 障碍决策模块化, 运动状态迟滞+label消抖+准入谓词单一源
新增 data/obstacle/decision/: ObstacleDecider 循环体收敛为 obstacle_decision:: Update(决策态继承→运动状态估计→Base/Label 决策→label 消抖)。
- 运动状态估计治动静误判误绕行: 感知 is_static 是 1km/h 单帧阈值, 测速置零 即翻转, 走静态标签分支引发误绕行。改用 his_states 15帧均值速度 + 3s 窗 净位移证据(≥0.8m, 滤 bbox 遮挡抖动) + 非对称迟滞(判动3帧/判静10帧); UNDETERMINED 回落感知 is_static, 真静障首帧即走静态通道。 - direction 修复: 投影失败返 0 误判 REVERSE(同向车被当对向画反向延伸/污染 长决策)。改 +0.3/-0.15 非对称死区, 死区内保持上帧值。 - label 消抖: 收紧立即生效, 放松需连续 5 帧确认。 - 决策态继承走 Update 内 InheritDecisionState 而非 Obstacles::FromHis: 后者全 stage 无条件跑, 会在不调度 OBSTACLE_DECIDER 的 stage 残留旧值。 - 准入谓词统一: IsDpDynamicCandidate/IsCorridorGridObstacle 单一事实源, DP 动态盒与 KEB 走廊消费端只调用不自判。 - ObstacleHisStates 加 velocity_filter_available(): MeanFilter 空缓存取均值 LOG_ASSERT 直接崩, 且该滤波器不参与序列化(回放载入恒空), 消费前必查。 - debug_str 增加运动状态标记(U_/S_/M_)。attr 序列化升 v3。
|
 | data/obstacle/obstacle.hpp |
 | data/obstacle/obstacle_decider_attr.hpp |
 | data/obstacle/obstacle_decider_attr.cpp |
 | tasks/plan/keb_utils.cpp |
 | data/obstacle/decision/obstacle_decision.cpp |
 | data/obstacle/decision/obstacle_decision.hpp |
 | tasks/deciders/other_decider/obstacle_decider.cpp |
 | data/dp_poly_path/trajectory_cost.cpp |
Commit
4c6347125137a837135fd420306b5564fb539b50
by wuyanjun110feat: 动态障碍时间对齐边界收窄+会车旁路(灰度 use_dynamic_bound_clamp)
DP 有时间参数化的动态碰撞 cost 但 path_bound 只由静态化 OGM 切出, 动态避让 仅经 ref_l 软引导进 WBCA, 平滑权重把绕行量拉回。GenerateBoundary 在静态内缩 后追加动态收窄:
- 同向车时间对齐投影: 自车到达时刻按上帧轨迹反查(与 DP 同口径), 回放/首帧 退化匀速映射(下限步速 1.5m/s, 防起步覆盖塌缩); 预测横向漂移限幅采信在 当前实测 l ± min(0.5·t, 1m), 防邻道预测线漂移把直道路径挤偏。 - 对向车会车旁路(dyn_clamp_meeting_bypass): 常被弯道/航向门打成 IGNORE 但 会车交互仍在, REVERSE+FRONT/SIDE+确认运动独立于 label 进收窄(不进 DP 盒 不改绕行决策); 弃时间对齐用 6s 扫掠包络(低速会车两车到达时刻天然错开), 豁免横向限幅(弯道对向车 Frenet 横移是真实几何), 收窄深度封顶半富余。 - 安全阀: 只收窄不翻转绕行侧, 下限=DP路径±半宽+slack, 车前 5m 起步豁免, K=3/M=5 帧锁存消抖(锁存迁移不受单帧降级门控, 防会车中途边界抖动)。 - 障碍 SL 半宽取 fabs: GetSLBoundary start/end 顺序未归一化, 裸减得负宽会 把占用区间整段丢弃(根治待源头归一, 见审计记录)。 - 观测: 障碍 debug_str 追加 _D<C|B><H><A>:<n> 漏斗标记(幂等, 防回放重算 累积); trailer 走廊共用对象但不参与收窄不触碰锁存。 - 灰度默认关(rosparam use_dynamic_bound_clamp, 验证需显式开)。
|
 | data/boundary/driving_corridor.cpp |
 | data/boundary/driving_corridor.hpp |
 | data/config/cfg_lat_plan.cpp |
 | replayer/replayer_data_process/replayer_data_process.cpp |
 | data/config/cfg_lat_plan.hpp |
 | tasks/deciders/lat_decider/side_pass_decider.cpp |
 | tasks/deciders/lat_decider/trailer_side_pass_decider.cpp |
Commit
613bb76c1c04a61369d8cf718abbdd3ac5273f35
by wuyanjun110feat: side-pass trace 增加动态收窄漏斗与逐障碍投影明细
dyn_dbg 漏斗行(enabled→cand/bypass→arrive→hit→active→clamped, 哪层归零卡 哪层) + dyn_notes 逐障碍投影统计(预测 s/l 范围/swept/inter/被拒原因) + 断面级 dyn_* 收窄快照; dump 移到 GenerateBoundary 之后以带出收窄结果。 排查'为什么没收窄'先看这两处。
|
 | data/dp_poly_path/decision_trace.cpp |
 | data/dp_poly_path/decision_trace.hpp |
Commit
5e94cf0938c76aee4944c9521d1073f2e917a140
by wuyanjun110fix: Station2Align 补齐准入过滤, 防不该进align场景绕道从station复入
|
 | data/app/fsm/task_fsm/task_fsm.cpp |
Commit
5d4c8178edc1a0a13f8a08bd4e556f43e4ac96cf
by wuyanjun110feat: 绕行决策加固一轮(误绕行治理+类型策略+动作承诺+限速补全)
- DP 动态碰撞时域修复: num=5.0/0.5 却按 0.1 步进致实际只看 1s, 收成 编译期单源 kDynEvalDtS/kDynHorizonS(5s), 让 DP 及早为对向车主动让行 - 动态障碍边界时间对齐收窄 + 会车 MEETING label 化 + 投影策略集中 (对向扫掠包络/收窄深度封顶 dyn_clamp_meeting_depth_cap 可调) + trace 观测 - 狭窄会车识别: 收窄后可用宽度不足→降速+缩跟车距离(narrow_meeting) - 误绕行治理: * 跟踪成熟度门(reserved_int_1 未初始化 + age), 修 age>0 放过新 track 的洞 * 动态障碍足迹掩膜: 动车漏聚类只剩 OGM 点云时不切 gap(仅横向, 纵向照常) * 类型策略 SidePassPolicy: 车辆类居中跟车等/VRU 居中停让/靠边绕/场桥不碰, VRU 靠边无条件绕(解耦动静), 车辆类居中抛锚超时逃生口 * 动作承诺: 一旦绕行锁到动作完成(甩到车后/VRU挡前硬退出/超时), 承诺期 旁路各软门, 防超车并排时半途回摆; 进入侧连续 N 帧确认防单帧误判固化 - 走廊限速失真治理(零新栅格): 静态非绕行障碍横向余量按 frenet 补进限速; 同向并行/超车贴身降速(空间足够不降速), 复用 PARALLEL_OBSTACLE_SPEED_LIMIT - SL 约定全仓统一(start_l=左缘/end_l=右缘)+语义访问器 - 所有功能使能开关集中到 CfgFuncSw, 数值调参留各域 config; 序列化迁移用占位模式保旧 dump 对齐(CfgFuncSw/CfgLatPlan/CfgSafeConst/ ObstacleDeciderAttr/PerceptionObstacle 各升版本)
|
 | data/config/cfg_safe_const.hpp |
 | data/constrain/longitude_constrain.hpp |
 | data/dp_poly_path/trajectory_cost.cpp |
 | data/obstacle/perception_obstacle.cpp |
 | data/boundary/driving_corridor.cpp |
 | data/obstacle/obstacle_decider_attr.cpp |
 | tasks/deciders/long_decider/constrain_decider.cpp |
 | data/boundary/driving_corridor.hpp |
 | data/common/sl_boundary.hpp |
 | data/obstacle/decision/obstacle_decision.hpp |
 | data/obstacle/perception_obstacle.hpp |
 | tasks/deciders/long_decider/constrain_decider.hpp |
 | data/config/cfg_safe_const.cpp |
 | data/map/reference/reference_segment.cpp |
 | data/config/cfg_lat_plan.cpp |
 | data/dp_poly_path/decision_trace.cpp |
 | hmi/draw/draw_perception.cpp |
 | data/obstacle/obstacle_decider_attr.hpp |
 | data/dp_poly_path/decision_trace.hpp |
 | data/obstacle/decision/obstacle_decision.cpp |
 | data/config/cfg_lat_plan.hpp |
 | data/config/cfg_func_sw.cpp |
 | data/constrain/longitude_constrain.cpp |
 | data/config/cfg_func_sw.hpp |
Commit
57432d24b14d214084e3c0719893a693d3db7796
by wuyanjun110fix: 绕行DP转移预剪放宽, 治偏置起点+畸短首段致l=0直行走廊不可达误绕行
dl剪枝带用弦斜率avg_dl=Δl/seg_len当机动激进度代理, 在短基线上被天然放大; init锚车辆真实s防采样抖导致首段常畸短, 偏置起点回正弦斜率超带→l=0在DP图上 不可达(留默认inf非碰撞)→被迫朝障碍侧大拱误绕行。改: 短段按基线比例放宽带宽 (cap 5x), 回正方向(|cur_l|<|prev_l|)一律放行打破方向锁; 激进度仍由IsValidCurve兜底。 不动s锚定/采样。
|
 | data/dp_poly_path/dp_road_graph.cpp |
Commit
7f9cc76953b6e990b2a03616093dd9a9369432f7
by wuyanjun110feat: 绕行动作承诺加实际横向执行门槛(防空承诺固化误绕行)
- 进入承诺除 label 意图外, 增加自车已实际横向偏移(|ego_match l|>0.5, 与 DP KeepSidePassUntilCentered 同源、对齐 kKeepLThr)作为必要条件, 防 l≈0 纯意图被单帧抖动瞬时锁成 30s 承诺 - 退出新增"空承诺撤销": 已承诺但未实际横向执行且已不满足准入即释放, 零回摆风险; 已绕到一半(lateral_engaged)的仍走硬承诺完成 - ego_match 不可用时证据无效, 进入保守拒绝、已建承诺不误撤
|
 | data/obstacle/decision/obstacle_decision.cpp |
Commit
245dc82d4e357b7d33cabc7b091bdb2b7c2aeead
by wuyanjun110feat: 类型策略灰度默认开启(use_sidepass_type_policy 默认 true)
|
 | data/config/cfg_func_sw.cpp |
Commit
e448e4ce08f401dd7e70250707072e155614d092
by wuyanjun110feat: 直道正面逆向车走会车收窄让行, 不再 BLOCK 死等
会车 MEETING 原只挂在弯道/航向差大两门上, 直道正面对开车掉头后与参考线 反平行(r_diff≈0)且在直线, 两门都不触发, 掉进余宽判定两侧不足即 BLOCK 停等。在 LabelDecider !treat_as_static 块【先于】两门加会车短路: IsMeetingScenario(确认运动+逆向+车前/侧)一律走 MEETING——本体不 BLOCK/ 不写实体栅格, 只按预测轨迹收窄边界让行; 空间真不够时收窄切不出 gap, 纵向 ST/guardian 照常停, 安全不丢。灰度仍 dyn_clamp_meeting_bypass。
|
 | data/obstacle/obstacle_decider_attr.cpp |
Commit
40537f7ac3d275051064cfa1361a4a989672e8a6
by wuyanjun110chore: 会车收窄封顶 dyn_clamp_meeting_depth_cap 默认 0.8→0.9(收窄更紧)
|
 | data/config/cfg_lat_plan.cpp |
Commit
ac4a015c1d0fa9fff7faee5f20a363bfd4d0706b
by wuyanjun110fix: 补 NARROW_MEETING_SPEED_LIMIT 登记, 修 CreateNarrowMeetingConstrain 断言崩溃
NARROW_MEETING_SPEED_LIMIT 实装时只登记了 IsSpeedLimitType, 漏了 LongitudeSpeedLimitConstrain::Initialize 的类型断言白名单。窄会车识别一旦 触发 CreateNarrowMeetingConstrain 就 LOG_ASSERT 崩溃(Signal 6)。补三处: 断言白名单 / TraceBack switch 分组(同 PARALLEL 走减速曲线) / ToString case (原走 default 显示 UNKNOWN)。走软限速, 未加 IsHardConstrainType。
|
 | data/constrain/longitude_constrain.cpp |
 | data/constrain/longitude_constrain.hpp |
Commit
58317cd215b7ab93b84dab9a684c06666a8dacec
by wuyanjun110feat: 会车逆向道窄时不借道让行(纯逻辑判场景+走廊左界渐变钳)
窄路正面会车时, 本车道被 OGM 点堵住需绕行, 原会向左借进逆向道, 与对向 来车正面冲突。改为在决策层纯逻辑判场景, 执行侧钳走廊左界, 不动 DP 搜索。
参考线预计算逆向车道几何(PncMapPath::InitWidth): - 新增 ReverseLaneGeo{valid,num,near_bound_l,far_bound_l,gap}, 逐采样点 存左/右逆向道近远边界与缝宽(可为负), 复用原有 GetToRoadBoundaryDistance /GetProjection 结果不重复查图; 不序列化。 - 访问器 GetReverseLaneGeo(s, is_left, out)。
场景判定(obstacle_decision::IsMeetingBorrowYieldScenario, 帧级): 对向逆向车快速逼近(速度取 his_states 15 帧均值, 不用裸 speed_km_h——感知 单帧测速置零会误撤让行门, 是危险方向的失效) + 逆向道过窄 → 宁让不借。
执行(DrivingCorridor::Init) 三层门控: 1. 场景成立; 2. 已承诺左借(ego 中心越过车道左边线)则不钳——中途拉回比走完更危险, 让它尽快清空逆向道; 让行只拦尚未起步的借行; 3. 本车道确实被堵才钳——用 his 走廊 drivable_seg 判(原始 OGM 堵塞, 与本帧 钳制无关, 不震荡); 本车道畅通则完全不动边界。 命中后左界按 ego 左边缘锚点沿 12m 线性渐变钳到 lane_left_l, 避免硬钳导致 方向盘猛打; 车道被堵死→无 gap→复用纵向停, 不硬挤右侧。
停住的对向车写入栅格(IsCorridorGridObstacle): 对方停下后让行解除放行绕道, 若它不在图里就是"图上空、实际有车"。故确认 静止+逆向+heading 对齐者写图, 能否通过交真实几何判定。heading 对齐判定 (30°+3 帧防抖)从 meeting_fallback 分支提到动静分支之外, 否则静态车只能 读到上帧陈旧值。
其他: - 逆向车绕行策略直接 ALLOW: pulled_over 相对自车参考线判, 会把侵入自车道 的逆向车误判为"居中"→跟一辆迎面来的车。 - 走廊左钳与堵塞判据统一用 TrailerAwareHalfWidths(挂车感知/左右非对称), 该函数上移至 Init 之前, 保持各处 footprint 口径一致。 - GetBoundaryFromS 内是 CHECK(!empty()), 新增调用在断面循环之前, 加空守卫。 - 灰度 use_meeting_borrow_yield_(cfg_func_sw v14), 观测日志 LOG_EVERY_N 降频。
|
 | data/boundary/driving_corridor.cpp |
 | data/obstacle/decision/obstacle_decision.cpp |
 | data/map/pnc_map/pnc_map_path.cpp |
 | data/obstacle/decision/obstacle_decision.hpp |
 | data/obstacle/obstacle_decider_attr.cpp |
 | data/map/pnc_map/pnc_map_path.hpp |
 | data/config/cfg_func_sw.hpp |
 | data/obstacle/obstacle_decider_attr.hpp |
 | data/config/cfg_func_sw.cpp |
Commit
51819254225b35991f7648de9c4d98c51f1e32b2
by wuyanjun110feat: 烟台车内/柱子/房子点云及下沉坑点适配
新增 107/108/110/111 四种点云类型: 前三者(车辆内部/柱子/房子点云)标记 为无效点云, 碰撞与侧避均不考虑; 下沉坑点(111)按路边点云同等逻辑处理, 参与侧避绕行(限速不因它降速, 但 gap/碰撞仍当墙, KEB 补画为障碍规避)。
|
 | data/boundary/driving_corridor.cpp |
 | tasks/plan/keb_utils.cpp |
 | data/obstacle/ogm.cpp |
 | data/obstacle/ogm.hpp |
 | hmi/draw/draw_perception.cpp |