AIGC 应用、数据分析等企业 10+ 热门专题课,就在极客时间企业版>>> 了解详情
写点什么

打造最可靠的自动驾驶基础架构

  • 2019-11-21
  • 本文字数:4996 字

    阅读完需:约 16 分钟

打造最可靠的自动驾驶基础架构

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

导读:本次分享的主题为打造最可靠的自动驾驶基础架构。主要内容包括如何做 Pony.ai 自动驾驶系统的基础架构,涉及到的技术困难,以及我们是如何克服的。



首先先了解下传统互联网公司的基础架构:


  • 数据基础设施,会包括大规模的数据库、分布式的文件系统;

  • 计算平台,可能会需要大量的服务器、大数据平台、容器的管理机制;

  • Web 服务管理,同时还会有各种各样的 Web Service,不停的迭代来满足新的业务发展。


这是传统互联网公司要做的事情,但是对于自动驾驶公司和 Pony.ai,在这样的架构基础上我们还会做哪些事情?



这是 Pony.ai 的基础架构,包含了所有传统互联网公司要做的事情,除此之外,还需要做如下事情:


  • 自动驾驶车载系统,如何支持各种各样的 AI 技术、算法,如何控制车辆,这都依赖于自动驾驶车载系统来完成。

  • 大规模仿真平台,Pony.ai 每天至少会跑 30W 公里的仿真测试(很多自动驾驶公司一年跑的里程可能只有百万级别),这点对于自动驾驶测试来说非常重要。

  • 车队运营基础平台,Pony.ai 要打造自己的移动出行服务,需要基础平台来支持 Robotaxi 的运营。

  • 可视化平台与人机接口,可视化平台是帮助我们了解系统到底是如何思考、运作的,或者当测试工程师做各种测试的时候都依赖于可视化平台;人机接口,自动驾驶车辆最终是要提供出行服务,是有乘客在里面,这时会有一个可视化的界面,来告诉乘客车所感知的周围环境,以及接下来的驾驶操作等等信息,同时还会提供人机交互的功能,让乘客也能控制车辆,比如输入目的地,或者需要停车等等。



Pony.ai 的目标是打造自动驾驶移动出行平台,我们希望可以在不同的城市,可以提供大规模自动驾驶车辆的运营,那么我们的基础架构会面临以下挑战:


  • 车辆数量的增加,目前广州已经有几十辆车在进行测试,同时还在不停的增长着;

  • 运营区域的扩大,刚开始只是在很小的区域进行测试,目前已经在几百平方公里的区域进行测试;

  • 数据量的增长,我们有很多的传感器,以及车辆和运营区域的增加,都使得数据量的增长非常非常非常大;

  • 工程师数量的增长,目前 Pony.ai 有广深、北京、美国四个 office,工程师的数量每周都在增长,所以导致模块数量和内部代码的数量也在增长。


所有的这些增长都要求我们的技术栈是具有可扩展性的,来满足快速增长所带来的挑战。



刚刚讲了整个基础架构,其中重要的一点就是车载系统,在讲车载系统之前,先简单介绍下自动驾驶系统:


  • 传感器及其他硬件:激光雷达、高分辨率摄像头、毫米波雷达、GNSS/IMU、运算平台,我们可看到图中标了不同的颜色,目前这些传感器是通过 Supplier Partner 来得到的,我们自己不做传感器,我们需要去购买他们的产品,但是购买之后需要做数据进一步的分析和整合,然后做后面的处理,然后对于运算平台除了 supplier 的一些应用外,我们自己也会做一些优化。传感器主要要做的事情就是接收真实世界的数据,然后传递给 Pony.ai 自动驾驶系统中。

  • 自动驾驶系统:首先,要做传感器融合,进行时间同步,将多传感器的数据融合在一起;然后是感知模块,用来感知周围的环境有什么样的障碍物和物体;接下来会进行行为预测,预测这样的障碍物或物体之后的行为会是什么样的;然后才到我们的决策规划模块,按照之前的预测来决定之后车辆的动作,如急刹车、让路、超车等动作;最后,就是我们的控制模块,他会按照决策规划模块,告知我们的系统要怎么做,然后决定怎么踩刹车、油门,怎么打方向盘。

  • 车辆,我们本身是不造车的,所以车辆是由 OEM 提供的,但是整个控制的算法,是我们自研去做的。

  • 除此之外,还有高精地图与定位模块,以及数据与系统架构(数据的处理,以及控制数据在不同模块的流动)。


