学习 / 实践

MuJoCo失联策略:零力不等于停止

具身智能 / 探索 · 工程案例

27回合比较旧观测控制、超时置零与衰减,展示观测超时和物理制动的差别。

进阶 · 10 分钟 · 更新于 2026-10-11 · 步骤 21 / 22

这篇之后,已经有了哪些结果?

保留本文发表时的结论与下一步设想;以下是已发表的后续内容,不代表所有局限都已解决。

继续探索

继续探索

  1. 工程案例

    MuJoCo质量迁移:同一套增益还能用吗?

    36回合对照固定和质量缩放增益,解释更低平均误差为何仍不能通过速度验收。

    10 分钟已发布

浏览统计暂不可用

本文目录 6
跳到正文 ↓
从干净环境复现 · 本篇固定版本

以下为 Windows PowerShell,Python 3.12。使用新的目录;不要在有未保存改动的工程里切换版本。每篇固定提交不同,首篇的旧提交不包含后续实验。

git clone https://github.com/VirtualSelect/hohoo-embodied-agent.git hohoo-embodied-agent-study
cd hohoo-embodied-agent-study
git checkout 1d1faab57e20b352761e9abc736c6d277b505e6b
python -m venv .venv
$py = '.\.venv\Scripts\python.exe'
& $py -m pip install -r requirements-lock.txt
& $py experiments/planar_reliability/run.py --out outputs/my-run
& $py experiments/planar_reliability/audit.py outputs/my-run

预期得到原始轨迹、摘要和审计结果。请使用新的输出目录,避免覆盖旧结果;不同实验对已存在目录的处理并不相同。E8–E10 共用一组实验入口。以上命令不调用模型;先运行数值部分,视频回放按正文单独执行。

排错:找不到实验目录先核对提交;导入失败检查解释器与安装环境;OpenGL 报错仅影响需要渲染的步骤。Linux/macOS 将解释器替换为 .venv/bin/python,尚未在这些平台复测。

查看本篇固定代码 ↗

固定代码 · 原始证据 · 实验档案

通信断了,控制器还在用最后一条位置与速度估计。把输出力设为零,是否就能称为安全停止?在这个无摩擦二维场景中,答案很直接:零力意味着不再加速,不意味着速度变成零。

本篇沿用开发集选中的控制参数,专门比较陈旧观测下的三种力策略。所有物理运动都由MuJoCo推进,没有位置传送或伪造停止结果。

失联检测看的是哪一个时钟

每个样本带捕获时间,收到之后才能用于控制。控制决策时刻减捕获时间得到年龄;重复使用同一个样本不会刷新这个年龄。

传感器采样 → 40ms延迟队列 → 已到达样本 → 估计/控制
                                      ↓
                              当前时刻 - 捕获时刻

固定40ms延迟、3mm位置噪声;控制周期20ms,物理步长2ms。年龄超过100ms时才触发陈旧策略,因此100ms恰好边界仍沿用正常控制。条件有正常通信、0.4–1.0秒丢包、0.4秒后永久丢包;三种子×三条件×三策略,共27回合。

噪声在丢包时仍按固定顺序抽取,只是不把样本放入队列。这样不同策略不会因为随机数消耗顺序不同而得到另一个噪声实验。

三种选择,各自改变哪一步

策略 年龄≤100ms 年龄>100ms
hold 正常PD与限幅 继续按最后观测算PD
zero 正常PD与限幅 力直接置零
fade 正常PD与限幅 已限幅的力线性衰减,200ms后为零

hold不是保持当前位置,它保持的是使用旧信息的控制规则。当前位置已经变了,旧观测误差却还在,控制可能持续向错误方向推。

zero和fade都不是闭环刹车。它们没有新速度观测,也不加入未知的摩擦或制动力模型。程序不会为了得到“停止”图像而把 qvel 直接清零。

短暂丢包和永久失联,结论不同

下表为三个种子的最后300ms位置RMS均值,单位毫米,不是成功率:

通信条件 hold zero fade
正常 2.04 2.04 2.04
0.4–1.0s突发丢包 2.02 2.06 2.05
0.4s后永久失联 16,025.96 2,748.98 2,370.92

永久失联下的实际仿真位置轨迹

