当前位置: 首页 > article >正文

MATLAB实战:5分钟搞定倒立摆LQR控制(附完整代码)

MATLAB实战5分钟搞定倒立摆LQR控制附完整代码倒立摆作为经典的控制系统教学案例一直是学习自动控制的必经之路。但很多初学者在面对复杂的数学推导和代码实现时往往感到无从下手。本文将带你用最短的时间跳过繁琐的理论推导直接上手实现一个完整的倒立摆LQR控制系统。1. 准备工作与环境配置在开始之前我们需要确保MATLAB环境已经准备就绪。建议使用MATLAB R2018b或更高版本因为后续代码中会用到一些较新的绘图函数。首先创建一个新的MATLAB脚本文件命名为inverted_pendulum_lqr.m。我们将在这个文件中完成所有代码的编写。为了后续调试方便建议在脚本开头添加以下清理命令clc; % 清空命令窗口 clear all; % 清空工作区变量 close all; % 关闭所有图形窗口接下来我们需要定义倒立摆的物理参数。这些参数将直接影响系统的动态特性% 系统物理参数 M 2.0; % 小车质量(kg) m 0.1; % 摆杆质量(kg) l 0.5; % 摆杆半长(m) b1 0.1; % 小车摩擦系数 b2 0.1; % 摆杆摩擦系数 g 9.8; % 重力加速度(m/s^2)2. 建立状态空间模型LQR控制需要基于系统的状态空间模型进行设计。对于倒立摆系统我们通常选择以下四个状态变量小车位置x小车速度ẋ摆杆角度θ摆杆角速度θ̇基于这些状态变量我们可以建立系统的状态空间方程。下面是完整的建模代码% 计算中间参数 L 2*l; % 摆杆全长 J (1/3)*m*L^2; % 摆杆转动惯量 JJ J m*l^2; % 修正转动惯量 N (Mm)*JJ - m^2*l^2; % 系统参数组合 % 状态空间矩阵A A [0 1 0 0; 0 -b1*JJ/N -m^2*g*l^2/N b2*m*l/N; 0 0 0 1; 0 b1*m*l/N (Mm)*m*g*l/N -b2*(Mm)/N]; % 输入矩阵B B [0; JJ/N; 0; -m*l/N]; % 输出矩阵C C [1 0 0 0; % 输出小车位置 0 0 1 0]; % 输出摆杆角度 % 直接传递矩阵D D [0; 0];3. LQR控制器设计LQR控制的核心是选择合适的权重矩阵Q和R。这两个矩阵决定了系统对不同状态变量和控制输入的重视程度。% 设计LQR控制器 Q diag([1000, 1, 100, 1]); % 状态权重矩阵 R 1; % 控制输入权重 % 计算最优反馈增益矩阵K K lqr(A, B, Q, R); % 计算闭环系统矩阵 Ac A - B*K;这里有几个关键点需要注意Q矩阵对角元素对应四个状态变量的权重R矩阵标量值控制输入信号的权重lqr函数会自动计算最优反馈增益4. 系统仿真与结果分析现在我们可以对闭环系统进行仿真了。我们将使用脉冲响应来测试系统的稳定性。% 仿真时间设置 t 0:0.01:15; % 0到15秒步长0.01秒 % 创建开环和闭环系统对象 sys_open ss(A, B, C, D); sys_closed ss(Ac, B, C, D); % 计算脉冲响应 [y_open, t_open] impulse(sys_open, t); [y_closed, t_closed] impulse(sys_closed, t); % 提取开环和闭环响应数据 x_open y_open(:,1); % 开环小车位置 theta_open y_open(:,2); % 开环摆杆角度 x_closed y_closed(:,1); % 闭环小车位置 theta_closed y_closed(:,2); % 闭环摆杆角度为了更直观地观察控制效果我们可以绘制响应曲线% 绘制位置响应曲线 figure(1); plot(t_closed, x_closed, LineWidth, 2); grid on; grid minor; xlabel(时间(s)); ylabel(小车位置(m)); title(LQR控制下的小车位置响应); set(gca, FontSize, 12); % 绘制角度响应曲线 figure(2); plot(t_closed, theta_closed*180/pi, LineWidth, 2); grid on; grid minor; xlabel(时间(s)); ylabel(摆杆角度(°)); title(LQR控制下的摆杆角度响应); set(gca, FontSize, 12);5. 参数调优与性能提升LQR控制器的性能很大程度上取决于Q和R矩阵的选择。下面是一些调优建议小车位置权重增大Q(1,1)会使系统更关注位置控制摆杆角度权重增大Q(3,3)会增强摆杆稳定性控制输入权重增大R会限制控制输入的大小我们可以通过以下代码快速测试不同参数组合% 测试不同Q矩阵 Q_tests {diag([1000,1,100,1]), diag([500,1,200,1]), diag([2000,1,50,1])}; legends {Q1,Q2,Q3}; figure(3); hold on; for i 1:length(Q_tests) K_test lqr(A, B, Q_tests{i}, R); Ac_test A - B*K_test; sys_test ss(Ac_test, B, C, D); y_test impulse(sys_test, t); plot(t, y_test(:,2)*180/pi, LineWidth, 2); end grid on; grid minor; xlabel(时间(s)); ylabel(摆杆角度(°)); title(不同Q矩阵下的角度响应对比); legend(legends); set(gca, FontSize, 12);6. 完整代码整合将所有代码整合到一个文件中方便直接运行clc; clear all; close all; % 1. 系统参数设置 M 2.0; m 0.1; l 0.5; b1 0.1; b2 0.1; g 9.8; % 2. 状态空间建模 L 2*l; J (1/3)*m*L^2; JJ J m*l^2; N (Mm)*JJ - m^2*l^2; A [0 1 0 0; 0 -b1*JJ/N -m^2*g*l^2/N b2*m*l/N; 0 0 0 1; 0 b1*m*l/N (Mm)*m*g*l/N -b2*(Mm)/N]; B [0; JJ/N; 0; -m*l/N]; C [1 0 0 0; 0 0 1 0]; D [0; 0]; % 3. LQR控制器设计 Q diag([1000, 1, 100, 1]); R 1; K lqr(A, B, Q, R); Ac A - B*K; % 4. 系统仿真 t 0:0.01:15; sys ss(Ac, B, C, D); y impulse(sys, t); % 5. 结果可视化 figure(1); plot(t, y(:,1), LineWidth, 2); grid on; title(小车位置响应); xlabel(时间(s)); ylabel(位置(m)); figure(2); plot(t, y(:,2)*180/pi, LineWidth, 2); grid on; title(摆杆角度响应); xlabel(时间(s)); ylabel(角度(°));7. 实际应用中的注意事项在实际应用中有几点需要特别注意传感器噪声实际系统中的传感器测量都存在噪声需要在控制器中加入滤波环节执行器饱和小车电机或舵机都有输出限制需要在仿真中考虑饱和非线性采样时间数字控制系统的采样时间会影响性能通常选择系统带宽的5-10倍下面是一个考虑执行器饱和的修改示例% 修改后的仿真考虑执行器饱和 u_max 10; % 最大控制输入 t_sim 15; dt 0.01; t_vec 0:dt:t_sim; x0 [0; 0; 0.1; 0]; % 初始角度0.1弧度 % 手动仿真 x x0; x_history zeros(4, length(t_vec)); for i 1:length(t_vec) u -K*x; % 计算控制输入 u max(min(u, u_max), -u_max); % 饱和限制 x x dt*(A*x B*u); % 欧拉积分 x_history(:,i) x; end % 绘制结果 figure(3); subplot(2,1,1); plot(t_vec, x_history(1,:)); title(考虑饱和的小车位置); xlabel(时间(s)); ylabel(位置(m)); subplot(2,1,2); plot(t_vec, x_history(3,:)*180/pi); title(考虑饱和的摆杆角度); xlabel(时间(s)); ylabel(角度(°));这个示例展示了如何在仿真中加入执行器饱和限制使仿真结果更接近实际情况。

