第 2 章 执行器与刚体模型¶
控制回路的一半是对象。本章把"电机→减速器→关节"这条传递链压成控制器视角能使用的形态:电压到转速的一阶惯性、转矩到角度的近双积分、摩擦与死区、减速比带来的惯量折算与轴系谐振,以及 DS402 驱动器内置三环作为被控对象时的带宽分离要求。器件物理(磁场、齿槽转矩、回差成因)与选型判据归 hardware-note,本章只取"进了回路之后"的模型形态。运行环境 python 3.11 + control 0.10.2。
从电压到关节角度的传递链,以及控制器看到的三种非理想项:
flowchart LR
u["电压 u"] --> elec["电气一阶惯性<br/>→ 转速 ω"]
elec --> red["减速器<br/>惯量折算 N²、轴系谐振"]
red --> joint["关节:转矩到角度<br/>近双积分"]
fric["摩擦:黏滞项 + 库仑死区"] -.-> joint
joint --> obj["控制器视角的对象"]
1. 电压到转速:电气简化的一阶模型¶
直流/无刷电机电气时间常数 \(L_a/R\) 通常远小于机械时间常数,电流动态被合并掉之后,机电链路退化为一个增益加一个极点。机械方程 \(J\ddot q + b\dot q = \tau\)、转矩 \(\tau=K_t i\)、反电动势 \(e=K_e\dot q\)、电路 \(u = Ri + e\)(忽略电感)联立:
取一组小惯量关节电机的量级参数(\(R=1\,\Omega\)、\(K_t=K_e=0.01\)、\(J=10^{-4}\,\mathrm{kg\,m^2}\)、\(b=10^{-6}\)):
G_vel = ct.tf([Kt], [R*J, R*b + Ke*Kt]) # 电压 -> 角速度
## DC 增益 = 99.01 rad/s per V;机械时间常数 tau_m = JR/(bR+KeKt) = 0.9901 s
两个读数各有用途:DC 增益回答"给 1 V 稳转多快"(NoLoadSpeed 的模型形态),时间常数 \(\tau_m\) 回答"不闭环时速度本身有多慢"。\(\tau_m\approx 1\) s 意味着开环速度响应迟钝得像积分器——黏滞摩擦 \(b\) 极小时对象趋近 \(K_t/(RJ)\cdot 1/s\),这正是速度环必须闭环的理由:对象自己不留速度信息,反电动势那条阻尼通路太弱。
2. 转矩到角度:近双积分与 PD 的必然性¶
位置控制通常绕开电压层,直接用转矩指令(电流环由驱动器内置)。此时对象是 \(\tau\to q\) 的 \(1/(Js^2)\) 加小幅阻尼——双积分:给恒定转矩,角度按抛物线走。闭环最小配置是 PD(比例-微分):
纯 P(增益 50): 阶跃峰值=1.970 终值=0.999 —— 欠阻尼,等幅振荡趋势
PD (Kd=2.0): 闭环极点 = -171.9, -29.1 —— 两个实极点,阻尼比 1.0
P 只把弹性加进去、不加阻尼(无阻尼双积分加比例反馈是纯振荡);D 项(其实就是在速度上做的反馈)提供阻尼,把极点对从虚轴拖回左半平面。"PID 的 D 不是可选项"——对双积分对象,没有 D 就连稳定都谈不上,更不必说整定;这是 D 存在的第一层理由(噪声下的代价见第 3 章「PID 工程」)。
3. 摩擦:黏滞项与库仑死区¶
模型里摩擦常写成 \(F = b\dot q + T_s\,\mathrm{sgn}(\dot q)\) 两段。黏滞项 \(b\) 进传递函数(上一节的极点位置);库仑项 \(T_s\) 是死区:静止时 torque 指令小于 \(T_s\) 完全不动。同组参数取 \(T_s=0.005\) N·m,启动所需电压
占满量程的 5%——低速爬行段指令都泡在死区里。工程后果:纯 PID 位置控制在换向点表现为极限环小幅抖动(积分器攒够转矩→冲过头→再来一遍),修法按代价排序:重力/摩擦前馈 > 提高内环带宽 > 死区补偿(有副作用,可能引入抖动)。Stribeck 效应(低速段摩擦力随速度下降)是极限环的放大器,器件侧成因归 hardware-note,模型侧把它当纯库仑项处理即可满足回路分析。
4. 减速器:惯量折算与轴系谐振¶
\(N\!:\!1\) 减速器把负载侧按 \(1/N^2\) 折算到电机轴:\(J_{eq}=J_m + J_l/N^2\),同时转矩放大 \(N\) 倍、转速缩小 \(N\) 倍。折算的平方反比是它的全部意义——负载惯量对电机"变轻"了 \(N^2\) 倍:
经 N=100:1 减速器: 折算惯量比 (Jl/N²)/Jm = 0.10 轴系谐振 = 10488 rad/s ≈ 1669 Hz
直驱(无减速器): 惯量比 Jl/Jm = 1000 同轴刚度谐振 = 3164 rad/s ≈ 503 Hz
轴系谐振来自有限刚度 \(K_s\) 连接的两端惯量,\(\omega_r=\sqrt{K_s(1/J_1+1/J_2)}\)。电流环带宽必须显著低于 \(\omega_r\),否则激励谐振(增益尖峰→振荡→过热/损坏)。上例同一根轴,减速器把谐振推高一个量级同时把惯量比从 1000 压到 0.1——这就是经验规则"折算惯量比 ≤5 为佳、>10 时外环带宽被谐振上限卡住"的两面。直驱方案绕开齿隙与谐振维护,代价是直接面对大惯量失配:位置环带宽上限被 \(\omega_r\) 卡住。谐振的"一句话边界"到此为止,齿隙回差的器件机理归 hardware-note 第 1–2 章。
5. DS402 三环:作为被控对象的电流/速度/位置¶
工业驱动器(CANopen DS402 profile 402,总线侧帧格式见 fieldbus-note 第 5 章「CANopen 与上层协议」)内置三环级联:电流环(转矩)→ 速度环 → 位置环,典型周期 1 kHz / 500 Hz / 100 Hz 量级。三环带宽分离约一个数量级不是排版习惯,是相位预算:内环闭环后对外环而言近似一阶惯性 \(\omega_i/(s+\omega_i)\),其在穿越频率处的相位滞后 \(\arctan(\omega_c/\omega_i)\) 直接从外环裕度里扣。把速度内环建模为 1000 Hz 一阶、位置外环为 PI + \(1/s\) 对象,扫三档外环增益:
内环 1000Hz: 外环穿越 5.0Hz (分离200倍) -> 相位裕度 72.1deg
内环 1000Hz: 外环穿越 50.0Hz (分离20倍) -> 相位裕度 69.5deg
内环 1000Hz: 外环穿越 285.9Hz(分离3.5倍) -> 相位裕度 58.5deg
分离比大时裕度几乎不丢;挤到 3 倍以内,仅内环滞后就吃掉约 30°,还没算采样与传输延迟(第 1 章「线性系统与时域分析」的 \(\omega dt/2\))。所以"把位置环增益往大调"的真实上限在内环带宽,1 kHz 的电流环决定了外环不可能跑到几百 Hz。
上位机侧的接口选择由此清晰:用驱动器的位置模式(内环已闭合)时,上位只协商外环;驱动器只开电流环(或全裸的 effort 接口)时,速度/位置环自建在上位,1 kHz 的总线周期就成了内环带宽天花板——ros2_control 侧的接口差异对照归 ROS2-note 第 6 章「驱动开发与运动控制」,本节只提供"为什么该选哪一层闭合"的对象侧依据。
6. 多关节耦合:对象形态的边界¶
单关节模型在机械臂上会遇到耦合:真实对象是 \(M(q)\ddot q + C(q,\dot q)\dot q + G(q)=\tau\),质量矩阵随位形变化。被控对象的推导与数值实现归 robotics-note 第 6 章「拉格朗日动力学与标准形式」,那里平面二连杆在测试位形算出
本章只取回路视角的一个事实:非对角项占主对角 30%(\(M_{01}/M_{00}=1.5/5\)),意味着"把另一关节当静负载"的单关节设计忽略了 20% 量级的有效惯量变化——对每关节独立 PID 而言,这是随位形慢变的增益摄动。PID 对此的耐受度(增益偏差多少倍仍保持稳定)由第 4 章「频率域与鲁棒性」的裕度回答;把 \(C\dot q+G\) 算出来直接馈入的解法(计算力矩/前馈)在第 3 章「PID 工程」前馈节与第 6 章「状态反馈与现代控制」各自展开。
工程里这三块不手写:\(M\)、\(C\dot q+G\)、\(G\) 由 Pinocchio 一类动力学库按需算(crba / nonLinearEffects / rnea(q,0,0)),手算只用于小算例与对拍(推导与最小用法见 robotics 笔记第 6–7 章)。
真实回路里的这一层用 cpp 写时,差别主要在固定步长与内存布局(Eigen 定点尺寸表达式避免堆分配),算法形态与下面片段一致:
// cpp:单关节重力前馈在控制器 update 里的最小形态(Eigen)
Eigen::Vector2d tau_ff; tau_ff << g_terms; // 与 python 侧同一公式
cmd_effort = kp * err + tau_ff(0); // 前馈+反馈叠加在电流接口
cpp 侧完整回路的周期与抖动预算属真实回路环境,本章不展开。
7. 要点¶
- 电压→转速是增益 \(\frac{K_t}{Rb+K_eK_t}\) 加极点 \(1/\tau_m\) 的一阶模型;\(\tau_m\) 大(摩擦小)时对象近似积分器,速度必须闭环。
- 转矩→角度是近双积分:P 只加弹性不加阻尼,PD 的 D 是稳定性的来源而非整定奢侈品;库仑摩擦给出 \(u_{\min}=T_sR/K_t\) 的死区,换向极限环优先用前馈压。
- 减速器按 \(1/N^2\) 折算惯量、按 \(\sqrt{K_s(1/J_1+1/J_2)}\) 决定轴系谐振;惯量比 ≤5 与"电流环带宽远低于谐振"是同一条约束的两面。
- DS402 三环的数量级分离是相位预算:3.5 倍分离时仅内环滞后吃掉约 30°;上位接口选哪一层闭合,由总线周期与内环带宽天花板决定。
- 多关节耦合对单关节回路是随位形慢变的增益摄动(二连杆例中 20% 量级):耐受度看裕度(第 4 章「频率域与鲁棒性」),补偿走前馈或状态反馈(第 3 章「PID 工程」与第 6 章「状态反馈与现代控制」)。
参考文献与延伸阅读¶
- Siciliano, B., & Khatib, O. (Eds.). Springer Handbook of Robotics (2nd ed.). Springer, 2016. DOI
- Armstrong-Hélouvry, B., Dupont, P., & Canudas de Wit, C. A Survey of Models, Analysis Tools and Compensation Methods for the Control of Machines with Friction. Automatica, 1994. DOI
- Spong, M. W., Hutchinson, S., & Vidyasagar, M. Robot Modeling and Control (2nd ed.). Wiley, 2020.