ssm中怎么用location.href跳到controller层_聊聊自动驾驶中的功能开发

d10dfc3207395af00f5f763b4d0989f5.png

在知乎上看过不少大牛写的自动驾驶技术介绍文章,大多谈到的是AI, Deep Learning, Computer Vision等等感知(Perception)层面的。但在各个传感器(雷达、摄像头、激光雷达等)探测到目标信息及周围环境后,车辆该如何做出反应?自动驾驶的大脑该怎样根据感知层的信息对车辆进行控制?

这些其实都是在自动驾驶软件中的功能应用层中实现,那么功能层还需要做些什么呢?本文试图以最简单的语言就以下几方面聊聊自动驾驶中的功能开发。

  • 什么是自动驾驶系统的功能?
  • 自动驾驶中的功能要做些什么?
  • 功能设计包含了哪些内容?
  • 练习一下

1 什么是自动驾驶的功能?

严格来说,本文并不讨论“自动驾驶”这个主题。考虑量产的情况下,所谓的自动驾驶现阶段只能分为高度自动驾驶(Highly Automated Driving, HAD)和部分自动驾驶(Partially Automated Driving, PAD),所以本文出现的自动驾驶字样代表的是HAD和PAD。

HAD --- L3+的功能。Audi A8的交通拥堵引导(Traffic Jam Pilot, TJP)算一个,尽管宣布了很久后依然没有上市。

PAD --- L1-L2的功能。比如国外Tesla的Autopilot,Cadillac CT6的Super Cruise,国内吉利博瑞GE的智能领航,长安CS55的IACC,荣威Marvel X等等,均可以归类到此。

那什么是功能呢?

刚才HAD或PAD里举例展现出来的系统都是由一个个功能组成的,比如Tesla的Autopilot,其实就包括了以下功能:

  • 车道偏离预警 Lane Departure Warning (LDW)
  • 自适应巡航 Automated Adapt Cruise (ACC)
  • 交通拥堵辅助 Traffic Jam Assist (TJA)
  • 高速功能辅助 Highway Assist(可变道)(HWA)

吉利和长安的基本也包含以下几个功能:

  • 车道偏离预警 Lane Departure Warning (LDW)
  • 车道偏离预防 Lane Departure Prevention (LDP)
  • 自适应巡航 Automated Adapt Cruise (ACC)
  • 交通拥堵辅助 Traffic Jam Assist (TJA)
  • 集成式巡航 Integrated Cruise Assist (ICA)

当然,这些功能不同的OEM叫法都不一样。可以看出,无论是什么级别,自动驾驶其实是由一个个小功能组成,甚至Super Cruise中的驾驶员Handsoff也可以算作一个功能。再举例,Audi A8中的L3功能,其实也是在包含了LDW/LDP/TJA/ICA等等一系列功能的基础上,再加上TJP。当然,自动驾驶级别越高,单个的功能也会越复杂。

至于这些功能在哪实现,可以在传感器中,在雷达ECU中,在摄像头ECU中,或是在中央控制器ECU中(发展趋势),均是可以的 。

2 自动驾驶中的功能要做些什么?

现在的车载ECU软件,基本都是按照AUTOSAR架构标准设计,如下:

9794f3e4f8f89bbdf0984a3a7e1e531a.png

功能基本都在Application Layer中实现,至于其它层的作用,由于相关性不高,这里就不赘述了。

参考下图,可以把每个功能理解为一个函数,有输入输出,通过获取传感器和车身CAN的信息,经过分析计算,输出CAN信号对车辆进行控制和显示。

b3a979aa20ea3a6e16be06969bf6ac44.png

具体来说,

输入

  • 各个传感器识别到的感知信息,比如摄像头识别到的车道线信息,交通灯/路标信息,雷达识别到的车辆信息,周围物体信息等等
  • 车身CAN上传入的信号,一般又能分为几类:
    • 车身状态信号(车速,横摆角速率,手力矩等等)
    • 驾驶员操作信号(功能开关,转向灯,油门,刹车等)

有了这些输入信息后,就可以通过功能的内部运算来进行输出,输出以下信息:

输出

  • 车辆控制信息
    • 发送给EPS的车辆转向扭矩角度等
    • 发送给EMS/ESP的车辆加减速信息
  • HMI信息提示
    • 当前功能的状态
    • 驾驶员的提示信息等

那么重点来了,功能的内部运算如何实现?我们这里就介绍下功能设计所包含的内容。

3 功能设计包含了哪些内容

功能层设计中主要包含了以下几个方面:

  • 状态机 State Machine
  • 人机交互 HMI
  • 控制器 Controller

