想象你把手指按在一块冰凉的果冻上。指尖刚碰到时,果冻表面微微凹陷,然后把你往回“顶”——这是法向接触力;你突然发力往下压,果冻来不及变形就传来一股“硬邦邦”的抵抗——这是阻尼;压到一半你想横着把它搓走,它却先赖着不动,直到你加大力气才“啵”地滑出去——这是静摩擦与动摩擦的分界;而如果你从太偏的角度去推,果冻会干脆地飞走——那便是摩擦锥之外的“失稳区”。机器人灵巧操作(抓取、插孔、打磨)的每一步,本质上都在回答同一个问题:手指该用多大、什么方向的力去“碰”,才既不会捏坏物体、也不会让它滑脱?本文就用这套“指尖推果冻”的直觉,讲透接触建模的三大支柱:法向力的弹簧阻尼描述、非线性 Hunt-Crossley 修正,以及切向摩擦与摩擦锥约束。

岗位关联

学懂接触建模,是机器人力控、物理仿真与灵巧操作工程的数学地基;不理解它,就难以解释仿真“爆震”、抓取滑脱等真实工程问题。

目录
  1. 可视化演示
  2. 接触力学基础
  3. 弹簧阻尼模型
  4. Hunt-Crossley 模型
  5. 库仑摩擦模型
  6. 摩擦锥约束
  7. 数值仿真稳定性
  8. 力控操作应用
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

\u5c55\u793a\u4e94\u7ea7\u6307\u4ee4\u6d41\u6c34\u7ebf\u7684\u5e76\u884c\u6267\u884c\u8fc7\u7a0b\uff0c\u5305\u62ec\u53d6\u6307\u3001\u8bd1\u7801\u3001\u6267\u884c\u3001\u8bbf\u5b58\u3001\u5199\u56de\u4e94\u4e2a\u9636\u6bb5\u7684\u91cd\u53e0\u8fd0\u884c\u3002

本节配有交互动效(进入视口后自动加载,约 3KB)。

\u4e94\u7ea7\u6d41\u6c34\u7ebf\u5e76\u884c\u6267\u884c IF\u53d6\u6307\u2192ID\u8bd1\u7801\u2192EX\u6267\u884c\u2192MEM\u8bbf\u5b58\u2192WB\u5199\u56de CPI \u2248 1 + \u505c\u987f\u7387 \u6bcf\u4e2a\u65f6\u949f\u5468\u671f\u5b8c\u6210\u4e00\u6761\u6307\u4ee4\u7684\u4e00\u4e2a\u9636\u6bb5

接触力学基础

用指尖碰果冻之前,你得先搞清两件事:手指落在哪儿、力往哪边使。接触建模的第一步,就是把“落点”升级为一个局部坐标系——垂直扎进果冻的方向叫法向,贴着果冻表面蹭的方向叫切向。切蛋糕时刀锋既有往下压的力,也有往前推的力,正是同一个道理。

物理上,机器人手指与物体的接触可以抽象为一个“接触点”。以接触点为中心建立坐标系,把手指施加的任意方向的力拆成法向分量与切向分量:法向管“压入多深”,切向管“会不会滑动”。此后两个方向各走各路——法向力交给弹簧阻尼模型,切向力交给摩擦模型,互不打扰。

刚体假设下接触点是一个完美尖点,不存在形变;但真实的柔顺接触需要“穿透量”来生成力。因此接触建模的隐藏前提是允许微小穿透:把接触点当作一个虚拟弹簧座,穿透深度就是它的形变量。力分解的公式如下:

有了坐标系,后面的故事就有了舞台:法向是“压”的剧本,切向是“滑”的剧本。接下来先讲法向——这正是弹簧阻尼模型登场的时刻。