这里介绍的是各个模块,但最后把他们串联起来,靠的是我们的自动驾驶软件系统,这就是自动驾驶的车载系统。很多自动驾驶企业使用的是 ROS 的一套工业系统,而 Pony.ai 是从第一行代码开始,写了一套 PonyBrain,自研的多层次自动驾驶车载系统,最主要的做的事情有:


  • 多模块的调度运行,所有模块的调度运行都是 Pony.ai 自己去做的。

  • 模块间的消息通信,如何把数据从激光雷达传递到传感器融合的模块,再把融合的结果放到感知模块中,然后感知的数据怎么告诉行为预测、决策规划等等模块,以及如何拿到高精地图与定位的信息。

  • 车载计算资源的分配与管理,对于自动驾驶来说反应速度是非常重要的,这就需要我们对内存、CPU、GPU 等有足够的优化,做到定制化的车载计算资源分配与管理。

  • 日志记录,同时我们需要完善的日志记录,我们所有的测试数据回来都需要一整套的 Pipeline 去做自动化的分析,然后帮我们评判出有意义的数据,给到测试工程师或者研发工程师,进行进一步的分析去使用,然后进一步提升我们的模型。

  • 监控与报警,保证了我们自动驾驶的安全性。



车载系统的挑战


① 可靠性:车载系统必须足够的可靠,不能有任何的内存泄露、代码逻辑的错位,这种都是零容忍的,一旦发生了这样的事情,对整个自动驾驶系统来说是非常严重的事故,是有可能影响到安全性的,对于 Pony.ai 自动驾驶系统技术的发展来说,安全永远是我们的第一位,所以所有影响安全性的事情,我们都是零容忍的,同时他也会影响车队运营的效率;所以我们还需要系统监控与异常报警,一旦系统出现任何问题,我们需要及时提醒安全员,做出车辆接管的操作。


② 高性能:满足模块间通信的海量数据压力,同时实现低延迟。


③ 灵活性:支持多种不同类型的计算资源的接入,以及不同类型模块的接入,需要有灵活的系统来支持计算资源的高速迭代。



车载系统的实践:


  • 可靠性


① 代码质量要求高:对于可靠性来说我们有非常严格的 code review 和 unit test,相信这是在国内互联网公司不太容易见到的一件事情,虽然会非常耗时,但是对可靠性的提升是有非常大的帮助的。


② 合理使用工具帮助发现问题:同时我们也会使用非常多的工具,如静态分析、ASAN 等等,来做离线的分析,来保证系统的可靠性。


③ 多重系统可靠性检查:包括系统启动前校验,系统运行时实时监控,系统运行后数据分析等。



④ 这是我们的持续集成与发布的平台:对于每一次代码的修改,我们都会进行仿真测试;然后对于研发的迭代,我们每周会有 Release 版本的更新,保障版本的稳定性,同时,刚刚我们整个测试包括封闭,半封闭,高峰期的测试,整个测试流程怎么持续集成与发布,也是保证系统可靠性的一种方法。



  • 高性能


① 合理的架构避免大数据拷贝等严重影响性能的逻辑。


② 依据模块逻辑分配合适的计算资源,如内存、CPU、GPU 等。


③ 定期对整个系统 Profile 分析系统的性能瓶颈。


  • 灵活性


① 定义足够通用的模块公共接口。


② 定义足够通用的消息通信接口。



为什么需要仿真系统?因为仿真系统可以使得我们车还没有上路的时候,就已经做了大规模的自动驾驶测试,无需路测和人力接入就可以评价系统的性能变化;由于没有进行路测,不会引起路面事故;同时,仿真系统还提供了基于数据驱动快速迭代算法的可行性,新的算法可以先在仿真平台上做验证,一些具体的指标和测试的信息都会在仿真平台上有所体现。



仿真系统数据的俩个不同来源


① 支持真实路测收集的场景,我们的路测数据非常的多,数据回来之后,通过 Data Pipeline 自动更新这些有意义和有意思的场景,我们会根据当时的场景改动相应的模块,然后会在仿真系统重跑当时的场景,来判断新的方法是否 work;


② 支持人工和随机生成的场景,这样的一些仿真的场景,也是非常的重要的,因为虽然我们在做大规模的路测,但是不代表可以遇到所有的场景,很多场景无法在路测中收集到,这就需要我们通过人工去创造这样的场景出来,给我们的系统一些样本,来学习如何处理这样的场景,保证我们新的 feature 在这样的场景不会出现问题。



仿真平台的挑战与实践


① 仿真结果的可靠性:首先仿真的结果必须是可靠的,如果不可靠,用它检测出来的结果是没有任何的意义的。整个仿真是在服务端模拟车载环境跑的,同时在服务端构建车辆动力学模型,保证测试的数据足够可靠。


