写点什么

在自动驾驶汽车的开发软件中使用模型

  • 2017-02-15
  • 本文字数:2416 字

    阅读完需:约 8 分钟

在类似无人驾驶汽车这样自治动力系统的软件开发中,模型发挥着重要的作用——模仿及验证人们的驾驶行为,记录系统日志并生成代码。在 2016 年度的 GOTO Amsterdam 大会上,美国亚利桑那大学电气与计算机工程专业的副教授 Jonathan Sprinkle 就无人驾驶汽车的软件开发主题发表了演讲,他认为:无人驾驶汽车的软件起初都是单一整体式的,但如今逐渐向着可组合的拼装式方向发展,新的软件可根据需求进行功能拼装。此外,之前大量的数据都来自诸如雷达、GPS 和摄像机等传感器,但如今通过传感器融合,并朝着可感知的方向发展,这些数据都合并到了同一张地图上。这意味着如今的汽车不再将周边整个世界视为静态数据,而是主动去感知,并根据新增类型的传感器推断这些事物会如何移动。

可组合的软件能够通过包含输入、输出及相互补全的过程来完成建模,根据 Sprinkle 教授的看法,这样的过程模型集中在功能方面,对非功能性的行为不太有用。“功能性行为可能很容易测试,但这种过程模型却很少涉及非功能性行为——而后者却是与人类交互的复杂信息物理系统必须要有的行为。”

我们可以这样理解:一辆自动驾驶汽车就是结合了计算、通信和控制的信息物理系统,是一张交互元素网络,因此系统在构建和测试时花费不斐。每添加一个新的组件,就可能影响其他系统的通讯方式以及计算耗费的时间。

至于在运行时如何使用预测模型的控制装置来控制汽车的轨迹,避免与障碍物碰撞,Sprinkle 教授列举了相关案例:如果计算速度太慢,就会因为来不及校正而造成碰撞;如果使用精度较低的简单模型,虽然计算速度快了,但由于精度不够还是可能撞到障碍物。所以在计算轨迹和决定干预时,必须将计算所耗费的时间列入考量,而且我们必须知道模型会有多大的误差,以便计算校正。以上这些任务都必须实时完成。

目前用于自动驾驶汽车的传感器都非常昂贵,在 Sprinkle 教授看来,我们需要相对便宜些的传感器,也许不够完成所有任务,但可以解决大多我们不想做的工作。我们可以把自动驾驶系统看成一个连续统一体,它刚开始可以完成一些简单的自动停车工作,或者在高速路上驾驶时使用自适应巡航系统,直到能够在任何情况下完全自动驾驶汽车。

InfoQ 就以下这些问题采访了 Sprinkle:如何决定将汽车的控制权交给自主系统;如何对自主系统中使用的软件进行建模,以及建模的好处;怎样通过测试数据来测试自动驾驶汽车的软件能否正常工作,以及编写可靠代码的技术。

问: Sprinkle 教授之前曾提及要将汽车的控制权交给自主系统,那么怎样决定给予多大的权限,给予哪些功能的控制权?

答: 实际上,许多人尚未意识到自己已经给了身边系统多大的控制权,不单指交通方面。例如,现代供暖技术会保证我们的生活空间温度接近设定预期,我们做设定,但管理权交给了系统。汽车开始移动时,我们需要在不亲自控制时确保舒适,大多人现在已经适应了自动巡航,因为驾轻就熟。然而,从自动巡航到在人行横道上也完全袖手听凭系统自动驾驶,中间有一个巨大的鸿沟。大多汽车的自主驾驶功能都是从任务引导开始的,不能一蹴而就。

问: 如何对用于自主系统的软件进行建模?

答: 与规划和控制相关的任务是最容易理解的,在规划时需要将类似目的地这样的高层级对象转化为其它高层级的概念——比如期望的行车路线,然后这个行车路线就会转化为期望车速和路径,再根据沿途情况(比如变道或者交通阻塞)来进行相应的调整,最终形成按照期望速度行驶的轨迹路线。在某些情况下,这些概念的软件模型可被解析为 UML 状态模型。例如,系统会根据即时发现的障碍物和行车状态来进行驾驶模式间的切换。序列模型的作用也是相关的,从不同的传感器接收到的信息会触发状态的变化。这些软件组件通常是根据事件调用的,也就是说用户提供需要的输入内容,系统给出响应,又或者系统根据传感器的检测作出回应。因此,我们才说反应模型的效果最佳。

在控制装置的案例中,大多数软件可以当作组件来建模(即功能模块),系统通过这些组件将输入内容转化为输出信号。任务通常根据时间触发,无论系统的新数据是否可用,相应组件都应当作出响应。确保所有模块都能排序十分必要,而且要确保海量数据不会导致系统相应的延迟。反应模型还起到安全开关的作用,一旦传感器掉线,控制装置会发现这一情况并采取相应操作。类似 Simulink 中的框图样式模型可以很好地模拟所需系统的行为。