分别设计实现以上几个方面,就能相对完善地做出一个功能。这里以车道保持辅助( Lane Keeping Assist, LKA) 功能设计为例,看看要做些什么。

LKA指的是通过摄像头识别车道线,检测本车在自车道中的位置,经过实时计算,连续输出扭矩请求信号至执行器电子助力转向系统EPS,以控制车辆随时保持在车道中间行驶,如下图:

f5d8d9f8d69d28eb08fa5ae217c06513.png

好了,那现在我们要在一辆车上实现车道保持,在感知层已经开发好的基础上,功能层该怎么做呢?

  • 状态机 State Machine

第一步,是需要设计一个状态机。这是功能开发中最复杂也最重要的一部分,因为无论HMI的输出还是控制信号的输出都需要基于状态机。状态机指的就是LKA功能当前处于哪种状态下,这些状态之间在何种条件下如何转换。

ISO 11270 Intelligent transport systems — Lane keeping assistance systems (LKAS) — Performance requirements and test procedures中,为我们展示了一个状态机,如下图:

72f8607c37dabe7668222cac7b8e74f4.png

可以看出,其将LKAS分为了OFF和ON两个主状态,ON中又分为了standby和active两个子状态,这样设计是最佳的么?其实不一定,这里展示的仅仅是一个最基本的状态机,根据OEM需求的不一样,对于HMI显示的不同要求,是可以将这个状态机扩展开来的。

比如主状态,其实除了ON和OFF,是否需要额外表示ERROR状态,ERROR又可以分为Permanent Error和Temporary Error,那在这些状态之间,如何切换呢?

OFF -> ON:这个比较直观,驾驶员按下开关,软件读取到功能开启的信号后

ON -> OFF:同理,驾驶员将功能关闭

那么如果此时功能是OFF,这时候功能出现故障,比如传感器出现故障,或所需要接收的车速等重要信息报文丢失,此时的状态是继续保持OFF还是转为ERROR呢?这些就是状态机里需要定义的了。

此时功能状态是ON,这时候出现故障, 状态应该跳到ERROR,但之后,故障自动消失,比如之前丢失的报文又重新正常发送,那此时功能是回到ON还是回到OFF(让驾驶员手动重新开启)?这里,一样是取决于功能定义策略,没有哪种一定好或一定不好。

那LKA在ON的状态下,有active和standby两种状态。active顾名思义,功能正在激活,方向盘此时依据软件计算发出的请求扭矩进行自动调整,但出现了一定抑制,比如车速过低,一般而言,LKA只在车速60以上才可以使用,那如果功能开启,但车速在60以下,此时就是standby了。那仅仅standby和active两个状态就够了么?其实也不一定。

这里需要引出抑制条件的概念,这也是LKA功能设计中比较重要的一环,LKA功能设计的初衷是辅助驾驶员打方向盘,使其开车时更加舒适,那么如果驾驶员想要变道,此时如果还发出扭矩牢牢控制住方向盘把车维持在中间,是不是就有问题了?如果车辆处于一些极端工况下,这时候LKA还在正常激活,是否会对驾驶员的操作进行干扰?同样的,如果激活过程中突然丢失了车道线,LKA也应该进入抑制状态。

因此,在驾驶员主动超越车身状态不适合LKA周围环境不支持LKA时,功能需要被抑制。常见的抑制条件如下:

  • 转向灯开启
  • 作用在方向盘上的手力矩过大
  • 方向盘转角速率过大
  • 猛踩刹车
  • ABS/ESP激活
  • 等等

那么,那以上这几种情况下,既可以让功能进入standby,也可以增加一个新的状态机override等等,可以将抑制分为几类,不同抑制产生时对应不同的状态。这样做的目的是什么呢?是为了让驾驶员更加了解自身所处在的环境情况,根据这个功能当前处于哪种状态,更清晰地了解该系统。

  • 人机交互 HMI

由状态机中得知,HMI中最基本的就是我们需要知道这功能什么时候是开启的,什么时候是关闭的,也就是说需要接收该功能的开关信号。可以是驾驶员方向盘边上的硬开关,也可以是中控大屏里的软开关,这个不重要,但重要的是功能需要接收驾驶员是否开启功能的信号。

此外,作为驾驶员,我需要知道功能开启后给我的反馈,该功能是否开启,是否可以工作,是否激活,是否有故障等等。这些输入的基础就是状态机了,功能将自身的状态发出给仪表,作出不同的显示,这部分就是HMI要做的内容。