② 仿真数据的选择与管理:当然我们会选择合适的路测数据来帮助算法的迭代(这里的选择不是人工的选择,是全自动化的选择,帮我们在茫茫数据中挑选出有意义的数据);另外,我们还会规范的依据类别管理大规模的仿真数据,比如感知模块的一些改动,到底需要测试哪些数据,才会更加的体现这个改动带来多少影响,这里我们会有内部的一个分类,我们不会对所有的数据进行无差别的仿真(这样做意义不大)。


③ 仿真系统的性能:我们将整个仿真系统并行部署在分布式计算平台中,这才可能满足我们单天 30W 公里以上的仿真测试,并且这个数据还在不断增长。



数据基础架构


数据是自动驾驶技术进步的核心驱动力,没有数据,我们就看不到现在如此多的测试车辆在进行路测,数据本身有几个重要的点:


① 如何存储海量的数据,如何支持快速的访问。


② 如何进行数据处理。


③ 如何进行数据同步,如何把不同区域、路测数据、车载数据同步到数据集中,如何让不同办公区的工程师都可以使用这些数据,对数据同步来说是一个很大的挑战。


核心挑战


① 数据量大:我们有 PB 级别的数据,这里只是以摄像头为例,还包括其他传感器数据,以及系统运作的中间数据等等。


② 数据属性不同于互联网数据:我们的数据由客户端产生,有大量的传感器数据、大量的模块运行日志,这与互联网数据有本质的区别,所以对整个数据架构的要求也是不一样的。



数据存储的挑战


① 依据特定的使用场景设计合理的存储格式的设计:以便于车载系统记录、大规模数据分析(数据回来之后,需要有方法进行分析,找出有意义的数据)、部分数据访问、文件系统存储(如何高效的利用文件系统)等。


② 选择合适的存储系统:


  • 针对冷/热数据选择不同方案

  • 选择高可用的存储系统

  • 选择易于水平扩展,因为车辆规模是不停的在变大的,运营时间越来越长,数据的增长速度是远超想象的,所以需要易于水平扩展的存储系统。

  • 控制成本,不能用过于昂贵的设备。



数据处理可以帮助收集性能指标,有 MPI(平均每次接管所需里程)、模块运行效率、乘客舒适度体验等,还有就是路测有趣场景的挖掘,如接管、急刹、感知算法识别、不合理的变道策略等用于模型训练和仿真。



数据处理的挑战


① 减小数据采集到处理的全流程时间:如何以最快的速度把数据从车传到中间处理系统,Data Pipeline 运行完之后,上传到数据中心,这里面我们做了非常多的工作。


② 依据不同类型数据处理任务选择合适的处理系统:计算量要求比较高的我们选择 CPU 密集型系统来处理;更多的会是车载的数据,我们会选择 IO 密集型系统进行处理。


③ 通用的任务定义以支持灵活的添加新任务:帮我们检测出来更多有意义的数据。



车队运营基础平台:


我们有一个 Pony Pilot 项目,在我们广州所有的内部员工都可以使用,同时在北京和美国加州,也有同样的服务已经上线,那么支持这样的服务,我们需要做哪些事情:


  • Fleet Control Center,车队控制中心

  • Pony Pilot APP

  • Onboard system

  • 各种各样的 webapp,帮助我们观察整个车队的运营情况,帮助管理测试的车辆和人员。



车队运营基础平台的挑战


需要支持复杂需求变化的 web 框架,同时我们有大量的 web service 的部署与管理,这都需要我们去完善 web 服务通用组件,例如部署工具、日志记录平台随时排查问题、监控平台保证所有 service 平台的高可容性。



容器与服务调度平台


通过 Kubernetes 来帮我们做各种各样的服务调度和集群支持。



可视化平台


① 目标:方便人类理解无人车系统看到的世界


② 挑战:首先,需要足够的灵活,易于适配不同需求的工具;其次,需要有高性能的现实,如 3D 实时渲染的高效实现;最后,支持跨平台的可视化框架,如桌面系统、移动系统、Web 等多平台。



人机接口


方便乘客使用的用户界面,同时可以看到自动驾驶是如何了解世界,如何做决策,如何规划之后的行为等等,给乘客更多的信息和信任。



总结


① Pony.ai 的基础架构工作包括:


  • 传统互联网公司所需要解决的基础架构挑战。

  • 自动驾驶技术特定的基础架构挑战。


② 在这里工作你可以:


  • 接触自动驾驶系统的各个方面。

  • 设计并实现满足通用需求的单机和分布式系统。

  • 系统的保障自动驾驶技术的持续进步。


作者介绍


莫璐怡