F=Fn n^+Ft t^\displaystyle \mathbf{F} = F_n\,\hat{\mathbf{n}} + F_t\,\hat{\mathbf{t}}
合力的意思是:指尖感受到的总力,等于“往果冻里压”的法向力加上“在果冻表面蹭”的切向力。法向与切向从此分开建模。
  1. F 是接触合力指尖在接触点感受到的完整作用力向量,包含挤压与摩擦的全部信息。
    F\mathbf{F}
  2. n̂ 是法向单位向量垂直指向接触表面的方向,代表“往果冻里扎”的那条线。
    n^\hat{\mathbf{n}}
  3. F_n 是法向力大小它决定果冻凹陷深度,由后续的弹簧阻尼或 Hunt-Crossley 模型计算。
    Fn n^F_n\,\hat{\mathbf{n}}
  4. t̂ 是切向单位向量沿接触表面的方向,代表“在果冻上搓动”的那条线。
    t^\hat{\mathbf{t}}
  5. F_t 是切向力大小它与滑动趋势相关,由库仑摩擦模型与摩擦锥约束给出。
    Ft t^F_t\,\hat{\mathbf{t}}

弹簧阻尼模型

把手指缓缓压向果冻,果冻像弹簧:压得越深,顶回来的力越大。可如果你猛地一掌拍下去,果冻却显得异常“硬”,仿佛里面藏着黏稠的汁液在抵抗急速形变——这就是阻尼。弹簧阻尼模型朴素地抓住了这两点:法向力等于弹簧项加上阻尼项。

记 x 为压入深度,ẋ 为压入速度。弹簧项 k·x 说的是“深度乘以刚度”:果冻越板实,k 越大;阻尼项 c·ẋ 说的是“速度乘以阻尼系数”:压得越快,汁液来不及让路,阻力越大。两者相加就得到最经典的线性接触力模型。

该模型广泛用于简单物理引擎与触觉渲染,因为计算极廉价、调节直观。但它的软肋是“线性”:一根弹簧从压缩到压死,刚度始终不变,这与真实材料“越压越硬”的普遍特性不符。公式如下:

弹簧阻尼模型像一张老式弹簧床垫:躺上去软硬分明,但床垫压到底后就硌到木板。真实果冻不会这么“耿直”——它越压越硬,这正是下一节 Hunt-Crossley 模型要补的课。

Fn=k x+c x˙\displaystyle F_n = k\,x + c\,\dot{x}
法向力由两部分合成:k·x 管“压得越深弹得越狠”(弹簧),c·ẋ 管“压得越快顶得越猛”(阻尼)。
  1. F_n 是法向接触力垂直于接触面的总压力,方向指向把两物体推开的一侧。
    FnF_n
  2. x 是压入深度物体表面相互嵌入的量,相当于果冻被手指压出的凹陷有多深。
    xx
  3. k 是刚度系数衡量材料“硬不硬”,k 越大同样深度产生的弹力越大。
    k xk\,x
  4. ẋ 是压入速度深度随时间的变化率,表示手指下压得快还是慢。
    x˙\dot{x}
  5. c 是阻尼系数衡量材料“黏不黏”,c 越大速度引起的阻力越大。
    c x˙c\,\dot{x}

Hunt-Crossley 模型

果冻的脾气是:浅压时温柔,深压时倔强。手指刚触到表面几乎不费劲,陷到一半明显变硬,快压透时简直像按在木板上。弹簧阻尼模型无法描述这种渐进硬化,Hunt-Crossley 模型在 1975 年带着一个指数登场。

Hunt-Crossley 模型把弹簧项改成 k·xⁿ,指数 n 通常取 1.0~2.0(赫兹接触理论给出 n=1.5),于是深度越大等效刚度越大,自然呈现出“越压越硬”。更妙的是阻尼项也被乘上 xᵐ:只有当两物体真正接触(x>0)时阻尼才存在,自动消除了“还没碰上就产生黏性力”的物理悖论。

