本文编辑:Qingquan
版权所属:美团无人配送
背景与挑战
经过数年的积累,美团无人车已经从技术探索进入到业务运营阶段,这个阶段对于自动驾驶车端系统和离线系统都有了新的要求。
在车端系统上,我们更加关注如何构建低成本、低功耗、高稳定性的自动驾驶系统来支撑大规模运营,对此业界常用多片ARM芯片并配合边缘计算技术来实现,这对于上层软件自动驾驶引擎来说也有了新的要求,即需要它能够支撑多计算节点的协作运行。
另外在离线仿真系统上,仿真任务的迅速增长,要求我们需要具备高效管理、运行超大规模仿真任务的能力,由于不同类型的仿真任务对硬件算力的需求并不一样,那么在仿真系统所能使用的硬件资源配比相对固定的情况下,我们就需要将最大化资源所能承载的任务同样作为引擎的优化目标。
美团无人车技术团队如何应对以上挑战,下文将展开讲述。
1)往分布式计算平台的平滑迁移
在从传统IPC向分布式计算平台的过渡过程中,我们希望上层功能模块在移入到分布式计算平台上运行时无需任何适配,功能模块也无需关心它所运行的节点是否跟上下游模块在同一个节点上。
为完成上述目标,我们就需要自动驾驶引擎能够提供运行环境的抽象与隔离,引擎为完成这一层抽象,必须解决三个关键点:分布式环境下高实时性的数据传输、高实时性的调度、关键自动驾驶数据的实时记录。
图1. 引擎需要将算力向端上平滑迁移
2) 拆分调度仿真任务
仿真系统是自动驾驶研发的重要手段,在自动驾驶进入到运营阶段之后,仿真任务也迅速增长,目前美团自动驾驶仿真系统每天执行数百万仿真任务,峰值流量每小时上百万任务,仿真里程每天上千万公里。
前面提到,不同的仿真任务对硬件算力的需求是不一样的,比如感知预测仿真任务必须依赖GPU运行,在硬件资源(或者其硬件资源的配比)是固定的前提下,为摆脱这种仿真任务的硬性依赖进一步提升资源利用率,我们需要将仿真任务中不同的子任务按照计算属性拆分到不同的机器上运行,其中引擎要负责完成同一任务在不同机器间的通信和执行调度,并做到这种拆分对上层仿真任务无感。
图2. 如何在仿真环境中依据任务属性调度任务
在美团,我们打造了统一的自动驾驶引擎来同时满足车端计算平台和离线仿真系统的需求,因此面向运营的分布式引擎也会遵循这一策略,使用统一的架构来满足车端分布式计算平台和离线仿真系统在大规模运营阶段的新需要。
分布式自动驾驶引擎架构
关键技术
3.1 分布式通信总线
为应对自动驾驶运营阶段的新需求,我们构建了一套基于Pub-Sub模式的可扩展的通信机制,并已经将之扩展到多种通信场景中,比如单节点多进程间的IPC通信、多节点间也根据需要提供了gRPC和PCIe等多种通信方式来满足分布式计算平台和仿真平台上的需要,而上层功能模块在不同场景下均使用统一的通信接口。
下图是分布式通信总线的层次结构示意图。
a).数据的高度有序性:各计算节点间的数据按照时间线进行有序统一记录是事后高效数据分析的基础,如何在分布式场景中保证海量数据(100+GB/Hour量级)的有序性是数据记录的一个难点。
b).数据的完整性:自动驾驶的数据要做到不遗漏,不重复,在需要记录的数据中,除了自动驾驶业务模块的数据外,通信链路本身的Trace数据和模块执行数据对于分析系统问题同样重要,实际应用中我们发现这类数据量非常大,一般会达到2-3万条/秒,对这些数据的记录不能影响到自动驾驶系统的平稳运行。
3.3 分布式环境下地图管理的挑战
自动驾驶地图是自动驾驶系统正常运行不可或缺的一部分,并且它是上层功能模块的一个通用组件,因此分布式引擎也负责管理车端地图。
在自动驾驶进入运营阶段之后,自动驾驶地图的管理有了新的挑战:
针对地图数据的不断扩张等问题,我们通过精细化地图服务,使用车辆位置动态加载瓦片地图,很好地解决了这一阻碍。
此外我们引入了动态图层管理,提供了准实时更新高频变化的地图数据的手段,为保证全天候的自动驾驶运营提供了重要支撑。
下图是自动驾驶引擎中地图管理流程的示意图。
结束语
▼
更多技术分享
▼
▼ 美团无人车配送中心 持续热招中 ▼
新增500岗位 | Base 北京/深圳
扫码投递简历 | 期待与你同行
美团无人车配送中心成立于2016年,围绕美团外卖、美团跑腿等核心业务,通过与现有复杂配送流程的结合,形成了无人配送整体解决方案,满足在楼宇、园区、公开道路等不同场景下最后三公里的外卖即时配送需求,提升配送效率和用户体验,最终实现“用无人配送让服务触达世界每个角落”的愿景。
|关注我们 解锁更多无人配送技术干货|
原文始发于微信公众号(美团无人配送):美团分布式自动驾驶引擎