设计一个自动驾驶的初步结构

举报
码乐 发表于 2024/09/11 07:33:49 2024/09/11
【摘要】 1 简介自动驾驶系统如火如荼,现在我们也要造一个自动驾驶的汽车,那么汽车内部应该使用哪些组件和块?本文使用sysML系统工具粗略地设计一个汽车内部的各个部分。 包括各部件描述,接口,外部依赖等,构建自动驾驶汽车的内部设计利用SysML的内部块图(IBD)来详细展示系统组件。IBD描述了块的内部结构,包括子系统、部件、接口和连接,揭示了系统内部工作机制。它用于表示软件、硬件等组件,定义端口和...

1 简介

自动驾驶系统如火如荼,现在我们也要造一个自动驾驶的汽车,那么汽车内部应该使用哪些组件和块?

本文使用sysML系统工具粗略地设计一个汽车内部的各个部分。 包括各部件描述,接口,外部依赖等,构建自动驾驶汽车的内部设计利用SysML的内部块图(IBD)来详细展示系统组件。

IBD描述了块的内部结构,包括子系统、部件、接口和连接,揭示了系统内部工作机制。它用于表示软件、硬件等组件,定义端口和接口,支持递归分解。通过端口和连接器,IBD显示数据和物理流如何在部件间通信。

感知系统、控制系统、导航系统和动力系统等子系统内部结构及它们之间的交互可通过IBD清晰展现。

这种建模方法有助于理解系统结构、设计接口和进行系统集成,但可能因复杂性而难以管理,需结合其他图表示动态行为。

2 内部定义

  • 结构图:内部块图 ibd

内部块图(Internal Block Diagram, IBD):

  • 定义:

块:块(符号:带有关键字 = «block»的矩形)表示一个系统组件,一个模块化结构单元,封装其内容(属性、行为、约束)并支持第一类(即可以在模型存储库中绘制和直接操作)接口。

模块封装的行为包括:操作、信号和状态机。用于连接和连接(“布线”)模块接口的唯一交互点称为端口。

在 SysML 中,内部块图用于描述块(Block)内部的结构,显示块的内部组成部分(子块或部件)及其相互之间的连接关系。它通过展示各个部分之间的连接和交互,提供系统内部详细的结构视图。

internal Block Diagram (内部块图,简称IBD) 是系统建模语言 (SysML) 中的一种图,用于显示系统组件的内部结构和它们之间的连接关系。

IBD 详细描述了一个块 (block) 内部的组成部分和这些组成部分之间的接口和交互。

  • 设计目的:

描述块内部的子部件及其之间的连接关系。主要用于详细建模系统的内部结构和子系统之间的交互,帮助理解和设计系统的内部工作机制。

内部块图 (IBD) 的目的是显示模块的封装结构内容(部件、属性、连接器、端口、接口),以便可以使用基于接口的设计技术递归分解和“连接”。

如果使用得当,BDD + IBD 是递归可伸缩的,并且在数学上(参数化)可模拟。

这些设计将会帮助工程师理解系统内部构造,进行分层设计。如果内部块图描述不准确,可能导致系统集成困难。

3 简单示例:

  • ibd组成元素:

块可以指定软件、硬件、机械和湿件(人员、组织、设施)组件。
块支持信息和物理流的提供(实现或实现)和必需(使用)接口。块可以递归分解为部件,其中每个部件也必须由块定义。

内部块图 (ibd):内部块图是特定块拥有的静态结构图,它显示了其封装的结构内容:部件、属性、连接器、端口和接口。换句话说,IBD 是封装(“黑盒”)块的“白盒”透视图。

通过在块定义图 (BDD) 定义和内部块图 (IBD) 用法之间交替,可以将块递归分解(“嵌套”)为部件(请参阅下面的用法说明)。

image.png

  • 使用示例:

行为可以由块(例如,操作、信号和状态机)封装,也可以直接或间接(通过接口)分配给块(例如,活动/操作)。
可以通过约束块对块进行数学约束,以生成数学上可模拟的参数图。以下为一个飞行器ibd图的示例

