1. 课程导入

记忆泊车(Memory Parking Assist,常被简称为 HAVP 或 L2+ 泊车增强功能)解决的是一个非常具体的问题:车辆第一次由驾驶员手动开入某个停车场并停入固定车位后,系统把这段"人开的路线"和"车位环境"记下来;之后再次来到同一停车场,车辆就能沿着记忆中的路线自动行驶并泊入同一个车位。它不依赖高精地图覆盖,也不要求停车场改造,因此成为量产智能驾驶中落地速度最快的功能之一。

本课程围绕两个核心工程问题展开:建图——如何把一次人工驾驶过程转化为可复用的语义地图与轨迹;轨迹复现——如何在新一次行程中稳定、安全、舒适地重走这条路线并完成泊入。理解这两件事的输入、输出、约束与失效边界,是后续 29 章所有算法与工程细节的基础。

一、核心概念:四个必须分清的对象

初学者最容易混淆的是"地图""轨迹""路径""车位"这几个词。在记忆泊车工程中,它们有明确分工:

  • 语义地图(Semantic Map):描述停车场静态结构,包括车道拓扑、坡度、减速带、立柱、出入口、可行驶区域边界等。它是"环境是什么样"。
  • 记忆轨迹(Memorized Trajectory):建图阶段记录下来的车辆位姿序列,含位置、航向、速度、曲率,是"人当时怎么开的"。
  • 规划路径(Planned Path):复现阶段由规划模块基于语义地图与实时感知重新生成的几何路径,是"系统决定怎么开"。
  • 目标车位(Target Slot):建图时标定的车位位姿与类型(垂直、平行、斜列),是整段记忆的终点锚点。
关键认知:记忆轨迹不是直接回放的"录制脚本",而是与语义地图、实时感知共同构成约束的参考。直接回放录制轨迹在真实停车场几乎必然失败,因为车辆起点位姿、周围车辆、行人动态每次都不一样。

二、整体框架:从一次建图到多次复现

下图给出记忆泊车系统的整体数据流与模块关系。左侧是建图链路,右侧是复现阶段,中间通过本地存储的地图与轨迹文件衔接。

建图阶段(人工驾驶一次) 复现阶段(自动行驶多次) 驾驶员手动驾驶 低速驶入停车场 传感器采集 环视/IMU/轮速/超声波 里程计与位姿估计 视觉SLAM / 轮速融合 语义建图 车道/立柱/车位标定 地图 + 轨迹文件 本地存储 / 云端可选 定位与重识别 匹配记忆地图特征 实时感知 障碍物/车辆/行人 全局路径规划 沿记忆轨迹生成路径 局部避障与决策 绕行/停车/让行 横纵向控制 转向/驱动/制动 泊入目标车位 垂直/平行/斜列 车位标定与终点锚点 建图时人工确认 车位位姿约束 闭环:复现过程中的成功/失败数据可回流,用于地图更新、轨迹优化与失效场景挖掘 建图质量决定复现上限,复现反馈又反过来提升建图鲁棒性

三、方法流程:一次完整记忆泊车的六个步骤

  1. 触发建图:车辆进入停车场低速区域,驾驶员通过车机或语音确认"开始记忆泊车"。
  2. 数据采集与位姿估计:环视相机、IMU、轮速、方向盘转角同步记录,视觉里程计输出连续位姿。
  3. 语义建图:识别车道线、立柱、减速带、出入口,标定目标车位类型与位姿。
  4. 轨迹与地图落盘:生成带时间戳的轨迹点序列与语义地图文件,绑定停车场标识。
  5. 复现触发与定位:再次进入同一停车场,系统重识别并完成初始定位对齐。
  6. 规划控制与泊入:沿记忆轨迹生成路径,实时避障,最终完成车位泊入并退出。

四、典型应用场景与参数示例

记忆泊车最典型的落地场景是住宅小区与写字楼地库:路线固定、车速低、结构重复度高。工程上通常关注以下参数:

参数 典型取值 工程含义
建图车速 ≤ 15 km/h 保证视觉里程计与语义识别精度
记忆路线长度 ≤ 1 km 受存储与定位漂移累积限制
复现定位误差 横向 ≤ 20 cm 决定能否稳定对准车道与车位
车位位姿误差 ≤ 10 cm / 3° 影响最终泊入姿态与成功率
建图成功判定 闭环误差 < 0.5 m 否则提示重新建图

五、常见误区与复盘要点

误区一:把记忆泊车当成"轨迹回放"。真实系统中,录制轨迹只作为参考,必须结合实时感知与语义地图重新规划,否则遇到临停车辆、行人、施工围挡就会失效。
误区二:忽视建图质量。建图阶段的一次急打方向、一次遮挡、一次车位标定偏差,都会在复现阶段被放大。复盘时应优先检查建图闭环误差与车位标定精度。

误区三:认为"记住一次就永久可用"。停车场环境会变化:车位被占、通道改道、标识更换。工程上需要设计地图版本管理、失效检测与重新建图引导机制。

# 建图结果自检示例(伪代码)
map = load_map("parking_lot_A")
traj = load_trajectory("session_001")

assert map.loop_closure_error < 0.5      # 闭环误差
assert traj.length < 1000                # 轨迹长度(m)
assert map.slot.pose_error < 0.10        # 车位位姿误差(m)
assert map.slot.yaw_error < 3.0          # 车位航向误差(deg)
print("建图质量合格,可用于复现")