← 全部文章

约束与接触:拉格朗日乘子到底是什么力

  • 机器人学
  • 约束动力学
  • 拉格朗日乘子
  • 接触力学
  • 互补条件
目录

在拉格朗日法那篇文章里,我们把平面五杆机构沿一个关节暂时“切开”,先写成树形系统,再用闭环条件:

ϕ(q)=0\phi(q)=0

要求左右两条支链回到同一个末端点。动力学方程随之多出一项:

M(q)q¨+h(q,q˙)=Bτ+Jc(q)TλM(q)\ddot q+h(q,\dot q) =B\tau+J_c(q)^T\lambda

其中 h=c+gh=c+g 汇总速度耦合与重力,Jc=ϕ/qJ_c=\partial\phi/\partial q 是约束雅可比。那篇文章把 λ\lambda 称为拉格朗日乘子,也说它代表维持闭环所需的约束力。

这句话很容易留下几个疑问:

  • 一个从方程里增加的未知量,为什么会具有力的意义?
  • 真正作用在关节上的量是 λ\lambda,还是 JcTλJ_c^T\lambda
  • 铰链可以推也可以拉,桌面接触却只能推;它们能使用同一种写法吗?
  • 摩擦为什么会把一个等式问题变成互补问题?

这些疑问恰好把前面的拉格朗日法、五杆机构、雅可比和阻抗控制连接在一起。闭环机构关心“几何怎样始终成立”,接触问题还要决定“约束何时出现、何时消失,以及出现后能够传递什么力”。

本文从五杆机构的切口重新出发,逐步走到刚体接触与摩擦。

五杆机构切开后由闭环约束重新连接

1. 五杆机构的两条支链必须对上同一个点

设五杆机构的左右基座点为 A,BA,B,四个关节坐标为:

q=[q1q2q3q4]Tq= \begin{bmatrix} q_1&q_2&q_3&q_4 \end{bmatrix}^T

定义平面单位向量:

u(θ)=[cosθsinθ]u(\theta)= \begin{bmatrix} \cos\theta\\ \sin\theta \end{bmatrix}

从左支链走到末端,得到:

pL(q)=A+L1u(q1)+L2u(q1+q2)p_L(q) =A+L_1u(q_1)+L_2u(q_1+q_2)

从右支链走到末端,得到:

pR(q)=B+L3u(q3)+L4u(q3+q4)p_R(q) =B+L_3u(q_3)+L_4u(q_3+q_4)

切开机构时,pLp_LpRp_R 暂时成为两个可以独立运动的端点。重新闭合只需要一个条件:

ϕ(q)=pL(q)pR(q)=0\phi(q) =p_L(q)-p_R(q) =0

ϕR2\phi\in\mathbb R^2,因此它提供两个标量约束。四个关节坐标减去两个独立约束,留下五杆机构的两个自由度。

这个写法已经埋下了“力”的入口。ϕ\phi 使用笛卡尔位移描述两个切口之间的错位;如果没有闭环反力,两条支链在惯性、重力和驱动力矩作用下会产生不同加速度,pLp_LpRp_R 随即分开。约束力的任务,就是恰好修正这份分离趋势。

2. 约束雅可比描述哪些速度被禁止

对闭环条件求时间导数:

ϕ˙=Jc(q)q˙=0\dot\phi =J_c(q)\dot q =0

其中:

Jc(q)=ϕq=[JL(q1,q2)JR(q3,q4)]J_c(q) =\frac{\partial\phi}{\partial q} = \begin{bmatrix} J_L(q_1,q_2)&-J_R(q_3,q_4) \end{bmatrix}

JLJ_L 把左侧关节速度映射为 p˙L\dot p_LJRJ_R 把右侧关节速度映射为 p˙R\dot p_R。负号来自 ϕ=pLpR\phi=p_L-p_R

满足闭环的关节速度必须落在 JcJ_c 的零空间中:

q˙Null(Jc)\dot q\in\operatorname{Null}(J_c)

这就是机构真正允许的瞬时运动方向。任何让 Jcq˙0J_c\dot q\ne0 的速度,都会在切口处制造相对运动,因而被闭环铰链禁止。

再求一次导数,得到加速度约束:

Jcq¨+J˙cq˙=0J_c\ddot q+\dot J_c\dot q=0

Jcq¨J_c\ddot q 描述关节加速度造成的切口相对加速度,J˙cq˙\dot J_c\dot q 则来自机构几何本身正在变化。漏掉后者,相当于只约束瞬时切线,却忘记约束流形本身是弯曲的。

约束雅可比把允许运动与约束反力分到互相正交的空间

3. 虚功把约束雅可比的转置变成了力

现在考虑一份满足闭环的微小虚位移 δq\delta q。它必须满足:

