1. 从“倒车入库”到“一键泊车”:为什么我们需要更聪明的泊车系统?

相信每个开车的朋友都经历过这样的场景:在一个拥挤的地下停车场,好不容易找到一个空车位,却因为两边停满了车,空间狭窄,需要反复揉好几把方向盘才能停进去,紧张得手心冒汗。传统的自动泊车辅助系统(APA)在一定程度上缓解了这个问题,它们通常依赖超声波雷达和摄像头,通过预设的几何轨迹(比如“一把进”或“两把进”的固定路径)来引导车辆。但这类系统有个明显的天花板:一旦遇到车位不规则、障碍物位置刁钻或者动态有行人穿行的情况,系统就很容易“卡壳”,要么规划失败,要么需要驾驶员接管。这背后的核心原因是,传统基于规则的算法,其“智商”是固定的,它无法像人一样,通过观察和“试错”来学习如何应对从未见过的新场景。

这正是我们研究 RL-OGM-Parking 系统的出发点。简单来说,我们想打造一个不仅“视力”好(能精准感知环境),而且“脑子”活(能像老司机一样思考和学习)的自动泊车大脑。这个大脑的核心由两部分组成:一是激光雷达占据栅格地图(OGM),它就像给车辆装上了一双能瞬间看透周围三维空间并转化为精确二维“战局图”的鹰眼;二是混合强化学习(Hybrid RL)规划器,它结合了老司机的经验(基于规则的快速规划)和新手的学习能力(基于强化学习的灵活调整),让车辆能在复杂环境中自己摸索出最优的泊车路径。我过去在测试各种泊车方案时,最头疼的就是仿真里跑得飞起的模型,一到真车上就“水土不服”,动作僵硬甚至发生碰撞。而RL-OGM-Parking的设计,正是为了彻底弥合这道“仿真到现实”的鸿沟,让在电脑里训练的“AI司机”,能无缝衔接地成为你车上那位沉稳可靠的“泊车专员”。

2. 系统的“眼睛”与“大脑”:OGM感知与混合规划器拆解

一套可靠的自动泊车系统,首先得知道自己身在何处、周围有什么。这就要靠我们系统的“眼睛”——基于激光雷达的OGM(Occupancy Grid Map)占据栅格地图

2.1 OGM:把复杂世界变成车辆能懂的“像素地图”

你可能听说过激光雷达,它能打出成千上万个激光点,形成周围环境的3D点云。但原始点云数据量大、格式不规则,直接喂给规划算法就像让人直接看满天繁星找星座,效率太低。OGM的作用,就是把这些3D点云“翻译”成一张规整的2D网格地图。我们把车辆周围的一片区域(比如长宽各30米)划分成无数个小格子(比如每个格子0.1米见方)。然后,根据激光雷达点落在哪个格子里,以及点的密度,来判断这个格子是被占据(有障碍物)、空闲还是未知状态。

这个过程听起来简单,但实际做的时候坑不少。比如,地面反射的点(地平面)和天花板反射的点,如果不加处理,会被误认为是障碍物,导致地图上出现一片“虚假墙壁”。我们在实践中,会先根据点的高度信息进行过滤,只保留车辆可能碰撞到的障碍物点(通常是离地0.2米到2.5米之间的点)。接着,为了得到车辆自身的准确运动轨迹(不然地图就是晃动的),我们会融合激光雷达数据和IMU(惯性测量单元)数据,通过激光雷达惯性里程计(LIO)技术,实时估算出车辆每一刻的精确位姿。有了准确的位姿,我们才能把连续多帧的激光雷达点云,像拼图一样准确地“钉”到全局地图里,形成一张稳定、清晰的局部实时OGM

这张OGM就是强化学习模型的统一输入。无论是在仿真器中用程序生成的虚拟障碍物,还是在真实车库里用激光雷达扫出来的真实柱子、墙角,最终都呈现为格式完全一致的网格地图。这就好比让AI司机无论在玩“赛车游戏”(仿真)还是开真车,看的都是同一套标准地图,从根本上解决了因输入差异导致的“水土不服”问题。

2.2 混合规划器:让“老手”和“新手”搭档干活

有了清晰的“战局图”,接下来就是决策“怎么走”。我们放弃了让单一算法“包打天下”的思路,而是设计了一个混合规划器,它由两位成员协同工作:一位是经验丰富的“老司机”Reeds-Shepp(RS)规划器,另一位是善于学习和适应的“AI新手”强化学习(RL)规划器

