资讯详情

平衡小车动力学建模全解析:从受力分析到状态空间与控制器设计

📅 2026/9/16 6:21:10 | 华诺云谱 👁 阅读
平衡小车动力学建模全解析:从受力分析到状态空间与控制器设计
搞平衡小车的人十有八九都会在“站起来”这件事上栽跟头电机选好了PID调了三天轮子疯狂抖动或者直接趴窝。很多人第一反应是继续调参数但我做了这么多年控制和机器人项目可以负责任地说——参数调不出来往往不是在调参环节出了问题而是从一开始就没有动力学模型。平衡小车本质上是一个移动倒立摆系统它的不稳定特性、控制周期要求、电机力矩需求全部由动力学方程决定。这篇文章就围绕“平衡小车动力学建模”这条主线把从受力分析、方程推导、线性化到状态空间的完整过程讲透并给出仿真验证和实车落地的避坑经验。适合刚接触自平衡机器人、倒立摆控制或者想从“盲调PID”进阶到“按模型设计控制器”的读者。1. 为什么做平衡小车先要写动力学方程1.1 不建模也能调平衡但走不远我先说句实话只用PID盲调某些情况下确实能让小车站起来。电机扭矩足、编码器分辨率高、控制周期短这三个条件只要够好哪怕模型完全不管也能通过经验调出能站的参数。这也是很多新手在淘宝套件上能跑通demo的原因。但问题在于这种“能站”非常脆弱。换一块电池电压变了站不住了地面从瓷砖变成地毯站不住了加了一个传感器或者改了重心高度又站不住了。我见过不少人把PID参数调成一套“神奇组合”换环境就废然后开始怀疑硬件甚至怀疑人生。真正的原因是你对系统没有数学描述也就不知道每一个参数变化会产生什么影响。动力学建模解决的就是这件事——把“小车为什么倒、要多大扭矩才能扶正、什么控制周期才能稳住”这些问题全部变成可以计算的表达式。有了模型之后控制器设计、参数整定、硬件选型、稳定性分析都有了依据。1.2 建模能让你少走哪些弯路动力学模型对系统的影响我把它展开说三条。第一条确定控制周期。平衡小车是一个典型的开环不稳定系统倒下的时间常数通常在0.3到1秒之间。模型算出来你才知道系统到底需要50Hz还是500Hz的控制频率。控制周期不够快模型再漂亮也没用物理上就忍不住。第二条指导电机选型。建模之后可以从力平衡方程反推出保持平衡所需的最大扭矩再乘以安全系数。很多DIY套装站不起来核心原因就是电机扭矩不够而扭矩估算必须依赖动力学模型靠感觉很难判断。第三条决定控制策略。如果用LQR这类基于状态空间的现代控制方法模型本身就是控制器设计的核心输入没有精确模型就不可能算出合理的反馈增益矩阵。即便是用PID模型也能告诉你怎么拆分角度环和速度环的带宽避免两个环路互相打架。2. 建模前的准备系统拆解与方法选型2.1 平衡小车的系统组成在动笔推导之前必须先把研究对象定义清楚。我按标准的两轮自平衡小车来建模它的物理组成如下车体包含底盘、电池、主控板、传感器建模时统一简化为刚性摆杆左右轮两个独立驱动轮建模时简化为一个等效轮驱动电机带减速箱的直流电机输出扭矩到车轮姿态传感器通常是IMU惯性测量单元输出角度和角速度建模时有一个关键简化——两轮小车的左右运动是完全对称的所以可以把它从三维空间简化到二维平面只在前进方向分析。这时系统就变成了一个经典的“轮式倒立摆”结构一个质量为M的轮子承载着一根长度为l、质量为m的摆杆。这里要提醒一点简化不能过度。很多人把摆杆质量直接忽略掉这在理论题里没问题但实车上摆杆车体质量往往远大于轮子质量忽略掉会导致模型严重失真。正确的做法是如果追求简单可以把轮子简化为纯滚动体但车体质量必须保留。2.2 牛顿-欧拉法和拉格朗日法怎么选建模方法主要有两条路线各有适用场景。牛顿-欧拉法核心思路是把每个刚体单独拿出来做受力分析列力平衡和力矩平衡方程然后通过相互作用力把各个刚体耦合起来。优点是物理意义直观每个力的来源都清清楚楚缺点是系统复杂时方程数量爆炸为了消去内部约束力要做大量代数运算。拉格朗日法核心思路是把系统看成一个整体只用广义坐标描述运动状态通过动能和势能建立拉格朗日函数再带入拉格朗日方程。优点是不需要考虑内部约束力方程数量少、推导过程机械化缺点是对抽象能力要求高物理直觉不强的初学者容易推着推着就晕了。对比项牛顿-欧拉法拉格朗日法物理直观性强每步受力清楚弱偏数学抽象方程数量多需要消去约束力少直接得到运动方程推导出错率高符号多容易乱低流程固定适合场景简单系统、想理解物理本质复杂多刚体系统以平衡小车为例两个自由度轮子转角、摆杆倾角两三个刚体牛顿-欧拉法完全能拿下。我个人建议初学者先走牛顿-欧拉法把这个过程的每个力都想明白对后续理解控制器非常有帮助。等到以后做四足机器人、机械臂这类多体系统时再转用拉格朗日法。2.3 建模假设哪些能忽略哪些不能忽略仿真和现实之间的差距全部来自建模假设。假设太多模型干净但没用假设太少模型精确但复杂到无法推导。我按照平衡小车的特点给出我的假设清单可以忽略轮子与地面之间的滑动假设纯滚动空气阻力电机电感动态电气时间常数远小于机械时间常数传动齿轮间隙和弹性变形不能忽略摆杆车体的转动惯量车轮的质量和转动惯量电机转子的等效转动惯量这个非常关键减速箱会把转子惯量放大到车轮上电机反电动势和电枢电阻的阻尼效应静摩擦和库仑摩擦在控制精度要求高时特别说一下转子惯量这个问题。直流电机经过减速箱后等效到输出轴的转动惯量是原转子惯量乘以减速比的平方。举个例子减速比30的电机转子惯量1g·cm²等效到输出轴就是900g·cm²这个数值已经和车轮本身的惯量相当甚至更大。忽略它模型给出的系统响应会明显偏乐观。3. 核心推导从受力分析到状态空间方程3.1 系统的物理参数定义在正式开始推导之前把所有用到的符号统一列出来后面所有公式都基于这套符号。参数含义单位M车轮质量含电机转子等效到轮上的部分kgm车体摆杆质量kgl车体质心到轮轴的距离mI车体绕质心的转动惯量kg·m²J车轮绕轴心的转动惯量kg·m²r车轮半径mb电机及传动系统的等效粘性摩擦系数N·m·s/radx小车位移水平方向mθ车体相对竖直方向的倾角radF车轮驱动力N这里把“车体质心到轮轴的距离”用l表示而不是惯常的“摆杆长度”因为实际车体的质心位置不一定在几何中心需要实测。建模时用质心参数会让结果更接近真实。3.2 平动方程轮子与车体的力平衡先分析水平方向的受力。车轮受到的水平力有两个来源电机通过传动系统施加的驱动力F以及车体通过转轴作用在车轮上的水平反力H。轮子沿水平方向的力平衡方程为M·ẍ F - H这个式子本身很简单关键在于H怎么求。H是车体对车轮的水平反作用力大小等于车轮对车体的水平推力方向相反。所以接下来分析车体。车体摆杆在水平方向除了受到转轴处的水平力H以外还受到惯性力。车体质心的水平加速度可以分解为两部分随轮轴一起平动的加速度ẍ以及绕轮轴转动产生的水平加速度分量。质心相对轮轴的位置可以用( l·sinθ, l·cosθ )来描述以竖直向上为角度零点那么质心的水平位置是x_c x l·sinθ对时间求两次导数ẍ_c ẍ l·θ̈·cosθ - l·θ̇²·sinθ这后面一项 -l·θ̇²·sinθ是向心加速度很多初版推导里面会漏掉但它在高速摆动时足够大不能省。车体的水平运动方程m·ẍ_c H代进去H m·(ẍ l·θ̈·cosθ - l·θ̇²·sinθ)再代回车轮的力平衡方程M·ẍ F - m·(ẍ l·θ̈·cosθ - l·θ̇²·sinθ)整理一下(M m)·ẍ m·l·θ̈·cosθ - m·l·θ̇²·sinθ F这就是系统的第一个运动方程——平动方程。3.3 转动方程车体绕轮轴的力矩平衡接下来分析车体的转动。选择轮轴作为参考点可以避开转轴处的约束力。但这个参考点不是质心也不是固定点所以在列力矩方程时需要考虑惯性力的贡献。更好的做法是直接用车体质心的转动方程把车体绕质心的转动写出来I·θ̈ Στ绕质心作用在车体上的力矩包括重力产生的恢复力矩方向是让车体倒下、转轴处水平力H相对于质心产生的力矩、以及惯性力产生的力矩。为了避免推导中出现混乱我这里采用拉格朗日法的思路来校验牛顿-欧拉法的结果也顺便展示两条路径最终收敛到一致方程的过程。系统动能包括平动动能和转动动能。设y方向为竖直方向车体质心的竖直位置为y_c l·cosθ竖直速度为求导结果ẏ_c -l·θ̇·sinθ系统总动能为T (1/2)·M·ẋ² (1/2)·J·(ẋ/r)² (1/2)·m·(ẍ_c² ẏ_c²) (1/2)·I·θ̇²注意这里车轮动能里包含了一个由滚动约束引入的项即车轮绕自身轴的转动动能所以用J和轮子半径r转速为ẋ/r。势能只有车体重力势能V m·g·l·cosθ拉格朗日函数L T - V分别对广义坐标x和θ列拉格朗日方程对于xd/dt(∂L/∂ẋ) - ∂L/∂x F代入之后得到的结果与我前面牛顿-欧拉推导的平动方程完全一致(M m J/r²)·ẍ m·l·θ̈·cosθ - m·l·θ̇²·sinθ F多了一个J/r²项这是车轮转动惯量参与平动的等效质量项。如果你只把车轮当纯滑动块处理就丢掉了这一项。对于θd/dt(∂L/∂θ̇) - ∂L/∂θ 0无外部力矩直接作用在θ上展开后(I m·l²)·θ̈ m·l·ẍ·cosθ - m·g·l·sinθ 0这就是第二个运动方程——车体转动方程。整体来看系统是一个强耦合的二阶非线性方程组。3.4 线性化小角度近似的重要性平衡小车工作的核心区域是“竖直附近”也就是θ很小的时候。这时候可以做小角度近似sinθ ≈ θ cosθ ≈ 1 θ̇² ≈ 0高阶小量直接舍弃把上面的非线性方程组简化平动方程变成(M m J/r²)·ẍ m·l·θ̈ F转动方程变成(I m·l²)·θ̈ m·l·ẍ - m·g·l·θ 0为了让读者清楚每个近似的含义我解释一下sinθ替换成θ是把非线性恢复力矩线性化cosθ替换成1是忽略倾斜对水平加速度耦合的影响θ̇²项丢弃是因为它在本模型中只起二阶修正作用在小角度摆动时贡献可以忽略。线性化后的方程有两个重要性质第一方程是线性的可以直接用线性控制理论工具箱来处理第二它在一个较宽的角度范围内仍然有不错的精度。实测下来当倾角在±15度以内时线性模型和非线性模型的输出差异很小完全够控制系统使用。3.5 状态空间表达式的导出控制器设计通常用状态空间形式所以要继续把二阶方程组改写成一阶状态空间方程。选择状态向量X [x, ẋ, θ, θ̇]ᵀ输入为U F输出为小车位移x和倾角θ。先把线性化方程组处理一下。由平动方程得到ẍ的表达式由转动方程消去θ̈项解出ẍ和θ̈。两式联立消去θ̈得ẍ [F - m·l·(m·g·l·θ)/(I m·l²)] / [M m J/r² - (m·l)²/(I m·l²)]为了简洁定义α M m J/r² β m·l γ I m·l²于是方程可以整理为α·ẍ β·θ̈ F β·ẍ γ·θ̈ β·g·θ解这个二元一次方程组ẍ (γ·F - β²·g·θ) / (α·γ - β²)θ̈ (α·β·g·θ - β·F) / (α·γ - β²)写成矩阵形式d/dt [x, ẋ, θ, θ̇]ᵀ A·[x, ẋ, θ, θ̇]ᵀ B·F其中A为4×4矩阵B为4×1列向量A [0, 1, 0, 0; 0, 0, -β²·g/(α·γ-β²), 0; 0, 0, 0, 1; 0, 0, α·β·g/(α·γ-β²), 0]B [0; γ/(α·γ-β²); 0; -β/(α·γ-β²)]这组矩阵方程就是平衡小车线性模型的核心。后面无论是分析能控性、能观性还是设计LQR控制器都要反复用到A和B矩阵。3.6 从状态空间到控制器设计的桥接有了状态空间模型可以先做一个有意思的分析——看看系统开环极点在哪里。系统的开环特征方程来自A矩阵的特征值。用一组典型参数代入算一下车体质量m1.2kg车轮等效质量加车体水平量α2.0kgβm·l其中l0.12mγ取0.05g取9.8。把A矩阵代入MATLAB的eig()函数会算出特征值大致为λ 0两个对应纯积分位置 λ ≈ 5.1正实部不稳定 λ ≈ -5.1负实部稳定正实部的根对应倾倒模态物理含义是如果没有控制力任何微小倾斜都会指数放大。算出根之后控制器设计的任务就很清晰了——把正实部的极点拉到左半平面同时保证响应速度和阻尼合适。这一步为后面大家常问的“PID参数怎么给”“LQR权重矩阵怎么定”提供了理论依据就不再是盲目试凑了。4. 参数识别与模型验证4.1 物理参数从哪来称重、摆测与辨识状态空间方程里的α、β、γ这些组合参数最终要还原到物理参数才能用于实车。参数来源有三个渠道第一个是直接测量。用车用电子秤称出车体质量和车轮质量用游标卡尺量轮径车体质心位置可以通过“把车体横放在一根细杆上找平衡点”的方式实测。这个方法粗糙但快出来的参数足够做仿真初稿。第二个是摆动实验。把车体固定在一个刀口支架上让它像单摆一样自由摆动记录摆动周期T用周期公式反推转动惯量。公式是I m·g·l·(T/2π)² - m·l²这个方法需要车体能自由摆动适合在正式装配前做。第三个是系统辨识。在车体上加已知的激励信号比如扫频正弦力矩记录编码器和IMU的输出用MATLAB的System Identification Toolbox或Python的sysidentpy拟合传递函数参数。这个方法最准但对工具链要求高适合做产品级项目时使用。实测经验我做过三次参数识别直接测量和摆动实验出来的参数误差在10%以内系统辨识出来的参数和理论值误差在3%以内。对于DIY项目直接测量加摆动实验就够了。4.2 摩擦与死区为什么理论模型在低速时不准标准动力学模型里没有摩擦项但实车电机减速箱、轴承、轮地接触都存在摩擦。摩擦的主要影响集中在两个地方第一个是静摩擦。小车在目标速度接近零的时候静摩擦会让车轮“卡住不动”直到力矩超过静摩擦阈值才开始运动。这是导致平衡小车低速漂移的元凶之一。第二个是库仑摩擦与速度方向相关大小近似恒定。它的影响是让系统出现稳态误差尤其在小角度平衡时控制器需要额外输出一个偏置力矩来克服摩擦。处理方式是在模型里加摩擦补偿项F_friction F_c·sign(ẋ) b·ẋ其中F_c是库仑摩擦系数b是粘性摩擦系数。前者用“逐渐加大力矩直到轮子刚好开始转动”的临界法标定后者可以在匀速转动时通过力矩除以角速度算出来。不过实车控制中多数人不会真的在模型里显式加摩擦项而是通过控制器里的积分项或者摩擦前馈来补偿。模型的摩擦项主要用于仿真阶段验证控制器的鲁棒性。4.3 模型验证的三种方法模型建完了怎么确认模型可信我按成本从低到高列三个方案。方案一仿真对比法。用Simulink或者Python搭建非线性模型给同样的阶跃或正弦输入把仿真输出的倾角响应和实测响应放在同一张图里对比。如果趋势一致、幅值误差在可接受范围内模型基本可靠。方案二频率响应法。给电机输入扫频信号同时记录倾角的频率响应用傅里叶变换提取幅值和相位和理论模型的Bode图对比。这个方案能全频段验证模型但需要示波器或者能记录同步数据的采集手段。方案三闭环行为验证。直接跑控制器记录闭环系统的极点位置或者响应的阻尼比和用模型设计的预期值对比。这个方法最接近实际但前提是控制器本身工作正常否则不容易区分是模型误差还是控制器问题。我个人的推荐路径先做方案一的时域对比拿到合理结果后再做方案二的频域对比。两步都过模型就可以放心用来设计LQR。5. 从模型到控制建模如何改变调参方式5.1 用PID时模型的价值在哪里很多人以为PID不需要模型这是误解。PID确实可以不依赖模型进行整定但有了模型PID整定可以从“猜”变“算”。以串级PID为例平衡小车通常采用外环角度环、内环角速度环或者位置环的结构。模型能告诉你的第一件事是内环应该比外环快多少。理论经验值是内环带宽是外环的3到5倍这样才能保证两个环路不会耦合振荡。这是用模型里的极点位置和响应时间常数推算出来的。模型能告诉你的第二件事是初始PID参数的估算值。以角度环P为例通过根轨迹分析可以算出使系统临界稳定的增益值然后取它的0.5到0.8倍作为初始值。相比从零开始盲目试这个方法至少能把调参时间缩短一半。5.2 用LQR时模型就是设计的基石LQR设计和PID最大的不同在于LQR的反馈增益矩阵K是通过解Riccati方程直接算出来的而这个方程的两个输入——系统矩阵A和输入矩阵B——全部来自模型。模型准K就准模型偏K就跟着偏。用LQR时需要设置的只有两个权重矩阵Q和R。Q对应状态偏差的惩罚R对应控制输入的惩罚。经验规则是角度误差的惩罚权重通常设得比位移误差大很多。因为角度稍微偏一点小车就会迅速倒下角度误差的“代价”远大于位移误差。控制输入的惩罚R不宜过小否则算出来的增益过大输出容易饱和实车会出现剧烈抖动。拿前面算出的A、B矩阵在MATLAB里用lqr(A, B, Q, R)一次就能得到K矩阵。实测效果比串级PID自然很多整定参数也就两个矩阵比调三四个PID系数省事多了。5.3 仿真到实车的落差距离模型再准仿真和实车之间也存在天然差距。我总结为三个“代沟”。第一个代沟是执行器延迟。仿真里力矩是即时输出的实车从指令到输出要经过PWM更新、电机响应、减速箱传动累计延迟可能达到10到20毫秒。这个延迟在仿真里不体现但在实车上是导致振荡和发散的重要因素。解决办法是在仿真链路里人为加一个一阶惯性环节模拟执行器延迟再把延迟逐步加大观察系统在多大延迟下开始失稳。第二个代沟是传感器延迟和噪声。仿真里角度是完美的实车IMU出来的角度带有滞后和噪声Kalman或互补滤波的相位延迟也会影响控制效果。建模时可以把测量方程里加白噪声测试控制器的鲁棒性边界。第三个代沟是离散化。模型是连续的控制器跑在单片机上必须是离散的。从连续模型到离散控制器要选择合适的离散化方法。零阶保持器法在常用控制频率下精度足够但如果控制频率低于系统带宽的10倍那就需要直接用离散状态空间模型设计控制器不能再用连续模型了。6. 常见问题与排查技巧实录6.1 模型仿真稳定实车振动不停这个问题出现的概率最高几乎每个人都会遇到。现象是仿真里LQR或者PID控制得丝般顺滑上实车就高频抖动幅度不大但明显能听到电机嗡嗡响。排查顺序先看控制频率。是不是低于1kHz多数主控跑串级PID加滤波实际控制频率可能只有200到500Hz高频抖动大概率是控制周期太长。再看传感器滤波。IMU的原始数据如果直接使用噪声能量大会通过微分项放大。观察角度微分信号的波形如果毛刺明显需要加强滤波或改用更高品质的传感器。最后检查电机。如果前两步没问题大概率是电机响应太快而阻尼太小模型里的粘性摩擦b值比实际小。试着在模型里加大b值重算LQR增益或者在实车上增加微分阻尼项的权重。6.2 模型参数不准LQR增益偏大导致饱和LQR算出来的增益如果过大实车会出现一个典型症状小车来回大幅摆动电机发热严重看起来像是控制器“抽搐”。原因通常是模型高估了执行器能力比如低估了摩擦、高估了电机减速箱效率。此时计算出的控制力矩远小于实际需要的力矩控制器会试图用很大的增益来弥补结果超出输出范围。处理方式有两种。第一种是把R权重加大让LQR自动降低增益好处是简单坏处是响应变慢。第二种是回过去修正模型参数重点检查电机扭矩常数和减速箱效率用实测堵转力矩除以额定电流算出来的扭矩常数通常比标称值低10%到20%。6.3 电量下降后系统性能明显退化平衡小车用电池供电电压变化对电机力矩常数几乎没有影响但影响PWM驱动占空比和力矩之间的换算关系。电压高的时候同样占空比对应的平均电压高力矩也大电压掉下来之后力矩不足系统就开始软。好的做法是把控制器的输出从“占空比”改成“期望力矩”再通过当前的电池电压实时换算成占空比。也就是在控制环路外面加一个电压前馈。这个操作完全不影响模型和控制器本身但实车效果提升非常明显。6.4 常见问题速查表故障现象可能原因排查方向高频抖动控制周期太长/传感器噪声提高频率、加强滤波低频振荡角度环增益过大或相位裕度不足降低P、增加微分项静止时漂移静摩擦未补偿加积分或摩擦前馈上电直接倒初始角度估计错误/电机方向反了检查IMU校准与电机极性一个方向能站另一个方向倒左右电机不对称分别标定左右电机参数调参时突然发散电池电压过低检查供电电压降压补偿6.5 调试工具推荐最后分享一个效率工具。调试平衡小车时强烈建议把状态数据通过无线串口或者蓝牙实时回传到电脑用开源的工具如PlotJuggler或者Serial Studio画波形。对比角度设定值、实际角度、控制输出这三条曲线很多问题一眼就能定位。依赖LED灯串口打印一个个数效率太低。我在实际调试中习惯把以下四个量作为固定监控项倾角、倾角速度、目标速度、PWM输出。只要这四个量波形正常控制器基本就稳了哪里不对看波形基本能猜个八九不离十。7. 我的一些个人体会平衡小车动力学建模这件事我做过不止一次。每次从受力分析开始到最后跑通都会有一些新的理解。第一次做的时候我以为模型的价值是“算出一个精确的公式”后来发现更重要是建模过程中迫使你把系统的每个环节都想清楚——电机、传感器、摩擦、延迟任何一个环节的疏忽都会在某个角落以某种形式报复你。最后分享一个小技巧建模不用一开始就追求完美。先把最简线性模型搭起来跑通控制器再用实验数据逐步修正模型。这个过程很像先画素描再上色比一开始就盯着所有细节要高效得多。等到你能从实验数据里看出“这像是阻尼偏小”或者“这个响应延迟太大了”的时候动力学建模就算是真正入门了。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。