这一块也是不同OEM区别最大的部分,有的可以做的很酷炫,比如特斯拉,可以将摄像头识别到的车道线信息显示出来,是直道还是弯道,且弯道能随道路半径的不一样而变化,实线还是虚线等等。这些信息就是通过HMI直接输出到CAN上,仪表以此作为输入进行显示的。

54835ebad71fa79bce487ffd7c430bed.png
Tesla Autopilot

所以,一定要理清楚该功能的输入输出是什么?有哪些需要驾驶员输入的信息,有哪些信息需要提供给驾驶员。

  • 控制器 Controller

车辆控制里大致分为开环控制和闭环控制。

以LKA为例,比较常用的就是PID控制了。

6d9f1854e15804750b91045e3a1acec6.png

图片来源:Unified Tuning of PID Load Frequency Controller for Multi Area Power Systems via IMC - File Exchange - MATLAB Central

知乎上关于PID控制的介绍有很多,感兴趣的可以看看。

推荐一个Youtube上的视频,有条件的小伙伴可以看看:

Controlling Self Driving Car: https://www.youtube.com/watch?v=4Y7zG48uHRo

视频就几分钟,可以很直观的理解PID中各环节在LKA中的应用。

开环里的前馈控制,look up table也是使用频率比较高的。

但既然用在量产的LKA中,实际车辆上的情况还是非常复杂的,实际应用控制算法会基于这些基础版的开环控制和闭环控制有很多改进,这部分比较涉及核心,就不细说了。

4 举个栗子考虑下该怎么设计脱手检测功能

对于一个功能来说,在完成以上几点后,相当于就有了输入输出,有了内部的状态迁移,根据这些状态迁移可以反映出不同的功能状态信息提示驾驶员。对于整车来说,仪表显示交互就完成了,再加上控制算法控制车辆行驶,基本上一个功能就形成了。

这里,大家可以想想如何设计一个脱手检测功能。

714328179cd537b70da3002a3f4ead09.png

图片来源于网络

输入:方向盘上的手力矩信号 or 电容传感器

输出:提醒驾驶员接管信号

要求:在检测到驾驶员脱手驾驶后发出接管提醒,可以分级发送,在仪表上作出不同的提示,在驾驶员始终脱手并没有接管后,将车辆安全刹停。

怎么实现这个功能呢?

一样可以从HMI 状态机 控制器来思考,当然这里涉及的车辆控制部分不多,主要是前两种。大家可以思考下如何从这几方面来设计~

============================

写的可能有点乱,希望能对大家有点帮助,以后慢慢改进~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyEclipse详细使用教程

第一部分MyEclipse的基本使用 一.提示:MyEclipse的透视图按钮:可以切换不同的透视图(位于右上角) 1.建立一个工程 ----File—new—project—选项含有Javaproject,webproject等等—输入工程名字如myproject&…

控制语句(if-else+循环+switch)汇编规则

