跳转至

第 10 章 交互控制与模型预测

前九章把"跟踪一个自由空间参考"讲完,最后两章补上机器人真正难的两件事:与环境接触(力怎么柔顺、怎么不撞坏)与带约束地最优(执行器饱和、状态不许越界时怎么办)。本章先立阻抗/导纳控制的适用面与阻尼整定判据,再用单质量块带约束最小实现走通模型预测控制(model predictive control, MPC)的直觉,最后给一张"PID / LQR / MPC / RL 分工"的选择判据表收束全书。运行环境 python 3.11 + casadi 3.8.2(ipopt)+ numpy。

接触时的两种因果方向,以及滚动时域的执行顺序:

flowchart LR
    x["位移 x"] -->|"阻抗:位置 → 力"| f["力 F"]
    f2["力 F"] -->|"导纳:力 → 位移"| x2["位移 x"]
    mpc["MPC:每拍解带约束 QP"] --> s1["只施加第一步"] --> s2["下一拍用新状态重解"]

1. 阻抗与导纳:接触时的两种因果方向

自由空间里控制器"给位置、出力"是因果单向的;一旦接触,环境也出力,需要明确"谁是输入谁是输出"。两条基本范式:

  • 阻抗控制(impedance control):机器人表现得像一个设定的质量-弹簧-阻尼系统,位置为输入、力为输出——\(F=K(x_d-x)-B\dot x\)。执行器要位置可控(电机直驱、低结构刚度),直接算出接触力。
  • 导纳控制(admittance control):力为输入、位置为输出——测到接触力 \(F_{ext}\),解 \(M\ddot x+B\dot x+K(x-x_d)=F_{ext}\) 生成运动修正。需要力测量,执行器位置可指令(液压、大惯量平台)。

选择判据落在环境刚度上:环境远硬于执行器可用刚度时用导纳(阻抗在这种情形会命令过大力量饱和失稳);接触要求精细柔顺、且执行器位置可控时用阻抗。二者不是竞争关系,是"哪层闭环在硬件里"的对偶。

2. 阻抗接触:为什么"柔"能保护

同一硬环境(表面 \(x_e=1\)、接触刚度 \(k_e=2000\))、同一命令 \(x_d=1.2\)(深入 0.2 m),纯位置控制与阻抗控制(均带临界阻尼速度反馈保稳定)撞上去的稳态接触力:

纯位置控制(Kp=2000): x=1.1000 稳态接触力=200.0 N(控制刚度越高→压入越深→力越大且不由人定)
阻抗控制(K=50):      x=1.0049 稳态接触力=9.8 N(接触力由设定阻抗刚度 K 决定,可预置)
解析核对: 稳态力 = k_e·K·(x_d-x_e)/(k_e+K),Kp=2000→200.0N, K=50→9.8N

差 20 倍。机理:刚性位置伺服执拗地把 \(x\) 推向 1.2,与环境的对抗力 = \(k_e\times\)穿透,随环境刚度发散;阻抗控制把接触力 \(F\approx K(x_d-x)\) 收在设定刚度上,环境越硬、\(x\) 越停在表面附近、力越由 \(K\) 而非 \(k_e\) 决定。"设一个软虚拟弹簧"就把不可控的冲击力变成可预置的量——这正是"阻抗控制不等于力控"的精确版:阻抗调节的是位置与力的关系(一阶动力学),而非把力直接闭环;真正的力控(直接力反馈)在力带宽可控时又是另一套,前提与适用面都不同。

3. 阻尼与刚度整定判据

阻抗参数 \(M,B,K\) 不是自由调,物理判据清楚。阻尼比 \(\zeta=B/(2\sqrt{MK})\) 决定逼近接触点时冲不冲过头:

临界阻尼 B_c=2√(MK)=28.28(M=1,K=200)
B=  5.0: ζ=0.18 超调=56.9%  ← 冲过目标位置、撞得更狠
B= 28.3: ζ=1.00 超调=0.0%   ← 临界阻尼,无超调最快不撞
B= 60.0: ζ=2.12 超调=0.0%   ← 过阻尼,安全但迟钝

判据:接触任务取 \(B\ge 2\sqrt{MK}\)(临界或以上)杜绝超调冲击,装配/插拔再按接触力上限反解可用 \(K\)——\(K\) 越大定位越准但接触力越大,是"精度 vs 接触安全"的直接权衡。目标阻抗 \(M\) 则决定对外表现的惯量,常取小以显"轻"。三条写成一句:\(K\) 定力与精度、\(B\) 定冲击有无、\(M\) 定手感轻重,都能从上面的 ζ–超调对照定量读出。

