571
社区成员
发帖
与我相关
我的任务
分享一直以来,自动驾驶技术都是人工智能化发展的重要方向之一,根据2020年3月中国工信部发布的《汽车驾驶自动化分级》,自动驾驶以5个要素为主要依据,被划分为0级(应急辅助)、1级(部分驾驶辅助)、2级(组合驾驶辅助) 、3 (有条件自动驾驶) 、4 级(高度自动驾驶) 、5 级(完全自动驾驶) 共6个不同的等级。高级驾驶辅助系统(ADAS)功能主要覆盖了L0-L2级别范围。
ADAS(Advanced Driver Assistance System),高级驾驶辅助系统,借助安装在汽车上的毫米波雷达、激光雷达、摄像头、超声波雷达等传感器设备来感知车身周围环境并收 集数据,在进行静、动态物体辨识、侦测与追踪后通过系统的运算与分析,使司乘人员预先察觉可能发生的情况与危险,从而有效增加汽车驾驶的舒适性与安全性,减少交通事故出现的可能性。
ADAS可以分为信息辅助与控制辅助两大类,前向碰撞预警系统(FCW)属于信息辅助类,是通过雷达系统来时刻监测前方车辆,判断本车与前车之间的距离、方位及相对速度,当存在潜在碰撞危险时对驾驶者进行警告。FCW系统本身不会采取任何制动措施去避免碰撞或控制车辆。
·需求就是对用户期望的软件行为的表述;
·获取需求就是需求分析师通过关注用户的期望和需要,从而获得用户期望的软件行为,然后对其进行表述的工作;
·需求分析是在获取需求的基础上进一步对软件涉及的对象或实体的状态、特征和行为进行准确描述或建模的工作。
本系统的主要参与者包括传感器,数据处理系统,驾驶员
功能性需求
·传感器检测前车速度,加速度,本车速度,加速度,本车与前方障碍物距离等数据,并发送到数据处理系统
·数据处理系统监听传感器发送来的数据,采用PID,MPC等算法计算出与前方障碍物距离,判断本车与前方障碍物距离是否小于安全距离,如果小于安全距离则发出警报
·驾驶员侦听汽车是否发出前方碰撞警报,如果接收到警报,则采取相应措施,如制动,并反馈给数据处理系统
非功能性需求
·及时性,能在最短的时间内接受计算数据并反馈给驾驶员,确保在碰撞发生前发出警报
·准确性,提供的数据与计算结果准确无误,减少误报,提高系统的可信度
·安全性,确保系统没有被侵入及被篡改数据的风险,系统的各个部分能够正常运行
用例(Use Case)的核心概念中首先它是一个业务过程(business process),经过逻辑整理抽象出来的一个业务过程,这是用例的实质。什么是业务过程?在待开发软件所处的业务领域内完成特定业务任务(business task)的一系列活动就是业务过程。



业务领域建模是开发团队用于获取业务领域知识的过程。因为软件工程师往往需要工作在不同的业务领域或者不同项目中,他们需要业务领域知识来开发软件系统。软件工程师往往来自不同的专业背景,这可能会影响他们对业务领域的认知。因此业务领域建模有助于开发团队获取业务领域知识形成统一的业务认知。
(1)收集应用业务领域的信息。聚焦在功能需求层面,也考虑其他类型的需求和资料;
(2)头脑风暴。列出重要的应用业务领域概念,给出这些概念的属性,以及这些概念之间的关系;
(3)给这些应用业务领域概念分类。分别列出哪些是类、哪些属性和属性值、以及列出类之间的继承关系、聚合关系和关联关系。
(4)将结果用 UML 类图画出来。
·数据处理系统接受传感器发送的数据
这里数据处理系统,传感器,数据都可以独立存在,所以都是类
·数据处理系统根据计算的预期距离与安全距离,向驾驶员发出预警信息
这里驾驶员是类,预期距离与安全距离是数据处理系统的属性,警告表示驾驶员与数据处理系统间的关联关系

