想象你把手指按在一块冰凉的果冻上。指尖刚碰到时,果冻表面微微凹陷,然后把你往回“顶”——这是法向接触力;你突然发力往下压,果冻来不及变形就传来一股“硬邦邦”的抵抗——这是阻尼;压到一半你想横着把它搓走,它却先赖着不动,直到你加大力气才“啵”地滑出去——这是静摩擦与动摩擦的分界;而如果你从太偏的角度去推,果冻会干脆地飞走——那便是摩擦锥之外的“失稳区”。机器人灵巧操作(抓取、插孔、打磨)的每一步,本质上都在回答同一个问题:手指该用多大、什么方向的力去“碰”,才既不会捏坏物体、也不会让它滑脱?本文就用这套“指尖推果冻”的直觉,讲透接触建模的三大支柱:法向力的弹簧阻尼描述、非线性 Hunt-Crossley 修正,以及切向摩擦与摩擦锥约束。
学懂接触建模,是机器人力控、物理仿真与灵巧操作工程的数学地基;不理解它,就难以解释仿真“爆震”、抓取滑脱等真实工程问题。
可视化演示
\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 是接触合力指尖在接触点感受到的完整作用力向量,包含挤压与摩擦的全部信息。
- n̂ 是法向单位向量垂直指向接触表面的方向,代表“往果冻里扎”的那条线。
- F_n 是法向力大小它决定果冻凹陷深度,由后续的弹簧阻尼或 Hunt-Crossley 模型计算。
- t̂ 是切向单位向量沿接触表面的方向,代表“在果冻上搓动”的那条线。
- F_t 是切向力大小它与滑动趋势相关,由库仑摩擦模型与摩擦锥约束给出。
弹簧阻尼模型
把手指缓缓压向果冻,果冻像弹簧:压得越深,顶回来的力越大。可如果你猛地一掌拍下去,果冻却显得异常“硬”,仿佛里面藏着黏稠的汁液在抵抗急速形变——这就是阻尼。弹簧阻尼模型朴素地抓住了这两点:法向力等于弹簧项加上阻尼项。
记 x 为压入深度,ẋ 为压入速度。弹簧项 k·x 说的是“深度乘以刚度”:果冻越板实,k 越大;阻尼项 c·ẋ 说的是“速度乘以阻尼系数”:压得越快,汁液来不及让路,阻力越大。两者相加就得到最经典的线性接触力模型。
该模型广泛用于简单物理引擎与触觉渲染,因为计算极廉价、调节直观。但它的软肋是“线性”:一根弹簧从压缩到压死,刚度始终不变,这与真实材料“越压越硬”的普遍特性不符。公式如下:
弹簧阻尼模型像一张老式弹簧床垫:躺上去软硬分明,但床垫压到底后就硌到木板。真实果冻不会这么“耿直”——它越压越硬,这正是下一节 Hunt-Crossley 模型要补的课。
- F_n 是法向接触力垂直于接触面的总压力,方向指向把两物体推开的一侧。
- x 是压入深度物体表面相互嵌入的量,相当于果冻被手指压出的凹陷有多深。
- k 是刚度系数衡量材料“硬不硬”,k 越大同样深度产生的弹力越大。
- ẋ 是压入速度深度随时间的变化率,表示手指下压得快还是慢。
- c 是阻尼系数衡量材料“黏不黏”,c 越大速度引起的阻力越大。
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 四个参数里。法向的剧本到此完整,接下来把目光转向切向的摩擦力学。
- x^n 是非线性深度项n 控制硬化速度,n=1 退化为线性弹簧,n=1.5 对应赫兹球面接触。
- k 依然是刚度系数但有效刚度 k·x^(n-1) 随深度增长,实现“越压越硬”。
- x^m 是阻尼深度因子保证物体尚未接触(x=0)时阻尼为零,避免非物理的黏性力。
- c·x^m·ẋ 是速度阻尼项阻尼力与压入速度成正比,速度越快能量耗散越多,如同果冻汁液的黏滞。
库仑摩擦模型
手指按在果冻上,想横着把它推走。一开始用小力,果冻纹丝不动——静摩擦把它“咬住”了;逐渐加力到某个临界值,果冻突然“啵”地滑出,之后维持滑动反而更轻松。这就是库仑摩擦的经典面貌。
库仑摩擦把摩擦力写成两段:当切向力未超过极限 μFn 时,物体保持静止,摩擦力自动等于外界切向力(静摩擦);一旦超过极限,物体滑动,摩擦力方向与相对滑动速度相反,大小恒为 μk·Fn(动摩擦)。静摩擦系数通常比动摩擦系数略大,这正是“从静止到运动需要更大推力”的原因。
数学上,静摩擦是一个不等式约束,动摩擦是一个带符号函数的表达式,二者切换产生著名的“粘滑现象”,在低速打磨、机械臂关节爬行中都能观察到。库仑摩擦建模如下:
库仑摩擦把切向剧本写成了“不滑则咬、一滑就逆”。但切向力与法向力并不是孤立的——它们被一个漂亮的几何体联系起来,那就是下一节的摩擦锥。
- |F_t| 是切向力幅值外界施加在接触面上的切向力大小,相当于你横着推果冻的力。
- μ_s 是静摩擦系数决定“咬住不动”的临界宽度,μs 越大越难推动。
- μ_k 是动摩擦系数滑动时的摩擦强度,通常略小于 μs,所以滑动后反而更好推。
- sign(ẋ_t) 是方向符号摩擦力永远与相对速度方向相反,像果冻滑走时指尖的逆向阻挡。
摩擦锥约束
把库仑摩擦画在纸上,你会得到一个倒立的锥形漏斗:锥轴竖直向上代表法向,锥面张开的角度由摩擦系数决定。只要接触合力的方向落在这个锥体内,物体就绝对不滑动;一旦合力偏出锥面,滑动立刻发生。这就像推果冻:方向越“正”,越不容易滑走。
锥的半角 α 满足 tan α = μ。法向力 Fn 越大,锥的“边长”越长,意味着能容纳的切向力空间越大——这解释了为什么“按得越紧越难打滑”:加大了 Fn,摩擦锥整体变大,安全区更宽。
在多指抓取或接触力优化问题中,锥约束必须写成矩阵或不等式形式参与求解。由于非线性圆锥约束计算较贵,工程中常用内接多边形棱锥来近似(线性化摩擦锥);而“力闭合”则要求所有接触点的摩擦锥交集能包住任意方向的外力,这是抓取稳定的核心判据。
摩擦锥就像果冻的“安全推挤范围”:在锥内它任你摆布,在锥外它决绝滑走。现在,我们把法向与切向两套剧本搬进计算机仿真,看看时间步长如何决定成败。
- α 是摩擦锥半角锥面与法向轴线的夹角,等于 arctan μ。
- μ 是摩擦系数μ 越大锥越胖,物体越“咬得住”,但 μ 本身不随压力改变。
- ‖F_t‖ 是切向力二维范数真实三维接触中切向力有两个分量,范数表示合矢量长度。
- 锥约束不等式切向合矢量长度不超过 μFn 即落在锥内,物体稳定;超出即滑移。
数值仿真稳定性
在仿真世界里,果冻与被按物体的“碰触”是按帧计算的:每个时间步 dt 更新一次位置和速度。如果 dt 太大,就像用慢速快门拍高速弹跳的果冻——漏掉接触瞬间,下一帧深度已经深得离谱,产生巨大接触力把物体“炸”飞。这就是显式积分著名的发散问题。
接触模型的等效刚度 k 决定了系统自然频率 ω = √(k/m)。显式欧拉积分的稳定条件是 Δt ≤ 2/ω:弹簧越硬、物体越轻,自然频率越高,要求的时间步长就越小。所以盲目调大刚度,仿真立刻不稳——这是新手最容易踩的坑。
工程上常用三类对策:一是选用隐式或半隐式积分,像“先知”一样预判下一步状态,稳定裕度大得多;二是在检测到穿透后施加“穿透修正”,把物体推回表面,例如投影高斯-赛德尔求解器;三是用 Hunt-Crossley 这类连续力模型,避免 x=0 处的力跳变带来的高频激励。稳定条件如下:
仿真稳定就像给果冻的弹跳装上一台高速摄影机——帧率不够,一切都会崩坏。理解了步长与刚度的博弈,你才真正明白为什么接触模型要“又准又软”。最后一个问题:这些数学如何落进真实的机器人手上?
- Δt 是仿真时间步长两帧物理更新之间的间隔,相当于动画的帧间时长。
- ω_n 是系统自然频率弹簧-质量系统来回振动的固有快慢,刚度越大频率越高。
- 2/ω 是稳定上界显式积分下步长超过该值,每步误差被放大,模拟立刻发散。
- 等效改写把 ω 替换成 √(k/m),得到最常用的临界步长判定式。
力控操作应用
机器人灵巧手要像你的手指一样按果冻,就必须有“手感”。直接位置控制像用僵硬的手指猛戳——要么没碰上,要么一碰上就把果冻压爆。力控操作的本质,是把接触建模塞进控制回路,让机器人“边碰边感受”。
阻抗控制是其中最经典的一族:它把机器人的期望运动行为整定成一个弹簧-质量-阻尼系统。接触力大时,机器人像弹簧一样“让开”;接触力小时,它主动“跟进”,从而与未知环境保持期望的柔顺接触。打磨时这一策略用于保持恒定法向压力,插孔时则把摩擦锥作为引导约束,保证插入方向始终位于安全区域。
抓取规划则直接使用摩擦锥约束做优化:求解器寻找一组接触力,使每个接触点合力均在各自摩擦锥内,同时满足力与力矩平衡。如果找不到这样的解,说明被抓物体在某个方向会滑动——即未达“力闭合”,需要调整手爪姿态或增大预紧力。目标阻抗方程如下:
从指尖碰果冻到机器人打磨曲面,接触建模始终是那只看不见的手:法向剧本负责“多大力压”,摩擦锥负责“什么方向推”,阻抗控制负责“以什么姿态让”。三块拼图合起来,才构成一台真正“心灵手巧”的机器人。
- F_ext 是环境反力接触时物体施加的反馈力,打磨时即是法向接触力。
- e 是位置偏差期望轨迹与实际位置的差,相当于虚拟弹簧当前的“形变量”。
- k_d 是目标刚度调它就像调节果冻的硬度目标,越大越“刚”、越小越“柔”。
- b_d 是目标阻尼抑制回弹震荡,调大后机械臂变得“黏而不抖”。
- m_d 是目标质量决定接触瞬间的冲击响应惯性,调大可避免高频震颤。
AI 应用场景
力控打磨机器人的恒力跟踪
阶段:力/位混合控制策略制定与仿真验证
解决的问题:传统位置控制打磨曲面时,工件硬度不均导致压力忽大忽小——压猛了烧焦表面,压轻了磨不掉毛刺;凭经验调 PID 又难以迁移到新工件。利用 Hunt-Crossley 模型在线估计接触深度与法向力,配合阻抗控制将接触力稳定在期望值附近,无需精确工件模型即可适应材质变化。
具体案例:某 3C 外壳打磨工位部署六维力传感器与阻抗控制器,控制器内嵌 Hunt-Crossley 力观测器,设定目标压力 8N。当曲面凸起导致深度增大时,观测器提前估算力增量并让机械臂沿法向后退 0.3mm,压力波动从 ±4N 降至 ±1.2N,良率提升约 15%。
灵巧手抓取的摩擦锥可行性验证
阶段:抓取规划与稳定性校验
解决的问题:多指抓取时接触力不当导致物体滑脱,传统方法靠反复试错。现在抓取规划器将每个接触点的力约束写成“摩擦锥内”的锥约束,用二阶锥规划(SOCP)求解一组满足力平衡且全部落在锥内的接触力;若不可行,则判定该抓取不稳定,自动换一个预抓取姿态。
具体案例:仓储机械臂抓取光滑塑料盒时,使用摩擦锥约束与力闭合检验后,规划器自动挑选法向力更大的接触姿态,成功率从 61% 提升到 89%,同时夹爪的预设压力也根据 μFn 的下限自适应调节,避免捏碎盒体。
Python 演示
# -*- 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))
if depth <= 0.0:防呆检查:没有压入深度就没有接触力,避免“隔空产生力”。f = self.k * depth ** self.n + self.c * depth ** self.m * depth_rateHunt-Crossley 公式落地:指数项实现非线性硬化,深度因子耦合阻尼。limit = self.mu * f_n计算摩擦锥的切向力上限 μFn,也就是“咬住”的临界值。if abs(f_t) <= limit:锥内判定:切向力没超上限就静摩擦咬住,返回原力。f_n = model.normal_force(depth, -vy) if depth > 0 else 0.0主循环里根据实时深度和压入速度计算法向力。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. 弹簧阻尼模型中,法向力由哪两部分组成?
- A.弹簧项与阻尼项← 正确答案
- B.静摩擦与动摩擦
- C.法向力与切向力
- D.重力与支持力
答案:A。弹簧阻尼模型 Fn = k·x + c·ẋ,弹簧项对应形变回弹,阻尼项对应速度耗能,好比果冻的弹性与黏滞。静摩擦、动摩擦属于切向范畴,重力支持力则是外部载荷,不是模型自身的组成。
Q2. Hunt-Crossley 模型与线性弹簧阻尼模型最大的区别是什么?
- A.额外叠加了重力项
- B.刚度随深度非线性增大← 正确答案
- C.摩擦力替代了弹簧力
- D.仅适用于完全刚体
答案:B。Hunt-Crossley 的核心是把弹簧项写成 k·xⁿ,等效刚度随深度增长,实现“越压越硬”,就像果冻深压时变硬。它并不增加重力,也不替代摩擦力,更不要求刚体假设。
Q3. 摩擦锥的半角 α 由什么决定?
- A.弹簧的刚度系数 k
- B.摩擦系数的反正切值← 正确答案
- C.物体的压入速度大小
- D.阻尼项的耗能系数
答案:B。摩擦锥半角满足 tan α = μ,因此 α = arctan μ,只由摩擦系数决定。刚度影响法向力大小,压入速度影响阻尼项,但它们都不改变锥的张角,只是改变锥的“高度”。
Q4. 关于库仑摩擦,下列说法正确的有?
- A.静摩擦系数通常大于动摩擦系数← 正确答案
- B.滑动时摩擦力与相对速度反向← 正确答案
- C.静摩擦可维持物体静止不做功← 正确答案
- D.摩擦力恒等于μFn与面积无关
答案:ABC。静摩擦系数通常略大于动摩擦,所以“推动比维持滑动更费力”;滑动摩擦力方向与相对速度相反;静摩擦可让物体静止而不做功。D 错误——静摩擦是“不超过” μFn,不一定恒等于 μFn。
Q5. 显式积分求解接触仿真时,时间步长应满足什么条件才能稳定?
- A.时间步长可任意取大值
- B.小于临界步长 2/√(k/m)← 正确答案
- C.必须大于系统自然周期
- D.与接触力模型完全无关
答案:B。显式积分稳定条件为 Δt ≤ 2/ω = 2√(m/k),步长必须小于临界值,否则误差被放大导致爆震。步长取大、大于自然周期、与模型无关都是错误说法,刚度越大反而要求步长越小。
Q6. 关于摩擦锥约束与力闭合,理解正确的是?
- A.力闭合指多个摩擦锥包住任意方向外力← 正确答案
- B.线性摩擦锥用内接多边形近似圆锥← 正确答案
- C.抓取稳定要求接触力均在锥内← 正确答案
- D.锥半角随法向力增大而变大
答案:ABC。力闭合要求所有接触点摩擦锥的并集能包住任意方向外力;计算中常用内接多边形棱锥线性化;力锥内是抓取稳定的必要条件。D 错——半角只由 μ 决定,法向力增大只是让锥变高变长。
Q7. Hunt-Crossley 模型相比线性模型,在 x=0 处的力行为是?
- A.产生恒定初始碰撞冲量
- B.力从零连续增长无跳变← 正确答案
- C.在原点处力趋近无穷大
- D.初始力完全由阻尼决定
答案:B。由于每项都含 x 的正幂次,Hunt-Crossley 在 x=0 处力为零且连续增长,没有线性模型“一接触就跳变”的冲击,这正是它数值稳定性更好的原因,也更符合果冻“轻触无感、深压有力”的直觉。
Q8. 机器人打磨工件时,要让法向接触力保持恒定,最适合采用?
- A.位置控制硬碰硬接触
- B.阻抗或导纳力控策略← 正确答案
- C.纯开环的位置轨迹
- D.加大关节摩擦系数
答案:B。阻抗控制把机械臂整定成“可调软硬的弹簧”,接触力大时让开、小时跟进,从而维持恒力打磨。位置控制在接触未知曲面时易产生超压,开环轨迹无法感知力变化,加大关节摩擦更与恒力无关。
Q9. 关于接触仿真中的罚函数法与穿透修正,正确的是?
- A.罚函数法允许微小穿透并回复← 正确答案
- B.穿透越深时恢复力越大← 正确答案
- C.罚函数法须彻底禁止穿透
- D.阻尼项可抑制回弹震荡← 正确答案
答案:ABD。罚函数法通过“允许微小穿透产生回复力”来模拟接触,穿透越深力越大;阻尼项可耗散能量抑制回弹震荡。C 错——罚函数的本质就是容忍小穿透,彻底禁止穿透需要改用硬约束求解器。
Q10. 摩擦锥约束在接触力优化求解时通常如何近似处理?
- A.求解时直接忽略切向力
- B.用内接多边形线性锥近似← 正确答案
- C.将摩擦系数整体置为 0
- D.改用硬约束替代软约束
答案:B。三维圆锥约束非线性强、求解慢,工程上常用内接多边形棱锥做线性近似,把 SOCP 问题转化为线性约束。忽略切向力或把 μ 置零都会丢失摩擦信息,硬约束则与“允许穿透的罚函数”思路相反。