Jcδq=0J_c\delta q=0

理想刚性约束不会沿允许运动方向做虚功。设广义约束力为 QcQ_c,于是:

QcTδq=0对所有满足 Jcδq=0 的 δqQ_c^T\delta q=0 \qquad \text{对所有满足 }J_c\delta q=0\text{ 的 }\delta q

线性代数告诉我们,与 JcJ_c 零空间正交的向量必定位于 JcJ_c 的行空间,也就是 JcTJ_c^T 的列空间。因此存在一组系数 λ\lambda,使:

Qc=JcTλQ_c=J_c^T\lambda

把它放回虚功:

QcTδq=λTJcδq=0Q_c^T\delta q =\lambda^TJ_c\delta q =0

力的形式由约束几何直接决定了。JcJ_c 把关节速度映射到“违反约束的速度”;JcTJ_c^T 则把约束空间中的反力映射回关节广义力。这与雅可比文章里的:

τ=JTF\tau=J^TF

完全是同一个对偶关系。

在五杆机构中:

JcTλ=[JLTλJRTλ]J_c^T\lambda = \begin{bmatrix} J_L^T\lambda\\ -J_R^T\lambda \end{bmatrix}

它表示在切口两侧施加一对大小相等、方向相反的笛卡尔力,再由左右支链各自的雅可比转置映射成关节力矩。闭环反力由此自动满足作用力与反作用力。

4. 拉格朗日乘子何时可以直接叫“力”

在当前五杆例子里,ϕ=pLpR\phi=p_L-p_R 的单位是米,约束虚功写成:

λTδϕ\lambda^T\delta\phi

为了得到焦耳,λ\lambda 的单位必须是牛顿。此时 λR2\lambda\in\mathbb R^2 确实可以解释为切口处的一对笛卡尔力分量。

但这个结论依赖约束函数的选择。假设把同一个约束重新缩放:

ϕˉ=Sϕ=0\bar\phi=S\phi=0

新的约束雅可比为 Jˉc=SJc\bar J_c=SJ_c。为了保持同一份广义约束力,需要:

JcTλ=JˉcTλˉ=JcTSTλˉJ_c^T\lambda =\bar J_c^T\bar\lambda =J_c^TS^T\bar\lambda

因此:

λ=STλˉ\lambda=S^T\bar\lambda

约束函数换了尺度或基底,乘子的数值也会跟着改变;真正作用在系统上的广义力 JcTλJ_c^T\lambda 保持不变。

所以更准确的表述是:

拉格朗日乘子是约束反力在所选约束坐标中的系数,JcTλJ_c^T\lambda 才是坐标无关的广义约束力。

当约束坐标就是正交笛卡尔距离时,λ\lambda 可以直接读作力;若约束混合了角度、距离或人为缩放,乘子的分量可能分别具有牛米、牛顿或经过缩放的单位。符号也取决于 ϕ\phi 的方向定义。

5. 加速度与约束力必须同时求解

把树形系统的动力学和加速度约束放在一起:

Mq¨+h=Bτ+JcTλM\ddot q+h =B\tau+J_c^T\lambda Jcq¨+J˙cq˙=0J_c\ddot q+\dot J_c\dot q=0

未知量同时包含 q¨\ddot qλ\lambda。整理为块矩阵:

[MJcTJc0][q¨λ]=[BτhJ˙cq˙]\begin{bmatrix} M&-J_c^T\\ J_c&0 \end{bmatrix} \begin{bmatrix} \ddot q\\ \lambda \end{bmatrix} = \begin{bmatrix} B\tau-h\\ -\dot J_c\dot q \end{bmatrix}

这是一组典型的 KKT 方程。第一行要求动力学平衡,第二行要求加速度留在约束流形上。左下与右上两个雅可比块,把“运动不能穿过约束”和“约束会产生反力”放进同一个线性系统。

约束动力学的 KKT 方程同时求加速度与拉格朗日乘子

也可以先消去 q¨\ddot q。定义:

W=JcM1JcTW=J_cM^{-1}J_c^T

若约束独立,WW 可逆,乘子为:

λ=W1[JcM1(Bτh)+J˙cq˙]\lambda =-W^{-1} \left[ J_cM^{-1}(B\tau-h) +\dot J_c\dot q \right]

方括号里的量,是系统完全不施加约束力时切口将产生的相对加速度;W1W^{-1} 把这份“想要分开”的趋势换算成恰好抵消它的约束力。

6. 约束空间逆质量衡量约束方向有多容易被推动

W=JcM1JcTW=J_cM^{-1}J_c^T 常被称为 Delassus 算子或约束空间逆质量矩阵。它回答一个直接的物理问题:在约束方向施加单位反力,会产生多大的约束空间加速度。

