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

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

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

忘忧发布于 2026/3/16更新于 2026/10/22105 浏览
基于 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. 三、实验结论

更多推荐文章

查看全部
  • 12 篇必读的大模型前沿论文
  • Altera FPGA Avalon MM 总线接口规范简介
  • Ubuntu Server 24.04.3 LTS 安装指南
  • Stable Diffusion 与 Z-Image-Turbo 模型部署及性能对比实战
  • 网络安全工程师面试真题汇总:Web 安全、内网渗透与系统加固
  • Go Cron 定时任务
  • AI 绘画精讲与 AIGC 时代游戏美术设计
  • 零基础转行Python学习指南与路径规划
  • Git Bash 详解:功能、组成、使用场景与底层原理
  • Neo4j Desktop 2 安装与使用指南
  • Mac mini 对比 NUC 与树莓派:OpenClaw 硬件平台选型分析
  • 英文论文 AI 率检测:iThenticate 与 Turnitin 系统对比
  • IDEA 与 WebStorm 多分支切换实战指南
  • 2025 年 AIGC 六大核心趋势与技术落地分析
  • OpenClaw 本地优先 AI 智能体入门指南
  • 基于 Coze 平台打造国风图片智能体实战
  • 亲测一个月后,我把所有 AI 工具全卸载了:Megick 专业图像视频生成,接入 GPT-Image-2 和 Seedance 后直接封神
  • 基于 OpenCode 搭建 Skills 环境与项目实战开发
  • openJiuwen 架构设计与企业级 Agent 实战部署
  • Python 环境安装与 Hello World 入门

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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