RS规划器是基于几何规则的经典路径规划算法。它能在已知起点和终点的情况下,快速计算出符合车辆转弯半径约束的最短路径曲线。它的优点是速度快、结果稳定、数学上最优。你可以把它理解为一位精通“侧方停车一把进”绝技的老师傅,在空间充裕、场景标准时,它能给出完美方案。但它的缺点是“死板”,一旦预设的曲线与障碍物发生干涉,它自己不会调整,只会报告“此路不通”。

强化学习规划器则完全不同。我们采用SAC(Soft Actor-Critic) 这类算法,让AI司机在仿真环境中通过“试错”来学习。它的状态(State)就是当前OGM和车辆相对于目标车位的位置;动作(Action)是控制车辆的速度和方向盘转角;奖励(Reward)则根据是否成功泊入、是否碰撞、路径是否平滑等来设定。通过数百万次在仿真中的练习,AI司机逐渐学会在复杂缝隙中辗转腾挪的技巧。它的优点是灵活、能处理未知复杂场景。但纯RL模型在初期探索效率低,且训练出的策略有时会做出一些“冒险”的激进动作。

我们的混合策略的精髓在于动态分工与协作:

  1. 每一步先问“老司机”:在规划每一步时,系统首先会调用RS规划器,检查从当前位置到目标车位,是否存在一条无碰撞的RS曲线。
  2. “有路就走,没路就学”:如果存在这样的曲线,说明当前局面比较明朗,“老司机”的方案可靠,优先采用。如果不存在(这在泊车初期很常见,因为车辆位姿可能还没调整好),则启动“AI新手”RL规划器。RL规划器根据当前OGM,输出一个建议的动作(如“方向盘向左打15度,慢速前进”)。
  3. “新手”动作也要守规矩:为了防止RL模型输出危险动作,我们引入了动作掩码(Action Masking) 技术。简单说,就是根据当前车辆周边OGM的信息,实时计算出一个安全的速度和转角范围。RL模型只能在这个“安全围栏”内选择动作,这就好比给新手司机配了一个随时能接管的安全员,杜绝了碰撞风险。
  4. 终极目标是为“老司机”创造条件:RL规划器工作的核心目的,并不是直接规划出完整路径,而是通过一系列精细的车辆姿态调整,将车辆移动到一个“有利位置”。一旦车辆到达这个位置,RS规划器就能重新找出一条无碰撞的直达路径,从而高效、平滑地完成最后的泊入动作。

这种混合模式,既发挥了RS规划器在路径最优性和稳定性上的优势,又利用了RL规划器在复杂环境探索和姿态微调上的灵活性,实现了“1+1>2”的效果。

3. 从仿真到真车:我们是如何训练和部署这个系统的?

让一个AI模型在游戏里玩转停车场不难,难的是让它下到真实的、充满噪声和不确定性的车库,还能稳定工作。我们的整个流程分为紧密衔接的三个阶段:仿真训练、仿真测试、真实世界部署。

3.1 构建“驾校”:高度逼真的仿真训练环境

我们基于PyGame和Gym库搭建了一个鸟瞰图(BEV)仿真环境。这个“驾校”的特色在于,它的训练场地地图来源有两种,以确保AI司机见识够广:

  • 仿真数据集:用程序自动生成大量平行和垂直车位场景,并随机放置不同形状、大小的障碍物。这能快速覆盖各种基础与极端情况。
  • 真实世界数据集:直接使用我们采集的真实地下车库激光雷达数据,通过前面提到的OGM生成流程,制作成高保真的仿真地图。这让AI司机在“学车”阶段就能接触到真实世界的几何结构和噪声特征。

在训练中,车辆的状态(如位置、航向角)和动作(速度、转角)都被精确建模。每一次尝试,AI司机(RL规划器)接收当前的OGM和目标位置,输出动作,环境反馈新的状态和奖励(比如离车位更近了就加分,撞墙了就扣大分)。我们使用SAC算法进行训练,大约在NVIDIA RTX 4090上训练8个小时,模型就能收敛得很好。这里的关键是奖励函数的设计,我们不仅奖励最终成功,也奖励路径更短、方向调整更少、行驶更平滑,这样才能训出一个既高效又乘坐舒适的“老司机”风格AI。

3.2 “驾考”模拟:在仿真中全面测试

训练完成后,我们会在仿真环境中设置“毕业考试”。考试分为三个难度等级:

  • 普通考场(Sim-Normal):障碍物较少,空间宽敞。
  • 复杂考场(Sim-Complex):障碍物密集,通道狭窄。
  • 真实考场(Real-World):使用真实车库OGM构建的场景,障碍物布局最复杂,自由空间极其有限。