image.png

BDD 块定义与 IBD 块使用二分法,BDD和IBD相辅相成(参见黑盒与白盒),并在系统分析和设计过程中支持递归结构分解技术。
BDD 定义块的属性,包括其部件属性(强拥有的部件)和引用属性(共享部件)。

IBD 在封装它们的块的结构上下文中指定零件属性和引用属性的用法或角色。否则,IBD 中的零件属性和参照属性可能具有不同的用法或角色,具体取决于它们在 IBD 中的实现方式(“连接”)。

可以对比UML 2 类图和组件图;SA/SD系统上下文和结构图图;IDEF IDEF1X 图等。

4 主要元素和表示方法

  • 方法属性

端口和接口: 使用端口(Port)和接口(Interface)来表示系统内部组件之间以及系统与外部环境之间的交互。

    端口: 用于定义组件的接口点,通过端口进行交互。

    接口: 定义通过端口进行的交互类型,如数据流、信号传递等。
  • **部件(Part): **

块的内部组成部分,表示子系统或组件。部件是块的组成部分,表示块内部的子系统或组件。

部件在块内表示,通常是较小的矩形框,并标注部件名称和类型。示例:

+-----------------+
|     Block       |
|  Car System     |
|  +-------------+|
|  | Camera:     ||
|  | SensorBlock ||
|  +-------------+|
+-----------------+
  • **块(Block): **

系统的基本构建单元,表示系统或子系统。

块是表示系统的基本构建单元。它可以表示任何类型的系统元素,包括硬件、软件、人员或过程等。

表示方法:一个块通常在一个矩形框中表示,框内包含块的名称。

自动汽车示例:

+-----------------+
|     Block       |
|  Car System     |
+-----------------+
  • **端口(Port): **

块的接口点,用于定义交互接口。 端口表示块之间或块内部的交互接口点。端口可以是标准端口或流端口。

表示方法:端口在块或部件的边缘画出,通常是一个小矩形或圆形,并标注端口名称。示例:

+-----------------+
|     Block       |
|  Car System     |
|  [传感器端口]    |
+-----------------+
  • **接口(Interface): **

定义通过端口进行的交互类型。接口定义了通过端口进行的交互的类型或协议。

表示方法:接口通常与端口相关联,并且在定义端口时可以标注接口类型。示例:

+-----------------+
|     Block       |
|  Car System     |
|  [传感器端口:    |
|   传感器数据]    |
+-----------------+
  • **连接器(Connector): **

表示部件之间的连接关系。 用于表示系统内部组件之间的连接,展示信号、数据或物理连接路径。连接器表示不同部件之间的连接和交互。

表示方法:连接器通常是线条,连接两个端口,并可以标注连接的类型或协议。示例:

	+-----------------+       +-----------------+
	|     Block       |-------|     Block       |
	|     摄像系统     |       |    控制系统     |
	+-----------------+       +-----------------+
  • **流属性(Flow Properties): **

定义通过端口传递的流动数据或物理量。定义通过端口传递的流动数据或物理量,表示组件间的交互流。流属性表示通过端口进行的流动,通常是物质、能量或信息。

表示方法:流属性在端口定义中表示,并标注流动的类型和方向。示例:

	+-----------------+
	|     Block       |
	|  Car System     |
	|  [燃油端口:    |
	|   FuelType ->]  |
	+-----------------+
  • 值属性(Value Property):

表示块内部的属性值,如大小、重量等。

表示方法:

块内表示:值属性通常在块或部件的内部用文本表示,并标注属性名称和值。
值属性类型:值属性可以有具体的类型(如整数、浮点数、字符串等)和单位。

如下一个自动驾驶汽车系统(Car System)块,其中包含一些值属性,如重量(Weight)、最大速度(MaxSpeed)和电池容量(BatteryCapacity)。示例:

+------------------------------------------------+
|                  Car System                    |
|                                                |
|  +-----------------------------------------+   |
|  | Weight: 1500 kg                        |   |
|  | MaxSpeed: 220 km/h                     |   |
|  | BatteryCapacity: 75 kWh                |   |
|  +-----------------------------------------+   |
|                                                |
|  +-----------------+    +-----------------+    |
|  | Perception Sys  |    | Control System  |    |
|  |  [传感器端口]    |----|   [控制端口]     |    |
|  +-----------------+    +-----------------+    |
|                                                |
+------------------------------------------------+
  • Reference Property(引用属性):

表示块外部的对象或块。表示方法:

块内表示:引用属性在块的内部用矩形框表示,通常标注引用属性的名称和引用的块。
箭头指示:有时在引用属性旁边使用箭头指示引用关系。
类型标注:引用属性可以标注其引用的块类型。

示例:

汽车系统(Car System)其控制系统(Control System)引用了外部的GPS系统(GPS System)。

+------------------------------------------------+
|                  Car System                    |
|                                                |
|  +-------------------+-----------------------+ |
|  | Perception Sys    | Control System        | |
|  |                   |                       | |
|  |  +-------------------------------------+  | |
|  |  | Camera: SensorBlock                 |  | |
|  |  | Resolution: 1080p                   |  | |
|  |  | FrameRate: 30 fps                   |  | |
|  |  +-------------------------------------+  | |
|  |                   |                       | |
|  |  [传感器端口]    |----|   [控制端口]     |    |
|  +-------------------+-------+---------------+ |
|                                  |             |
|                                  |             |
|  +-------------------------+     |             |
|  | GPS: GPS System         |<----+             |
|  +-------------------------+                   |
|                                                |
+------------------------------------------------+

现在的自动汽车系统(Robot System)中,其控制系统(Control System)引用了一个外部的传感器网络(Sensor Network)。

5 内部完整示例:“罗卜”自动驾驶汽车

我们设计了一个自动驾驶汽车系统,系统由多个子系统组成,如感知系统、控制系统、导航系统、动力系统等。并且使用SysML的Internal Block Diagram (IBD) 来详细描述这些子系统的内部结构和它们之间的交互。

具体步骤:

1 定义主要块(Blocks):

自动驾驶汽车系统作为一个整体块。

内部子系统如感知系统(Perception System)、控制系统(Control System)、导航系统(Navigation System)、动力系统(Power System)等。

2 定义块内的部分属性(Part Properties):

在感知系统块内,定义雷达(Radar)、摄像头(Camera)、激光雷达(Lidar)等部分属性。

在控制系统块内,定义转向控制器(Steering Controller)、加速控制器(Acceleration Controller)等部分属性。

3 定义端口和接口(Ports and Interfaces):

在感知系统块的雷达、摄像头、激光雷达上定义数据输出端口,用于传输感知数据。

在控制系统块的转向控制器、加速控制器上定义数据输入端口,用于接收控制指令。

4 添加连接器(Connectors):

使用连接器连接感知系统的数据输出端口和控制系统的数据输入端口,表示感知数据传输到控制系统进行处理。

连接导航系统的输出端口和控制系统的输入端口,表示导航指令传输到控制系统进行执行。

5 标注属性和接口信息:

为每个端口标注数据类型,如雷达的输出端口传输距离数据,摄像头的输出端口传输图像数据等。
为连接器标注传输协议和数据格式,确保不同部分属性之间的交互一致性。

现在这是一个复杂的自动驾驶汽车系统(Autonomous Car System),增加了导航系统(Navigation System)引用了外部的地图服务(Map Service)。

