最近接触到汽车底盘控制部分,作为小白,原以为汽车底盘也是要自己手敲代码,结果发现完全不是。记录一下最近的学习心得,初步接触东西不全,但可以当作参考。
对于底盘控制部分的简单理解:simulink做汽车底盘的仿真,类比于RoboMaster中平衡车的控制算法,将各类传感器参数、Heave、Pitch、Roll、加速度等等进行计算,放在simulink中就是将这部分模块化,仿真无误后可以自动生成代码。但是在生成代码之前,需要对汽车相关数据进行标定,所谓标定就是使用CANape查看曲线,调整参数,类比于比赛中的PID参数调参,不过不同的是更为复杂参数更多。
使用的软件:Matlab的simulink仿真、CANape、CANoe。
因为是新手所以软件的具体使用方法不做说明。
生成的代码是Autosar代码,因此这里记录一下我对Autosar的浅浅理解和总结
1、AUTOSAR
Autosar好处是将汽车电子控制单元(ECU
)的软件底层做了一个标准的封装。类似于Linux中将内核驱动都封装好(所谓的底层软件都写好),只需要在应用层进行编写程序。
1.1 AUTOSAR架构:
传统嵌入式软硬件无法分割开,AUTOSAR架构隔离了应用软件层、基础软件层(BSP驱动)。摆脱了以往ECU软件开发与验证时对硬件系统的依赖。
AUTOSAR架构中共分六层:
应用软件层(Application Layer):由多种SWC(软件组件)组成,包括控制策略、软件算法、传感器参数计算、执行器控制
运行环境RTE(Runtime Environment):各个架构之间必须经过RTE封装的API进行数据交互,同时还有虚拟功能总线VFB(所有的Component(包括SWC、ECU抽象、服务、复杂驱动)之间的通信),AUTOSAR提供的所有通信机制的总和,SWC之间的通信
基础软件BSW
1 服务层(Services Layer):服务层的目的在于提供给应用层可用的服务内容,主要包括:诊断、操作系统、通信、内存管理等
2 ECU抽象层(ECUAbstraction Layer):ECU层的目的在于使上层软件与ECU硬件电路设计剥离开。其中包括了关于ECU上的芯片驱动和外部设备的IO接口。
3 微控制器抽象层(Microcontroller Abstraction Layer):MCU层的目的在于使上层软件与MCU处理器的型号选型剥离开。其中包括了关于MCU的驱动。
4 复杂驱动(Complex Device Drivers):复杂设备驱动组件的目的在于提供复杂传感器和执行器的驱动,使应用层可直接访问硬件资源。
1.2 基本概念
1.2.1 SWC(software Component):
封装了部分或者全部汽车电子功能的模块,其中包括了具体功能的实现以及对应的描述。
SWC分类:Atomic component(最小的逻辑单元,无法再分)、Composition(可以包含数个SWC的逻辑集合)
1.2.2 Port:
Port是SWC之间通信用,算是SWC的组成部分。
Port Interface分两类:R/S port、C/S port
R/S与C/S是AUTOSAR在定义接口模板里比较常用的两种类型
1 R/S接口(receiver/sender):
- 生成代码来看:采用接口全局变量的方式传递数据
- 通过Data Element Prototypes进行交互。
Data Element是一个全局变量,通过Rte_Write_<name>,Rte_Read_<name>对全局变量进行读写。
2 C/S接口(client/server):
- 生成代码来看:采用的是函数的方式传递数据
- C/S通过operation prototye实现交互
在swc和swc之间 每一个operation都是一个函数,这个函数在Server端实现,在client端调用。
3 Port prototype和Port Interface
port prototype可以理解成端口,定义两个不同的component连接点,用于两者之间通信。可以是Port提供者或者Port接收者(PPortPrototype、RPortPrototype),看自己怎么定义了。
Port Interface是将两个component连接起来的桥梁。
1.2.3 Runnables:
swc组成的部分,运行在RTE里面,由RTE周期事件触发或者其他事件触发调用,里面包含了实际运行的函数
2 参考文章:
AUTOSAR Port原理概念详解
我淡定地撸了一遍AUTOSAR的基本概念
整体来讲AUTOSAR更多用于汽车行业,如果想要入职汽车底盘控制相关,还是建议学习一下。只是小白,希望有经验的人看到可以提出宝贵的意见和学习方法~~