跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C算法

基于 STM32F103C8T6 的二轮平衡车 LQR 控制器设计

综述由AI生成基于 STM32F103C8T6 的二轮平衡车 LQR 控制器设计。通过对比 PID 与 LQR 控制器的差异,阐述了 LQR 作为白盒实验对物理模型的依赖。详细说明了在 MATLAB 中建立系统状态方程、设定性能指标 Q 与 R 矩阵、求解 Riccati 代数方程获取反馈增益矩阵 K 的过程。最后给出了 STM32 端利用 K 值计算加速度的代码实现及参数微调策略,验证了 LQR 算法在平衡车控制中的可行性。

忘忧发布于 2026/3/16更新于 2026/5/2927 浏览
基于 STM32F103C8T6 的二轮平衡车 LQR 控制器设计

前言

PID 控制器和 LQR 控制器各有优劣。LQR 控制器更依赖物理模型的建立,属于白盒实验,需要知道系统内部参数再进行调参;而 PID 控制器通常被视为黑盒实验,即不需要精确的物理模型,根据输出响应直接调参即可。虽然 PID 也有白盒情况,但工程上多为经验调参。

一、实验目的

在二轮平衡小车的项目中,落地 LQR 线性二次型算法。

二、MATLAB 仿真验证

与卡尔曼滤波算法验证不同,LQR 控制器的设计最终需要反馈增益矩阵 K 值。K 值是给定值,不是在代码里在线计算,而是离线进行仿真计算。因此,需要先离线在 MATLAB 中进行仿真,再将 K 值代入到代码里进行在线验证。

1. 系统状态方程

a. 理论

图 1

b. 代码

因为是离线控制,所以推导 K 的代码没有在 STM32 中。输入参数为举例,并不代表本项目实际使用的输入参数。在 MATLAB 代码中,建立系统方程的步骤如下:

m =0.035; r =0.0672/2; i =0.5*m*r^2; M =0.757-2*m; L =0.5*0.0903; J_p =(1/12)*M*(0.0903^2+0.0530^2); d =0.1612; J_delta =(1/12)*M*(0.0930^2+0.0530^2); g =9.8; Q_eq = J_p*M+(J_p+M*L^2)*(2*m+2*i/r^2); A_23 =-(M^2*L^2*g)/Q_eq; A_43 = M*L*g*(M+2*m+2*i/r^2)/Q_eq; B_21 =(J_p+M*L^2+M*L*r)/(Q_eq*r); B_22 = B_21; B_41 =-(M*L/r+M+2*m+2*i/r^2)/Q_eq; B_42 = B_41; B_61 =1/(r*(m*d+i*d/r^2+2*J_delta/d)); B_62 =-B_61; A =[010000;00 A_23 000;000100;00 A_43 000;000001;000000]; B =(i/r)*[00; B_21 B_22;00; B_41 B_42;00; B_61 B_62];
c. 分析

图 2

状态方程中,状态转移矩阵内 A 和输入矩阵 B 的具体推导过程需参考相关理论资料。

2. 性能指标

a. 理论

性能泛函包含两项,一是系统的积累跟踪误差,二是控制能量。显然它着重权衡和惩罚大的跟踪积累误差和大的控制能量。泛函 J 取得极小值的含义是:在没有过大控制能量消耗的前提下,使系统输出量 Y(t) 尽量接近理想输出量 r(t),即跟踪误差最小。根据以上条件,最优控制存在且唯一。

图 3

b. 代码
Q =[100000000;000000;000000;000100000;000010000;000000]; R =[10;01];
c. 分析

Q 的设置体现控制优先级:代码中 Q(1,1)=1000(位移误差)、Q(4,4)=1000(俯仰角速度误差)、Q(5,5)=1000(转向角误差),说明优先保证这三个状态的精度。R 的设置限制控制量:R=eye(2) 表示左 / 右轮力的代价相同,避免电机输出过大(如急加速导致的不稳定)。

