Part II · 第 8 章 动力学 · 8.4

接触与摩擦

走路、抓取、推、拧、插:机器人真正“做事”的时刻几乎都发生在接触里。接触力有三个怪脾气:地面只能推、不能拉(单边);摩擦有上限,超过 \(\mu\) 乘法向力就打滑(摩擦锥,半角 \(\arctan\mu\));力可以在一瞬间出现或消失(非光滑,互补条件)。这一节从斜面上的方块出发,造出摩擦锥,再看三维锥为什么在求解器里变成金字塔,惩罚法与冲量法为什么在刚度与步长上互相拉扯,最后让一根手指在关节力矩上限与摩擦锥的双重约束下压桌子。

约 35 分钟 前置:2.5 常微分方程 · 6.7 约束优化 · 6.8 LP 与 QP · 8.1 拉格朗日动力学 · 7.6 静力学与 wrench 5 个交互

    1为什么机器人需要它

    在自由空间里挥舞手臂,反而是机器人的例外。脚踩地面才能走路,手指夹住物体才能抓取,推箱子、拧螺丝、插接头、擦桌子,都是靠接触把力传给世界。接触也是仿真与真实机器人之间差距的主要来源:同样的动力学方程(8.1、8.3 节的 \(M\ddot{\mathbf q}+\mathbf b=\boldsymbol\tau\) 加上接触项)\(M\ddot{\mathbf q}+\mathbf b=\boldsymbol\tau+J_c^\top\mathbf f\),自由运动时误差很小,一旦出现接触,\(\mathbf f\) 这一项就成了最难算准的部分。接触力有三个特点:

    • 单边:地面只能推机器人,不能拉它。法向力 \(\lambda_n\ge 0\)。所有“拉不住”的现象(脚离地、手指松开)都从这里来。
    • 有上限:切向的摩擦力不超过 \(\mu\) 倍的法向力,\(\|\mathbf f_t\|\le\mu f_n\);超过就打滑。它在力空间里画出一个摩擦锥,腿式机器人的足底力、抓取的接触力都必须待在锥里。
    • 非光滑:碰撞瞬间速度突变,力在零与正值之间“开关”,黏着变成滑动。力不是状态的光滑函数,所以光滑的 ODE(2.5 节)、梯度(3.2 节)这些工具在这里需要小心使用。

    这一节把这三件事一件件拆开:先用斜面上的方块建立摩擦锥的直觉,再把锥放进三维与求解器,然后看“互补”条件和两种常见的接触模型(惩罚法、冲量法),最后用机械臂压桌子的例子把接触与 7.6 节的静力学接起来。

    2直觉:斜面上的方块什么时候开始滑

    把一块方块放在木板上,慢慢抬高木板。方块在某个角度突然开始下滑。是什么决定了这个角度?先把力画出来:重力 \(m\mathbf g\) 竖直向下,把它分解到木板的法向和切向:法向分量 \(mg\cos\alpha\) 压住木板,切向分量 \(mg\sin\alpha\) 想把方块拉下去。木板用法向力 \(N\) 顶住前者,用摩擦力 \(f\) 顶住后者。库仑的经验定律说:只要不打滑,摩擦力可以是任何大小,直到上限 \(\mu_s N\):

    $$ N = mg\cos\alpha,\qquad |f| = mg\sin\alpha \;\le\; \mu_s N = \mu_s\, mg\cos\alpha \;\;\Longleftrightarrow\;\; \tan\alpha \le \mu_s. $$

    质量 \(m\) 两边约掉了:临界角 \(\alpha_{\text{crit}}=\arctan\mu_s\) 只与材料有关,与方块多重无关。下面的图让你自己试。方块受三种力:重力、法向力 \(N\)(蓝)、摩擦力 \(f\)(红);法向力与摩擦力合起来是木板对方块的接触力 \(\mathbf R\)(紫)。围绕法线的青色扇形就是摩擦锥,半角是 \(\arctan\mu_s\)。只要接触力 \(\mathbf R\) 落在锥里,方块就黏着不动;要它落到锥外,木板就给不出这个力,方块便开始打滑。拖动倾角,看紫色箭头如何一点点倒向锥的边界。你也可以用滑块再加一个推力:往斜面里压会让方块更稳,往外拉则会让它离开斜面。

    FIG 1斜面上的方块:黏着、打滑、离开
    箭头长度与 \(mg\) 的倍数成正比(重力箭头始终一样长),所以质量滑块只改变读数里的牛顿数,不改变画面。推力 \(F\)(琥珀色)以重量的倍数给出,\(\beta=0\) 是沿斜面向上推,\(\beta>0\) 向外拉离表面,\(\beta<0\) 向里压。青色扇形是半角 \(\arctan\mu_s\) 的摩擦锥;打滑时摩擦力只有 \(\mu_k N\),紫色箭头在锥内、偏离边界。模型:质点,不会翻倒(真实的高而窄的方块可能先翻倒再滑);动静摩擦系数取 \(\mu_k\le\mu_s\)。
    试一试
    • 不加推力,把倾角调到刚好超过 \(\arctan\mu_s\)(在 1.5° 之内):方块刚好开始下滑。临界角读数与你的发现吻合吗?
    • 让倾角明显超过临界角(\(\tan\alpha>\mu_s\) 且多出 3° 以上,方块本来会滑),再沿法线向里压(\(\beta<0\)),让它重新黏住。为什么变稳了?
    • 向外拉(\(\beta>0\))直到法向力降到 0,方块离开斜面。此时还有摩擦力吗?
    核心洞见

    接触面能提供的力,不是一个数,而是一个集合:以法线为轴、半角为 \(\arctan\mu\) 的锥。静止的物体需要接触面提供“刚好够”的力;这个需求落在锥里就黏着,落在锥外就打滑。斜面的临界角 \(\arctan\mu\) 就是锥的半角:重力的反方向恰好擦着锥的边。

    3动手玩:拖动接触力,看摩擦锥

    把斜面拿掉,只留一个接触点:地面在下,法线 \(\hat{\mathbf n}\) 朝上。琥珀色手柄是接触点必须提供的力 \(\mathbf f=(f_t,f_n)\),也就是让物体保持不动、其余所有外力的相反数。你来拖,接触面来回答:

    • \(f_n<0\):接触面必须拉物体,办不到,物体会分离(离地)。
    • \(f_n>0\) 且 \(|f_t|\le\mu f_n\):力在锥内,接触黏着,摩擦力等于需求。
    • \(f_n>0\) 且 \(|f_t|>\mu f_n\):力在锥外,接触打滑。接触面只能给出锥边界上的力 \((\pm\mu f_n,\,f_n)\),差额(红色箭头)成为不平衡力,推着物体滑动。

    注意锥的半角是 \(\arctan\mu\),不是 \(\mu\):\(\mu=1\) 对应 45°,\(\mu=0.5\) 对应 26.6°,\(\mu\) 大于 1 也完全合理(橡胶对粗糙地面),锥只是更宽,但半角始终小于 90°。

    FIG 2二维摩擦锥:黏着、打滑、分离
    拖动琥珀色手柄(1 N 对应 1 个单位长度)。青色扇形是摩擦锥 \(\{\mathbf f: f_n\ge0,\ |f_t|\le\mu f_n\}\),虚线是它的边界,半角 \(\gamma=\arctan\mu\) 标在弧上。蓝、红虚线是 \(\mathbf f\) 的法向、切向分量。打滑时,绿色箭头是接触面真正给出的力,红色箭头是剩下的不平衡切向力。地面以下的红色区域表示“接触面必须拉”。
    • 依次让接触处于黏着、打滑、分离三种状态。
    • 把 \(\mu\) 调到 1.5 以上,让力偏离法线超过 50° 仍然黏着。半角是 \(1.5\) 弧度吗?
    摩擦角

    把接触力与法线的夹角记为 \(\psi=\arctan(|f_t|/f_n)\),摩擦锥的半角叫摩擦角 \(\gamma=\arctan\mu\)。“黏着”等价于 \(\psi\le\gamma\)。这个说法把摩擦的大小之比(\(|f_t|/f_n\le\mu\))换成了一个角度的比较:接触力的方向只要不偏离法线太多,接触就是稳的。足式机器人的“防滑”、抓取的“握力够不够”,都是这个角度的比较。

    4第二、第三视角:三维金字塔与非光滑的接触

    三维:圆锥与求解器里的金字塔

    三维接触点有两个切向方向,摩擦锥是圆锥 \(\|\mathbf f_t\|\le\mu f_n\),\(\mathbf f_t\in\mathbb R^2\)。圆锥是二阶锥,不能直接放进线性互补问题(LCP)或线性规划(6.8 节)。常见做法是用一个有 \(k\) 条棱的多面体金字塔去逼近它,使摩擦约束变成线性不等式:\(\mathbf f_t=\sum_i\beta_i\mathbf d_i\),\(\beta_i\ge0\),\(\sum_i\beta_i\le\mu f_n\),其中 \(\mathbf d_i\) 是 \(k\) 个单位切向方向。有两种逼近:

    • 内接(紫色,棱在锥面上):金字塔在圆锥里面,是保守的。能证明防滑的力,真实情况下一定不滑;但它低估了摩擦。
    • 外切(琥珀色,面与锥相切):金字塔包住圆锥,是乐观的。\(k=4\) 时就是熟悉的方盒 \(|f_x|\le\mu f_n,\ |f_y|\le\mu f_n\),沿对角线方向多给了 \(\sqrt2-1\approx41\%\) 的摩擦。

    以 \(f_n=1\) 的截面看,圆的半径是 \(\mu\);正 \(k\) 边形内接时,最短的半径是 \(\mu\cos(\pi/k)\),外切时最长的半径是 \(\mu/\cos(\pi/k)\)。所以最坏误差分别是 \(1-\cos(\pi/k)\) 与 \(1/\cos(\pi/k)-1\)。拖动 \(k\),看误差怎样随棱数迅速缩小。

    FIG 3三维摩擦锥与 \(k\) 棱金字塔
    拖动画面旋转视角
    法线沿 \(z\)(蓝),两个切向沿 \(x,y\)。青色圆是 \(f_n=1\) 处的真实锥截面,紫色是内接的 \(k\) 棱金字塔,琥珀色是外切的。滑块 \(\varphi\) 在切平面内选一个方向(虚线射线):三个标记点分别是真实锥、内接、外切在这个方向上允许的最大切向力(以 \(f_n\) 为单位)。读数里的“数值最大误差”是对 7200 个方向取样得到的,应与闭式 \(1-\cos(\pi/k)\) 一致。
    • 找出让两种逼近的最坏误差都低于 5% 的最小棱数 \(k\)。

    非光滑:接触力是“开关”,不是弹簧

    现在看法向。小球落到地上,间隙 \(\phi\ge0\)(球离地面的距离),法向力 \(\lambda\ge0\)。要么分离(\(\phi>0,\ \lambda=0\)),要么接触(\(\phi=0,\ \lambda\ge0\)),两者不会同时为正,写成互补条件:

    $$ 0\;\le\;\lambda\;\perp\;\phi\;\ge\;0 \qquad\Longleftrightarrow\qquad \lambda\ge0,\quad \phi\ge0,\quad \lambda\,\phi=0. $$

    在 \((\phi,\lambda)\) 平面上,它是一条直角折线:沿 \(\phi\) 轴(没接触,力为零)和沿 \(\lambda\) 轴(接触,力任意)。折线在拐角处不可导,而且 \(\lambda\) 不是 \(\phi\) 的函数(\(\phi=0\) 时 \(\lambda\) 可以是任意正数)。这就是“刚体接触”的数学含义。要在计算机里处理它,常见有两条路。惩罚法:允许穿透 \(\delta=\max(0,-\phi)\),用弹簧-阻尼 \(\lambda=k\delta+c\dot\delta\) 把折线“压弯”成一条陡峭的斜线,简单,但 \(k\) 越大系统越硬,显式积分的步长就必须越小。冲量法:不模拟接触期间的力,在碰撞时刻直接把法向速度改成 \(\dot\phi^+=-e\dot\phi^-\)(\(e\) 是恢复系数),并把物体放回接触面上,步长不受刚度限制,但要处理一连串的碰撞事件(弹跳次数无穷多,有限时间内停下,叫 Zeno 现象)。

    下图让你同时看这两个模型。左边是小球的高度(上)和穿透深度(下,毫米);右边是互补折线,圆点是模拟中每一步的 \((\phi,\lambda)\)。

    FIG 4小球落地:惩罚法 vs 冲量法
    高度 h(t) 与穿透 δ(t)
    互补折线:λ (N) 对 φ (mm)
    质量 1 kg,从 1 m 高处静止释放,\(g=9.81\) m/s²。惩罚法:半隐式(辛)欧拉,\(\lambda=\max(0,\,k\delta-c\dot x)\),\(c=2\zeta\sqrt{km}\),\(\zeta\) 是阻尼比。冲量法:每步先自由落体,若穿过地面,就令速度反向并乘 \(e\),位置也按同样比例反射,几乎静止时直接停住。右图的绿色折线是理想的刚性接触,紫色虚线是惩罚法的斜线 \(\lambda=k\delta\),圆点是模拟的实际取值(冲量法里是该步的平均力:冲量除以步长)。
    • 用惩罚法,把步长调大,让模拟炸掉:小球弹得比起始高度还高(能量凭空增加)。读数里的 \(\omega\,\Delta t\) 是多少时开始发生?
    • 仍用惩罚法,在保持稳定(\(\omega\Delta t<0.5\))的前提下,让最大穿透小于 2 mm。代价是什么?(看 \(k\) 与步数。)
    • 切换到冲量法,把恢复系数 \(e\) 调到 0.8 以上:小球弹跳无穷多次,却在有限时间内停住。读数里预测的静止时刻与模拟吻合吗?
    一个想法,三个视角

    几何:接触力活在一个锥里,\(\mathbf f\in K_\mu\)(FIG 1–3)。互补:每个接触在“分离/黏着/滑动”几种模式里选一种,力与间隙(或滑动速度)满足 \(0\le a\perp b\ge0\)(FIG 4)。优化:这些条件正是某个凸优化问题的 KKT 条件(6.7 节),锥是它的可行集,\(\lambda\) 是拉格朗日乘子。三个视角说的是同一件事,不同的接触模型和求解器,只是选了其中一条路来算。

    5再看数学

    提示:把鼠标悬停在公式中带底色的符号上,FIG 2 中对应的元素会被高亮。

    库仑摩擦与摩擦锥

    设接触点的法线 \(\hat{\mathbf n}\) 从表面指向物体,接触力分解为 \(\mathbf f=f_n\hat{\mathbf n}+\mathbf f_t\)(作用在物体上)。库仑定律(Amontons–Coulomb)有两种情形,\(\mathbf v_t\) 是接触点的相对切向速度:

    $$ \begin{cases} \mathbf v_t=\mathbf 0: & \hl{ft}{\|\mathbf f_t\|}\;\le\;\hl{mu}{\mu_s}\,\hl{fn}{f_n}\quad(\text{stick}),\\[4pt] \mathbf v_t\ne\mathbf 0: & \mathbf f_t=-\mu_k\,f_n\,\dfrac{\mathbf v_t}{\|\mathbf v_t\|}\quad(\text{slip}),\end{cases}\qquad f_n\ge 0 . $$

    滑动时摩擦力大小为 \(\mu_k f_n\),与速度大小无关,方向与滑动方向相反。一般 \(\mu_k\le\mu_s\);仿真器常常取 \(\mu_k=\mu_s=\mu\),下面都这样写。黏着时的摩擦力是未知数,由其他力决定,只受不等式约束。两条合起来是一个集值关系 \(\mathbf f_t\in-\mu f_n\,\mathrm{Sgn}(\mathbf v_t)\),在 \(\mathbf v_t=\mathbf 0\) 处 \(\mathrm{Sgn}\) 取整个单位球。摩擦锥就是黏着条件的集合:

    $$ K_\mu=\big\{\mathbf f=(\mathbf f_t,f_n):\ f_n\ge 0,\ \hl{ft}{\|\mathbf f_t\|}\le\mu\,\hl{fn}{f_n}\big\},\qquad \hl{cone}{\gamma=\arctan\mu}\ \ (\text{half-angle}). $$

    在三维中 \(\mathbf f_t\in\mathbb R^2\),\(K_\mu\) 是二阶锥(Lorentz 锥的缩放),是凸锥。回到斜面:物体静止要求 \(mg\sin\alpha\le\mu\,mg\cos\alpha\),即 \(\alpha\le\gamma\)。带推力 \(F\)(FIG 1)时,只要把法向与切向的平衡改写,黏着条件就是 \(|F\cos\beta-mg\sin\alpha|\le\mu\,(mg\cos\alpha-F\sin\beta)\),且 \(mg\cos\alpha-F\sin\beta>0\)(否则离开表面)。

    单边约束、互补与刚体接触的动力学

    设 \(\phi(\mathbf q)\) 是第 \(c\) 个接触的间隙函数(有符号距离),\(J_n=\partial\phi/\partial\mathbf q\) 是法向的接触雅可比。接触点速度与关节速度的关系是 \(\mathbf v_c=J_c\dot{\mathbf q}\)(3.4 节雅可比的同一个思想,只是这里取的是接触点),\(J_c=[J_n;\,J_t]\)。把接触力当成未知的“约束力”加进 8.1 节的方程,得到接触隐式的操作臂方程:

    $$ M(\mathbf q)\ddot{\mathbf q}+\mathbf b(\mathbf q,\dot{\mathbf q})=S\boldsymbol\tau+\sum_c J_c(\mathbf q)^\top\boldsymbol\lambda_c,\qquad \boldsymbol\lambda_c=(\lambda_{t},\lambda_{n})\in K_\mu,\quad 0\le\lambda_{n}\perp\phi_c(\mathbf q)\ge0. $$

    \(\mathbf b=C\dot{\mathbf q}+\mathbf g\) 是 8.3 节的偏置项,\(S\) 是驱动选择矩阵(浮动基机器人只有部分自由度有电机)。互补条件正是约束优化 \(\min\,\text{能量}\ \text{s.t.}\ \phi(\mathbf q)\ge0\) 的 KKT 条件(6.7 节):\(\lambda_n\) 是不等式约束的乘子,\(\lambda_n\phi=0\) 是互补松弛。未知数是 \(\ddot{\mathbf q}\) 与所有 \(\boldsymbol\lambda_c\),方程里有不等式,所以每一步要解的不是线性方程组,而是一个互补问题。碰撞(\(\phi=0\) 且 \(\dot\phi<0\))还要加一条速度跳变的规律,牛顿恢复律 \(\dot\phi^+=-e\,\dot\phi^-\)。

    时间步进的 LCP(Stewart–Trinkle)

    处理碰撞有两条路。事件驱动:用 ODE 积分到碰撞或模式切换的时刻,在那里处理跳变,再继续;精确,但事件很多(Zeno、多点接触)时会卡死。时间步进(Moreau;Stewart–Trinkle 1996):不找事件,每个小步 \(\Delta t\) 在速度层面解一次互补问题,把冲量 \(\mathbf c=\Delta t\,\boldsymbol\lambda\) 当未知数。取摩擦锥的 \(k\) 棱金字塔,\(J_d\) 的每一行是接触点速度沿第 \(i\) 个切向 \(\mathbf d_i\) 的分量,\(\boldsymbol\beta\ge0\) 是各棱上的冲量,\(\sigma\ge0\) 是滑动速度:

    $$ \begin{aligned} &M(\mathbf v^{+}-\mathbf v)=\Delta t\big(S\boldsymbol\tau-\mathbf b\big)+J_n^\top c_n+J_d^\top\boldsymbol\beta,\qquad \mathbf q^{+}=\mathbf q+\Delta t\,\mathbf v^{+},\\ &0\le c_n\ \perp\ \tfrac1{\Delta t}\phi(\mathbf q)+J_n\mathbf v^{+}\ \ge 0,\\ &0\le\boldsymbol\beta\ \perp\ \sigma\mathbf 1+J_d\mathbf v^{+}\ \ge 0,\\ &0\le\sigma\ \perp\ \mu c_n-\mathbf 1^\top\boldsymbol\beta\ \ge 0 . \end{aligned} $$

    第二行是线性化的不穿透条件;第三、四行是“最大耗散原理”:摩擦冲量在满足 \(\mathbf 1^\top\boldsymbol\beta\le\mu c_n\) 的前提下,尽量减慢接触点的滑动,滑动速度 \(\sigma\) 只在锥的边界上才可以不为 0。消去 \(\mathbf v^{+}\) 后,这是一个标准的线性互补问题(LCP)。Stewart 与 Trinkle 提出了这类格式;Anitescu 与 Potra(1997)给出了一个与之密切相关的写法,并证明在金字塔摩擦下它总有解(Lemke 算法能求出),这对仿真器的鲁棒性至关重要。该问题的另一种写法是二次规划(QP):把乘子视为变量,在锥的约束下最小化“能量”,这就是 MuJoCo 等求解器所用的凸形式。

    软接触:惩罚法的稳定性与 MuJoCo 的凸模型

    惩罚法把接触当成一个很硬的弹簧-阻尼:质量 \(m\) 的小球,\(m\ddot x=-mg+k\delta+c\dot\delta\)(接触期间)。这是一个二阶线性系统,固有频率 \(\omega=\sqrt{k/m}\),阻尼比 \(\zeta=c/(2\sqrt{km})\)。后面三个结论都能在 FIG 4 里验证:

    $$ \underbrace{\delta_{\max}\approx\frac{v_0}{\omega}}_{\text{penetration (lightly damped)}},\qquad \underbrace{e=\exp\!\Big(\!-\frac{\pi\zeta}{\sqrt{1-\zeta^{2}}}\Big)}_{\text{effective restitution}},\qquad \underbrace{\omega\,\Delta t<2}_{\text{semi-implicit Euler stability}} . $$

    要让穿透小,必须让 \(k\) 大;\(k\) 大则 \(\omega\) 大,显式积分的步长上限 \(\Delta t<2/\omega=2\sqrt{m/k}\) 就小:刚度每增大 100 倍,步长要缩小 10 倍,计算量涨 10 倍。刚度与步长就这样互相拉扯。MuJoCo 走了另一条路(Todorov 2014):每一步把接触力作为凸优化问题的解,在摩擦锥约束下最小化一个带正则化的二次代价(衡量约束空间加速度偏离参考值的程度),正则化让约束有一定柔软度(solref/solimp 调节),同时保证解唯一、可微分求逆。它既不是严格的刚性接触,也不是传统的惩罚法:没有一个必须用极小步长去积分的僵硬 ODE。

    模型失效的地方:Painlevé 佯谬

    刚体加库仑摩擦并不总是自洽。1895 年 Painlevé 指出:一根细杆在粗糙表面上滑动,当 \(\mu\) 足够大、杆与表面夹角足够小时,加速度层面的方程可能无解(相容性被破坏)或有多解(不确定性):摩擦力通过转动耦合,使维持接触所需的法向力变成负值或无界,物体似乎要自己跳起来。时间步进的冲量格式总有解(上面的 Anitescu–Potra),但解的物理含义取决于冲击是否被允许。实践中这意味着:高摩擦系数、细长物体、近乎平行的接触,是仿真行为最不可信的地方。

    6机器人中的它:手指压桌子,锥与力矩上限的交集

    一个两连杆的机械臂用指尖压在桌面上。接触点就是指尖,接触雅可比 \(J_c\) 就是指尖位置的雅可比(3.4 节的 \(J\))。桌子对指尖的力 \(\mathbf f_c=(f_t,f_n)\) 必须同时满足两个条件:

    • 接触允许:\(f_n\ge0\) 且 \(|f_t|\le\mu f_n\),即落在摩擦锥里(FIG 2)。
    • 电机做得到:缓慢(准静态)并且重力已补偿时,8.3 节的方程加上接触项 \(M\ddot{\mathbf q}+\mathbf b=\boldsymbol\tau+J_c^\top\mathbf f_c\) 退化成 \(\mathbf 0=\boldsymbol\tau+J_c^\top\mathbf f_c\),所以电机力矩是 \(\boldsymbol\tau=-J_c^\top\mathbf f_c\)(手指对桌子的力是 \(\mathbf F=-\mathbf f_c\),就是 3.4 节的 \(\boldsymbol\tau=J^\top\mathbf F\))。每个关节要满足 \(|\tau_i|\le\tau_{\max}\)。

    两个条件都是 \(\mathbf f_c\) 的线性不等式,所以可行的接触力是一个凸多边形:锥与力矩上限形成的平行四边形的交集。右图画的就是这个力空间。手指能用多大的力压桌子,就是在这个多边形上求 \(\max f_n\),这是一个线性规划(6.8 节),解在多边形的顶点上。拖动指尖的位置、切换肘的方向,看这个多边形怎样随姿态变化:当前臂的最后一节对准了力的方向时,肘关节几乎不用出力,同样的力矩就能压得更重。

    FIG 5指尖压桌面:摩擦锥 ∩ 关节力矩上限
    机械臂:拖动指尖或力箭头
    力空间 (f_t, f_n),单位 N
    左:臂的两个关节红(肩)、绿(肘),指尖在桌面上,琥珀色箭头是桌子对指尖的力 \(\mathbf f_c\)(1 N 画 0.12 个单位长度),可以拖动箭头头部。右:同一个 \(\mathbf f_c\) 在力空间里的位置(可拖动)。青色扇形是摩擦锥;红色、绿色虚线分别是 \(|\tau_1|=\tau_{\max}\) 与 \(|\tau_2|=\tau_{\max}\),两对平行线夹出的条带就是该关节“出得了”的力;绿色多边形是所有条件的交集,圆点标出 \(\max f_n\) 的顶点。模型假设:准静态、重力已补偿、点接触、桌面刚性、两关节力矩上限相同。
    • 把 \(\mathbf f_c\) 拖出摩擦锥(保持 \(f_n>0.5\) N):这时是桌面“给不出”这个力,与电机无关。
    • 让 \(\mathbf f_c\) 留在锥里,却因为电机力矩不够而不可行:状态读数应显示哪一个关节超限。
    • 调整指尖位置与肘的方向,让“竖直向下压”的能力超过 2 N 每 N·m 力矩(读数“每 N·m 能压的力”)。提示:让小臂(第二节)接近竖直。
    真实系统里

    足式机器人(9.2 节):每只脚的地面反力必须在摩擦锥内,且法向力非负;全身控制器把它写成 QP 里的约束,\(\mu\) 取比真实值小的“安全”值。人在平地上行走所需的摩擦系数大约只有 0.2。抓取与灵巧手(9.3 节):每个接触点一个锥,力封闭就是“这些锥里的力能平衡任意外力矩”;多指抓取的力分配也是 LP/QP。推、插、拧:用接触约束做规划,把“接触模式的切换”当作离散变量(接触隐式轨迹优化)。触觉传感:GelSight 一类传感器可以估计法向与切向力,监视 \(|f_t|/f_n\) 是否逼近 \(\mu\),在滑脱之前加大握力。仿真到真实(Part VI):摩擦系数是最常被随机化的物理参数之一,因为 \(\mu\) 取决于表面材质、污染和速度,很难精确测量。

    友情提示:典型的摩擦系数

    下面是教科书里常见的量级,干燥、洁净的表面。同一对材料的实际值随表面粗糙度、污染、湿度、压力和滑动速度变化,可以相差 2 倍以上,使用前应当实测。\(\mu\) 描述的是一对表面,而不是某一个物体。

    表面对静摩擦系数 \(\mu_s\) 的大致范围
    橡胶 对 干燥混凝土/沥青0.6 – 1.0 (轮胎可超过 1)
    硅胶/弹性体指垫 对 光滑塑料、玻璃0.7 – 1.5+ (随压力和接触面积变化)
    钢 对 钢(干)0.5 – 0.8
    钢 对 钢(润滑)0.05 – 0.15
    木 对 木0.25 – 0.5
    聚四氟乙烯(PTFE)对 钢0.04 – 0.1
    冰 对 冰/钢0.03 – 0.15

    主流仿真器怎么处理接触

    不同仿真器对同一个场景给出的结果可能明显不同(Erez 等,2015)。下表是各自的主要思路,版本之间细节会变,使用时请查对应文档。

    仿真器接触模型与摩擦锥
    MuJoCo / MJX软的凸优化接触(Todorov 2014);摩擦锥默认为金字塔,可选椭圆锥;solref/solimp 调节软度;condim 选择是否含扭转与滚动摩擦(默认摩擦参数 1, 0.005, 0.0001)。
    Bullet / PyBullet刚体接触,顺序冲量(投影 Gauss–Seidel 型 LCP 迭代);摩擦沿两个切向,各自以法向冲量乘 \(\mu\) 为界。
    PhysX / Isaac Sim / Isaac GymGPU 上的迭代求解器(PGS/TGS),两种材料的摩擦系数按规则合并;高度并行,适合强化学习大批量仿真。
    Drake柔顺接触(点接触或水弹性接触)加凸的时间步进求解器;摩擦用“黏着容差”正则化。
    ODELCP 型求解器;摩擦沿两个切向分别限幅,具体是固定的力上限还是按法向力缩放的方盒金字塔,取决于接触标志,请查所用版本的文档。

    7常见误区

    误区 1:摩擦力总是 \(\mu N\),静摩擦与动摩擦混为一谈

    \(\mu_s N\) 只是静摩擦的上限。黏着时摩擦力是“刚好够用”的那个值(FIG 1 里平放时摩擦力是 0,抬到 20° 才是 \(mg\sin20^\circ\)),可以远小于上限。只有真的在滑动时,摩擦才等于 \(\mu_k N\),而且 \(\mu_k\) 通常略小于 \(\mu_s\),所以一旦滑起来,方块还会加速。如果你的控制器假定“摩擦力 = \(\mu N\)”去做前馈,就会在静止的物体上凭空算出一个力。

    误区 2:法向力可以是负的,摩擦力可以“拉”住物体

    摩擦力是切向的,它不能提供让物体靠近表面的力;法向力 \(\lambda_n\ge0\)。FIG 2 里手柄拖到地面以下,接触就分离了:锥只有一个朝上的半边。QP 里如果忘了写 \(f_n\ge0\),求出来的接触力可能会“吸住”地面。真实世界也有例外:吸盘、壁虎式干黏附、静电吸附和磁力,它们在法向上有一个额外的吸力,不再属于普通的库仑接触。

    误区 3:库仑摩擦等于粘性摩擦

    粘性摩擦 \(f=-bv\) 是光滑的,速度越大摩擦越大,速度为零时摩擦为零,直接塞进 ODE 就行。库仑摩擦的大小与速度无关,且在 \(v=0\) 处是集值的(FIG 2 里的整段锥)。为了让 ODE 求解器接受它,常见做法是用 \(\tanh(v/v_s)\) 之类的光滑函数代替符号函数,但这样机器人在“应该黏着”的时候会缓慢蠕滑(creep),并且 \(v_s\) 越小系统越僵硬。真实表面的摩擦还会随速度变化(Stribeck 效应)和随接触时间变化,库仑定律只是一个有用的近似。

    误区 4:把接触当作光滑函数去求梯度

    刚性接触的力是状态的非光滑(甚至不连续、集值)函数:物体没碰到地面时,对接触位置的梯度处处为零;碰到的那一瞬间力从 0 跳到很大。把仿真器当作可微函数、直接对轨迹或策略求梯度,得到的梯度要么是 0(看不到将要发生的接触),要么极大、方差很大(Suh 等 2022)。常见的补救办法是平滑接触(软化互补条件)、改用不依赖梯度的采样优化(6.11 节)、或者把接触模式当作离散变量一起优化。选哪一种取决于任务,没有免费午餐。

    误区 5:硬接触配大步长,忽略滚动与扭转摩擦

    FIG 4 显示,惩罚接触的刚度和步长必须配套:\(\omega\Delta t\ge2\) 时能量凭空增长,仿真爆炸;即使没爆炸,大步长也会让接触力在 \(\omega\Delta t\sim1\) 附近抖动、看起来“能用”但已经失真。降低刚度会允许更大的穿透,物体“陷进”地面。另外,点接触的库仑模型只有切向的滑动摩擦。真实的接触面还有扭转摩擦(绕法线转)与滚动摩擦(球、轮子滚动时的阻力),忽略它们会让物体在地面上永远转下去或滚下去,MuJoCo 的默认摩擦参数里就有这两项(0.005 和 0.0001)。

    8小练习

    1. 橡胶块放在木板上,\(\mu_s=0.8\)。慢慢抬高木板,方块刚好开始滑动时,倾角约为多少?如果换成质量是它 10 倍的橡胶块呢?
    黏着条件 \(mg\sin\alpha\le\mu_s\,mg\cos\alpha\) 两边约掉 \(mg\),得到 \(\tan\alpha\le\mu_s\),临界角 \(\arctan\mu_s=\arctan0.8\approx38.7^\circ\)(摩擦锥的半角),与质量无关。常见的错误是把 \(\mu\) 当成弧度,或者以为重的物体更容易滑(它的下滑力和摩擦上限都大了 10 倍)。
    2. 物体压在桌面上,法向力 \(f_n=4\) N,\(\mu=0.5\)。现在水平拉它,需要接触面提供的切向力是 3 N(即你拉的力)。桌面实际给出的摩擦力是多少?
    需求比值 \(3/4=0.75>\mu=0.5\),力在锥外,接触打滑。摩擦力封顶于 \(\mu f_n=2\) N(取 \(\mu_k=\mu\)),差额 \(3-2=1\) N 是不平衡力,物体以 \(a=(1\ \text{N})/m\) 加速。这正是 FIG 2 里的绿色(实际给出的)与红色(不平衡)箭头。
    3. 某些引擎把三维摩擦写成“两个切向各自受限”:\(|f_x|\le\mu f_n,\ |f_y|\le\mu f_n\)。与真实圆锥相比,在最坏方向上它允许的切向力多多少?
    这个盒子是 \(k=4\) 的外切金字塔:对角线方向允许 \((\mu f_n,\mu f_n)\),大小 \(\sqrt2\mu f_n\),比圆锥的 \(\mu f_n\) 多 \(\sqrt2-1\approx41\%\)。公式 \(1/\cos(\pi/k)-1\) 在 \(k=4\) 时给出同样的数。内接的菱形则少 \(1-\cos(\pi/4)\approx29\%\)。增加棱数才能缩小误差,\(k=8\) 约 8%,\(k=16\) 约 2%。
    4. 用半隐式欧拉模拟 1 kg 小球落在刚度 \(k=10^6\) N/m 的惩罚接触上。要保持稳定,步长最大约是多少?
    \(\omega=\sqrt{k/m}=1000\) rad/s,稳定要求 \(\omega\Delta t<2\),即 \(\Delta t<2\) ms。刚度再增加 100 倍,步长上限降到 0.2 ms。半隐式(辛)欧拉对未阻尼的振子只是条件稳定的,超过这个界,能量指数增长,就是 FIG 4 里“炸掉”的小球。而且 2 ms 只是稳定的上限,想要接触力不失真,实际要比它再小几倍。
    5. 对于 \(0\le\lambda\perp\phi\ge0\)(\(\phi\) 是间隙,\(\lambda\) 是法向力),下面哪种状态不被允许?
    互补条件要求 \(\lambda\ge0\)、\(\phi\ge0\) 且 \(\lambda\phi=0\),两者至少有一个为零。隔着 3 mm 空隙却有 5 N 的法向力,\(\lambda\phi=15\) N·mm\(\ne0\),既不是接触也不是分离,被禁止。相反,穿透(\(\phi<0\))也被禁止:这是刚性接触与惩罚法的差别,后者允许 \(\phi<0\) 并用 \(\lambda=k\delta\) 去“惩罚”。

    9延伸阅读

    • K. Lynch & F. Park, Modern Robotics, Ch. 12 — 抓取与操作:接触运动学、接触力与摩擦锥、力封闭
    • M. T. Mason, Mechanics of Robotic Manipulation, MIT Press, 2001 — 推、抓取与摩擦力学的经典教材,包含平面推动与极限曲面
    • D. E. Stewart & J. C. Trinkle, “An implicit time-stepping scheme for rigid body dynamics with inelastic collisions and Coulomb friction”, Int. J. Numerical Methods in Engineering 39(15), 1996 — 时间步进 LCP 的原始论文
    • M. Anitescu & F. A. Potra, “Formulating dynamic multi-rigid-body contact problems with friction as solvable linear complementarity problems”, Nonlinear Dynamics 14, 1997 — 带金字塔摩擦的 LCP 总有解
    • D. E. Stewart, “Rigid-body dynamics with friction and impact”, SIAM Review 42(1), 2000 — 综述:Painlevé 佯谬、事件驱动与时间步进
    • E. Todorov, “Convex and analytically-invertible dynamics with contacts and constraints: Theory and implementation in MuJoCo”, ICRA 2014 — MuJoCo 软接触模型的理论基础
    • T. Erez, Y. Tassa & E. Todorov, “Simulation tools for model-based robotics: Comparison of Bullet, Havok, MuJoCo, ODE and PhysX”, ICRA 2015 — 不同仿真器的接触行为对比
    • H. J. T. Suh, M. Simchowitz, K. Zhang & R. Tedrake, “Do differentiable simulators give better policy gradients?”, ICML 2022 — 接触的非光滑性如何影响梯度