质量大、机械优势小的方向,单位力造成的加速度较小;接近机构奇异位形时,不同约束方向还可能变得线性相关。

对五杆机构,如果 JcJ_c 满行秩,两条闭环约束独立,WW 通常是 2×22\times2 正定矩阵。到达并联奇异位形后,左右远端连杆提供的约束方向可能合并,JcJ_c 或相关约束映射失去秩。此时会出现两个重要现象:

  • 某个方向失去有效约束,机构能够产生意外瞬时运动;
  • 多组 λ\lambda 可能生成相同的广义约束力,单独的乘子不再唯一。

四条腿支撑一张刚性桌子也会产生类似情况:桌面的加速度可以唯一,四条腿之间怎样分配法向力却未必唯一。伪逆会选出某个数学解,真实载荷分配还受结构柔性、制造误差和接触顺序影响。

这也是为什么“求出了 λ\lambda”还不等于“精确预测了每处真实载荷”。刚体模型只提供理想约束下的反力分配。

7. 闭环是双边约束,接触是单边约束

五杆机构的铰链始终闭合。它既能阻止两端分开,也能阻止两端互相穿过;对应的 λ\lambda 可以取正值或负值。这类约束称为双边约束:

ϕ(q)=0,λRm\phi(q)=0, \qquad \lambda\in\mathbb R^m

桌面与物体之间的接触规律不同。定义法向间隙函数 g(q)g(q)

g(q)>0表示分离g(q)>0 \quad\text{表示分离} g(q)=0表示接触g(q)=0 \quad\text{表示接触}

刚体不能互相穿透,因此:

g(q)0g(q)\ge0

法向接触力只能把物体推离桌面,不能隔空把物体吸向桌面:

λn0\lambda_n\ge0

接触雅可比:

Jn(q)=gqJ_n(q)=\frac{\partial g}{\partial q}

仍然通过转置把法向力映射成广义力:

Qn=JnTλnQ_n=J_n^T\lambda_n

从闭环到接触,雅可比转置的作用没有变化。新的难点来自约束是否激活:闭环约束始终存在,接触约束会随运动建立和解除。

双边闭环约束与单边接触约束的区别

8. 互补条件把“接触或分离”写成一个方程组

法向接触需要同时满足三条规则:

g(q)0,λn0,g(q)λn=0g(q)\ge0, \qquad \lambda_n\ge0, \qquad g(q)\lambda_n=0

通常简写为:

0λn    g(q)00\le\lambda_n \;\perp\; g(q)\ge0

符号 \perp 在这里表示互补,而非普通几何正交。它规定两个非负量至少有一个等于零:

  • g>0g>0 时,物体与环境分离,因此 λn=0\lambda_n=0
  • λn>0\lambda_n>0 时,接触正在传力,因此 g=0g=0
  • g=0,λn=0g=0,\lambda_n=0 对应刚好贴住、尚未承受法向载荷。

这条关系同时消除了“穿透”和“隔空接触力”。接触集合无需提前完全确定,求解器会在每个候选接触上选择分离分支或接触分支。

连续时间里,已经建立且保持的接触还满足 g˙=0\dot g=0,其法向力可以像双边约束一样由加速度方程求出。接触即将解除时,维持 g¨=0\ddot g=0 所需的 λn\lambda_n 若变成负值,说明刚体模型要求环境“拉住”物体;正确的模式应切换为 λn=0\lambda_n=0g¨0\ddot g\ge0

数值仿真通常在离散时间中对下一时刻的间隙、法向速度或冲量写互补条件。只在当前时刻检查 gλn=0g\lambda_n=0,无法自动处理一个时间步内发生的碰撞。

9. 摩擦在法向约束之外增加了一个锥

法向接触确定物体能否离开表面,切向摩擦决定物体沿表面怎样运动。设切向相对速度为:

vt=Jt(q)q˙v_t=J_t(q)\dot q

库仑摩擦要求切向力位于摩擦锥内:

λtμλn\|\lambda_t\| \le\mu\lambda_n

其中 μ\mu 是摩擦系数。摩擦状态分成两种:

粘着:

vt=0,λtμλnv_t=0, \qquad \|\lambda_t\|\le\mu\lambda_n

切向力只需抵消外界造成的滑动趋势,可以位于摩擦锥内部。

滑动:

vt0,λt=μλnvtvtv_t\ne0, \qquad \lambda_t =-\mu\lambda_n \frac{v_t}{\|v_t\|}

摩擦力落在锥面上,并沿最大耗散方向反对滑动。

分离、粘着和滑动对应不同的接触与摩擦条件