+------------------------------------------------+
|           Autonomous Car System                |
|                                                |
|  +-------------------+-----------------------+ |
|  | Perception Sys    | Control System        | |
|  |                   |                       | |
|  |  +-------------------------------------+  | |
|  |  | Camera: SensorBlock                 |  | |
|  |  | Resolution: 1080p                   |  | |
|  |  | FrameRate: 30 fps                   |  | |
|  |  +-------------------------------------+  | |
|  |                   |                       | |
|  |  [传感器端口]    |----|   [控制端口]     |    |
|  +-------------------+-------+---------------+ |
|                                  |             |
|                                  |             |
|  +-----------------------------+ |             |
|  | MapService: 地图服务         |<--------------+
|  +-----------------------------+               |
|                                                |
|               +-----------------+              |
|               |     Block       |              |
|               |  Car System     |              |
|               |   [燃油口:       |             | 
|               |   FuelType ->]  |              |
|               +-----------------+              |
|                                                |
|                                                |
|  +-----------------------------------------+   |
|  | Weight: 1500 kg                         |   |
|  | MaxSpeed: 220 km/h                      |   |
|  | BatteryCapacity: 75 kWh                 |   |
|  +-----------------------------------------+   |
+------------------------------------------------+

在这个IBD图中使用了如下示例定义:

块(Block):Car System,Perception System,Control System
部件(Part):Camera
值属性(Value Property):Weight, MaxSpeed, BatteryCapacity, Resolution, FrameRate
端口(Port):Sensor Port, Ctrl Port
连接器(Connector):连接Sensor Port和Ctrl Port的线条
值属性(Value Property):  表示块内部的属性值,如大小、重量等。
流属性(Flaw Property): 显示连接;流动的物质、能量或数据的类型;提供或要求的服务。
引用属性(Reference Property):MapService引用了Map Service块

6 分析示例优缺点:

通常实际的自动驾驶系统有更复杂更精细的系统,其中包含多个部件和值属性。

比如在感知系统(Perception System)中有上百个个摄像头(Camera)或者视觉感知部件,我们可以为其定义一些值属性,如速度,分辨率(Resolution)和帧率(FrameRate)。

通过添加值属性,IBD图不仅展示了系统的结构和接口,还提供了系统和部件的具体数值特征,帮助工程师更加全面地理解和设计系统。

添加引用属性,不仅展示了系统的内部结构和接口,还清晰地表示了系统与外部对象或服务之间的依赖关系,更全面地理解和设计复杂系统。

IBD系统内部块图具有以下优点:

  • 详细描述清晰定义系统内部结构:

该图详细描述了自动驾驶汽车系统的各个子系统及其内部组成部分,使工程师清晰了解系统内部的结构和各部分之间的关系。例如,感知系统中的各个传感器如何协同工作,以及它们如何与控制系统交互。

  • 统一接口和交互:

通过定义统一的端口和接口,IBD确保了各子系统之间的数据传输和交互的一致性和标准化。
例如,所有感知数据传输到控制系统时,数据格式和传输协议都是一致的,避免了接口不兼容的问题。

  • 提高系统设计的可理解性和可维护性:

IBD图的直观表示使得系统设计更易于理解,不仅对设计者,对后期的维护人员也是如此。
例如,系统维护人员可以通过IBD快速定位到某个子系统的具体接口和连接,方便进行故障排查和维护。

  • 支持系统集成和测试:

IBD帮助定义了各个子系统的具体接口和交互方式,为系统集成提供了明确的指导。
在系统集成和测试阶段,工程师可以依据IBD图验证各子系统的接口和交互是否正确,实现了设计到实现的无缝对接。

  • 提高系统设计的准确性和完整性:

IBD的详细描述和规范化设计有助于提高系统设计的准确性,避免遗漏关键的组成部分和接口。
例如,通过IBD可以检查每个子系统的端口是否都有对应的连接器,确保所有的交互路径都被考虑到。

7 使用警告和实践场景

使用场景

  • 系统内部结构建模:

用途: 描述系统内部的组成部分及其相互关系,展示系统内部的细节结构。
示例: 在一个汽车系统中,描述引擎内部各个部件(如气缸、活塞)的组成和连接关系。

  • 子系统交互建模:

用途: 详细描述系统内部子系统或组件之间的交互和连接方式。
示例: 在一个通信系统中,描述发送器、接收器、信号处理模块之间的连接和数据流动。

  • 接口定义:

用途: 明确定义系统内部各部分的接口,展示数据、信号或物理连接的传递路径。
示例: 在一个嵌入式系统中,描述处理器与存储器、I/O 设备之间的接口和连接关系。

  • 系统集成与验证:

用途: 在系统集成和验证阶段,使用内部块图确保各个部分正确连接和交互。
示例: 在设计和验证一个复杂电子系统时,确保各个模块之间的连接符合设计要求。

  • 与UML2的关系

继承关系: 内部块图基于 UML 的复合结构图(Composite Structure Diagram)进行了扩展,专门用于系统工程。

元素一致性: 两者使用相似的基本元素,如端口、连接器等,但内部块图包含更多系统工程特有的元素和关系。

扩展性: 内部块图在功能和用途上进行了扩展,适用于复杂系统的内部结构和子系统交互建模需求。

最佳实践方式:

    * 积极地将对象三元组模式分类技术应用于块,以分离控制对象、接口对象和数据对象。
    * 通过在 BDD 定义和 IBD 用法之间交替递归分解(“嵌套”)块层次结构。
    * 将所有活动分配给代表 Conrol 对象 Blocsk 的分区。

UML2具有以下局限:

局限于软件系统:UML 的类图和组件图主要用于软件系统的建模,难以适应复杂的多领域系统。
接口表示不统一:UML 的接口表示较为自由,可能导致设计的混乱和不一致。
缺乏细节描述:UML 的类图和组件图通常缺乏对内部组成部分和具体接口的详细描述,
不适用于超复杂系统的详细设计。

8 总结优缺点

SysML中的IBD图的优点:

可以看出在开发自动驾驶汽车系统时,通过IBD详细描述了各个子系统的内部结构和接口,使得系统设计更加清晰和规范。

在后期的系统集成和测试阶段,工程师们能够快速定位和解决接口问题,确保了系统的正确性和稳定性。

如果没有内部块图,可能导致系统接口定义不统一,不同子系统之间的数据传输出现不兼容问题。

同时系统设计不够详细,导致在系统集成时发现遗漏关键的组成部分或接口,增加了调试和修改的工作量。

最后系统维护困难,维护人员难以快速理解和定位各个子系统的具体接口和交互,增加了维护成本和时间。

现在通过SysML的IBD,能够有效地解决这些问题,确保系统设计的准确性、完整性和可维护性,最终帮助系统成功实现其预期功能。

可能的使用限制:

* 混淆控制对象、接口对象和数据对象块。
* SA/SD DFD 反模式(又名“回到 1980 年左右的未来”反模式)= 将活动图定义为功能流程图,而不表示控制对象的部件。
* Bloctivity Anti-Pattern = 混淆块和活动语法和语义。
  • 复杂性管理困难:

问题: 对于大型复杂系统,内部块图可能变得非常复杂,尤其是当涉及大量部件和连接时,图可能变得难以管理和理解。

一个复杂的电子系统包含成百上千个部件及其连接,内部块图可能变得过于复杂,难以清晰展示。

  • 动态行为表示不足:

问题: 内部块图主要描述系统的静态结构,缺乏对系统动态行为和运行时交互的详细描述。

在需要描述系统运行时的动态行为和交互过程时,内部块图无法提供足够的信息,需要结合其他图(如序列图、活动图)来补充。

  • 细节表达能力有限:

问题: 在表达具体的实现细节和低层次的设计时,内部块图可能显得不足,特别是对于硬件电路或软件算法的详细描述。

需要详细描述硬件电路中各个元件的连接和功能时,内部块图可能无法提供足够的细节。

  • 学习曲线陡峭:

问题: 对于新手来说,理解和使用内部块图及其相关元素可能具有一定的学习难度。

系统工程师在初次使用内部块图时,可能需要时间来熟悉各种元素和关系,才能有效地进行建模。

SysML 的 Internal Block Diagram (IBD) 图在系统设计中扮演着重要的角色,通过详细描述系统块内部的组成部分和接口,帮助工程师理解和设计复杂的多领域系统。

与 UML2 的类图和组件图多用于软件系统相比,SysML 的 IBD 更加适合用于复杂大型系统的详细设计和验证。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。