数据建模(Data modeling)是为要存储在数据库中的数据创建数据模型的过程。有助于数据的可视化和数据业务的实施。数据模型可确保命名约定、默认值、语义、安全性和一致性,同时确保数据质量。数据模型强调的是数据的选择和数据的组织形式,不关注需要对数据执行的操作。
本系统涉及的数据模型如下:
sensor
| 字段 | 类型 | 描述 |
|---|---|---|
| id | int | 主键 |
| name | string | 传感器名称 |
| type | string | 类型 |
| enabled | bool | 是否使能 |
carstate(本车状态数据)
| 字段 | 类型 | 描述 |
|---|---|---|
| vego | float | 速度 |
| aego | float | 加速度 |
| gas | float | 油门 |
| gaspressed | bool | 油门状态 |
| break | float | 刹车 |
| breakpressed | bool | 刹车状态 |
radarstate(传感器检测的前车状态数据)
| 字段 | 类型 | 描述 |
|---|---|---|
| v_lead | float | 速度 |
| a_lead | float | 加速度 |
| d_lead | float | 前车与本车当前距离 |
warnings
| 字段 | 类型 | 描述 |
|---|---|---|
| id | int | 代码,主键 |
| level | char | 警报级别 |
| type | string | 类型 |
| log | string | 日志 |
概念原型是一种虚拟的、理想化的软件产品形式。
概念原型=用例+数据模型
从之前的项目用例和数据模型中可得出项目的概念原型工作过程:
传感器检测到前方车辆信息数据与本车状态信息,并将这些数据发布到汽车数据处理系统。汽车数据处理系统接收数据并进行计算得到与前车预期距离,根据与安全距离比较决策是否发出前方碰撞预警。驾驶员接受预警后做出决策,结果反馈给汽车处理系统。
设计模式的本质是面向对象设计原则的实际运用总结出的经验模型。采用设计模式的目的就是为了软件的重用,因此采用关注点分离的思想,区分软件中变化的部分和不变的部分,在不变的部分使用设计模式,以提高软件的重用性和可维护性。
功能分解是处理复杂问题的一种自然的方法,但是需求总是在发生变化,功能分解不能帮助我们为未来可能的变化做准备,也不能帮助我们的代码优雅地演化。
用模块化来包容变化,使用模块化封装的方法,按照模块化追求的高内聚低耦合目标,借助于抽象思维对模块内部信息的隐藏并使用封装接口对外只暴露必要的可见信息,利用多态、闭包、lamda函数、回调函数等特殊的机制方法,将变化的部分和不变的部分进行适当隔离。这些都是设计模式的拿手好戏。此外在设计模式的基础上,可以更加方便地用增量、迭代和不断重构等开发过程来进一步应对总是变化的需求和软件本质上的模型不稳定特质。
根据模式是主要用于类上还是主要用于对象上来划分的话,可分为类模式和对象模式两种类型的设计模式;
根据设计模式可以完成的任务类型来划分的话,可以分为创建型模式、结构型模式和行为型模式 3 种类型的设计模式;
常见的设计模式有:单例(Singleton)模式,原型(Prototype)模式,建造者(Builder)模式,代理(Proxy)模式,适配器(Adapter)模式,装饰(Decorator)模式,外观(Facade)模式,享元(Flyweight)模式,策略(Strategy)模式,命令(Command)模式。
在FCW系统中,传感器发布消息,数据处理系统订阅消息,具体到不同的部分,订阅的消息也不相同,例如纵向规划需要前方障碍物的速度,加速度等消息,横向规划需要车道线消息,车身控制系统需要当前车辆的一些状态消息等,所以本系统使用的是观察者模式,当一个对象的状态发生改变时,把这种改变通知给其他多个对象,从而影响其他对象,这样所有依赖于它的对象都得到通知并被自动更新。
大型软件系统的软件架构模型在整个项目中起到至关重要的作用。
首先,软件架构模型有助于项目成员从整体上理解整个系统;
其次,给复用提供了一个高层视图,既可以辅助决定从其他系统中复用设计或组件,也给我们构建的软件架构模型未来的复用提供了更多可能性;
再次,软件架构模型为整个项目的构建过程提供了一个蓝图,贯穿于整个项目的生命周期;
最后,软件架构模型有助于理清系统演化的内在逻辑、有助于跟踪分析软件架构上的依赖关系、有助于项目管理决策和项目风险管理等。
常见的软件架构有三层架构,MVC架构,MVVM架构。常见的软件架构风格有管道-过滤器、客户端-服务、P2P(如区域链)、发布订阅、CRUD、层次化架构。本系统使用发布-订阅风格的软件架构。在发布-订阅架构中,有两类构件:发布者和订阅者。如果订阅者订阅了某一事件,则该事件一旦发生,发布者就会发布通知给该订阅者。观察者模式体现了发布-订阅架构的基本结构。
分解视图
分解是构建软件架构模型的关键步骤,分解视图也是描述软件架构模型的关键视图,一般分解视图呈现为较为明晰的分解结构(breakdown structure)特点。分解视图用软件模块勾划出系统结构,往往会通过不同抽象层级的软件模块形成层次化的结构。
依赖视图
依赖视图展现了软件模块之间的依赖关系。比如一个软件模块A调用了另一个软件模块B,那么我们说软件模块A直接依赖软件模块B。如果一个软件模块依赖另一个软件模块产生的数据,那么这两个软件模块也具有一定的依赖关系。
执行视图
执行视图展示了系统运行时的时序结构特点,比如流程图、时序图等。执行视图中的每一个执行实体,一般称为组件(Component),都是不同于其他组件的执行实体。如果有相同或相似的执行实体那么就把它们合并成一个。在设计与实现过程中,我们一般将执行视图转换为伪代码之后,再进一步转换为实现代码。
本文以高级驾驶辅助系统中的前方碰撞预警系统为需求场景,进行了分析需求和建模,形成了业务概念原型。同时结合软件设计模式、软件架构等给出项目的设计方案。在整个过程中对软件需求分析有了初步了解,理解了设计模式背后蕴含的提高软件可重用性的目标,加深了对软件架构内在的一致性和完整性的理解。
作者:427