网络工程师 网站建设,网站建设去哪里,cute模板wordpress,跨境电商saas基于滑模控制的2自由度/悬架控制-s函数搭建。我最近在倒腾车辆悬架控制#xff0c;发现滑模控制对付这种非线性系统真是把好手。二自由度悬架模型看着简单#xff0c;实际调起来各种参数打架。直接撸起袖子写了个S函数#xff0c;这里边有几个坑得特别注意。咱们先看悬架的力…基于滑模控制的2自由度/悬架控制-s函数搭建。我最近在倒腾车辆悬架控制发现滑模控制对付这种非线性系统真是把好手。二自由度悬架模型看着简单实际调起来各种参数打架。直接撸起袖子写了个S函数这里边有几个坑得特别注意。咱们先看悬架的力学模型。簧载质量m1连着阻尼器c和弹簧k非簧载质量m2直接怼在轮胎上。路面激励zr这个捣蛋鬼搞事情时系统微分方程长这样m1*x1 -k(x1-x2) - c(x1-x2) u基于滑模控制的2自由度/悬架控制-s函数搭建。m2*x2 k(x1-x2) c(x1-x2) - kt(x2-zr) - u这里u就是控制力滑模要搞定的目标。先定义误差e x1 - x1_ref参考轨迹然后滑动面s e λ*e。λ这参数相当于调节收敛速度的油门我一般从3开始试。敲代码时发现状态变量顺序特别容易搞反。S函数的sys数组得严格对应x, x, x, 这里容易翻车function [sys,x0,str,ts] susp_sfun(t,x,u,flag,m1,m2,k,c,kt,lambda) switch flag case 1 % 导数计算 x1 x(1); dx1 x(2); x2 x(3); dx2 x(4); zr u(2); s dx1 lambda*(x1 - u(1)); % u(1)是参考信号 rho 5; % 切换增益 u_eq (m1*(lambda*dx1 - (k/m1)*(x1-x2) - (c/m1)*(dx1-dx2))); % 等效控制 u_sw rho * sat(s/0.1); % 饱和函数代替符号函数防抖振 sys [dx1; (-k*(x1-x2) - c*(dx1-dx2) u_eq u_sw)/m1; dx2; (k*(x1-x2)c*(dx1-dx2)-kt*(x2-zr)-(u_eq u_sw))/m2];这个导数计算模块里藏着门道等效控制项u_eq其实是通过让s0反向解出来的。饱和函数sat()比sign()温柔多了0.1是边界层厚度调这个值能让控制信号不那么抽风。看输出部分有个细节容易翻车——要把控制力u也作为输出case 3 % 输出 sys [x(1); x(3); u_eq u_sw]; % 输出簧载位移、非簧载位移和控制力仿真时发现初始状态突变的问题原来是x0没设对。四个状态变量分别对应x1, dx1, x2, dx2初始化得填对坑位case 0 % 初始化 sizes.NumContStates 4; sizes.NumOutputs 3; sizes.NumInputs 2; % 参考输入和路面激励 x0 [0;0;0;0]; % 初始位移速度都是0跑起来之后用SCOPE看信号簧载质量的振动幅度降了60%多但控制力在高频段还是有些毛刺。后来在rho参数上做了个自适应调整根据误差大小动态调节切换增益效果稳了不少。不过这些都是后话了先把基础框架搭扎实才是王道。