news 2026/1/21 13:13:50

四旋翼滑模控制,simulink仿真,matlab仿真,参数调已经调好,可以自行学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
四旋翼滑模控制,simulink仿真,matlab仿真,参数调已经调好,可以自行学习

四旋翼滑模控制,simulink仿真,matlab仿真,参数调已经调好,可以自行学习,包涵内外环滑模控制器

深夜调参,盯着屏幕上疯狂抖动的姿态曲线,我第N次想把键盘摔了。突然意识到滑模控制的抖振可能不是算法问题——是我参数调得太暴力了。今天就带大家撸个稳如老狗的四旋翼滑模仿真,模型参数都腌入味了,直接上硬菜。

!simulink_model

(别找了,图得自己搭。重点看红框里那俩滑模控制器模块,外环管位置内环控姿态,跟套娃似的层层嵌套)

外环滑模的核心代码长这样:

function [u, s] = outer_smc(x_ref, x_current, d_hat) % 滑模面设计 e = x_current(1:3) - x_ref(1:3); edot = x_current(4:6) - x_ref(4:6); k1 = diag([2.8, 2.8, 4.2]); % 这个对角阵参数别乱动! s = edot + k1*e; % 等效控制部分 M = 1.2; g = 9.8; u_eq = M*(g + k1*edot - d_hat); % 切换控制 k_sw = diag([0.6, 0.6, 0.8]); u_sw = -k_sw * sign(s); u = u_eq + u_sw; end

注意第12行的sign函数,实际跑仿真要换成饱和函数sat(s/Φ),不然抖得亲妈都不认识。比如:

% 把sign改成这个防抖版 phi = 0.05; u_sw = -k_sw * min(max(s/phi, -1), 1);

内环姿态控制更刺激,直接上simulink里的S函数:

function sys = inner_smc(t,x,u,flag) persistent I k2 eta; if flag == 0 I = diag([0.016, 0.016, 0.028]); % 转动惯量矩阵 k2 = [8,8,6]; % 滑模面增益 eta = [12,12,10]; % 切换增益 sys = [3,0,3,3,0,1]; return; end % 滑模面计算 omega_error = u(1:3); % 角速度误差 q_error = u(4:6); % 四元数误差 s = omega_error + k2'.*q_error(1:3); % 控制力矩计算 tau_eq = cross(omega_error, I*omega_error) - I*(k2'.*omega_error); tau_sw = -eta' .* sign(s); tau = tau_eq + tau_sw; sys(1:3) = tau; end

第14行那个叉乘项千万别删!这是科氏力补偿,删了无人机能在仿真里给你表演托马斯回旋。实测当姿态误差超过30度时,把eta参数调大20%能更快收敛。

模型里埋了几个彩蛋:

  1. 在姿态环的Integrator模块里设置了输出限幅,防止电机饱和
  2. 外环的wind disturbance模块可以右键取消注释,体验突风干扰
  3. 数据保存用To Workspace块,跑完直接plot3画三维轨迹超方便

调参玄学时间:当总控制量出现高频振荡时,优先减小切换增益eta;要是跟踪速度慢,先加大k1对角线上对应轴的值。记住滑模控制的精髓——在抖与不抖之间找到那个微妙的平衡点,就像在钢丝上跳街舞。

最后丢个仿真结果:

!trajectory

红色参考轨迹和蓝色实际轨迹基本重合,放大看会有毫米级的抖动——这就对了!真要完全不抖那叫PID控制。代码扔GitHub了,记得把电机模型里的PWM频率从50Hz改成200Hz,现代电调早不吃低频那套了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/15 16:49:11

MyBatis核心源码解析 从SqlSession到Mapper接口的绑定过程

目录 🎯 先说说我遇到过的真实问题 ✨ 摘要 1. MyBatis架构总览:不只是"写SQL的工具" 1.1 别把MyBatis看简单了 1.2 核心组件职责解析 2. SqlSession:MyBatis的"大门" 2.1 SqlSession的创建过程 2.2 执行器类型&…

作者头像 李华
网站建设 2026/1/16 4:44:27

JiyuTrainer实时监控GPU利用率:PyTorch训练可视化

JiyuTrainer实时监控GPU利用率:PyTorch训练可视化 在深度学习模型训练过程中,一个常见的场景是:你启动了一个 PyTorch 脚本,满怀期待地等待结果,却发现 GPU 利用率始终徘徊在 20% 以下。显存倒是占满了,但计…

作者头像 李华
网站建设 2026/1/21 5:24:50

【计算机毕业设计案例】基于java的动漫网站设计与实现基于springBoot的动漫分享系统的设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/1/15 23:46:06

【Linux命令大全】001.文件管理之mv命令(实操篇)

【Linux命令大全】001.文件管理之mv命令(实操篇) ✨ 本文为Linux系统磁盘管理命令的全面汇总与深度优化,结合图标、结构化排版与实用技巧,专为高级用户和系统管理员打造。 (关注不迷路哈!!!) 文…

作者头像 李华
网站建设 2026/1/16 7:27:26

CUDA Out of Memory怎么办?PyTorch内存优化技巧

CUDA Out of Memory怎么办?PyTorch内存优化技巧 在训练一个大语言模型时,你是否曾遇到这样的场景:代码一切正常,数据加载无误,刚跑几个 batch 就突然弹出 RuntimeError: CUDA out of memory?显存监控显示使…

作者头像 李华