6.2 接触与摩擦参数排错实录:从抖动到稳定


6.2 接触与摩擦参数排错实录:从抖动到稳定

本节摘要:接触抖动、莫名穿透、该滑的滑该停的停——接触参数病是仿真故障里最高发的门类,而它的诊断路径完全有章可循。本节用一次完整的排错实录示范「从现象倒推参数」的思考过程:抄体检单、查步长、对 solref、验惯量、审摩擦,五步走完,抖动的病根现形。文末把三类接触病(抖动、穿透、打滑)各自的处方压成对照卡。

3.2 讲清了软约束模型的原理,本节把它用起来——以一名排错者的视角,完整走一遍「机器人站在地上高频打摆」的诊疗过程。这个症状在试车场里出镜率最高,堪称接触病的「感冒」。

从一次抖动工单说起

工单描述:双臂机器人固定基座站立,无控制输入、姿态静止,预期纹丝不动;实际现象是脚底与地面接触处持续高频小幅抖动,末端放大后振幅肉眼可见,跑了三十秒不发散也不收敛。提交者已尝试「加大接触刚度」「加大求解迭代」「减小 timestep」,全部无效甚至更糟。

三个已试无效的方案本身就是诊断信息:加大刚度更糟,说明方向反了(软约束的思路是往「适配」调,不是往「硬」怼);减步长无效,说明病根可能不在时间离散;加大迭代无效,说明不是收敛问题。带着这三条线索进入正式流程。

一、第一步:抄体检单

任何接触病的第一站都是 3.2 的四指标体检单——接触数、约束行数、迭代数、残差:

import mujoco import numpy as np model = mujoco.MjModel.from_xml_path("biped.xml") data = mujoco.MjData(model) mujoco.mj_forward(model, data) print("接触数:", data.ncon) print("约束行数:", data.nefc) print("迭代数:", data.solver_niter[0]) # 每个接触的法向与切向信息 for i in range(min(data.ncon, 8)): c = data.contact[i] print(f"接触 {i}: 穿透 {c.dist:.6f} | 维度 condim={c.dim}")

工单模型的体检单读数:接触数四(双足各两点,正常)、约束行数十(正常)、迭代数六(收敛快,求解器无罪)、穿透量异常——四个接触的 dist 全部在万分之一米级别持续振荡,正负号每几步翻转一次。穿透在振荡 = 接触力在振荡 = 软垫被高频压缩回弹。病根范围收窄到「软垫参数与系统的匹配」上。

二、第二步:查软垫的时间常数与步长的关系

3.2 的铁律立即上线:solref 时间常数不得小于步长。问提交者三个数:步长两毫秒,solref 默认(时间常数二十毫秒、阻尼比一),模型里脚底 geom 的 solref 被全局 default 改成了「零点零零二、零点八」——时间常数恰好等于步长。这违反铁律的临界情形:软垫要求二十毫秒内压回的动态,步长两毫秒勉强采样,阻尼比又低于一(欠阻尼),回弹过冲,于是「压缩—回弹—再压缩」的振荡闭环比比皆是。

修复与验证一步到位:脚底接触的 solref 时间常数提到零点零五、阻尼比回一,抖动幅度下降八成但未绝迹——参数病常常是多因叠加,治好主因后残留的次因才看得清

三、第三步:惯量与 armature 的回头看

残留的轻微抖动把视线引向 2.2 的惯量纪律。复查模型:脚掌板用薄 box 建模,质量五千克但厚度仅两厘米——薄板的转动惯量本就偏小,加上引擎按 box 均匀分布计算,脚掌绕踝轴的等效惯量偏小,对接触力的高频扰动特别敏感(小惯量配硬约束正是 3.3 点名的「病态组合」)。而真机的脚掌里有电机与减速器,转动惯量远大于薄壳。

处方两层:惯量按真实装配体重填(有 CAD 数据);关节补 armature——踝关节 armature 从零提到零点零一,等效把电机转子惯量折算进来。抖动绝迹,静止标准差进入毫米以下。armature 是「仿真手感和真机手感对齐」的隐蔽旋钮,真机有减速器的关节都值得给它。

四、第四步:摩擦侧的复查

抖动治好后顺手审摩擦(打滑类故障的主战场,这里做预防性检查):椭圆锥默认开(好);impratio 默认一——足式任务的常见处方是提到五到十,让摩擦垫相对法向垫更「硬」,同样的法向波动下摩擦上限波动更小,行走任务里侧向打滑会明显减少;condim 脚底保持三,地面无滚转扭矩需求,不升六。此处没有动刀,因为症状不存在——接触排错的纪律之一是「只治存在的病」,每个参数改动都要有症状指认

图 6-2 接触排错路径:五步流程与三类病的处方入口

图 6-2 接触排错路径:五步流程与三类病的处方入口

五、三类病的对照卡与两条通用纪律

把上面图里的信息再压薄一层,形成随身卡。抖动的顺序:软垫时间常数、阻尼比、armature、最后才步长;穿透先分「稳态深穿」(solimp 深层刚度)与「间歇撞穿」(隧穿,缩步长或加厚碰撞件);打滑先治法向波动(抖动常是它爹),再动摩擦参数。三条病的最后手段都是缩步长——它最有效也最贵,放在流程末尾。

两条通用纪律。纪律一:一次改一项。 本节实录如果第一轮就同时改 solref、armature 与 impratio,治好了也不知道该谢谁,复发时不知道防谁。纪律二:记录进故障笔记。 这次「solref 等于步长加欠阻尼」的组合,你的团队一年内大概率还会写出来第二次——笔记的价值在第二次发病时兑现。

本节要点回顾

  • 体检单开路:接触数、迭代、残差、穿透量四指标先抄,病根范围立即收窄;
  • 软垫铁律:solref 时间常数大于步长(经验留五倍余量),阻尼比一附近防过冲;
  • 惯量与 armature:薄壁件与小惯量件是抖动温床,真机传动惯量用 armature 补齐;
  • 三类病分治:抖动按软垫加惯量治、穿透分稳态与隧穿治、打滑先治法向波动再动摩擦;
  • 两条纪律:一次改一项、沉淀故障笔记,排错是团队资产不是个人记忆。

个例治完了,最后一节上升到方法论:面对任何说不清的异常,怎么系统地查,以及一份能让你少走夜路的故障对照表。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U