← 全部文章

参数辨识方法论:台架标定经验如何迁移到机器人关节

2026-08-30参数辨识 · 系统辨识 · 最小二乘 · MTPA · 机器人 · 数据驱动

开篇:先划清”我做过”和”我在学”的边界

如果问 4 年台架标定给我留下的最可迁移的能力,我的答案是参数辨识——把”被控对象长什么样”这件事,用实验数据回答清楚。但写这篇笔记前,我要先诚实划一条线:

这条边界我必须讲清楚:面试官追问”这个你实际用过吗”时,不能虚标。本文按这个边界组织:先讲我的实践(查表拟合 MAP),再讲方法论工具箱(面试必考),最后讲迁移。

1. 参数辨识的本质:一个”建模 → 实验 → 修正”的循环

不管哪种方法,本质都是同一个循环:

建模选模型结构激励设计实验采集拿数据拟合解参数验证残差/交叉验证闭环放进控制器看效果\underbrace{\text{建模}}_{\text{选模型结构}} \rightarrow \underbrace{\text{激励}}_{\text{设计实验}} \rightarrow \underbrace{\text{采集}}_{\text{拿数据}} \rightarrow \underbrace{\text{拟合}}_{\text{解参数}} \rightarrow \underbrace{\text{验证}}_{\text{残差/交叉验证}} \rightarrow \underbrace{\text{闭环}}_{\text{放进控制器看效果}}

辨识的成败 80% 在前两步:模型结构选错、激励设计不好,再好的算法也白搭。这是我在台架上最深的体会。

2. 我的实践:台架扫点 → 查表拟合 MAP

2.1 我在台架上实际做的

我 4 年标定工作里最常用的辨识形态,是设计工况矩阵 → 台架扫点 → 查表/拟合生成 MAP

这三张表本质都是”用实测数据把电机的非线性特性装进表里”——它比纯解析公式更准,因为实测数据天然包含磁路饱和、温度漂移等一切模型说不清的非线性(相关实现见《从 INCA flow 到 Python》,我把它自动化了)。

2.2 为什么”查表”也是一种辨识

有人会觉得查表”不算算法”。我的理解是:查表是把”被控对象的非线性静态特性”离散化辨识出来,它和最小二乘拟合本质是一件事的两个实现——一个存成表、一个存成系数,区别只在内存/精度/外推能力的权衡。我在《前馈控制》里讲过的那次主导改进(MTPA 前馈从公式拟合改为查表插值)就是例证:公式拟合在外推区误差放大,查表用实测数据兜住非线性

3. 方法论工具箱(我在补课掌握)

3.1 阶跃响应法:最快的粗辨识

给系统一个阶跃,从响应曲线直接读出增益与时间常数。一阶对象 G(s)=Kτs+1G(s) = \dfrac{K}{\tau s + 1} 的阶跃响应:

y(t)=KΔu(1et/τ)y(t) = K \cdot \Delta u \cdot \left(1 - e^{-t/\tau}\right)

工程速读:t=τt = \tau 时达到稳态的 63.2%;t=3τt = 3\tau 时约 95%。用这两个点就能反推 KKτ\tau

def fit_first_order(t, y, u_step):
    """从阶跃响应拟合 K 和 τ(用 63.2% 法则)"""
    K = (y[-1] - y[0]) / u_step          # 稳态增益
    target = y[0] + 0.632 * (y[-1] - y[0])
    i = next(i for i, v in enumerate(y) if v >= target)
    tau = t[i] - t[0]                    # 到达 63.2% 的时间 ≈ τ
    return K, tau

局限:只能得到低阶近似、抗噪一般——适合初值估计和”这系统大概什么量级”的判断。

3.2 最小二乘:最通用的回归框架

把系统写成回归形式 yk=ϕkTθy_k = \phi_k^{T} \theta,离线批量解(最小化残差平方和 YΦθ2\|Y - \Phi\theta\|^2):

θ^=(ΦTΦ)1ΦTY\hat{\theta} = (\Phi^{T} \Phi)^{-1} \Phi^{T} Y

在线场景用递推最小二乘(RLS),每来一个数据点更新一次:

θ^k=θ^k1+Kkεk,Kk=Pk1ϕkλ+ϕkTPk1ϕk\hat{\theta}_k = \hat{\theta}_{k-1} + K_k \varepsilon_k, \qquad K_k = \frac{P_{k-1} \phi_k}{\lambda + \phi_k^{T} P_{k-1} \phi_k}

其中 εk=ykϕkTθ^k1\varepsilon_k = y_k - \phi_k^{T} \hat{\theta}_{k-1} 是预测残差,λ\lambda 是遗忘因子(越小越”健忘”,适合时变参数):

import numpy as np

def rls_step(theta, P, phi, y, lam=0.98):
    eps = y - phi @ theta                  # 预测残差
    K = P @ phi / (lam + phi @ P @ phi)    # 增益
    theta = theta + K * eps                # 参数更新
    P = (P - np.outer(K, phi) @ P) / lam   # 协方差更新
    return theta, P

容易踩的坑(面试加分点):ΦTΦ\Phi^{T}\Phi 病态(激励不充分/共线)时结果爆炸——所以激励设计比算法本身更重要;遗忘因子太小参数抖得厉害。

3.3 扫频辨识:频域视角

用正弦扫频激励对象,对输入输出做 FFT 得到 Bode 图,直接读出谐振峰、带宽、相位滞后。台架上定位”某转速段振动”这类问题时,扫频是利器;机器人上做关节柔性与结构共振分析同样靠它。频响 H(jω)=Y(jω)U(jω)H(j\omega) = \dfrac{Y(j\omega)}{U(j\omega)},用互功率谱估计更抗噪。

4. 完整辨识流程(六步,可复用)

① 建模 ② 激励设计 ③ 数据采集 ④ 拟合参数 ⑤ 交叉验证 ⑥ 闭环回归 ⑤ 不过关 → 回到 ①/② 检查模型结构与激励;残差分析是判断"模型结构对不对"的关键 关键纪律:验证必须用「没参与拟合的数据」(交叉验证),不能自欺欺人

5. 迁移到机器人关节

要辨识的参数台架对应物机器人对应实验
转动惯量 JJ电驱惯量(加减速法)关节正反转加减速,从角加速度与力矩反解
摩擦模型 τc,b\tau_c, b摩擦补偿前馈标定恒速运行测力矩-转速曲线,拟合库仑 + 粘滞
反电动势/力矩常数 KtK_t反电动势测试空载恒速测母线电压,或力矩-电流标定
延时与带宽电流环带宽整定频率响应测试(扫频)

关节伺服和电驱一样,惯量/摩擦/力矩常数是前馈和整定的地基——参数不准,重力补偿和惯性前馈全是错的(见《前馈控制》迁移部分)。

6. 与”电控 × AI”的接口

参数辨识天然是数据驱动的,这正是我理解的”电控 × AI”落点:参数自学习 / 自整定——用在线辨识(RLS 这类)让控制器参数随工况自适应。对应易控智驾 JD 原话:“控制参数自学习算法探索落地”。我的自动化标定平台(《从 INCA flow 到 Python》)已经把”数据采集 → 判定 → 迭代”流水线化,下一步就是把辨识算法接进这条流水线——离线查表 → 在线辨识,这是我明确的补课方向。

相关项目