法向接触可以用一对标量互补关系清楚表达,三维库仑摩擦则同时包含锥约束、粘滑切换和最大耗散原则。工程求解器常把圆锥离散成多边形,从而得到线性或混合线性互补问题;保留精确二次锥时,则可使用锥优化或非线性互补形式。

10. 碰撞瞬间,乘子从力变成了冲量

持续接触阶段,λ\lambda 的单位通常是牛顿。碰撞持续时间极短,接触力可能非常大,直接描述峰值既困难也没有必要。对动力学跨越碰撞时刻积分:

M(q)(q˙+q˙)=Jn(q)TpnM(q)(\dot q^+-\dot q^-) =J_n(q)^Tp_n

q˙,q˙+\dot q^-,\dot q^+ 分别是碰撞前后的速度,pnp_n 是法向冲量:

pn=tt+λn(t)dtp_n=\int_{t^-}^{t^+}\lambda_n(t)\,dt

它的单位是牛秒。冲量通过同一个 JnTJ_n^T 改变广义动量。对于单个无摩擦碰撞,还可以用恢复系数 ee 规定法向速度跳变:

Jnq˙+=eJnq˙J_n\dot q^+ =-eJ_n\dot q^-

闭环约束、持续接触和碰撞冲量共享同一套几何映射,时间尺度决定了乘子表示力还是冲量。基于时间步的刚体仿真通常直接求每一步的接触冲量,再用它更新速度,因此互补问题中的未知量常具有牛秒单位。

11. 约束方程正确,数值积分仍可能慢慢“开环”

理论上,只要初始状态满足:

ϕ(q)=0,Jcq˙=0\phi(q)=0, \qquad J_c\dot q=0

并且每一步都严格满足加速度约束,闭环就会一直保持。有限精度积分会不断积累微小误差,导致 ϕ\phi 缓慢偏离零,这就是约束漂移。

常见的 Baumgarte 稳定化把加速度约束改为:

Jcq¨+J˙cq˙+2αJcq˙+α2ϕ(q)=0J_c\ddot q+\dot J_c\dot q +2\alpha J_c\dot q +\alpha^2\phi(q) =0

它让位置与速度约束误差像临界阻尼二阶系统一样衰减。α\alpha 太小,纠偏很慢;α\alpha 太大,会制造数值刚性和异常大的约束力。

另一类方法在积分后把位置与速度投影回约束流形。时间步接触算法则常把非穿透、冲量和速度更新放进同一个优化或互补问题中,避免先积分、后发现已经穿透的割裂流程。

实际实现至少应监测:

  • ϕ(q)\|\phi(q)\|:闭环或接触位置误差;
  • Jcq˙\|J_c\dot q\|:约束速度误差;
  • λn\lambda_npnp_n:法向载荷是否出现负值或异常峰值;
  • λt/(μλn)\|\lambda_t\|/(\mu\lambda_n):摩擦是否到达锥边界;
  • JcM1JcTJ_cM^{-1}J_c^T 的秩与条件数:约束是否冗余或接近奇异。

12. 把这篇文章放回整个系列

现在可以把前面几篇文章中的同一结构拼在一起:

  • 拉格朗日法用 Mq¨+hM\ddot q+h 组织自由系统的动力学;
  • 五杆机构用 ϕ(q)=0\phi(q)=0 描述两条支链必须闭合;
  • 雅可比 JcJ_c 划分允许运动与被禁止的相对运动;
  • 雅可比转置 JcTJ_c^T 把约束空间中的反力映射回关节;
  • 拉格朗日乘子 λ\lambda 给出反力在约束坐标中的系数;
  • 单边接触为乘子增加 λn0\lambda_n\ge0,并用互补条件决定约束是否激活;
  • 摩擦锥继续限制切向力,碰撞则把力的乘子换成冲量。

从这里继续向前,混合力/位控制会主动指定约束方向的力与自由方向的运动;操作空间控制会在任务空间中组织质量矩阵和约束投影;轨迹优化与 MPC 则会把动力学、接触模式、摩擦锥和执行器限制放进同一个求解问题。

拉格朗日乘子因此成为系列中的一座桥:它一端连接几何约束,另一端连接真实的关节力矩、接触力与冲量。

参考与延伸阅读

  1. Kevin M. Lynch, Frank C. Park, Modern Robotics: Constrained Dynamics.
  2. Russ Tedrake, Underactuated Robotics: Multi-Body Dynamics, MIT.
  3. David E. Stewart, Jeffrey C. Trinkle, An Implicit Time-Stepping Scheme for Rigid Body Dynamics with Coulomb Friction.
  4. Mihai Anitescu, Florian A. Potra, Formulating Dynamic Multi-Rigid-Body Contact Problems with Friction as Solvable Linear Complementarity Problems, 1997.