正常组结果完全相同,因为样本年龄没有跨过阈值。短暂丢包后,重新获得观测,尾段位置误差又变小;但表格只描述尾段,不应掩盖中间路径。

永久失联时,hold继续推着系统走远;zero停止施力后仍按已有动量滑行;fade改变了力的撤出过程,也没有制动保证。本轮全部27回合都未满足“位置和速度逐步同时达标”的完整契约,包含位置误差看上去很小的正常组。不能把任何一列称作安全赢家。

为什么要保留这个看上去简单的反例

“发送零命令”“控制器停止运行”“执行器进入制动模式”“物体已经停稳”是四种不同事件。软件只验证了第一个,不能把文案写成最后一个。实际机器人还要考虑执行器语义、通信看门狗、机械制动、重力、接触和认证流程;本场景没有这些机制。

这里的100/200ms是冻结教学参数,不是安全标准。换一个质量、目标、初始速度或故障相位,位移就会变。仅测0.4秒这个丢包起点也不足以界定最坏停止距离。

读轨迹的小练习

选择永久失联zero策略,找出 fx/fy 首次归零的行,再看之后的 vx/vy。在无摩擦、无重力模型里,速度应继续存在,审计通过 F=m*a 验证这一点。若你的曲线立刻停住,检查是否无意清空了状态,或场景包含额外阻尼。

选择突发丢包fade策略,核对恢复时的捕获时间:不能把旧样本的重复接收当作通信恢复。下一步若要设计制动策略,需要明确可用观测和执行器能力,不能在控制器中偷偷读取仿真真值来补齐传感器缺口。

最小复现与排错

从干净检出目录运行以下PowerShell命令。输出目录必须尚不存在。同组的三篇文章共用一份冻结协议,只需运行一次,再按各篇的证据分组查看。

git clone https://github.com/VirtualSelect/hohoo-embodied-agent.git hohoo-embodied-agent-study
cd hohoo-embodied-agent-study
git checkout 1d1faab57e20b352761e9abc736c6d277b505e6b
python -m venv .venv
$py = '.\.venv\Scripts\python.exe'
& $py -m pip install -r requirements-lock.txt
& $py -m unittest discover -s experiments/planar_reliability -p "test_*.py"
& $py experiments/planar_reliability/run.py --out outputs/reliability-my-run
& $py experiments/planar_reliability/audit.py outputs/reliability-my-run

本机Windows已验证:Python 3.12.14 + MuJoCo 3.3.7 + NumPy 2.2.6;3项单测、153回合、306000行;独立审计预期输出 PASS。其他操作系统未复测。若只想核验归档,不重新实验,可将审计参数换为 evidence/planar-reliability-20261011。源码哈希统一LF,证据哈希按原字节;不要改写manifest掩盖差异。

若导入失败,先检查安装与运行是否使用同一个 $py。失败输出保留,重跑时换新目录。数值按协议容差复核,耗时是本机观察,不要求复现相同速度。

代码与文章由AI辅助整理,结论以归档且可审计的实际运行记录为限。本轮没有新增付费模型请求,也不代表作者已亲手复现或完成人工审校。

写给未来的自己合上文章前,留下一点自己的理解。

你的私人学习便签,只存在当前浏览器,不会上传或公开。清理浏览器数据会丢失,请导出留存。三种语言共用这篇文章的便签。

下一篇已发布内容:MuJoCo质量迁移:同一套增益还能用吗? →

当前学习位置

探索 / 具身智能

  1. ○ MuJoCo控制调参:最优候选不等于验证通过
  2. ○ MuJoCo失联策略:零力不等于停止
  3. ○ MuJoCo质量迁移:同一套增益还能用吗?

继续探索

继续探索

  1. 实验 / 044

    二维控制的调参、失联与迁移

    153回合、306000物理步;留出集选中控制器7/18通过,失联置零仍滑行,质量缩放降低均值却未通过速度契约。

    已完成
  2. 项目 / 003

    Hohoo 具身实验

    MuJoCo 抓取放置与二维力控两个教学场景,记录阶段契约、调参、绕障和延迟反馈的实际结果与失败。

    实验中

接下来,走哪条路?

依据文章关联与同主题已发布内容整理,不使用随机推荐。

← 全部文章