接触与力控失败案例的确定性复现
把力控失稳从『偶发现象』变成可执行的实验资产:场景、判据、日志、回放,缺一不可。
力控与柔顺控制的失败——接触瞬间的力冲击、刚度失配引发的振荡、接触面法向估计误差导致的 滑移、力控与位控切换时的抖振——在实验中往往偶发、难归因、无法复现。 一次失稳过去之后,剩下的通常只有一段录像和几句口头描述,既不能回放,也不能当作回归测试。
这个模块把失败本身当作实验对象:每一类失稳机制都写成确定性场景(接触刚度 / 阻尼、 表面摩擦、几何法向误差、测量延迟与噪声全部是显式配置项),配一组可执行的失败判据 (力峰值超调、系统能量增长、位置误差发散、接触丢失),固定随机种子后逐样本回放。 目标不是演示控制器『能用』,而是画出它在哪一片参数区间里失效、以什么方式失效。
动力学前馈直接复用动力学建模与参数辨识项目产出的已辨识模型, 本模块不重做辨识,只消费它的结果。
场景库(接触参数 × 误差注入 × 控制器配置) ↓闭环执行(阻抗 / 导纳 / 力位混合,同一接口可替换) ↓全量日志(状态、力、控制量、判据中间量) ↓失败判据求值 → 判定失败类别与触发时刻 ↓固定种子回放 → 同一失败逐样本重现- 场景即配置。每个场景是一份声明式配置:机器人、接触几何、对象侧参数 (刚度、阻尼、摩擦)、注入的误差(法向偏角、延迟拍数、噪声水平)与控制器参数。 扫参实验就是对配置做笛卡尔积,不改代码。
- 控制器同接口可替换。阻抗、导纳与力位混合控制器实现同一个控制接口, 同一场景下可以互换对比——失败是场景的属性还是控制器的属性,必须分得开。
- 判据是断言不是观感。每类失败写成可求值的判据函数(如力超调超过阈值、 储能超过上界、误差范数在时间窗内单调增长),输出失败类别、触发时刻与裕度, 可以直接挂进回归测试。
- 回放优先于截图。日志记录到可以从任意时刻恢复仿真状态的粒度; 同一配置、同一种子重跑,判据触发时刻必须一致。
首批实验尚未跑完,下表先固定指标定义与验收口径,数字与图表待实验报告产出后原位填入:
| 指标 | 口径 | 当前状态 |
|---|---|---|
| 复现率 | 同配置、同种子重跑 N 次,触发同类失败且触发时刻一致的比例 | 待首批报告 |
| 力峰值超调 | 接触建立阶段实测法向力峰值相对期望力的超调比 | 待首批报告 |
| 失稳检出时间 | 判据触发时刻相对失稳起始(人工标注)的滞后 | 待首批报告 |
| 失败参数边界 | 每类失败在(刚度 × 延迟 × 法向误差)参数面上的触发区域 | 待首批报告 |
图表位同样预留:失败参数面热力图、典型失败样本的力 / 能量 / 误差时间线, 由评测脚本从日志成套生成后替换本节占位。
模块的产出物就是失败案例库,每条案例包含配置、日志、判据输出与回放入口。 同时明确声明不在复现范围内的机制:
- 结构柔性与传动环节:MuJoCo 模型是刚体 + 理想执行器,谐波减速器的柔性、 背隙引发的失稳不在本模块范围内;
- 真实传感器噪声谱:注入的噪声是设定模型,不等于某款力传感器的实测谱;
- 软接触假设:MuJoCo 的接触求解是正则化的软接触,与真实刚接触在冲击瞬间的 行为有系统性差异——这条边界会在每份报告里重复声明。
分层沿用 robot_model 的约定:场景、控制器、判据与数据接口不依赖仿真器实现, 仿真只是数据源的一种。接实机时替换采集与执行层,判据函数与报告格式原样保留—— 失败案例库的价值正在于此:实机上触发的失稳可以回到仿真里,在同一套判据下比对。
仓库正在从 Origin 草稿整理发布,公开后此处与上方按钮会替换为具体地址。 发布内容包含全部场景配置、评测脚本与首批失败案例日志,报告可一键重建。