我们将我们的混合RL方法与几个主流“考生”同台竞技,包括传统的混合A*算法、纯RL的SAC和PPO算法。考核指标很直观:

  • 泊车成功率(PSR):考的就是基本功,能不能停进去。
  • 平均换挡次数(ANGS):考的是操作流畅度,老司机通常一把方向搞定,不需要来回倒腾。
  • 路径长度(PL):考的是效率,能不能用最短距离停进去。

从我们大量的仿真测试结果来看,混合RL方法在三个考场都表现出了压倒性优势。尤其在真实考场,混合RL的成功率能达到87%以上,而纯RL方法只有20%左右,传统混合A*约77%。更重要的是,我们的方法平均换挡次数只有2.6次,路径也最短,这说明它不仅能成功,还能用最优雅、最高效的方式成功。

3.3 “上路”实战:在真实车辆上的部署与挑战

仿真考了高分,终于要上真车了。我们的实验车辆搭载了多颗激光雷达和IMU,计算单元是一台英特尔NUC小电脑,配备了RTX 2060显卡。部署流程是这样的:

  1. 实时感知:激光雷达数据实时传入,经过滤波、LIO里程计、点云融合,生成当前时刻的局部实时OGM。这个过程耗时必须极短,我们优化后能在几十毫秒内完成。
  2. 模型推理:将这张OGM和预设的目标车位坐标,一起输入到已经训练好的混合规划器模型(部署为TensorRT等优化引擎)。模型在RTX 2060上跑一次推理,仅需约17毫秒
  3. 决策与执行:规划器输出当前步的最优控制指令(速度、转角),通过CAN总线发送给车辆的底盘控制器,驱动车辆执行。
  4. 循环往复:车辆移动后,新的激光雷达数据到来,更新OGM,再进行下一轮决策,形成一个闭环。

我们在三种极具挑战的真实场景中进行了反复测试:

  • 场景一:长距离垂直泊车。车辆从远处正对车位开过来,需要先调整姿态再倒入。我们的系统成功率100%,平均35秒完成,且几乎只需要一次换挡(前进切倒挡)。
  • 场景二:长距离平行泊车。车辆与车位平行但距离较远,需要先向前开一段再倒车切入。成功率85%,因为有时需要更精细的初始位置微调。
  • 场景三:狭窄死胡同泊车。这是最难的,车位在一条窄路的尽头,两边都是墙或车,倒车空间极小。我们的系统依然取得了60%的成功率,而传统混合A*算法在这里完全无法规划出路径。AI司机通过强化学习掌握的“揉库”技巧在这里发挥了关键作用。

部署中遇到的最大挑战不是算法本身,而是系统的延迟和同步。激光雷达数据处理、模型推理、控制指令下发、车辆执行,每一个环节都有几毫秒到几十毫秒的延迟。如果不同步好,会导致车辆“看到”的地图是几毫秒前的,做出的决策已经不合时宜。我们通过严格的时间戳对齐和预测补偿算法(比如根据当前速度预测一下车辆未来几毫秒的位置)来解决这个问题。

4. 深入核心:技术细节与参数调优心得

如果你也想尝试实现或改进类似的系统,以下几个技术细节和调参经验可能会帮到你,这些都是我们在项目中踩过坑、填过坑的地方。

4.1 OGM的分辨率与范围选择

OGM的网格大小(分辨率)和地图范围是平衡精度与计算量的关键。

  • 分辨率:我们试验过0.05米、0.1米、0.2米。0.05米精度最高,但地图数据量是0.1米的4倍,计算和内存开销大增,对推理速度影响明显。0.2米则过于粗糙,容易丢失细长障碍物(如立柱)的准确形状。0.1米是一个很好的折中点,既能清晰表征常见障碍物,又能保证实时性。
  • 范围:考虑到泊车过程车辆移动范围,我们选择以车辆为中心,前后左右各15米(总计30x30米)。这个范围足以覆盖泊车所需的感知区域,又不会引入太多无关的、消耗算力的远处信息。

4.2 强化学习奖励函数的设计艺术

奖励函数是RL模型的“指挥棒”,设计得好坏直接决定AI司机的驾驶风格。我们的奖励函数是一个多目标加权和: R = w1 * R_success + w2 * R_progress + w3 * R_collision + w4 * R_smooth + w5 * R_effort

  • R_success:最终停入车位且姿态正确时给予的大额正向奖励(如+1000)。
  • R_progress:每一步,根据车辆与目标车位中心点距离的缩小程度给予的小额奖励。这是引导车辆向目标移动的主要动力。
  • R_collision:发生碰撞时给予的巨额负奖励(如-1000),并终止本轮尝试。
  • R_smooth:惩罚方向盘的剧烈变化(转角变化率)和频繁的换挡操作,鼓励平滑驾驶。
  • R_effort:轻微惩罚持续的方向盘转角(即使不变),鼓励车辆在调整到位后回正方向。