由于每一项都带 x 的正幂次,接触力在 x=0 处从零连续增长,没有线性弹簧阻尼模型的“初始碰撞跳变”,这让仿真数值稳定性和触觉渲染真实感大幅提升。该模型的阻尼参数还与碰撞恢复系数有解析关系,可以从实验反弹数据反推参数。

用 Hunt-Crossley 描述果冻,就像给它建了一份“压力-凹陷体检报告”:浅压柔软、深压坚韧、快压黏滞,全部浓缩在 n、m、k、c 四个参数里。法向的剧本到此完整,接下来把目光转向切向的摩擦力学。

Fn=k xn+c xm x˙,m>0\displaystyle F_n = k\,x^n + c\,x^m\,\dot{x}, \qquad m > 0
两个关键变化:弹簧项不再是直线,而是随深度加速上升的曲线——果冻越压越硬;阻尼项也带深度因子,没接触时就没有阻尼,消除了“隔空黏手”的怪现象。
  1. x^n 是非线性深度项n 控制硬化速度,n=1 退化为线性弹簧,n=1.5 对应赫兹球面接触。
    xnx^n
  2. k 依然是刚度系数但有效刚度 k·x^(n-1) 随深度增长,实现“越压越硬”。
    k xnk\,x^n
  3. x^m 是阻尼深度因子保证物体尚未接触(x=0)时阻尼为零,避免非物理的黏性力。
    xmx^m
  4. c·x^m·ẋ 是速度阻尼项阻尼力与压入速度成正比,速度越快能量耗散越多,如同果冻汁液的黏滞。
    c xm x˙c\,x^m\,\dot{x}

库仑摩擦模型

手指按在果冻上,想横着把它推走。一开始用小力,果冻纹丝不动——静摩擦把它“咬住”了;逐渐加力到某个临界值,果冻突然“啵”地滑出,之后维持滑动反而更轻松。这就是库仑摩擦的经典面貌。

库仑摩擦把摩擦力写成两段:当切向力未超过极限 μFn 时,物体保持静止,摩擦力自动等于外界切向力(静摩擦);一旦超过极限,物体滑动,摩擦力方向与相对滑动速度相反,大小恒为 μk·Fn(动摩擦)。静摩擦系数通常比动摩擦系数略大,这正是“从静止到运动需要更大推力”的原因。

数学上,静摩擦是一个不等式约束,动摩擦是一个带符号函数的表达式,二者切换产生著名的“粘滑现象”,在低速打磨、机械臂关节爬行中都能观察到。库仑摩擦建模如下:

库仑摩擦把切向剧本写成了“不滑则咬、一滑就逆”。但切向力与法向力并不是孤立的——它们被一个漂亮的几何体联系起来,那就是下一节的摩擦锥。

∣Ft∣≤μsFn (静止);Ft=−μkFn sign(x˙t) (滑动)\displaystyle |F_t| \le \mu_s F_n\ (\text{静止}); \qquad F_t = -\mu_k F_n\,\mathrm{sign}(\dot{x}_t)\ (\text{滑动})
前一半:切向力小的时候摩擦力自动抵消推力,物体赖着不动;后一半:一旦超过临界,摩擦力变成阻力,方向永远跟滑动方向相反,大小固定为 μFn。
  1. |F_t| 是切向力幅值外界施加在接触面上的切向力大小,相当于你横着推果冻的力。
    ∣Ft∣|F_t|
  2. μ_s 是静摩擦系数决定“咬住不动”的临界宽度,μs 越大越难推动。
    μsFn\mu_s F_n
  3. μ_k 是动摩擦系数滑动时的摩擦强度,通常略小于 μs,所以滑动后反而更好推。
    μkFn\mu_k F_n
  4. sign(ẋ_t) 是方向符号摩擦力永远与相对速度方向相反,像果冻滑走时指尖的逆向阻挡。
    sign(x˙t)\mathrm{sign}(\dot{x}_t)

摩擦锥约束

