跳到正文
孔乙己

返回成果

接触与力控失败案例的确定性复现

把力控失稳从『偶发现象』变成可执行的实验资产:场景、判据、日志、回放,缺一不可。

我的角色独立完成(场景设计 / 控制器 / 判据与回放工具)
时间2026.10 起
状态仿真实验模块 · 实现中
技术栈Python · MuJoCo · 阻抗 / 导纳控制 · 力位混合控制

力控与柔顺控制的失败——接触瞬间的力冲击、刚度失配引发的振荡、接触面法向估计误差导致的 滑移、力控与位控切换时的抖振——在实验中往往偶发、难归因、无法复现。 一次失稳过去之后,剩下的通常只有一段录像和几句口头描述,既不能回放,也不能当作回归测试。

这个模块把失败本身当作实验对象:每一类失稳机制都写成确定性场景(接触刚度 / 阻尼、 表面摩擦、几何法向误差、测量延迟与噪声全部是显式配置项),配一组可执行的失败判据 (力峰值超调、系统能量增长、位置误差发散、接触丢失),固定随机种子后逐样本回放。 目标不是演示控制器『能用』,而是画出它在哪一片参数区间里失效、以什么方式失效。

动力学前馈直接复用动力学建模与参数辨识项目产出的已辨识模型, 本模块不重做辨识,只消费它的结果。

场景库(接触参数 × 误差注入 × 控制器配置)
↓
闭环执行(阻抗 / 导纳 / 力位混合,同一接口可替换)
↓
全量日志(状态、力、控制量、判据中间量)
↓
失败判据求值 → 判定失败类别与触发时刻
↓
固定种子回放 → 同一失败逐样本重现
  1. 场景即配置。每个场景是一份声明式配置:机器人、接触几何、对象侧参数 (刚度、阻尼、摩擦)、注入的误差(法向偏角、延迟拍数、噪声水平)与控制器参数。 扫参实验就是对配置做笛卡尔积,不改代码。
  2. 控制器同接口可替换。阻抗、导纳与力位混合控制器实现同一个控制接口, 同一场景下可以互换对比——失败是场景的属性还是控制器的属性,必须分得开。
  3. 判据是断言不是观感。每类失败写成可求值的判据函数(如力超调超过阈值、 储能超过上界、误差范数在时间窗内单调增长),输出失败类别、触发时刻与裕度, 可以直接挂进回归测试。
  4. 回放优先于截图。日志记录到可以从任意时刻恢复仿真状态的粒度; 同一配置、同一种子重跑,判据触发时刻必须一致。

首批实验尚未跑完,下表先固定指标定义与验收口径,数字与图表待实验报告产出后原位填入:

指标 口径 当前状态
复现率 同配置、同种子重跑 N 次,触发同类失败且触发时刻一致的比例 待首批报告
力峰值超调 接触建立阶段实测法向力峰值相对期望力的超调比 待首批报告
失稳检出时间 判据触发时刻相对失稳起始(人工标注)的滞后 待首批报告
失败参数边界 每类失败在(刚度 × 延迟 × 法向误差)参数面上的触发区域 待首批报告

图表位同样预留:失败参数面热力图、典型失败样本的力 / 能量 / 误差时间线, 由评测脚本从日志成套生成后替换本节占位。

模块的产出物就是失败案例库,每条案例包含配置、日志、判据输出与回放入口。 同时明确声明不在复现范围内的机制:

  • 结构柔性与传动环节:MuJoCo 模型是刚体 + 理想执行器,谐波减速器的柔性、 背隙引发的失稳不在本模块范围内;
  • 真实传感器噪声谱:注入的噪声是设定模型,不等于某款力传感器的实测谱;
  • 软接触假设:MuJoCo 的接触求解是正则化的软接触,与真实刚接触在冲击瞬间的 行为有系统性差异——这条边界会在每份报告里重复声明。

分层沿用 robot_model 的约定:场景、控制器、判据与数据接口不依赖仿真器实现, 仿真只是数据源的一种。接实机时替换采集与执行层,判据函数与报告格式原样保留—— 失败案例库的价值正在于此:实机上触发的失稳可以回到仿真里,在同一套判据下比对。

仓库正在从 Origin 草稿整理发布,公开后此处与上方按钮会替换为具体地址。 发布内容包含全部场景配置、评测脚本与首批失败案例日志,报告可一键重建。