问: 软件建模有哪些好处呢?

答: 模型对系统行为的推断能力非常惊人,而且无需考虑输入信息的准确与否。我们针对活性或死锁进行检查,还可以调度系统组件,但需利用模型中的数据。对于开发人员来说,在开发中使用模型提供了一种独特的系统日志记录方式,尤其是在将代码生成用于提供最终输出的成品时。

问: 能否就通过测试数据进行软件验证的方式举例说明?

答: 最佳验证案例就是:在人类驾驶员的控制下,检查自主控制器是否根据预期速度做出合理的决策。说到验证方面,在确保系统不会违反约束的情况下,我们通常会使用理论技术验证模型是否正确,再通过代码生成技术来确保输出系统反映了相应的模型。

问: 能否推荐一些其他可用来编写可靠代码的技术?

答: 在手写代码时,想要确保代码可靠,就需要通过严格的步骤和回归测试以保证获得预期的输出信息。因此,我们一直强调,希望大家考虑从模型中合成代码,因为考虑到掉线或者速度变化的问题,最可靠和最稳健的实践就是在开发中代码生成阶段直接合成代码,而不需要修改整个系统的逻辑。当然,如果逻辑错了,代码多完美也是没用的。

关于在亚利桑那大学所进行的自动驾驶方面的研究,研究人员使用了配有传感器和硬件的全尺寸福特 Escape 进行研究。在实际运用前,研究人员先通过建模来进行模拟,通过实验及实际驾驶收集数据。通过这种方法,在实际车辆测试之前我们就能发现设计和集成的问题,并根据之前采集的数据,吸取之前决策的经验,以确保不会有危险的操作发生,研究成果请参见 CAT Vehicle 网站

英文原文: Using Models in Developing Software for Self-Driving Cars

2017-02-15 18:001885

评论

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

从零打造Instagram

俞凡

架构 Instagram 大厂实践

探索CPU的调度原理

元闰子

操作系统 CPU调度

在一年一度高交会,看城市发展的“AI三部曲”

脑极体

09 Prometheus之可靠性及可扩展性

穿过生命散发芬芳

Prometheus 1月月更

每个人都要会的复盘知识

石云升

复盘 迭代管理 1月月更

架构实战营模块四作业

zhongwy

「架构实战营」

996统计

你?

从2021分布式数据库开发者大会里,我们找出了这8个关键词

OceanBase 数据库

OceanBase 开源 OceanBase 社区版

一图回顾 2021分布式数据库开发者大会精彩看点

OceanBase 数据库

数据库 OceanBase 社区版 开发者大会

一个cpp协程库的前世今生(十四)信号量与条件变量

SkyFire

c++ cocpp

数据产品经理实战-团队搭建

第519区

团队建设 数据产品经理 数据产品 1月月更

【Spring专场】「AOP容器」不看源码就带你认识核心流程以及运作原理

洛神灬殇

spring spring 源码 1月月更 Spring原理

教程直播第6期 | OceanBase 如何进行 Benchmark 测试及调优

OceanBase 数据库

数据库 直播 OceanBase 社区版

探索OS的内存管理原理

元闰子

操作系统 内存管理

实现DCI架构

元闰子

DDD DCI架构

架构训练营 -- 模块六

LJK

#架构训练营

深入解读aws graviton3

三少

云计算架构师

这是一个操作系统,但既不是Windows也不是Linux

LAXCUS分布式操作系统

云计算 分布式操作系统 计算机集群 分布式应用 行列混合存储

什么是 Github 的元数据以及如何备份 github 上的数据

汪子熙

GitHub 1月月更

模块四-考试试卷存储方案

Only

架构师实战营 「架构实战营」

模块五

撿破爛ぃ

「架构实战营」

架构实战营第 4 期 -- 模块六作业

烈火干柴烛灭田边残月

架构实战营

可用性和易用性双重飞跃 | OceanBase社区版3.1.2正式发布

OceanBase 数据库

数据库 OceanBase 社区版 开发者大会

2021的科技卦象·坤·5G沃土上万物生长

脑极体

云原生学习总结

好吃不贵

设计模式【10】-- 顺便看看享元模式

秦怀杂货店

Java 设计模式 享元模式

技术走向管理第一站 技术经理

张老蔫

28天写作

模块四作业

cqyanbo

一次无脑接口测试导致的无效排查的经历

liuzhen007

1月月更

SAP R/3系统的R和3分别代表什么含义,负载均衡的实现原理

汪子熙

负载均衡 abap 1月月更

《亚马逊编年史》阅读散记

boshi

读书笔记

在自动驾驶汽车的开发软件中使用模型_软件工程_Ben Linders_InfoQ精选文章