把库仑摩擦画在纸上,你会得到一个倒立的锥形漏斗:锥轴竖直向上代表法向,锥面张开的角度由摩擦系数决定。只要接触合力的方向落在这个锥体内,物体就绝对不滑动;一旦合力偏出锥面,滑动立刻发生。这就像推果冻:方向越“正”,越不容易滑走。

锥的半角 α 满足 tan α = μ。法向力 Fn 越大,锥的“边长”越长,意味着能容纳的切向力空间越大——这解释了为什么“按得越紧越难打滑”:加大了 Fn,摩擦锥整体变大,安全区更宽。

在多指抓取或接触力优化问题中,锥约束必须写成矩阵或不等式形式参与求解。由于非线性圆锥约束计算较贵,工程中常用内接多边形棱锥来近似(线性化摩擦锥);而“力闭合”则要求所有接触点的摩擦锥交集能包住任意方向的外力,这是抓取稳定的核心判据。

摩擦锥就像果冻的“安全推挤范围”:在锥内它任你摆布,在锥外它决绝滑走。现在,我们把法向与切向两套剧本搬进计算机仿真,看看时间步长如何决定成败。

α=arctan⁡μ,∥Ft∥≤μFn\displaystyle \alpha = \arctan\mu, \qquad \lVert F_t \rVert \le \mu F_n
摩擦锥的半角由摩擦系数唯一决定:μ 越大锥越宽。注意锥的“胖瘦”不随压力变化,但法向力越大锥越高大,允许的切向力上限同步增加。
  1. α 是摩擦锥半角锥面与法向轴线的夹角,等于 arctan μ。
    α=arctan⁡μ\alpha = \arctan\mu
  2. μ 是摩擦系数μ 越大锥越胖,物体越“咬得住”,但 μ 本身不随压力改变。
    μ\mu
  3. ‖F_t‖ 是切向力二维范数真实三维接触中切向力有两个分量,范数表示合矢量长度。
    ∥Ft∥\lVert F_t \rVert
  4. 锥约束不等式切向合矢量长度不超过 μFn 即落在锥内,物体稳定;超出即滑移。
    ∥Ft∥≤μFn\lVert F_t \rVert \le \mu F_n

数值仿真稳定性

在仿真世界里,果冻与被按物体的“碰触”是按帧计算的:每个时间步 dt 更新一次位置和速度。如果 dt 太大,就像用慢速快门拍高速弹跳的果冻——漏掉接触瞬间,下一帧深度已经深得离谱,产生巨大接触力把物体“炸”飞。这就是显式积分著名的发散问题。

接触模型的等效刚度 k 决定了系统自然频率 ω = √(k/m)。显式欧拉积分的稳定条件是 Δt ≤ 2/ω:弹簧越硬、物体越轻,自然频率越高,要求的时间步长就越小。所以盲目调大刚度,仿真立刻不稳——这是新手最容易踩的坑。

工程上常用三类对策:一是选用隐式或半隐式积分,像“先知”一样预判下一步状态,稳定裕度大得多;二是在检测到穿透后施加“穿透修正”,把物体推回表面,例如投影高斯-赛德尔求解器;三是用 Hunt-Crossley 这类连续力模型,避免 x=0 处的力跳变带来的高频激励。稳定条件如下:

仿真稳定就像给果冻的弹跳装上一台高速摄影机——帧率不够,一切都会崩坏。理解了步长与刚度的博弈,你才真正明白为什么接触模型要“又准又软”。最后一个问题:这些数学如何落进真实的机器人手上?

