You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

13kg级两轮自平衡机器人抗扰LQR控制器优化设计问询:解决外力扰动下无前后漂移的平衡与停止问题

嘿,我太懂你这种“能站稳但飘不停”的头疼了——我之前做12kg的自平衡机器人时也踩过一模一样的坑!咱们一步步拆解问题,给你捋清楚最优的解决思路:

核心问题根源

你的纯LQR目前只解决了姿态平衡(theta稳定),但完全没约束位置/速度的稳态误差。两轮自平衡机器人是欠驱动系统,x和theta强耦合,再加上外力扰动、地面摩擦这类未建模因素,纯状态反馈的LQR根本没法消除位置漂移的稳态误差——这就是为什么机器人能站稳,但会一直前后滑。

针对你的两个方案的分析

方案1:全零参考+整定K

你纠结的x和theta增益符号问题,本质是系统的耦合特性:

  • 假设theta定义为前倾为正,当机器人向前漂移(x变大),需要让机器人前倾(theta正),这样轮子会向后转动拉回位置;而当机器人前倾(theta正),控制器需要让轮子向前转维持平衡。所以LQR增益里,x和theta的系数符号应该相反。

但只靠整定纯LQR的K很难解决漂移:如果把x的权重拉得极高,虽然能抑制漂移,但会牺牲平衡的鲁棒性(被踢后容易翻);权重太低又挡不住漂移。而且纯状态反馈天生没法消除稳态误差,外力扰动后必然会有位置偏移。

方案2:启发式规则+LQR

你用的“x_dot向前则theta向后倾”规则,本质是试图用前馈修正位置,但这个规则太粗暴了——它和LQR的反馈回路直接冲突,导致系统动态响应混乱,被踢后自然会振荡跌倒。这种独立于反馈的启发式,除非做非常精细的动态匹配,否则只会添乱。

最优解决方案:带积分的LQR(ILQR)

不用纠结复杂启发式,也不用死磕纯LQR的参数,给LQR加入针对位置x的积分环节是解决这个问题的标准且高效的方案:

具体怎么做?

  1. 构建增广状态空间模型
    原状态向量是 [x, x_dot, theta, theta_dot],加入积分状态 xi = ∫(x - x_ref)dt(x_ref设为0即可),那么xi的导数就是 x - x_ref。把这个增广后的状态(共5维)代入原机器人动力学方程,得到新的状态矩阵A和输入矩阵B。

  2. 重新设计LQR权重Q和R
    在Q矩阵里给积分状态xi设置合适的权重:

    • 先把xi的权重设为x权重的1/10~1/5,避免积分项太激进导致振荡;
    • 同时适当提高x_dot的权重,让控制器更关注速度的稳定。
  3. 计算增广系统的LQR增益
    用MATLAB的lqr函数计算新的增益K,这时候K会包含对应xi的项——这就是积分控制器的增益,能自动消除位置的稳态误差。

为什么这招管用?

当机器人被踢后,x会偏离0点,积分项xi会持续累积,直到控制器输出足够的力矩:先通过调整theta维持平衡,同时慢慢把x_dot降到0,最终让机器人停止移动,不会再持续漂移。

备选方案:改进型启发式(如果不想用积分)

如果实在不想改状态模型,也可以优化启发式规则,但要和LQR融合而不是独立:

  • 不要直接硬设theta的参考值,而是微调theta参考:theta_ref = -k * x_dot,其中k是很小的比例系数(比如0.01~0.05)。这样当x_dot向前,theta_ref稍微向后倾,让轮子产生平滑的反向加速度,不会和LQR的反馈冲突;
  • 同时在纯LQR的Q矩阵里大幅提高x和x_dot的权重,让控制器更关注位置和速度的稳定。
总结

优先选带x积分的ILQR,这是解决自平衡机器人漂移+抗扰动问题的工业级方案,比整定纯LQR参数或者折腾复杂启发式靠谱得多。亲测我当年用这个方案后,机器人被踢后能在2~3秒内站稳并停止漂移,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Luca Mannini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 00:47:33