调参的重点在于权重w1~w5的平衡。初期我们过于强调R_progress,导致AI司机喜欢“铤而走险”贴近障碍物以快速接近目标,容易碰撞。后来我们提高了R_smoothR_collision的权重,并加入了基于OGM的危险距离惩罚(当车辆离任何占据格子太近时,就施加一个与距离成反比的负奖励),才让AI学会了安全保守但高效的策略。

4.3 动作掩码:安全的第一道防火墙

这是确保实车安全不可或缺的机制。具体实现时,我们会在每一步推理前,根据当前OGM和车辆轮廓,进行一个快速的“碰撞检测模拟”。我们预设几个未来的轨迹片段(例如,以不同转角行驶0.5秒),看看在这些轨迹上是否会碰到OGM中的占据格子。然后,反向推导出不会导致碰撞的最大安全速度和转角范围。RL模型输出的动作会被强制裁剪(Clip)到这个安全范围内。这相当于给模型的决策加了一个硬性的安全约束,即使模型在某些极端状态下输出了一个疯狂的动作,最终执行的也是一个被“消毒”过的安全动作。

4.4 混合策略的切换阈值

虽然我们的策略是“RS有路就走,没路用RL”,但在实际代码中,这个判断并非非黑即白。我们设置了一个置信度阈值。例如,RS规划出的路径,如果其与最近障碍物的距离小于一个安全阈值(如0.3米),即使理论上无碰撞,我们也认为这条路“太悬”,转而启用RL进行更保守的微调。这个阈值的设置需要根据车辆的实际尺寸和控制精度来反复调试。

5. 展望与思考:RL-OGM-Parking的进化之路

尽管目前的系统已经取得了不错的效果,但在实际产品化的道路上,还有不少可以优化和深化的方向。从我个人的工程经验来看,下一步的进化可能会围绕这几个点展开。

首先是感知的融合与冗余。目前我们高度依赖激光雷达OGM,它的优势是精度高、不受光照影响。但在大雨、浓雾天气,激光雷达性能会下降。未来的系统肯定会走向多传感器融合,比如将摄像头语义信息(识别出车位线、锥桶、行人)与激光雷达的几何信息融合进OGM。一个格子不仅记录“是否被占据”,还可以记录“被什么占据”(是墙、车还是人),这能为规划器提供更丰富的决策依据,例如遇到临时停靠的行人,车辆可以等待而不是绕行。

其次是规划器的端到端化。我们现在是分模块的:感知(OGM生成)-> 规划(混合规划器)-> 控制(底层控制器)。一个更极致的思路是训练一个端到端的模型,输入原始激光雷达点云或图像,直接输出方向盘转角、油门和刹车信号。这能减少模块间信息损失,但同时对数据、算力和训练方法的要求是指数级增长,并且可解释性和安全性验证会更困难。短期内,混合架构在可靠性和可解释性上仍有巨大优势。

再者是仿真器的极致拟真。我们现在的仿真器在几何上是真实的,但在物理层面(如轮胎滑移、悬挂响应)和传感器层面(模拟激光雷达的噪声、光束模型)还可以更精细。利用更强大的游戏引擎或专业仿真软件,构建数字孪生车库,让AI司机在仿真中就能经历轮胎打滑、传感器突然失灵等极端情况,其应对现实世界突发状况的能力会更强。

最后,也是我认为最重要的一点,是个性化与自适应学习。现在的模型是一个“通用老司机”。但不同的用户对泊车风格的偏好不同:有人喜欢快速一把进,有人追求绝对平稳无感。未来的系统或许能通过少量几次用户接管的数据,在线微调模型参数,让AI司机的驾驶风格更贴合车主的习惯。甚至,车辆之间可以通过车联网,分享在某个特定难停车位成功泊入的经验,实现“车群学习”。

实现一个稳定、可靠、泛化能力强的智能泊车系统,就像教一个机器人掌握一门精妙的艺术,既需要严谨的工程实现,也需要对算法行为的深刻洞察。RL-OGM-Parking这套框架,为我们提供了一条融合传统规则安全性与现代学习算法灵活性的可行路径。至少从我们目前的测试来看,这位“AI司机”已经能在大多数情况下,比我这个十年驾龄的老司机更淡定、更精准地把车停进刁钻的车位了。当然,每次测试我们依然会全神贯注,手放在方向盘附近准备随时接管,毕竟,安全永远是自动驾驶研发中那条不可逾越的红线。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