3. Riccati 代数方程——求 K

a. 理论

若有最优解,则 Riccati 代数方程=0,可求解 P。求解 P 后可求解 K。

图 4

图 5

b. 代码
K =lqr(A,B,Q,R);% 调用 MATLAB 的 lqr 函数,输入 A、B、Q、R,输出 6×2 增益矩阵 K 

在 MATLAB 代码底层函数中可以看到具体实现逻辑。

c. 分析

对于连续时间系统,基于状态方程中的微分方程,性能函数为求积分,对应的 Riccati 代数方程为特定形式。对于离散时间系统,基于状态方程中的差分方程,性能指标是离散求和形式,底层会调用离散 Riccati 方程的求解逻辑。

4. 反馈增益矩阵 K——求 u

a. 理论

求解 K 后,可求解 u。

图 6

b. 代码

最终,STM32 端的代码核心只有这两行:

L_accel=-(K1*x_pose+K2*(x_speed-Target_x_speed)+K3*(angle_x-Target_angle_x)+K4*gyro_x+K5*angle_z+K6*(gyro_z-Target_gyro_z)); 
R_accel=-(K1*x_pose+K2*(x_speed-Target_x_speed)+K3*(angle_x-Target_angle_x)+K4*gyro_x-K5*angle_z-K6*(gyro_z-Target_gyro_z));
c. 分析

由于理论模型与实际小车存在误差(如摩擦、传感器噪声),仿真得到的 K 可能需要微调:

  • 若小车平衡不稳定(左右摇晃):增大 K3(倾角误差权重)或 K4(倾角角速度权重);
  • 若转向过冲(转角度度过大):减小 K5 或 K6;
  • 若速度跟踪不准:增大 K2(速度误差权重)。

三、实验结论

验证二轮平衡小车中,联立代码,分析理论,验证 LQR 线性二次型控制器算法的可行性。

目录

  1. 前言
  2. 一、实验目的
  3. 二、MATLAB 仿真验证
  4. 1. 系统状态方程
  5. a. 理论
  6. b. 代码
  7. c. 分析
  8. 2. 性能指标
  9. a. 理论
  10. b. 代码
  11. c. 分析
  12. 3. Riccati 代数方程——求 K
  13. a. 理论
  14. b. 代码
  15. c. 分析
  16. 4. 反馈增益矩阵 K——求 u
  17. a. 理论
  18. b. 代码
  19. c. 分析
  20. 三、实验结论
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenClaw 本地 AI 助手部署与飞书对接指南
  • Meta Quest 一体机 SideQuest 安装 APK 及 OBB 数据包教程
  • Video2Robot:从视频到机器人动作的端到端生成管道
  • Claude Code 进阶指南:使用 Everything 插件打造有记忆的 AI 程序员
  • Java 初认识
  • ZXing-C++ 跨平台条码处理库详解与集成指南
  • Web 服务核心机制与 I/O 模型实战
  • Java 大数据在新能源微电网能量优化调度与虚拟电厂协同控制中的应用实践
  • SpringBoot 统一数据返回与异常处理详解
  • SpringBoot 整合 LangChain4j 实现 RAG 检索实战详解
  • Eino Embedding 组件核心解析:文本向量化与语义检索
  • AI 模型调优实战:Python 核心技术与最佳实践
  • Linux 网络基础:局域网与跨网段传输原理
  • DeepSeek 隐藏玩法与高阶提示词应用指南
  • OpenTiny NEXT 前端智能化征文:AI 前端与 WebAgent 学习路径
  • 前端与 Spring Boot 后端无感 Token 刷新实现
  • Stable Diffusion 艺术风格测试指南:从入门到进阶
  • C++ 运算符重载详解:自定义类型的运算扩展
  • 算法实战:位运算解决两数之和与缺失数字问题
  • AI前沿技术日更简报 - 2026-03-04

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online