4. MPC 直觉与带约束 QP 最小实现

4.1 MPC 直觉与 QP 最小实现

MPC 的核心是"预测 + 滚动 + 只管当下":每个控制周期,在有限时域 \(N\) 上解一个带约束优化 \(\min\sum \ell(x_k,u_k)\ \text{s.t.}\) 模型与约束,只施加首拍 \(u_0\),下一周期用新状态重解。对象取单质量块双积分(\(dt=0.1,N=10\)),代价含跟踪、速度与控量正则,约束 \(\|u\|\le u_{\max}=1\) 与状态上界 \(p\le p_{\max}\),用 casadi 的 NLP/QP 接口(ipopt)解:

MPC(pf=1, p<=1.05): 末端 p=1.003 沿程 max p=1.005  单拍均时 10–15 ms
高增益反馈 Kp=60:   末端 p=2.250 沿程 max p=2.250  (超调越过上界 1.05 → 违约)
对比:MPC max p=1.005 ≤ 1.05(靠预测提前减速,不越约束)

同一目标 \(p_f=1\)、同一输入限 \(u_{\max}=1\):高增益反馈为求快把 \(u\) 打满、冲过 1.05 违约还回不来;MPC 在优化里显式带着约束,提前几拍减速,轨迹贴在 1.05 内到点。这就是 MPC 相对 LQR/PID 的立身之本——约束是问题的一部分而非事后 clip。代价写在数字里:单质量块 10 步冷启动求解 10–15 ms(计时读数随负载浮动,本例 ipopt 无热启动),时域 \(N\)、维数、非线性一大,算力需求陡增,在线高频回路里必须靠热启动、显式 MPC 或降阶模型把单拍压进控制周期。最小实现的骨架:

U = ca.MX.sym('U', N)                      # 决策变量:预测时域上的控量
p, v = p0, v0; cost = 0; g = []
for k in range(N):
    cost += (p-pf)**2 + 0.1*v**2 + 0.01*U[k]**2
    g += [U[k]-umax, -umax-U[k], p-pmax]   # 输入与状态约束进不等式
    p, v = p+dt*v+0.5*dt*dt*U[k], v+dt*U[k]
## 只施加 sol['x'][0],下一拍用新状态重解(滚动时域)

一个常见误区顺带澄清:"MPC 一定优于 PID"经不起推敲——无约束、线性、工况平稳时,LQR/PID 一拍查表就能给最优增益,无需每拍解 NLP;MPC 的收益只在约束活跃或模型强非线性/多步前瞻时才兑现,否则是把算力花在刀刃之外。

4.2 求解器分工:CasADi 建模,acados 求实时

上面的最小实现用 casadi 的 NLP/QP 接口(ipopt)求解——CasADi 是建模层(符号表达式搭优化问题、自动求导、生成求解器调用),不是求解器本身。原型阶段用它把问题写对、验证约束与代价的含义,代价是单拍耗时与解释层开销。

要压进高频回路时换 acados(pip install acados_template,依赖 CasADi 与 C 编译器):它的形态是代码生成求解器——描述一次 OCP,它生成 C 代码并编译,运行时每拍只调已编译的求解器:

from acados_template import AcadosOcp, AcadosOcpSolver

ocp = AcadosOcp()                       # 1) 写 OCP:模型 f(x,u)、代价、约束、时域 N 与 tf
ocp.model = model                       #    model 由 CasADi 符号表达式构造
ocp_solver = AcadosOcpSolver(ocp)       # 2) 生成 C 代码 + 编译 + 加载(首次耗时)

ocp_solver.set(0, "lbx", x0); ocp_solver.set(0, "ubx", x0)   # 3) 每拍:固定当前状态
status = ocp_solver.solve()             #    SQP-RTI:固定次数 QP,耗时可控
u0 = ocp_solver.get(0, "u")           #    只施加首拍

代价是要处理代码生成与编译链(环境、ABI、重编译);另一条路是显式 MPC(离线把控制律表成多面体/查表)与降阶模型,适合状态维低的场景。分工判据:算不准/调不动时用 CasADi 搞原型,真要上控制器时再决定是 acados、显式 MPC 还是放弃 MPC 改用 LQR——回扣 4.1 的结论:约束不活跃时这些工程代价都白花。

多关节对象的模型从哪来:pinocchio.casadi 把 Pinocchio 模型符号化(\(M\)、\(C\dot q+G\) 与雅可比都成为 CasADi 表达式)直接搭进 OCP;本节的单质量块手写模型只是把“怎么建”讲最小,整机上不必也从零推导。

5. 与传统控制及 RL 的分工

全书十章走到这里,四种控制器该在什么场景选,合成一张判据表:

方法 前提 强项 短板 典型机器人场景
PID 单回路、低阶对象 免模型、部署最省 多变量/约束弱 单关节位置环、差速速度环
LQR 线性、二次型、无约束 最优增益、MIMO 天然 不处理约束、需模型 姿态平衡、多轴协同期(无饱和)
MPC 有模型、约束活跃 显式约束、多步前瞻 算力重、依赖模型精度 轨迹跟踪带饱和、避障、约束操作
RL 模型难建、任务可仿真 端到端感知→动作、擅长复杂接触 约束/安全非显式、可解释差、需训练 灵巧操作、腿式动态运动(归 isaac-note)

判据链:约束明确 + 模型可得 → MPC;模型难建 + 有仿真/示范 → RL;线性二次型无约束 → LQR 最省;单回路低阶 → PID。强化学习侧的奖励设计与课程学习、以及 sim-to-real 迁移不在本板块展开,归 isaac-note 第 6 章「奖励与课程学习」语境;两者的分工边界恰在"这一层该在线优化还是该训练策略"——能用模型写清约束的就用 MPC,写不清、且能大量仿真的就交给 RL。MPC 与 RL 也可叠用(RL 出参考、MPC 带约束跟踪),这是当前运动控制的一条常见组合,具体归 isaac-note。

四种方法在"模型依赖 × 约束处理"两轴上的定性位置(判据示意,非评分):

quadrantChart
    title 控制方法的定性定位
    x-axis "模型依赖低" --> "模型依赖高"
    y-axis "约束/接触处理弱" --> "约束/接触处理强"
    quadrant-1 "模型重、约束强"
    quadrant-2 "模型轻、约束强"
    quadrant-3 "模型轻、约束弱"
    quadrant-4 "模型重、约束弱"
    PID: [0.2, 0.25]
    LQR: [0.55, 0.45]
    MPC: [0.75, 0.8]
    RL: [0.9, 0.55]

6. 接触任务选择判据

把本章两套工具收敛成接触任务的落地判据:

任务特征 首选 理由
自由空间点到点、可能饱和/避障 MPC(带约束) 显式约束不越界,前瞻减速
未知环境接触、需柔顺 阻抗(位置可控硬件) 把冲击力变成可预置刚度
硬环境 / 高刚度平台接触 导纳 环境刚度远超执行器可用刚度
装配/插拔、力上限约束 阻抗 + \(B\ge2\sqrt{MK}\) 临界阻尼杜绝超调冲击
复杂多接触、模型难写 RL(仿真训练) 端到端,绕开硬建模

一句话收束全书主线:读得懂对象(第 1–2 章)、闭得上环并整定(第 3–6 章)、拿得准反馈(第 7–9 章)、接触与约束下算得动(本章)——四层拼成一个能在真实机器人上落地、又能判断"这层该用哪种控制"的完整回路。

7. 要点

  • 阻抗=位置输入/力输出(需位置可控硬件),导纳=力输入/位置输出(需力测量);环境远硬于执行器用导纳,精细柔顺用阻抗。
  • 接触力由设定阻抗刚度决定而非环境刚度:同命令下刚性位置伺服 200 N、阻抗 K=50 仅 9.8 N(解析 \(k_eK\Delta/(k_e+K)\) 吻合);"阻抗≠力控"。
  • 阻尼判据 \(B\ge2\sqrt{MK}\) 消超调冲击(ζ=0.18→超调 57%,ζ≥1→0);\(K\) 定精度与接触力、\(B\) 定冲击、\(M\) 定手感。
  • MPC 的立身之本是把约束写进优化:同输入限下高增益反馈超调违约(max p=2.25)、MPC 提前减速不越界(max p=1.005),代价是每拍解 NLP(本例 10–15 ms)。
  • "MPC 一定优于 PID"不成立:无约束平稳时 LQR/PID 查表更省,MPC 收益只在约束活跃/强非线性时兑现。
  • 分工判据:约束+模型→MPC、难建模+可仿真→RL、线性无约束→LQR、单回路低阶→PID;RL 奖励/课程与叠用归 isaac-note 第 6 章「奖励与课程学习」。

参考文献与延伸阅读

  • Mayne, D. Q., Rawlings, J. B., Rao, C. V., & Scokaert, P. O. M. Constrained Model Predictive Control: Stability and Optimality. Automatica, 2000. DOI
  • Hogan, N. Impedance Control: An Approach to Manipulation: Part I—Theory. Journal of Dynamic Systems, Measurement, and Control, 1985. DOI
  • Siciliano, B., & Villani, L. Robot Force Control. Springer, 1999. DOI