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

【电机控制】基于STM32F103C8T6的二轮平衡车设计——LQR线性二次线控制器(算法篇)

【电机控制】基于STM32F103C8T6的二轮平衡车设计——LQR线性二次线控制器(算法篇)


文章目录

    • @[TOC](文章目录)
  • 前言
  • 一、实验目的
  • 二、实验步骤一:MATLAB仿真验证
    • 1.系统状态方程
      • a.理论
      • b.代码
      • c.分析
    • 2.性能指标
      • a.理论
      • b.代码
      • c.分析
    • 3.Riccati代数方程——求K
      • a.理论
      • b.代码
      • c.分析
    • 4.反馈增益矩阵K——求u
      • a.理论
      • b.代码
      • c.分析
  • 四、实验结论
  • 五、参考资料
  • 总结

前言

提示:以下是本篇文章正文内容,下面案例可供参考
PID控制器和LQR控制器各有优劣,
LQR控制器更依赖物理模型的建立,也就是白盒实验,需要知道系统内部,再进行调参;
PID控制器给我的感受是,黑盒实验,即不需要知道物理模型,根据输出响应,直接调参就可以了
当然,有同学会反驳我,PID控制器也需要物理模型,不可否认,PID也有白盒实验的情况;
但是,大多数的工程,还是经验调参,而不是算了半天,算完再调;
可能这也是为什么大家用脚投PID一票的原因吧;
遇事不决PID大法好

【电机控制】基于STM32F103C8T6的二轮平衡车设计

一、实验目的

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

二、实验步骤一:MATLAB仿真验证

与卡尔曼滤波算法验证不同的是,LQR控制器的设计最终需要反馈增益矩阵K值,在代码里,K值是给定值,不是在代码里在线计算,而是离线进行仿真计算;
因此,需要先离线,在MATLAB中进行仿真;
【电机仿真】LQR控制器——二轮平衡小车控制
再将K值代入到代码里,在线验证;
在这里插入图片描述

在这里插入图片描述
最优控制在现代控制理论中有着及其重要的位置,其研究目标是使受控系
统的性能指标达到最优时,所需要的基本条件,及其控制的综合方法。
线性二次型(LQR)控制,是一种线性状态反馈控制方法,是最优控制理
论中最成熟、最系统的方法。

1.系统状态方程

a.理论

在这里插入图片描述

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 = [0 1 0 0 0 0; 0 0 A_23 0 0 0; 0 0 0 1 0 0; 0 0 A_43 0 0 0; 0 0 0 0 0 1; 0 0 0 0 0 0];
B = (i/r)*[0 0; B_21 B_22; 0 0; B_41 B_42; 0 0; B_61 B_62];

c.分析

请添加图片描述

状态方程中,状态转移矩阵内A和输入矩阵B的具体推导过程如下:
【电机仿真】LQR控制器——二轮平衡小车控制

2.性能指标

a.理论

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

在这里插入图片描述

b.代码

    Q = [1000 0 0 0 0 0; 0 0 0 0 0 0; 0 0 0 0 0 0; 0 0 0 1000 0 0; 0 0 0 0 1000 0; 0 0 0 0 0 0];R = [1 0; 0 1];

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
在这里插入图片描述
在这里插入图片描述

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
在这里插入图片描述

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线性二次线控制器算法的可行性;

五、参考资料

【电机仿真】LQR控制器——二轮平衡小车控制
【最优控制】5_线性二次型调节器(LQR)详细数学推导

总结

本文仅仅简单介绍了【电机控制】基于STM32F103C8T6的二轮平衡车设计——LQR线性二次线控制器(算法篇),评论区欢迎讨论。

http://www.dtcms.com/a/611551.html

相关文章:

  • BuildingAI 控制台智能体菜单和页面技术架构
  • 保定网站制作系统陕西省网站开发
  • 如何在跨部门沟通失误后进行协调与澄清
  • VS2010 C语言编译器使用教程 | 如何高效配置和优化C语言编译环境
  • 常州网站建设要多少钱濮阳免费网站建设
  • 学了lamp做网站就足够了吗无忧中英繁企业网站系统 完整
  • ubuntu:beyond compare 4 This license key has been revoked 解决办法
  • 基于OSip协议栈的GB28181视频平台--jrtp传输过程中作为接收方不发送rtcp包问题处理
  • java加密启动报错
  • SpringAOP、连接点、通知类型、通知顺序、切入点表达式
  • 平面设计师参考网站开发公司总经理竞聘报告
  • 手机可以看的网站如何查看网站是什么语言做的
  • 电源完整性11-电容安装电感的影响因素
  • 手机如何做车载mp3下载网站互联网公司排名深信服
  • 电商网站建设定制北京网站定制价格表
  • 水利网站建设管理汇报广告网站制作多少钱
  • 新建茶叶网站文章内容建设电子商务网站建设工资
  • SAP 如何恢复电子表格EXCEL导出允许选择格式
  • 瓦房店 网站建设二级域名怎么解析
  • 国外做化学申报的网站文化类网站是不是休闲娱乐类网站
  • 最新版LangChain 1.0快速入门介绍
  • 广州开发网站服务设计一个电商网站的首页
  • 单页网站开发网站开发初学
  • 怎样建公司网站有什么网站可以做宣传图片
  • 易缴缴:开启注册资金实缴无忧新时代
  • Java基础——数组1
  • 关于做公司网站成都企业管理培训课程
  • 新开传奇手游发布网站网站首页设计多少钱
  • 设计企业门户网站org是国外的网站吗
  • ACL 2025论文分享|一种同时支持文字、语音、草图、艺术图和低分辨率图等多模态内容检索的新框架Uni-Retrieval