Simulink建模:LKA系统功能状态机建模

本文通过Stateflow对LKA系统状态机进行建模。

文章目录

  • 1 LKA系统功能
  • 2 状态跳转条件
    • 2.1 主状态跳转条件
    • 2.2 子状态跳转条件
  • 3 Simulink建模
    • 3.1 Active_Condition
    • 3.2 LKA_Status
  • 4 总结

1 LKA系统功能

LKA(车道保持辅助)是博主最喜欢的ADAS功能。在高速上车速超过60km/h就可以激活LKA功能,辅助驾驶员对车辆进行横向控制。本文以LKA的系统功能为例,研究Stateflow的更加复杂的建模方法。由于实际开发中需要考虑的因素很多,博主在本文中将LKA状态的跳转条件做一定的简化,只为了达到学习的效果即可。

在GB/T 39323-2020<乘用车车道保持辅助(LKA)系统性能要求及试验方法>中可以找到以下一张图片。
Simulink建模:LKA系统功能状态机建模_第1张图片
该图片表明了LKA的系统状态与转换的过程,其中包含两个主状态:关闭状态和开启状态。在开启状态中,又包含了两个子状态:待机状态和激活状态。接下来会以这张图为依据进行状态机建模。(实际工作中应该按照客户的系统功能规范进行建模)

2 状态跳转条件

2.1 主状态跳转条件

在外层主状态的关闭和开启状态的跳转条件应该是由用户在中控屏上开启或关闭LKA开关来决定,然后HMI通过CAN信号发送到ADAS控制器上。

1)关闭 —> 开启

CAN_LKASwitch = True;

2)开启 —> 关闭

CAN_LKASwitch = False;

2.2 子状态跳转条件

在子状态中,待机状态和激活状态之间的跳转条件比较复杂,在实际工作中可能会由十几种因素来决定。这里博主做一点简化处理。

1)待机 —> 激活

  • 车速大于60km/h
  • 未打开转向灯
  • 制动踏板未踩下

同时满足以上三个条件(AND关系),并保持3s,由待机进入激活状态。

CAN_VehicleSpeed >= single(60) &&
CAN_TurnSignal == OFF &&
CAN_BrakePedal == OFF

2)激活 —> 待机

  • 车速小于60km/h
  • 打开转向灯
  • 制动踏板踩下

满足以上三个条件任意一个(OR关系),由激活立即进入待机状态。

CAN_VehicleSpeed < single(60) ||
CAN_TurnSignal == ON ||
CAN_BrakePedal == ON

注意:待机到激活的过程中,要求保持3秒是因为防止条件不断变化而导致的状态频繁切换,例如车速在60km/h附近抖动,状态机就会反复输出Standby和Active。

3 Simulink建模

分析了LKA系统状态和跳转条件后,就可以着手用Simulink/Stateflow对状态机进行建模。这里博主划分成两个状态机如下。
Simulink建模:LKA系统功能状态机建模_第2张图片
其中,Active_Condition状态机用于接收车辆信号来判断LKA的激活条件,本文的demo中包含车速、转向灯和制动踏板。LKA_Status用来输出LKA状态,包含关闭、待机和激活状态。

其实,Active_Condition的过程也可以合并到后面的LKA_Status状态机中一起实现,但是由于实际过程中Active条件会很复杂,所以单独拿出来会使后面的状态机比较简洁。

3.1 Active_Condition

在Active_Condition模块中接收三个信号,用流程图的方式进行判断,从而输出ActiveCondition为True或者False。
Simulink建模:LKA系统功能状态机建模_第3张图片
横线上的三行语句代表激活条件,激活条件满足后将ActiveCondition标志位赋值为True,否则赋值为False。博主习惯在Stateflow中实现if-else条件判断,也可以在Simulink中用Switch等模块搭建。

3.2 LKA_Status

在LKA_Status模块中,就对应了图A.1的状态转换,博主的实现方式如下:
Simulink建模:LKA系统功能状态机建模_第4张图片
1)首先,默认进入LKA_Off状态中,输出OFF;

Simulink建模:LKA系统功能状态机建模_第5张图片

2)当LKASwitch == True条件满足时,从OFF状态跳转到On状态,并默认进入子状态Standby;
Simulink建模:LKA系统功能状态机建模_第6张图片
此时输出STANDBY;

3)通过Standby状态跳转到Active状态需要满足ActiveCondition == True并保持3s;
Simulink建模:LKA系统功能状态机建模_第7张图片
其中的Count变量是一个本地变量,如果是每个周期加1的计数器。当ActiveCondition为True时每个周期加1,当ActiveCondition为False时,计数器清零。
Simulink建模:LKA系统功能状态机建模_第8张图片
这样就简单地实现了LKA系统状态机地功能。

4 总结

本文通过LKA状态转移,研究了Stateflow稍微复杂地用法,但相比实际工作依然是很简单的。本文建模后博主也没有做过验证,可能会由隐藏的bug在其中,后续会写一些关于单元测试的博客,来测试一下这个模块。

>>返回个人博客总目录

你可能感兴趣的:(Simulink建模,matlab,Simulink)