【1】说说条件码 最常用的的条件码有: CF:进位标志 (无符号溢出)ZF:零标志SF:符号标志(结果为负数)OF:溢出标志 (补码溢出, 有符号溢出&#xf…

zxing qr区域判断_如何在Java中使用Zxing和JFreeSVG创建QR Code SVG?

zxing qr区域判断在本文中,我们将研究如何使用Zxing QR代码生成库和JFreeSVG库在Java中创建QR Code SVG图像。 QR码生成 下面的代码使用Zxing库创建一个表示QR Code的java.awt.image.BufferedImage对象: public static BufferedImage getQRCode(String …

审批流_怎样让审批工作流和应用数据分离?

在企业行政管理中,审批是最常遇到的场景。传统管理中,人们会有纸张审批,而现在市场上已有大量的线上审批软件,他们帮助企业完成审批电子化,审批速度更快,信息也能留档。然而大部分审批软件都不够灵活&#…

java 反射api_反射是最重要的Java API

java 反射api前几天我在想-这是最重要的Java API。 哪种SE和EE API可以使大多数Java生态系统成为可能,而哪些API不能重新创建为第三方库。 正如您可能已经猜到标题一样,我认为它是Reflection API 。 是的,它不可避免地是每个项目的直接或间接…

前端校验表单项内容是否合规的JS脚本代码

用途:校验ip地址的格式 输入:strIP:ip地址 返回:如果通过验证返回true,否则返回false; */ function isIP(strIP) { if (isNull(strIP)) return false; var re/^(\d).(\d).(\d).(\d)$/g //匹配IP地址的正则表达式 if(r…

过程(栈帧结构是干货)

【0】写在前面 过程(栈帧结构是干货);本文总结于csapp, 加上自己的理解;【1】栈帧结构 每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。 过程调用&#xf…

山东小学信息技术课本 python 五年级_山东教育出版社小学信息技术五年级上册教案 全册.doc...

山东教育出版社小学信息技术五年级上册教案 全册电子备课教学案学年度 第一学期学科 信息技术年级 五年级姓名教师个人备课情况统计一览表 项目?精备课二次备课课堂检测课后反思交流平台 篇数月份第( )月第( )月第( )月第( )月备注:为便于自查,此表由教…

apache ranger_Apache Ranger插件的美丽简洁

apache ranger如果您在这里,您已经知道什么是Apache Ranger 。 这是在Hadoop框架中管理安全性的最流行(即使不是唯一)的方法。 它与Active Directory,Kerberos和其他各种身份验证集成在一起,但是我认为最有趣的功能是其…

可重定位目标文件

【0】GCC将源代码转化成可执行代码的流程 (1)C预处理器cpp扩展源代码,插入所有用#include命令指定的文件,并扩展声明的宏;(2)编译器ccl产生两个源代码的汇编代码:*.s;&a…

经典颜色的RGB值

红 RED    品红Magenta(热情)    CMYK:C15 M100 Y20 K0   RGB: R207 G0 B112    洋红Carmine(大胆)   CMYK: C100 M0 Y60 K10   RGB: R215 G0 B64    宝石红Ruby(富贵)   CMYK…

python中for x in range_python教程:对 [lambda x: x*i for i in range(4)] 理解

题目:lst [lambda x: x*i for i in range(4)]res [m(2) for m in lst]print res实际输出:[6, 6, 6, 6]想要输出 [0, 2, 4, 6] 应该怎么改?如下:lst [lambda x, ii: x*i for i in range(4)]res [m(2) for m in lst]print res这…

adf.test_在ADF 12.2.1.3中使用基于JSON的REST Web服务

adf.test以前,我曾发布过有关在ADF中使用基于ADF BC的REST Web服务的信息。 现在,本文讨论使用通用数据控件使用基于JSON的REST Web服务。 您还可以查看有关Web服务的先前文章,以获取更多信息。 在ADF 12.2.1中使用应用程序模块快速创建SOA…

JSON字符串封装成Bean对象/JSON串反序列化成实体类对象/JSON字符串转换成Java对象

文章目录使用阿里巴巴的 JSON使用 ObjectMapperJSON字段与实体类属性不一致首先,我们建立一个实体类,这里简单定义了 name、sex、age 三个属性,以及 get、set、tostring方法。public class Student {private String name;private String sex;…

端到端的地址翻译(虚拟地址是怎样取到相应高速缓存的数据的?)

【0】写在前面-为什么需要虚拟存储器? 0.1)定义:虚拟存储器其实就是借用了磁盘地址空间,还记得当初我们安装CentOS,划分的swap 文件系统吗? 0.2)VM简化了链接和加载、代码和数据共享,以及应用…

python gevent教程_Python的gevent框架的入门教程

Python通过yield提供了对协程的基本支持,但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。gevent是第三方库,通过greenlet实现协程,其基本思想是:当一个greenlet遇到IO操作时,比如访问网络&#xff0c…

qa/qc_专业QA如何实施可靠的CI / CD管道?

qa/qc过时的传统软件开发方法并不能接管不断升级的市场趋势,并且这些方法缺乏解决方案,无法解决引入“ 持续集成(CI)和持续交付(CD) ”的快速软件发布需求的增长。 除了CI / CD之外,您还需要具有…

程序员分类

1.优秀的debug能力 10K程序员:实现功能就不错了 20K程序员:编程我最牛,debug?我不太会! 30K程序员:编程有点慢,debug快速搞定,回家睡觉! 40K程序员:基本不写…

三菱q系列plc连接电脑步骤_三菱Q系列PLC与三菱变频器的CC-link通讯技术(我的学习笔记)...

三菱变频器可以通过CC-LINK的接线进行控制(但需要另购买选件FR-A7NC,这选件是与变频器配套的通讯适配器,插在三菱变频器的选件插槽中),从而可以减少接线提高效率减少错误,接CC-LINK只需4根线就可以完全控制…

react提交数据到数据库_React型关系数据库事务

react提交数据到数据库Spring Framework最近宣布将提供对React式事务管理的支持 。 让我们深入研究它对R2DBC(SQL数据库访问的React式规范)如何工作。 事务管理是一种模式,而不是特定于技术的。 从这个角度来看,它的属性和运行时…