刚性机器人机械臂的控制一直是工业自动化领域的核心课题。传统PID控制虽然结构简单,但在应对非线性、强耦合的机械臂动力学特性时往往表现不佳。我在参与某汽车生产线改造项目时,就遇到过机械臂末端轨迹跟踪精度不足的问题——当负载变化超过30%时,传统控制器的跟踪误差会突然增大到2mm以上,严重影响焊接质量。
自适应终端滑模控制(ATSMC)正是为解决这类问题而生的先进控制策略。它融合了三种关键技术优势:
考虑如图所示的平面旋转关节机械臂,其动力学方程可表示为:
matlab复制M(q)q'' + C(q,q')q' + G(q) = τ + τ_d
其中:
q = [θ1; θ2] 为关节角向量M(q) 是2×2惯性矩阵,包含耦合项C(q,q') 表示科里奥利力和向心力矩阵G(q) 为重力项向量τ 是控制力矩输入τ_d 代表外部扰动实际建模时需注意:当机械臂处于奇异位形(如完全伸展)时,惯性矩阵会接近奇异,此时需要特殊处理。
我们需要设计控制律τ,使得关节角度q能精确跟踪期望轨迹q_d,即使存在:
传统滑模控制虽然鲁棒,但存在两个突出问题:
创新性地采用快速终端滑模面:
matlab复制s = e' + K1*e + K2*sig(e)^(p/q)
其中:
e = q - q_d 是跟踪误差sig(e)^α = [|e1|^α*sign(e1); |e2|^α*sign(e2)]1 < p/q < 2 确保有限时间收敛参数选择经验:
K1主导常规误差收敛速度,建议初值取5~10K2影响终端吸引强度,建议0.5~2p=5, q=3 在多数场景表现良好为解决增益过估计问题,采用以下自适应律:
matlab复制η_hat' = γ * ||s|| * (1 - σ*η_hat)
其中:
η_hat是扰动上界估计值γ=0.5为学习率(调参关键!)σ=0.01防止估计值无限增大实测发现:σ取值过大会导致估计值响应迟缓,建议保持在0.001~0.1范围
综合得到无抖振控制律:
matlab复制τ = -M(q)(q_d'' - K1e' - K2(p/q)diag(|e|^(p/q-1))e')
- C(q,q')q' - G(q) - (η_hat + κ)*sat(s/Φ)
关键改进:
saturate()代替sign()函数Φ=0.05平衡精度与平滑度κ=1.2为安全裕度系数matlab复制% 参数初始化
p = 5; q = 3;
K1 = diag([8,8]); K2 = diag([1.5,1.5]);
gamma = 0.5; sigma = 0.01; phi = 0.05;
% 轨迹规划
t = 0:0.001:10;
qd = [sin(t); cos(t)]; % 期望轨迹
% 自适应器初始化
eta_hat = 0;
for k = 1:length(t)-1
% 计算滑模变量
e = q(:,k) - qd(:,k);
e_dot = q_dot(:,k) - qd_dot(:,k);
s = e_dot + K1*e + K2*sig(e,p/q);
% 更新自适应参数
eta_hat_dot = gamma*norm(s)*(1-sigma*eta_hat);
eta_hat = eta_hat + eta_hat_dot*dt;
% 计算控制力矩
tau = compute_control_torque(q(:,k), q_dot(:,k), eta_hat);
% 动力学仿真
[q(:,k+1), q_dot(:,k+1)] = dynamics_update(tau);
end
matlab复制function s = sig(x,alpha)
s = abs(x).^alpha .* sign(x);
end
function tau = compute_control_torque(q, q_dot, eta_hat)
% 获取模型参数
[M, C, G] = get_dynamics(q, q_dot);
% 期望加速度计算
qd_ddot = -cos(t(k)); % 示例轨迹二阶导
% 滑模控制项
sat_val = min(max(s/phi, -1), 1);
tau = -M*(qd_ddot - K1*e_dot - K2*(p/q)*diag(abs(e).^(p/q-1))*e_dot)...
- C*q_dot - G - (eta_hat+1.2)*sat_val;
end
| 指标 | PID控制 | 常规SMC | ATSMC(本方案) |
|---|---|---|---|
| 稳态误差(°) | 0.35 | 0.12 | 0.02 |
| 调节时间(s) | 1.2 | 0.8 | 0.4 |
| 抗扰动能力 | 差 | 良 | 优 |
| 控制输入抖动 | 无 | 严重 | 轻微 |
场景1:负载突变
场景2:轨迹突变
边界层厚度Φ:
自适应学习率γ:
matlab复制gamma = 2/(1+exp(-norm(e)))-1; % 误差大时增大学习率
M(q)、C(q,q')的解析式,建立参数查找表matlab复制q_dot_filt = filtfilt(b,a,q_dot_raw);
e_dot = q_dot_filt - qd_dot;
在实际项目中,我发现将ATSMC与阻抗控制结合特别适合需要接触力的场景——比如在装配手机电池时,既能保证位置精度,又能将接触力控制在±0.2N范围内。这需要精心调节滑模面的收敛速度,使其略慢于力环的响应速度。