Pony.ai | Tech Lead


本文来自 DataFun 社区


原文链接


https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247495335&idx=1&sn=824ad1109025c730dc87fa430f296831&chksm=fbd75ccbcca0d5ddeaf5da90b6b8faff79c465d7456f066fb4b08adb912fcfabc1d064708e80&scene=27#wechat_redirect


公众号推荐:

AGI 概念引发热议。那么 AGI 究竟是什么?技术架构来看又包括哪些?AI Agent 如何助力人工智能走向 AGI 时代?现阶段营销、金融、教育、零售、企服等行业场景下,AGI应用程度如何?有哪些典型应用案例了吗?以上问题的回答尽在《中国AGI市场发展研究报告 2024》,欢迎大家扫码关注「AI前线」公众号,回复「AGI」领取。

2019-11-21 08:002101

评论

发布
暂无评论
发现更多内容

什么是数字化管理,对企业价值几何?

优秀

数字化转型 数字经济 数字化管理

HDC 2023丨以HarmonyOS技术赋能艺术,引领鸿蒙生态媒体体验升级

最新动态

夹具、治具、模具零件加工|云MES系统解决方案

万界星空科技

开源 解决方案 MES系统

深入理解 HDFS(四):Socket

冰心的小屋

hdfs NameNode IPC Server HDFS client 通信渠道

10分钟了解Flink Watermark水印

程序员半支烟

Java 大数据 flink 程序员

在langchain中使用自定义example selector

程序那些事

程序那些事 大语言模型 langchain

直播源码硬核技术分析:主播PK功能

山东布谷网络科技

直播源码

面向万物智联的应用框架的思考与探索

OpenHarmony开发者

OpenHarmony

InnoDB 单表数据量超过 2000W 出现性能问题

红袖添香

MySQL innodb 索引 B+树 缓冲池

Downie 4 for Mac(视频下载软件) 4.6.24中文直装版

mac

视频下载工具 苹果mac Windows软件 Downie

堡垒机-企业最好的家人,信息安全的守门人

行云管家

互联网 网络安全 信息安全 堡垒机

一条SQL如何被MySQL架构中的各个组件操作执行的?

砖业洋__

MySQL MySQL架构 MySQL优化器 MySQL执行器 MySQL存储引擎

一文详解TextBrewer

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 8 月 PK 榜

R2在全渠道业务线的落地 | 京东云技术团队

京东科技开发者

测试 质量 企业号 8 月 PK 榜 R2

C4D软件都应用在影视后期什么领域?

Finovy Cloud

融云荣登36氪WISE2023「全球化最佳基础设施」榜单

融云 RongCloud

全球化 通信 运营 融云 wise

科兴未来|2023“数智未来,聚放神采”医疗科技创新挑战赛

科兴未来News

从源码层面深度剖析Spring循环依赖 | 京东云技术团队

京东科技开发者

spring 源码剖析 循环依赖 @Bean 企业号 8 月 PK 榜

MySQL 体系结构

红袖添香

MySQL 存储引擎 InnoDB存储引擎

LMOps 工具链与千帆大模型平台

Baidu AICLOUD

LLMOps 大模型微调 千帆大模型平台 LMops

5 小时玩转阿里云 Flink 实时湖仓,速速报名!

Apache Flink

大数据 flink 实时计算

利用uplugin对比Webpack和Rollup插件系统

OpenTiny社区

前端

以数驱动 | 智能分析云助力流程制造行业绿色高效运营

用友BIP

智能分析

火山引擎DataLeap数据质量动态探查及相关前端实现

字节跳动数据平台

大数据 数据中台 数据治理 数据安全 企业号 8 月 PK 榜

服装行业多模态算法个性化产品定制方案 | 京东云技术团队

京东科技开发者

数据化 AIGC GPT 企业号 8 月 PK 榜

桌面应用打包:pyinstaller | 京东物流技术团队

京东科技开发者

Python pyinstaller 桌面应用 企业号 8 月 PK 榜

MySQL事务ACID原理

红袖添香

MySQL 数据库 事务 ACID MySQL InnoDB

《这就是ChatGPT》读后感

叶轩子

人工智能 深度学习 ChatGPT

DFS算法解析

数新网络官方账号

算法 DFS 深度优先搜索

关于ANCE OS兼容性评估 & Linux智能全栈调优KeenTune介绍 | 第 93-94 期

OpenAnolis小助手

QA sig 龙蜥大讲堂 KeenTune ANCE

redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?

java易二三

redis 编程 程序员 面试 计算机

打造最可靠的自动驾驶基础架构_AI&大模型_DataFunTalk_InfoQ精选文章