1. 机械臂控制中的抖振问题本质
在二自由度机械臂的控制实践中,滑模控制(SMC)因其强鲁棒性而备受青睐,但实际部署时工程师们最常抱怨的就是令人头疼的抖振现象。这种高频振荡并非算法缺陷,而是滑模控制与生俱来的特性——当系统状态接近滑模面时,控制量会以极高频率在正负值间切换,这种不连续切换通过执行机构传递到机械臂本体,就表现为关节的持续微幅振动。
传统解决方案大致分为三类:边界层法(用饱和函数代替符号函数)、高阶滑模(通过积分平滑控制信号)和观测器补偿(估计并抵消未建模动态)。但这些方法要么牺牲鲁棒性,要么增加计算复杂度。我们这次尝试的分数阶滑模控制(FOSMC)配合自适应律,本质上是通过两个创新点来破局:
- 分数阶微积分引入的"历史依赖性"让控制量变化更平滑,相当于在时间维度上增加了滤波效果
- 在线调整的增益参数使切换项的幅度始终保持在刚好能抑制扰动的最小值
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动力学建模与问题表述
2.1 二自由度机械臂的标准模型
考虑如图所示的平面旋转关节机械臂,其动力学方程可表示为:
matlab复制M(q)q̈ + C(q,q̇)q̇ + G(q) = τ + τ_d
其中:
q = [q1; q2]为关节角位置向量M(q)为2×2正定惯性矩阵C(q,q̇)包含科氏力和离心力项G(q)为重力向量τ为控制力矩τ_d为外部扰动
在Simulink中建模时,我习惯将惯性矩阵的逆表示为:
matlab复制function Minv = computeInertiaInv(q2)
% 参数基于真实2DOF机械臂物理参数
m1=1.5; m2=1.0; l1=0.3; l2=0.25;
a = m2*l2^2 + (m1+m2)*l1^2 + 2*m2*l1*l2*cos(q2);
b = m2*l2^2 + m2*l1*l2*cos(q2);
c = m2*l2^2;
det = a*c - b^2;
Minv = [c, -b; -b, a]/det;
end
2.2 控制目标与挑战
给定期望轨迹q_d(t),设计控制律τ使得跟踪误差e=q-q_d在存在参数不确定性和扰动τ_d的情况下渐近收敛。传统滑模控制会采用:
matlab复制s = ė + Λe
τ = -K·sign(s)
这必然导致抖振。我们的改进方案将从分数阶滑模面和自适应增益两个维度重构这个框架。
3. 分数阶滑模控制器设计
3.1 分数阶微积分基础
采用Caputo定义的分数阶微分:
matlab复制D^α f(t) = 1/Γ(1-α) ∫_0^t (t-τ)^(-α) f'(τ) dτ
在离散实现时,我用的是Oustaloup递归近似法,其MATLAB核心代码如下:
matlab复制function out = frac_diff(u, alpha, Ts, wb, wh, N)
[b,a] = ousta(alpha,N,wb,wh);
out = filter(b,a,u)*Ts^-alpha;
end
3.2 新型滑模面设计
将传统滑模面推广到分数阶形式:
matlab复制s = D^α e + λD^(α-1)e + Λe
其中0<α<1为分数阶次。这个设计的关键在于:
- 当
α→1时退化为传统SMC - 当
α→0时接近纯比例控制 - 最优
α值通常通过粒子群优化确定
3.3 自适应律设计
为避免过保守的固定增益,采用自适应增益K(t):
matlab复制K̇ = γ|s| - σK
其中:
γ决定增益调整速度σ为防止增益无界增长的泄漏因子
最终控制律为:
matlab复制τ = -K(t)·sat(s/Φ) - f_hat
其中f_hat为扰动估计项,Φ为边界层厚度。
4. Simulink实现关键技巧
4.1 分数阶算子离散化
在Simulink中实现分数阶微分时,我推荐采用FOMCON工具箱的fotf对象。具体步骤:
- 在工作空间初始化分数阶传递函数:
matlab复制frac_diff = fotf([1], [1 0], 0.5);
- 在Simulink中使用
FOTF Block模块 - 设置仿真步长≤1ms以保证数值稳定性
4.2 自适应增益模块
用Embedded MATLAB Function实现自适应律:
matlab复制function K_out = adapt_gain(s, K_in, Ts, gamma, sigma)
K_out = K_in + Ts*(gamma*abs(s) - sigma*K_in);
end
4.3 抗饱和处理
在控制输出后添加速率限制器(Rate Limiter),将力矩变化率限制在电机允许范围内,这是实际部署时必不可少的保护措施。
5. 实测效果对比
在相同正弦轨迹跟踪任务下,我们对比三种方案:
| 指标 | 传统SMC | 边界层SMC | FOSMC(本文) |
|---|---|---|---|
| 最大跟踪误差(rad) | 0.021 | 0.035 | 0.018 |
| RMS抖振幅度(Nm) | 4.7 | 1.2 | 0.6 |
| 抗扰动恢复时间(s) | 0.8 | 1.5 | 0.5 |
实测数据表明,分数阶方案在保持强鲁棒性的同时,将抖振降低了87%。但需要注意:
分数阶微分器的相位滞后会随阶次α增大而加剧,建议通过前馈补偿或预测器来抵消
6. 参数整定经验分享
经过数十次实验,我总结出以下调参规律:
-
分数阶次α:
- 从0.5开始尝试
- 每步调整幅度≤0.1
- 最佳值通常在0.4~0.7之间
-
自适应增益参数:
- 初始γ=1e3, σ=1e2
- 观察增益收敛曲线:
- 若增益持续上升:增大σ
- 若响应太慢:增大γ
-
边界层厚度Φ:
- 先设为跟踪误差允许值的2倍
- 根据实际效果微调
调试时建议先关闭自适应功能,固定中等增益验证分数阶效果,再逐步启用自适应模块。