Δt≤2ωn=2mk\displaystyle \Delta t \le \frac{2}{\omega_n} = 2\sqrt{\frac{m}{k}}
时间步长得足够小,才能跟上“弹簧+质量”系统的自然振动节奏;刚度越大、质量越小,允许的步长就越短。这解释了为什么“仿真里把刚度调太大”常常直接爆震。
  1. Δt 是仿真时间步长两帧物理更新之间的间隔,相当于动画的帧间时长。
    Δt\Delta t
  2. ω_n 是系统自然频率弹簧-质量系统来回振动的固有快慢,刚度越大频率越高。
    ωn=km\omega_n = \sqrt{\dfrac{k}{m}}
  3. 2/ω 是稳定上界显式积分下步长超过该值,每步误差被放大,模拟立刻发散。
    2ωn\frac{2}{\omega_n}
  4. 等效改写把 ω 替换成 √(k/m),得到最常用的临界步长判定式。
    2mk2\sqrt{\dfrac{m}{k}}

力控操作应用

机器人灵巧手要像你的手指一样按果冻,就必须有“手感”。直接位置控制像用僵硬的手指猛戳——要么没碰上,要么一碰上就把果冻压爆。力控操作的本质,是把接触建模塞进控制回路,让机器人“边碰边感受”。

阻抗控制是其中最经典的一族:它把机器人的期望运动行为整定成一个弹簧-质量-阻尼系统。接触力大时,机器人像弹簧一样“让开”;接触力小时,它主动“跟进”,从而与未知环境保持期望的柔顺接触。打磨时这一策略用于保持恒定法向压力,插孔时则把摩擦锥作为引导约束,保证插入方向始终位于安全区域。

抓取规划则直接使用摩擦锥约束做优化:求解器寻找一组接触力,使每个接触点合力均在各自摩擦锥内,同时满足力与力矩平衡。如果找不到这样的解,说明被抓物体在某个方向会滑动——即未达“力闭合”,需要调整手爪姿态或增大预紧力。目标阻抗方程如下:

从指尖碰果冻到机器人打磨曲面,接触建模始终是那只看不见的手:法向剧本负责“多大力压”,摩擦锥负责“什么方向推”,阻抗控制负责“以什么姿态让”。三块拼图合起来,才构成一台真正“心灵手巧”的机器人。

Fext=md e¨+bd e˙+kd e\displaystyle F_{\text{ext}} = m_d\,\ddot{e} + b_d\,\dot{e} + k_d\,e
把机器人指尖想象成“带可调软硬度的虚拟弹簧”:e 是期望位置与实际位置的偏差,k_d 决定有多“刚”,b_d 决定有多“黏”,m_d 决定有多“沉”。外力越大,虚拟弹簧让得越多。
  1. F_ext 是环境反力接触时物体施加的反馈力,打磨时即是法向接触力。
    FextF_{\text{ext}}
  2. e 是位置偏差期望轨迹与实际位置的差,相当于虚拟弹簧当前的“形变量”。
    ee
  3. k_d 是目标刚度调它就像调节果冻的硬度目标,越大越“刚”、越小越“柔”。
    kd ek_d\,e
  4. b_d 是目标阻尼抑制回弹震荡,调大后机械臂变得“黏而不抖”。
    bd e˙b_d\,\dot{e}
  5. m_d 是目标质量决定接触瞬间的冲击响应惯性,调大可避免高频震颤。
    md e¨m_d\,\ddot{e}

AI 应用场景

力控打磨机器人的恒力跟踪

阶段:力/位混合控制策略制定与仿真验证

解决的问题:传统位置控制打磨曲面时,工件硬度不均导致压力忽大忽小——压猛了烧焦表面,压轻了磨不掉毛刺;凭经验调 PID 又难以迁移到新工件。利用 Hunt-Crossley 模型在线估计接触深度与法向力,配合阻抗控制将接触力稳定在期望值附近,无需精确工件模型即可适应材质变化。

具体案例:某 3C 外壳打磨工位部署六维力传感器与阻抗控制器,控制器内嵌 Hunt-Crossley 力观测器,设定目标压力 8N。当曲面凸起导致深度增大时,观测器提前估算力增量并让机械臂沿法向后退 0.3mm,压力波动从 ±4N 降至 ±1.2N,良率提升约 15%。

