模糊规则示例
Carsim Simulink联合仿真基于LQR/模糊PID/滑模控制的横摆稳定性控制系统 综合跟随理想横摆角速度的方法和抑制汽车质心侧偏角的汽车稳定性控制方法,以线性二自由度车辆操纵特性模型为控制目标,基于汽车横摆力矩与车辆状态偏差之间的动力学关系建立了控制系统模型。 速度跟踪模块使用前馈加反馈的PID控制架构。 上层第一种方案采用线性二次型调节器(LQR)方法进行了汽车横摆力矩的决策,综合跟踪期望横摆角速度和抑制质心侧偏角 第二种方案采用模糊PID控制,以理想和实际横摆角速度的差值作为输入,输出附加横摆力矩 第三种方案采用滑模控制方法得到附加横摆力矩。 下层才用基于规则和基于二次规划的转矩分配方法对速度跟踪模块输出的需求总力矩和横摆力矩控制模块输出的横摆力矩进行分配,实现汽车稳定性控制。 文档详实,代码规范

弯道里油门踩猛了车尾乱甩怎么办?今天咱们聊聊怎么用三种不同姿势把车控得稳稳当当。先上干货——整个系统在Simulink里搭了套双闭环架构,上层玩控制算法,下层搞驱动力分配,中间还嵌着Carsim的车辆模型实时交互。

先看顶层设计的骨架(顺手贴个Simulink模块连接图):
% 顶层架构关键连接代码
connect(ctrlModule, 'yaw_moment', distModule, 'Mz');
connect(vehicleModel, 'beta', ctrlModule, 'beta_feedback');
这个框架里最带劲的是三种控制策略battle。先说LQR方案,这货在状态反馈里搞了个贪心算法——既要跟住期望横摆角速度,又得压住质心侧偏角。咱们调参时发现Q矩阵里横摆角速度误差权重超过10之后,系统响应开始抽搐,最后卡在Q=diag([15,8])这个甜点位置。

模糊PID那边画风突变,整了个双输入三输出的模糊推理表。看这段规则库截取:
rule1 = ctrl.Rule(beta_error['NB'] & yaw_rate_error['PB'], (Kp['ZO'], Ki['NS'], Kd['PB']))
rule2 = ctrl.Rule(beta_error['ZO'] & yaw_rate_error['ZO'], (Kp['PS'], Ki['ZO'], Kd['ZO']))
实际跑起来发现当横摆角速度误差超过5deg/s时,积分项会自己缩卵防止积分饱和,这比传统PID灵性多了。

滑模控制最暴躁,切换函数里藏了个饱和函数来治抖振。核心代码长这样:
// 滑模面计算
double s = current_yaw_rate - desired_yaw_rate + lambda*(current_beta - desired_beta);
double Mz = -K_sat(s/phi) - eta*sgn(s);
实测发现lambda参数调到0.6时能在响应速度和稳定性之间找到平衡,再大点就开始画龙了。

Carsim Simulink联合仿真基于LQR/模糊PID/滑模控制的横摆稳定性控制系统 综合跟随理想横摆角速度的方法和抑制汽车质心侧偏角的汽车稳定性控制方法,以线性二自由度车辆操纵特性模型为控制目标,基于汽车横摆力矩与车辆状态偏差之间的动力学关系建立了控制系统模型。 速度跟踪模块使用前馈加反馈的PID控制架构。 上层第一种方案采用线性二次型调节器(LQR)方法进行了汽车横摆力矩的决策,综合跟踪期望横摆角速度和抑制质心侧偏角 第二种方案采用模糊PID控制,以理想和实际横摆角速度的差值作为输入,输出附加横摆力矩 第三种方案采用滑模控制方法得到附加横摆力矩。 下层才用基于规则和基于二次规划的转矩分配方法对速度跟踪模块输出的需求总力矩和横摆力矩控制模块输出的横摆力矩进行分配,实现汽车稳定性控制。 文档详实,代码规范

到底层扭矩分配环节,二次规划算法每次求解也就5ms左右,比规则分配省了30%的轮胎摩擦圆余量。看看这QP设置:
quadprog(H,f,A,b,[],[],lb,ub,[],options);
关键在H矩阵里给驱动电机和制动力矩分配了不同的权重系数,前轴权重是后轴的1.5倍,毕竟大多数时候前轮抓地力更金贵。

联合仿真时遇到个坑——Carsim的步长必须和Simulink严格对齐,否则数据包会掉。后来用了个S-function做接口同步,时钟偏差控制在0.1ms以内才算稳了。最后测试80km/h双移线工况,三种控制器都能把质心侧偏角压在2度以内,但滑模控制的横摆角速度跟踪超调量比LQR小了40%,不过方向盘手感略僵硬。
文件结构按MISRA-C标准搞的,每个控制器独立成库模块,变量命名全是匈牙利命名法。比如PID模块里的Kp参数在代码里写成f32PIDKp,调试时一眼就能找到。注释写了满屏,连公式里的希腊字母都标了单位转换说明,接手的兄弟不用查手册就能改参数。
下次打算试试把LQR和模糊控制杂交,或许能蹭到两种算法的优点。对了,有老铁在快速原型控制器上部署过滑模算法吗?求教怎么优化那该死的切换频率...
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)