相关文章:

MATLAB实战:5分钟搞定倒立摆LQR控制(附完整代码)

MATLAB实战:5分钟搞定倒立摆LQR控制(附完整代码) 倒立摆作为经典的控制系统教学案例,一直是学习自动控制的必经之路。但很多初学者在面对复杂的数学推导和代码实现时,往往感到无从下手。本文将带你用最短的时间&#x…...

视觉-语音-文本三模态同步流式处理,全链路延迟压至<15ms,这7个被忽略的CUDA Graph陷阱你踩过几个?

第一章:视觉-语音-文本三模态同步流式处理的实时性本质 2026奇点智能技术大会(https://ml-summit.org) 实时性在三模态流式系统中并非仅由端到端延迟定义,而是源于跨模态时序对齐、计算资源动态调度与感知语义边界识别三者的协同约束。视觉帧率&#x…...

汉字的文化内涵与独特魅力

汉字的文化内涵与独特魅力汉字的精准性与高级性汉字被公认为世界上最精准、最高级的文字之一,其独特的造字逻辑与文化承载,使得许多汉字在英语中难以找到完全对应的翻译,这种“无解”的文化错位现象,在汉语中十分常见。例如&#…...

FPGA驱动ADS1256实现高精度数据采集系统设计

1. 为什么选择FPGA驱动ADS1256? 在工业测量和医疗设备领域,对模拟信号采集的精度要求往往达到微伏级别。传统的MCU方案在处理24位高精度ADC时常常力不从心,这时候FPGA的优势就凸显出来了。我去年参与过一个ECG医疗设备项目,最初尝…...

别再被TI官方原理图坑了!TPS65130/31关闭省电模式(PSP/PSN)的实战避坑指南

TPS65130/31设计实战:关闭省电模式的工程决策与热管理优化 当光电检测设备遭遇运放阵列供电异常时,示波器上跳动的纹波曲线往往暗示着更深层的电源架构问题。在最近一个医疗内窥镜成像模块的开发中,我们的团队遇到了与TI的TPS6513x系列芯片相…...

【Antd+Vue】优化Select组件大数据渲染性能的实战技巧

1. 为什么Select组件会卡顿? 当你在Vue项目中使用Ant Design Vue的Select组件渲染上千条数据时,可能会遇到明显的卡顿现象。这主要是因为浏览器需要一次性处理大量DOM节点,导致渲染性能下降。想象一下,你同时打开100个网页标签页和…...

避坑指南:ABAP调用CO_XT_COMPONENT_ADD为工单批量添加组件,这些细节不注意会报错

ABAP工单组件批量维护实战:CO_XT_COMPONENT_ADD深度避坑指南 在SAP生产订单管理系统中,批量维护工单组件是每个ABAP开发者都会遇到的高频需求。当标准BAPI无法满足复杂场景时,CO_XT_COMPONENT_ADD这类底层函数往往成为救命稻草——但稍有不慎…...

如何在机器人控制中应用惯性系与固连系转换?5个实际案例解析

如何在机器人控制中应用惯性系与固连系转换?5个实际案例解析 当机械臂在工厂流水线上精准抓取零件,或是无人机在复杂环境中自主避障时,其核心控制系统都在不断进行着一种"空间思维体操"——坐标系转换。这种在惯性系(世…...

Simulink模型高效生成C代码:标定量与观测量的自动化配置实践

1. 为什么需要自动化配置标定量与观测量 我第一次接触Simulink代码生成时,也犯过直接把模型参数硬编码到C代码里的错误。记得那是个电机控制项目,模型里Gain模块的值直接设成了3.14。生成代码后发现,每次修改参数都需要重新生成整个工程&…...

从LAMMPS到GROMACS:新手如何选择你的第一个分子动力学软件(附安装配置避坑指南)

从LAMMPS到GROMACS:新手如何选择你的第一个分子动力学软件(附安装配置避坑指南) 刚踏入计算材料学或分子动力学模拟领域的研究生和工程师,面对众多开源和商业软件时,往往会被复杂的安装流程、晦涩的输入文件格式和陡峭…...

用Matlab Simulink复现经典电话通信:手把手搭建A律PCM语音编码系统

用Matlab Simulink复现经典电话通信:手把手搭建A律PCM语音编码系统 上世纪60年代,当工程师们第一次将A律PCM技术应用于电话通信系统时,可能不会想到这项技术会成为数字通信的基石。今天,我们站在巨人的肩膀上,用Matlab…...

从气象数据到地图可视化:用ArcGIS克里金插值模型构建全流程

从气象数据到地图可视化:用ArcGIS克里金插值模型构建全流程 气象数据在环境监测、农业规划等领域扮演着关键角色。当我们面对分散的气象站点数据时,如何将其转化为连续的空间分布图?克里金插值法作为地统计学中的经典方法,能够有效…...

ASan实战:5种常见内存错误诊断与修复指南(附GCC/Clang编译参数)

ASan实战:5种常见内存错误诊断与修复指南(附GCC/Clang编译参数) 在C/C开发中,内存错误就像潜伏的定时炸弹,随时可能引发程序崩溃或安全漏洞。我曾参与过一个大型金融交易系统开发,就因一个隐蔽的堆溢出导致…...

Bluetooth LE Explorer崩溃闪退?这份Win10蓝牙调试避坑指南请收好(含稳定替代方案推荐)

Bluetooth LE Explorer崩溃闪退?这份Win10蓝牙调试避坑指南请收好(含稳定替代方案推荐) 如果你是一名物联网开发者或硬件爱好者,大概率对Windows平台上的蓝牙调试工具Bluetooth LE Explorer不陌生。这款由微软官方推出的免费工具&…...

保姆级教程:用LLaMA-Factory微调Qwen2.5-VL-7B模型(附避坑指南)

从零开始:用LLaMA-Factory高效微调Qwen2.5-VL-7B模型的完整指南 第一次接触大模型微调时,我被各种参数和工具链搞得晕头转向。直到发现LLaMA-Factory这个神器,才真正体会到高效微调的乐趣。本文将带你完整走一遍Qwen2.5-VL-7B模型的微调流程&…...

2026年3月 GESP CCF编程能力等级认证Python二级真题

答案和更多内容请查看网站:【试卷中心 ----->电子学会 ----> Python ----> 二级】 网站链接 青少年软件编程历年真题模拟题实时更新 青少年软件编程(Python)等级考试试卷(二级) 一、单选题 …...

蓝牙键盘会影响HTML函数工具响应吗_输入延迟说明【说明】

蓝牙键盘导致HTML函数工具响应延迟,需依次排查:一、检查蓝牙连接稳定性;二、关闭蓝牙节能策略;三、禁用干扰浏览器扩展;四、切换为keydown事件监听并preventDefault;五、启用USB蓝牙适配器替代内置模块。如…...

出现错误,Microsoft Store 初始化失败

1. 重置Microsoft Store缓存按 Win R 键打开“运行”对话框,输入 wsreset.exe 并点击“确定”。这将清除Microsoft Store的缓存,并尝试重新启动商店。2. 代理工具系统代理关闭有个矛盾点,不开代理上不去商店,开了代理就打不开了&…...

MinIO文件服务器实战:从零搭建到SpringBoot整合

1. MinIO是什么?为什么选择它? 如果你正在寻找一个高性能、轻量级的对象存储解决方案,MinIO绝对值得考虑。作为一个开源的分布式对象存储服务器,它兼容Amazon S3 API,这意味着你可以用极低的成本搭建私有云存储服务。我…...

ONNX模型转换实战:从PyTorch到TensorRT的完整优化指南

ONNX模型转换实战:从PyTorch到TensorRT的完整优化指南 在AI模型部署的最后一公里,推理速度往往成为决定产品成败的关键因素。想象一下这样的场景:你的PyTorch模型在训练时表现优异,但到了生产环境却因为推理延迟过高而无法满足实时…...

告别命令行:用ChatboxAI给本地DeepSeek模型做个漂亮GUI(Ollama篇)

告别命令行:用ChatboxAI给本地DeepSeek模型做个漂亮GUI(Ollama篇) 在探索本地大语言模型的世界时,许多技术爱好者都会遇到一个共同的痛点:虽然通过Ollama命令行成功运行了模型,但交互体验始终停留在黑底白字…...

linux容器安全风险

Linux 容器(Docker、containerd、Kubernetes 等)的核心安全风险源于其共享宿主机内核的本质,隔离性弱于虚拟机,主要风险集中在 容器逃逸、镜像安全、权限配置、网络、编排平台、供应链、内核漏洞 七大方面。容器逃逸(最…...

51单片机项目避坑指南:搞定HC-SR04超声波测距的时序与中断冲突(附倒车雷达完整代码)

51单片机超声波测距系统实战:从时序优化到多模块协同设计 当你在51单片机上整合超声波测距、OLED显示和蜂鸣器报警时,是否遇到过数据跳动、显示卡顿或响应延迟的问题?这背后往往隐藏着时序冲突、中断抢占和资源竞争等深层次问题。本文将带你深…...

揭秘Stable Diffusion 3.5企业级部署瓶颈:3类GPU资源浪费模式及实时优化方案

第一章:Stable Diffusion 3.5企业级部署的范式跃迁 2026奇点智能技术大会(https://ml-summit.org) Stable Diffusion 3.5 不再仅是开源图像生成模型的迭代版本,而是企业AI基础设施重构的关键锚点。其原生支持的多模态条件建模、细粒度可控推理引擎&…...

【StableDiffusion】从SD1.5到SDXL Turbo:模型演进如何重塑AI绘画的创作边界

1. Stable Diffusion的进化之路:从像素模糊到高清实时 第一次用SD1.5生成图片时,我盯着屏幕上512x512分辨率的模糊人脸哭笑不得——这哪是AI绘画,简直是AI抽象派。但短短两年后,当SDXL Turbo在0.5秒内吐出1024x1024的精致插画时&a…...

2026年柔性链输送线性能评测:承载、速度与洁净度实测分析

在2026年的产线自动化升级中,输送设备的选型需兼顾承载能力、输送速度与洁净度等核心指标。对于食品、医药、电子等行业的轻量物料输送场景,柔性链输送线凭借模块化设计与高洁净特性,成为替代传统刚性输送方案的重要选择。本文将从性能实测、…...

Aspose.Cells Python版从评估到正式使用的完整指南(含代码示例)

Aspose.Cells Python版从评估到正式使用的完整指南(含代码示例) 当你第一次在Python项目中集成Aspose.Cells时,评估版提供的功能体验往往令人惊喜——完整的Excel处理能力,无需依赖Microsoft Office环境。但真正要将它投入生产环境…...

别再只盯着机电继电器了!聊聊固态继电器(SSR)的三种主流技术路线与选型避坑指南

固态继电器技术全景:三大技术路线深度解析与工程选型实战 在工业自动化设备的主控板上,一个不起眼的继电器故障导致整条产线停机8小时——这样的场景对于电子工程师而言绝不陌生。传统机电继电器(EMR)的机械磨损问题,正…...

高动态人形机器人功率驱动优化:基于高压总线、关节电机与伺服管理的MOSFET精准选型方案

前言:构筑敏捷驱动的“力量核心”——论功率器件选型的系统思维在机器人技术迈向高速高动态的今天,一款卓越的AI高速人形机器人,不仅是传感器融合、AI算法与精密机械的集成,更是一部对电能进行高效、精准、可靠转换与分配的“动力…...

利用Fold Change数据绘制差异代谢产物的HMDB分类热图

1. 差异代谢产物分析的核心逻辑 做代谢组学研究的朋友们应该都遇到过这样的场景:手头有一堆差异代谢物的数据,需要找出哪些代谢通路或分类受到显著影响。这时候Fold Change值就成了我们的黄金指标——它直接反映了实验组和对照组之间的代谢物浓度变化倍数…...