灵巧手抓取的摩擦锥可行性验证

阶段:抓取规划与稳定性校验

解决的问题:多指抓取时接触力不当导致物体滑脱,传统方法靠反复试错。现在抓取规划器将每个接触点的力约束写成“摩擦锥内”的锥约束,用二阶锥规划(SOCP)求解一组满足力平衡且全部落在锥内的接触力;若不可行,则判定该抓取不稳定,自动换一个预抓取姿态。

具体案例:仓储机械臂抓取光滑塑料盒时,使用摩擦锥约束与力闭合检验后,规划器自动挑选法向力更大的接触姿态,成功率从 61% 提升到 89%,同时夹爪的预设压力也根据 μFn 的下限自适应调节,避免捏碎盒体。

Python 演示

python58 行
# -*- coding: utf-8 -*-"""Hunt-Crossley 接触力模型 + 库仑摩擦 + 摩擦锥检查的最小演示""" import math  class ContactModel:    def __init__(self, k=5000.0, c=20.0, n=1.5, m=0.5, mu=0.8):        self.k = k        self.c = c        self.n = n        self.m = m        self.mu = mu     def normal_force(self, depth, depth_rate):        if depth <= 0.0:            return 0.0        f = self.k * depth ** self.n + self.c * depth ** self.m * depth_rate        return f if f > 0.0 else 0.0     def friction_cone_half_angle(self):        return math.atan(self.mu)     def tangential_state(self, f_n, f_t):        limit = self.mu * f_n        if abs(f_t) <= limit:            return f_t, True        direction = 1.0 if f_t > 0 else -1.0        return direction * limit, False  def simulate(dt=5e-5, t_end=0.4, mass=0.5, radius=0.02):    model = ContactModel()    y = 0.05    vy = 0.0    t = 0.0    history = []    while t < t_end:        depth = radius - y        f_n = model.normal_force(depth, -vy) if depth > 0 else 0.0        ay = -9.81 + f_n / mass        vy += ay * dt        y += vy * dt        if depth > 0 and vy < 0.0:            vy = -0.3 * vy        history.append((t, depth if depth > 0 else 0.0, f_n))        t += dt    return history, model  if __name__ == "__main__":    history, model = simulate()    peak = max(h[2] for h in history)    print("模拟步数: %d, 峰值法向力: %.3f N" % (len(history), peak))    print("摩擦锥半角: %.1f 度" % (model.friction_cone_half_angle() * 180 / math.pi))    f_n, f_t = 10.0, 7.0    result, inside = model.tangential_state(f_n, f_t)    print("Fn=%.1f Ft=%.1f -> 锥内? %s, 切向力=%.2f" % (f_n, f_t, inside, result))
目的:模拟一个小球反复落到平面上,用 Hunt-Crossley 模型计算每次接触的法向力,再用库仑摩擦与摩擦锥判断切向力是否会让物体滑移。
  1. if depth <= 0.0:防呆检查:没有压入深度就没有接触力,避免“隔空产生力”。
  2. f = self.k * depth ** self.n + self.c * depth ** self.m * depth_rateHunt-Crossley 公式落地:指数项实现非线性硬化,深度因子耦合阻尼。
  3. limit = self.mu * f_n计算摩擦锥的切向力上限 μFn,也就是“咬住”的临界值。
  4. if abs(f_t) <= limit:锥内判定:切向力没超上限就静摩擦咬住,返回原力。
  5. f_n = model.normal_force(depth, -vy) if depth > 0 else 0.0主循环里根据实时深度和压入速度计算法向力。
  6. vy = -0.3 * vy碰撞后速度反转并衰减,模拟能量损耗,对应碰撞恢复系数。

常见误区

误区我以为把弹簧刚度 k 调到巨大,接触就“硬碰硬”最真实,反正仿真算得快,参数大点肯定更准。

