AVP自动代客泊车这几年已经从一个炫技功能变成了高阶智驾的硬指标但真正动手做过的人都知道定位精度才是整套系统的命门。停车场里GPS信号基本废掉环境又高度结构化柱子、墙壁、车位线长得几乎一模一样车辆低速蠕行时还经常被旁边开过的车遮挡传感器。前深动科技现在的深动科技并入小米智驾在AVP-Loc这条线路上打磨了相当长时间里面有不少值得单拎出来说的设计尤其是PCA主成分分析在定位链路中的多种应用不是教科书上那种泛泛的降维说法而是真的一步步嵌入了点云处理、特征提取和回环匹配的工程细节里。这篇文章适合正在做自动泊车、记忆泊车、园区低速自动驾驶定位的工程师也适合想理解定位算法在量产项目里到底怎么落地的算法新人。我会结合AVP-Loc的典型方案架构把PCA在里面的角色拆开讲清楚再补一些我用实际数据跑过的验证结论和踩坑记录尽量让你读完不只是知道用了PCA而是知道在哪个环节、为什么用、参数怎么调。1. AVP-Loc到底在解决什么问题停车场定位的核心矛盾先说清楚AVP-Loc在整个AVP系统里的位置。完整的自动代客泊车通常会拆成感知、定位、规划、控制四块而定位Loc是让车辆知道自己在哪、朝哪、以多准的置信度知道的那个模块。别小看这个定义停车场场景下知道自己在哪比高速NOA要难得多。1.1 停车场环境的天然挑战高速和城市道路定位可以依赖GNSSGPS/北斗加高精地图差分信号进来之后配合惯导米级甚至分米级的定位都做得到。但地下停车场和部分地上多层停车场里卫星信号几乎为零车辆只能依靠自身传感器来估计位置。这就带来三个核心矛盾第一环境高度重复。停车场的设计规范性导致视觉和激光雷达看到的场景极其相似连续十根柱子看起来一模一样墙面的纹理也几乎没有区分度。位置估计稍有偏差地图匹配就可能抓到隔壁的柱子上去。第二光照和动态干扰严重。地下车库灯光昏暗且不均匀车身周围又有大量动态障碍行人、其他车辆、充电桩附近的设施如果定位算法对动态物体敏感很容易被带偏。停车场里还常见地面停车位线的强反光、环氧地坪的倒影这些对视觉特征提取都是灾难级的噪声源。第三低速蠕行下的运动退化。AVP启动阶段车辆往往以极低速度挪动IMU的积分误差和轮速计的打滑误差在这个区间会被放大。低速时如果视觉特征不足纯视觉里程计的尺度漂移会非常明显跑几十米就可能偏出去二三十厘米——对于停车位这种要求精度在10厘米级别的应用场景来说完全不可接受。1.2 AVP-Loc的精度到底要做到多高在实际量产项目中AVP-Loc通常要满足两个层次的精度要求。一是全局定位精度即车辆在地图中的绝对位姿误差一般要求控制在20到30厘米内这决定了车辆能否在正确的车道里行驶、能否在正确的路口转弯。二是相对定位精度即车辆相对于目标停车位、相对于当前车位的位姿误差这个要求更苛刻通常在5到10厘米因为停车入位时车身与两侧车辆的距离容错非常小。这两个精度要求决定了AVP-Loc不能只依赖单一传感器。视觉里程计提供连续的运动估计IMU提供短时间内的姿态基准轮速计提供速度参考还需要有周期性的绝对矫正来消除长期漂移。深动科技的AVP方案里这个绝对矫正很大程度是靠地图匹配完成的而地图匹配的效果直接取决于特征提取的鲁棒性PCA在这里就开始发挥作用了。2. 定位链路的基本架构多传感器融合的闭环设计要理解PCA在AVP-Loc里的价值先要把整条定位链路看完整。深动科技的AVP-Loc大体走的是紧耦合多传感器融合先验地图约束的路线而不是简单地拿多个传感器结果做加权平均。2.1 前端里程计与后端融合的分工前端里程计负责短时间内的连续位姿估计输入通常包括环视鱼眼相机图像、IMU数据、轮速信息。相机帧之间通过特征点跟踪比如KLT光流或者直接法亮度匹配来估计帧间运动IMU则提供高频的角速度和加速度积分。这里有个关键设计倾向不能完全信任任何一个传感器因为停车场里鱼眼相机很容易被近距离障碍整个挡住IMU在低速长时间积分时会饱和漂移轮速计在过减速带和环氧地坪打滑时误差不可控。所以后端融合一般会用一个误差状态卡尔曼滤波或者因子图优化框架把前端里程计的输出、IMU预积分、轮速约束以及每隔一段距离触发的地图匹配观测全部压进同一个优化问题里。AVP运行的过程中车辆实际上是在不断重复短距离累积漂移然后被地图匹配拉回来这个过程。2.2 地图匹配不是全局定位而是局部特征对齐这里要澄清一个常见误区AVP-Loc里的地图匹配从来不是拿全图去匹配而是拿局部特征去做对齐。系统预先构建的停车场高精地图里存了语义特征柱子、墙面、车道线、停车位线和几何特征点云轮廓、地面高度图车辆当前传感器观测到的局部特征会被投影到地图坐标系下通过最小化观测与地图之间的残差来修正当前位姿。这个特征对齐过程的鲁棒性直接受到特征提取质量的影响。如果特征提取不出来匹配无从谈起如果特征提取出来了一堆错误对应匹配会收敛到错误的位置。所以你会发现AVP定位方案之间很大的差距不在优化器用什么框架而在特征质量这条上游环节上。PCA在这条上游环节里干了三件脏活累活点云几何分析、特征描述压缩、动态物体剔除。3. PCA在AVP-Loc中的核心角色不止是降维工具很多人在学校学PCA时留下的印象就是降维、压缩、可视化但在定位算法里PCA更像是一个局部几何探测器。它通过对局部点云的协方差矩阵做特征分解告诉算法这一小块空间到底是什么形状。这个形状信息是后续所有特征提取的地基。3.1 PCA检测局部形状背后的数学直觉假设我们拿到激光雷达或者视觉重建出来的一小块三维点云比如某个时刻车身前方一平方米范围内的点。把这些点的坐标组织成一个N×3的矩阵每行是一个点的(x,y,z)对矩阵的每一列减去均值得到去中心化数据然后计算3×3的协方差矩阵C再对C做特征值分解得到三个特征值λ1≥λ2≥λ3和对应的三个特征向量v1、v2、v3。这三个特征值的相对大小关系直接告诉你局部点云是什么形状如果λ1远大于λ2和λ3说明点云主要沿一个方向展开这是典型的线状结构比如停车位线的边缘、柱子棱、墙面转角。如果λ1和λ2接近且都远大于λ3说明点云在二维平面上铺开这是面状结构比如地面、墙壁、停车位白线所在平面。如果三个特征值差不多大说明点云是散乱的团状结构通常是灌木、车辆顶部、行人这类缺乏规整几何特性的物体。这背后的数学直觉其实很简单协方差矩阵描述了数据在不同方向上的方差特征值越大代表该方向上的数据分布越分散。线状结构只在单一方向上有大方差面状结构在两个方向上有大方差团状结构在三个方向上都有方差。3.2 从特征值到定位可用特征的完整链路在AVP-Loc的工程实现里这个PCA检测结果会被进一步加工成定位可用的特征。我以地面提取为例说明一下完整的链路第一步对当前帧的局部点云按固定半径体素化每个体素内的点云做PCA。拿到λ3对应的特征向量v3也就是法向量估计。如果法向量接近竖直与重力方向的夹角小于某个阈值且λ3很小说明该体素内点云确实很平坦就认为这个体素属于地面。第二步把属于地面的体素点云收集起来整体再做一次PCA得到一个全局地面法向量和地面高度。这里有个细节第二次PCA能有效消除第一次PCA时个别体素受噪声干扰产生的法向量偏转相当于做了一个稳健平均。第三步把地面从原始点云中剥离剩下的点云再按PCA的线状/面状/团状分类提取出墙面、柱子和悬挂物。墙面用于横向定位约束柱子用于纵向定位约束这两类特征组合在一起基本就能满足停车场走廊场景的定位需求。实测下来这套基于PCA的地面与结构提取流程在环氧地坪、水泥地面、有减速带和排水沟的停车场都能稳定工作。关键参数是体素大小和PCA的奇异值阈值我后面专门讲参数调优时细说。4. 四个典型的PCA落地场景从地面到回环检测PCA在AVP-Loc里不是只有一个应用点它贯穿了定位前处理、特征提取、回环匹配和后端优化的多个环节。我把实际工程中用得最扎实的四个场景拆开讲。4.1 地面与立柱特征提取定位特征的骨架停车场定位依赖的特征其实很单调地面、柱子、墙壁、车道线。其中柱子和墙壁是立体结构提供最强的几何约束。柱子检测是PCA的高光时刻。把剥离地面后的点云在水平面上做网格投影每个网格内的点云做PCA如果λ1远大于λ2且λ2接近λ3说明是一根细长结构也就是柱子。检测到柱子的中心位置后和地图里预存的柱子位置做匹配车辆纵向和横向的位姿就都能被约束住。墙面检测的逻辑类似对局部点云做PCA后如果λ1和λ2接近且都远大于λ3说明这是一个平面结构再用法向量方向判断是水平面还是垂直面。垂直面且法向量指向停车位方向的就是可用于横向定位的墙面。在我跑过的停车场数据里柱子平均间距大概在6到9米沿墙的柱子通常排成一条直线。只要车辆在行驶过程中连续看到两根柱子并完成匹配回溯优化就能把前一段路累计的横向误差一次性修正掉。这也是为什么AVP系统在停车场主通道上的定位精度普遍优于停车位内部的原因——主通道特征丰富停车位内部往往只剩地面车位线可用。4.2 动态物体剔除PCA如何防止行人把定位带偏停车场最大的干扰源就是动态物体。行人、推车、正在找车位的车辆这些物体会在点云里形成连续的、有运动轨迹的幽灵特征如果不处理地图匹配会把它们当成静态结构去对齐结果就是车辆位姿被硬生生拉偏。PCA在动态物体剔除里起的作用很巧妙。动态物体在局部点云中通常表现为团状结构——三个特征值接近形状极不规整。而静态结构柱子、墙面、地面、停放车辆都有相对明确的几何形状。算法把团状结构的点标记为疑似动态物体再结合时序判断如果同一位置连续多帧都是团状结构且位置在变化就确定为动态物体并过滤掉。这个方案的效果在实车测试里很明显。停车场如果有人站在车辆目标行驶路径旁边原始点云匹配的定位误差可能超过半米而加入了PCA形状分类和动态滤波之后误差能稳定回到厘米级。代价是主动放弃了行人类物体的几何信息但对于AVP定位来说这恰恰是我们想要的。4.3 回环检测与重定位低维度特征描述子加速位置识别车辆在停车场里经常需要重定位比如刚启动AVP时、中途被障碍逼停后重新起步时、从B2层开上B1层坡道时。这些场景下系统没有连续的里程计基准只能靠当前看到的地图特征和我记忆里哪个区域最像来定位这就是回环检测。PCA在这里的用法是构建区域级的低维度特征描述子。把当前局部点云的PCA主方向、特征值比例、平面法向量分布直方图组合起来生成一个几十维的向量和地图里预计算好的区域描述子做检索匹配。由于主方向和特征值比例对于同一区域是旋转不变的或者说先做主方向对齐后是不变的这个小描述子比原始点云匹配快得多能在大几百个候选区域里快速筛出3到5个候选再做精匹配。这个做法的好处是鲁棒。停车场区域的几何结构在改造前后变化不大基于PCA的描述子对这个层面的差异不敏感换了几盏灯、补了块地坪漆对特征值比例的影响几乎可以忽略。我在一个商业综合体停车场做过连续三个月的跨时间回环测试用PCA描述子做初筛的召回率明显优于直接用视觉词袋描述子。4.4 地面高度图构建与连续坡度估计这个场景容易被忽略但实际对AVP体验影响很大。停车场经常包含坡道、减速带、排水沟如果定位系统把地面当成纯平面处理车辆在坡道上的俯仰角误差会直接转化为水平定位误差。PCA在这个问题上的应用是这样的系统会把停车场地面划分成固定分辨率的栅格每个栅格内点云做PCA把λ3对应的法向量和栅格中心高度记录下来形成一张二维半稠密高度图。车辆运行时将当前测得的局部高度图与先验高度图对齐顺便估计出自身的俯仰角和侧倾角。实测在坡道区域这种做法的俯仰角估计误差可以做到0.3度以内远远满足AVP的控制需求。5. 参数调优与实车踩坑PCA没那么玄但细节很磨人原理讲完了接下来是工程里最痛苦的部分——调参数和修bug。PCA算法本身实现起来很简单但放进AVP定位系统后问题会出现在你完全想不到的地方。5.1 体素尺寸、点云密度与特征值阈值的联动调节PCA提取特征的效果和点云密度强相关。激光雷达近处点云密、远处点云稀如果体素尺寸设置不当远处一个2米×2米的墙面上可能就四五根扫描线做出来的PCA特征值比例完全不能反映真实形状。我常用的标定思路是这样的先统计停车场典型场景下点云在5米、10米、15米处的密度然后反推体素内至少需要多少个点才能让协方差矩阵的特征分解稳定。体素大小一般设置在0.2米到0.5米之间太小了噪声主导太大了会把柱子和墙面混在一起。特征值阈值的设置也很有门道。判断线状结构时不能只看λ1/λ2的比值还要看λ1本身的绝对值。如果整体点数太少λ1也会有虚高的情况。我通常既设比值阈值比如λ1/λ23.0又设点数下限比如体素内至少15个点两者同时满足才认为是有效的线特征。5.2 环氧地坪反光与雨天地面水渍导致的误检这是我在实车测试时印象最深的一个坑。停车场环氧地坪在灯光照射下会产生大面积镜面反射视觉重建出来的点云会在原本是平面的地面上形成一层假面高度比真实地面高几厘米到十几厘米。如果不加处理这层假面会被PCA误检为一个倾斜平面地面高度图直接坏掉。解决办法是在PCA流程之前加入回环反射检测。对点云的反射强度值做统计分析如果同一位置反射强度突然跳变且点云高度呈现镜像对称特征就把这些点标记为可疑反光点。这个检测不需要很复杂但能有效防止PCA被镜面反射误导。雨天水渍的问题类似不过多发生在露天停车场的出入口。水渍会使点云出现大量随机散射局部点云PCA趋向于团状结构导致本该是平面的地面被误判为不可靠区域。一个比较实用的策略是地面提取时不完全依赖单帧PCA结果而是和多帧的地面高度做时序一致性校验连续几帧都被判定为地面的区域才写进地图更新。5.3 退化场景下的主动策略PCA救不了所有情况PCA特征再丰富也会遇到退化场景。比如停车场里有一段什么都没有的加宽区域两侧墙壁距离超过15米柱子也不在传感器视野内这时候定位只能依赖里程计和IMU。强行用稀疏的PCA特征去做匹配反而可能把车辆锁死在错误的位置上。在工程上我们会给每个PCA特征附加一个信息量评分。评分高时比如连续检测到墙面和柱子系统地图匹配的权值会调高评分低时比如只有稀疏团状点匹配观测的协方差会被放大等效于降低约束强度。这套自适应的信息量调节机制让系统在特征丰富区域保持高精度在退化区域又不至于被病态匹配带偏。这类问题没有一劳永逸的解法只能在系统层面做取舍。我的实际经验是不要试图让PCA在任何环境下都万事通更重要的是让定位系统明确知道自己当前处于什么置信度状态并按置信度动态调整后续所有模块的行为。6. 从AVP-Loc到更远的场景PCA方法的可迁移性AVP-Loc里沉淀下来的这套PCA应用方法其实可以很自然地迁移到其他低速封闭场景的定位中。比如工业园区物流车、机场摆渡车、地下矿区作业车这些场景同样面临GPS信号遮挡、环境结构化、低速蠕行的问题PCA做地面提取和结构特征分类的思路完全复用得过来。方向上讲PCA这类基于协方差特征分解的方法和现在火热的端到端占用网络并不互斥。占用网络擅长体素级的语义理解但它在输出层面并不直接给出几何形状的解析描述。如果把占用网络输出的语义体素作为PCA的输入在体素层面做局部形状分类效果上会比直接在原始点云上做PCA稳健很多因为语义分割已经把动态物体和镜面反射噪声过滤掉了。我也在关注一些把PCA特征投影到学习特征空间的尝试。比如利用PCA做位置编码的初始化或者用PCA主方向做旋转不变特征的学习输入。这些方向还在早期阶段但思路是一致的PCA提供的几何先验信息可以作为学习算法的强先验约束帮助网络在数据少时也能保持几何一致性。回到AVP-Loc本身我始终觉得这套系统的核心价值不只是把车停在车位上而是在传感器成本受严格限制、环境极度无纹理的情况下仍然构建了一套可靠的空间认知方法。PCA在这个体系里不是最耀眼的模块但它是很多关键步骤的底层支撑。如果你正在处理低速场景的定位问题不妨先把PCA吃透它会比你想象的更能解决问题。
阅读完成 · 觉得有帮助?