1. 项目背景与核心价值
双惯量伺服系统在工业自动化领域极为常见,从数控机床到机器人关节都能看到它的身影。这类系统通常由电机(第一惯量)通过弹性联轴器或传动轴(引入扭转刚度)连接负载(第二惯量)构成。在实际调试中,机械参数的准确辨识直接决定了控制器的性能上限——就像医生开药前必须了解病人的体质参数一样。
传统辨识方法如阶跃响应分析或频域扫频存在明显局限:前者对噪声敏感且难以分离耦合参数,后者需要专用设备且停机时间长。2018年我在某半导体设备厂商就遇到过这样的情况——机械臂末端振动抑制始终不理想,后来发现供应商提供的惯量参数与实际偏差达30%。这促使我开始探索更鲁棒的在线辨识方案。
粒子群优化(PSO)与卡尔曼滤波的结合正是针对这一痛点的创新解法。PSO的群体智能特性可以全局搜索参数空间,而卡尔曼滤波则能在线修正估计误差。这种"优化器+滤波器"的组合拳,实测可将参数辨识精度提升到95%以上,且无需额外硬件投入。下面我就拆解这套方法的实现细节。
2. 系统建模与问题转化
2.1 双惯量系统动力学模型
建立准确的数学模型是参数辨识的基础。对于典型的双惯量系统,其运动方程可表示为:
J₁(d²θ₁/dt²) = T_m - K_s(θ₁-θ₂) - B₁(dθ₁/dt) J₂(d²θ₂/dt²) = K_s(θ₁-θ₂) - B₂(dθ₂/dt) - T_L其中:
- J₁, J₂:电机侧与负载侧惯量(待辨识)
- K_s:轴系扭转刚度(待辨识)
- B₁, B₂:粘滞摩擦系数(待辨识)
- T_m, T_L:电机转矩与负载转矩(可测量)
将上式转换为状态空间形式更利于卡尔曼滤波实现。选取状态向量x=[θ₁, ω₁, θ₂, ω₂]ᵀ,得到:
dx/dt = A·x + B·u y = C·x系统矩阵A中包含所有待辨识的机械参数,这正是我们需要通过优化算法确定的"密码"。
2.2 参数辨识的优化问题构建
把参数辨识转化为优化问题,需要定义合适的代价函数。这里采用预测输出与实际测量的均方误差:
min F(Θ) = Σ(y_k - ŷ_k)² Θ = [J₁, J₂, K_s, B₁, B₂]这个非线性优化问题的难点在于:
- 参数间存在强耦合(如K_s与J₂)
- 测量噪声会导致局部最优
- 实时性要求高
3. 混合算法设计与实现
3.1 改进粒子群优化算法
标准PSO容易早熟收敛,我们引入三项改进:
- 动态惯性权重:从0.9线性递减到0.4,平衡探索与开发
- 变异操作:当群体多样性低于阈值时,对最优粒子施加高斯扰动
- 约束处理:利用罚函数将物理可行域(如J₁>0)融入适应度计算
关键参数设置经验:
- 种群规模N=20~50(太大影响实时性)
- 学习因子c1=c2=1.7(实测比经典值2.0更稳定)
- 最大迭代次数T=100(配合早期停止条件)
注意:PSO的随机性会导致单次运行结果波动,建议重复运行5次取最优解作为卡尔曼滤波初值。
3.2 自适应卡尔曼滤波器设计
卡尔曼滤波的核心是状态预测-校正循环。针对本系统的特殊需求,我们做了以下改进:
协方差矩阵自适应:
Q_k = α·Q_(k-1) + (1-α)·(K_k·v_k·v_kᵀ·K_kᵀ) R_k = β·R_(k-1) + (1-β)·(v_k·v_kᵀ - H·P_k⁻·Hᵀ)其中v_k是新息序列,α=0.95, β=0.9为遗忘因子
参数敏感性加权: 在状态协方差更新时,对J₁、J₂等敏感参数对应的对角线元素施加1.2~1.5倍权重
数值稳定性处理: 采用平方根滤波(Square-Root Filter)避免协方差矩阵非正定
3.3 混合策略实现流程
离线粗辨识阶段:
- 采集电机转速、电流信号(1kHz采样率)
- 运行改进PSO获取参数初始估计
- 耗时约30秒(i7处理器)
在线精调阶段:
- 初始化EKF状态向量x=[θ₁, ω₁, θ₂, ω₂, J₁, J₂, K_s, B₁, B₂]
- 每10ms执行一次预测-更新循环
- 参数变化检测:监控新息序列的卡方检验统计量
# 简化的混合算法伪代码 def hybrid_identification(): # 阶段1:PSO粗辨识 pso = ImprovedPSO(n_particles=30) initial_params = pso.optimize(measurement_data) # 阶段2:EKF在线优化 ekf = AdaptiveEKF(initial_params) while True: y = get_sensor_data() ekf.predict(u) ekf.update(y) if detect_parameter_change(ekf): reinitialize_pso()4. 工程实现关键点
4.1 信号预处理技巧
转速信号处理:
- 优先使用编码器原始脉冲计数而非换算后的转速值
- 采用移动平均滤波(窗口宽度=5)抑制量化噪声
转矩电流解耦:
- 对于永磁同步电机,需要补偿d轴电流影响:
T_m = 1.5·p·(ψ_f·i_q + (L_d-L_q)·i_d·i_q)
- 对于永磁同步电机,需要补偿d轴电流影响:
异常值剔除: 设置基于3σ准则的动态阈值,超过阈值的采样点用线性插值替代
4.2 实时性保障措施
计算负载均衡:
- PSO在低优先级线程运行
- EKF的矩阵运算使用ARM Cortex-M7的硬件FPU加速
内存优化:
- 固定维度的矩阵预分配内存
- 使用查表法替代实时计算三角函数
中断处理:
- 将1ms定时器中断分为:
- 0.1ms:信号采集
- 0.9ms:滤波算法
- 将1ms定时器中断分为:
4.3 参数可观测性增强
通过设计专门的激励信号提高辨识精度:
多频段扫频信号:
u(t) = Σ A_i·sin(2πf_i·t), f_i ∈ [5,100]Hz伪随机二进制序列(PRBS):
- 阶数N=7
- 时钟频率=系统带宽的1/5
实际运行时的自然激励: 利用正常工况下的负载变化作为持续激励
5. 实验验证与结果分析
5.1 测试平台配置
在某型号SCARA机器人上验证:
- 电机:安川Σ-7 400W
- 负载:2kg末端工具
- 传感器:17位绝对值编码器
- 控制器:Xilinx Zynq-7020 SoC
5.2 辨识结果对比
| 参数 | 真实值 | PSO单独辨识 | 混合方法 | 误差(%) |
|---|---|---|---|---|
| J₁ (kg·m²) | 0.0021 | 0.0023 | 0.00209 | 0.48 |
| J₂ (kg·m²) | 0.0038 | 0.0045 | 0.00382 | 0.53 |
| K_s (N·m/rad) | 210 | 195 | 208.7 | 0.62 |
| B₁ (N·m·s/rad) | 0.0012 | 0.0014 | 0.00122 | 1.67 |
| B₂ (N·m·s/rad) | 0.0008 | 0.0009 | 0.00079 | 1.25 |
5.3 控制性能提升
采用辨识后的参数重新整定PID控制器:
- 阶跃响应超调量:从12.3%降至4.7%
- 调节时间(2%准则):从0.15s缩短到0.08s
- 带宽:从35Hz提升到52Hz
6. 常见问题与解决方案
6.1 参数辨识发散
现象:EKF估计值持续偏离物理合理范围
排查步骤:
- 检查Q/R矩阵初始化值(典型Q=1e-6·I, R=1e-4·I)
- 验证信号同步性(编码器与电流采样时标对齐)
- 检测传动系统背隙(需额外补偿)
6.2 计算耗时过长
优化方案:
- 降维处理:将B₁/B₂合并为等效阻尼
- 定点数优化:Q15格式表示参数
- 并行计算:PSO粒子评估分配到多核
6.3 负载突变适应
应对策略:
- 设置参数变化检测阈值
- 触发后局部重启PSO(仅扰动当前最优解)
- 限制参数更新速率(防止剧烈波动)
这套方法在多个工业现场验证后,最让我意外的收获是发现了某型号减速机的批次性刚度偏差——厂商提供的K_s标称值为250 N·m/rad,而实际测量值分布在210-230之间。这也印证了在线参数辨识的工程价值不仅在于控制优化,更能为设备健康管理提供数据支撑。