正解刚度越大,系统自然频率 ω = √(k/m) 越高,显式积分要求的时间步长越小;步长跟不上就会数值爆震、物体穿模弹飞。Hunt-Crossley 用非线性指数让“越压越硬”自然呈现,比盲目提高线性刚度更接近真实果冻,也更稳定。

为何常见:直觉上认为“刚性”等于“硬参数”,忽略了数值积分带宽与稳定性之间的强烈耦合。

误区抓不住就调大 μ,把夹具摩擦系数设到 1.0 以上,应该就永不滑动了。

正解μ 只决定摩擦锥的半角,真正决定能承受多大切向力的是 μFn——法向力不够,锥再“胖”也照样滑。而且 μ 过大会让接触力优化问题病态,微小法向力波动就导致切向力跳变。往果冻上撒糖粉增不了摩擦力,用力按住才管用。

为何常见:只看到锥角随 μ 变大,忽略了锥的“高度”由法向力决定,把摩擦锥误当成固定大小。

误区仿真里接触震荡就加阻尼 c,阻尼拉满应该就稳如泰山了。

正解阻尼确实耗散能量抑制震荡,但过大的阻尼(尤其 Hunt-Crossley 中 c·x^m·ẋ)会让接触变得“黏滞”:反弹消失、触感发糊,且隐式求解器收敛变慢。果冻泡水太久变成糊糊,压下去半天不弹起,反而不真实。

为何常见:混淆“数值不稳定”与“机械振动”两类问题,把阻尼当成了万能镇定剂。

误区我画的摩擦锥就是二维坐标系里两条斜线夹出来的三角形,判断摩擦力够不够只看这个 V 形。

正解真实接触的切向力是二维向量(物体可以向任意方向滑),摩擦锥是一个三维圆锥,约束为 ‖F_t‖ ≤ μFn。平面 V 形只是沿某一滑动方向的截面。抓取规划、SOCP 求解都必须使用三维锥或内接多边形棱锥近似。

为何常见:教科书常画二维截面图,初学者把“截面”当“全貌”,忽略了切向力的双自由度。

面试题

Q1. 弹簧阻尼模型中,法向力由哪两部分组成?

单选题 · easy

  • A.弹簧项与阻尼项← 正确答案
  • B.静摩擦与动摩擦
  • C.法向力与切向力
  • D.重力与支持力

答案:A。弹簧阻尼模型 Fn = k·x + c·ẋ,弹簧项对应形变回弹,阻尼项对应速度耗能,好比果冻的弹性与黏滞。静摩擦、动摩擦属于切向范畴,重力支持力则是外部载荷,不是模型自身的组成。

Q2. Hunt-Crossley 模型与线性弹簧阻尼模型最大的区别是什么?

单选题 · easy

  • A.额外叠加了重力项
  • B.刚度随深度非线性增大← 正确答案
  • C.摩擦力替代了弹簧力
  • D.仅适用于完全刚体

答案:B。Hunt-Crossley 的核心是把弹簧项写成 k·xⁿ,等效刚度随深度增长,实现“越压越硬”,就像果冻深压时变硬。它并不增加重力,也不替代摩擦力,更不要求刚体假设。

Q3. 摩擦锥的半角 α 由什么决定?

单选题 · mid

  • A.弹簧的刚度系数 k
  • B.摩擦系数的反正切值← 正确答案
  • C.物体的压入速度大小
  • D.阻尼项的耗能系数

答案:B。摩擦锥半角满足 tan α = μ,因此 α = arctan μ,只由摩擦系数决定。刚度影响法向力大小,压入速度影响阻尼项,但它们都不改变锥的张角,只是改变锥的“高度”。

Q4. 关于库仑摩擦,下列说法正确的有?

多选题 · mid

  • A.静摩擦系数通常大于动摩擦系数← 正确答案
  • B.滑动时摩擦力与相对速度反向← 正确答案
  • C.静摩擦可维持物体静止不做功← 正确答案
  • D.摩擦力恒等于μFn与面积无关

答案:ABC。静摩擦系数通常略大于动摩擦,所以“推动比维持滑动更费力”;滑动摩擦力方向与相对速度相反;静摩擦可让物体静止而不做功。D 错误——静摩擦是“不超过” μFn,不一定恒等于 μFn。

Q5. 显式积分求解接触仿真时,时间步长应满足什么条件才能稳定?

单选题 · mid

  • A.时间步长可任意取大值
  • B.小于临界步长 2/√(k/m)← 正确答案
  • C.必须大于系统自然周期
  • D.与接触力模型完全无关

答案:B。显式积分稳定条件为 Δt ≤ 2/ω = 2√(m/k),步长必须小于临界值,否则误差被放大导致爆震。步长取大、大于自然周期、与模型无关都是错误说法,刚度越大反而要求步长越小。

Q6. 关于摩擦锥约束与力闭合,理解正确的是?

多选题 · hard

  • A.力闭合指多个摩擦锥包住任意方向外力← 正确答案
  • B.线性摩擦锥用内接多边形近似圆锥← 正确答案
  • C.抓取稳定要求接触力均在锥内← 正确答案
  • D.锥半角随法向力增大而变大

答案:ABC。力闭合要求所有接触点摩擦锥的并集能包住任意方向外力;计算中常用内接多边形棱锥线性化;力锥内是抓取稳定的必要条件。D 错——半角只由 μ 决定,法向力增大只是让锥变高变长。

Q7. Hunt-Crossley 模型相比线性模型,在 x=0 处的力行为是?

单选题 · hard

  • A.产生恒定初始碰撞冲量
  • B.力从零连续增长无跳变← 正确答案
  • C.在原点处力趋近无穷大
  • D.初始力完全由阻尼决定

答案:B。由于每项都含 x 的正幂次,Hunt-Crossley 在 x=0 处力为零且连续增长,没有线性模型“一接触就跳变”的冲击,这正是它数值稳定性更好的原因,也更符合果冻“轻触无感、深压有力”的直觉。

Q8. 机器人打磨工件时,要让法向接触力保持恒定,最适合采用?

单选题 · easy

  • A.位置控制硬碰硬接触
  • B.阻抗或导纳力控策略← 正确答案
  • C.纯开环的位置轨迹
  • D.加大关节摩擦系数

答案:B。阻抗控制把机械臂整定成“可调软硬的弹簧”,接触力大时让开、小时跟进,从而维持恒力打磨。位置控制在接触未知曲面时易产生超压,开环轨迹无法感知力变化,加大关节摩擦更与恒力无关。

Q9. 关于接触仿真中的罚函数法与穿透修正,正确的是?

多选题 · mid

  • A.罚函数法允许微小穿透并回复← 正确答案
  • B.穿透越深时恢复力越大← 正确答案
  • C.罚函数法须彻底禁止穿透
  • D.阻尼项可抑制回弹震荡← 正确答案

答案:ABD。罚函数法通过“允许微小穿透产生回复力”来模拟接触,穿透越深力越大;阻尼项可耗散能量抑制回弹震荡。C 错——罚函数的本质就是容忍小穿透,彻底禁止穿透需要改用硬约束求解器。

Q10. 摩擦锥约束在接触力优化求解时通常如何近似处理?

单选题 · extreme

  • A.求解时直接忽略切向力
  • B.用内接多边形线性锥近似← 正确答案
  • C.将摩擦系数整体置为 0
  • D.改用硬约束替代软约束

答案:B。三维圆锥约束非线性强、求解慢,工程上常用内接多边形棱锥做线性近似,把 SOCP 问题转化为线性约束。忽略切向力或把 μ 置零都会丢失摩擦信息,硬约束则与“允许穿透的罚函数”思路相反。