学习 / 实践

MuJoCo 第二场景:目标位置相同,为什么有的控制器停不住?

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

用二维力控执行器比较质量与PD阻尼,记录饱和、超调和稳定完成,避免把经过目标当作任务成功。

进阶 · 9 分钟 · 更新于 2026-10-07 · 步骤 16 / 22

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

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

继续探索

继续探索

  1. 工程案例

    MuJoCo 绕障:路径上的点能过去,执行器就能过去吗?

    六条实际接触轨迹对照直达、贴边和留余量路径,解释几何尺寸、跟踪误差与碰撞之间的关系。

    9 分钟已发布

浏览统计暂不可用

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

以下为 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 831789c2a1efb4564c4cfabc2298e48e16ada879
python -m venv .venv
$py = '.\.venv\Scripts\python.exe'
& $py -m pip install -r requirements-lock.txt
& $py experiments/planar_reach/run.py --out outputs/my-run
& $py experiments/planar_reach/audit.py outputs/my-run

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

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

查看本篇固定代码 ↗

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

前十四轮主要围绕抓取流程中的观测、恢复与完成契约。本轮换一个更容易看清控制规律的场景:一个有质量的球形执行器,可以沿x/y两个轴移动,用两个motor施加力,从(0,0)到(0.6,0)。

这里没有机械臂关节链、逆运动学、抓取、视觉或ROS2。它是第二个真实运行的MuJoCo教学场景,不把M4/M5或完整VL01标成完成。目标是先回答一个基础问题:朝目标施力,为什么会冲过去,甚至一直来回摆?

从误差到力,中间隔着动力学

本轮控制律为 F = Kp × (目标位置−观测位置) − Kd × 观测速度。Kp=80固定,Kd比较0、18、36;质量比较1kg和2kg。每轴力限制±5N,物理步长2ms,控制每20ms更新一次,运行4秒。

位置目标 → 位置误差 × Kp ─┐
观测速度 → 速度 × (-Kd) ──┼→ 限幅±5N → MuJoCo动力学 → 新位置/速度
                         └───────────────────────────────↑

只有P项时,靠近目标意味着力变小,却不意味着速度已经为零。穿过目标后才产生反向力,可能已经积累了很大动量。D项根据速度提前“刹车”;过大的D也可能让响应变慢。质量变化则改变同样力下的加速度。

经典连续线性模型中,临界阻尼与2√(质量×Kp)相关。但本例还有限幅和离散采样,不应直接把这个公式当成所有条件的最优参数。本篇只比较三个冻结值,不做自动调参。

怎样判断真的停住

不是最后一帧碰到目标就算通过。最后0.3秒的每条记录都需要位置误差小于15mm、速度小于40mm/s。CSV记录每2ms真值、施力、观测捕获时刻和饱和标记,可独立重算。

质量 Kd 最大x超调 最终位置误差 稳定完成
1kg 0 740.6mm 677.95mm 否
1kg 18 0mm <0.01mm 是
1kg 36 0mm 0.06mm 是
2kg 0 630.9mm 569.47mm 否
2kg 18 74.0mm <0.01mm 是
2kg 36 0mm 0.04mm 是

从实际CSV生成的位置轨迹,比较质量和阻尼

无阻尼两组未稳定;相同Kd=18在更大质量时出现明显超调,虽然4秒末仍通过。不能只比较最终误差,也不能把同一固定场景的六次运行说成泛化成功率。

读scene.xml:动作到底是什么

两个slide joint约束平面运动,motor输入是力;不是把qpos瞬移到目标。球半径35mm,场景重力为零,基础关节阻尼为零,因而更容易隔离控制器的速度反馈。Kp与Kd写在Python控制器,限力同时由程序和MuJoCo actuator范围约束。

MuJoCo配置含义可查3.3.7 XML参考。如果把motor换成position actuator,接口含义已经改变,不能继续用“动作值等于牛顿”的解释。

练习、复现与局限

打开01-gain.csv,在前几行核对力是否饱和;接近目标时再看速度与力的方向。把质量改大,在新目录运行,先预测是否超调,再看轨迹。不要用缩短观察时长让困难案例“没来得及失败”。

本轮全状态来自仿真真值,控制参数固定,没有机器人摩擦辨识和硬件验证。若导入失败,检查同一个Python环境是否安装锁定依赖;数值运行不需要OpenGL。下一篇保持控制器不变,加入障碍与执行器尺寸。

从干净目录复现

使用 Python 3.12。入口一次运行这组三个主题的对照,各篇只解读自己的子集,不把同一份记录重复当作新增回合。

git clone https://github.com/VirtualSelect/hohoo-embodied-agent.git hohoo-embodied-agent-study
cd hohoo-embodied-agent-study
git checkout 831789c2a1efb4564c4cfabc2298e48e16ada879
python -m pip install -r requirements-lock.txt
python experiments/planar_reach/run.py --out outputs/my-run
python experiments/planar_reach/audit.py outputs/my-run
python experiments/planar_reach/plot.py outputs/my-run

输出目录必须不存在。本机验证环境为 Windows,Linux/macOS尚未复测。不需要模型密钥或付费服务。manifest中的代码冻结提交早于上方含证据的归档提交,源码哈希对应实际执行文件。

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

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

下一篇已发布内容:MuJoCo 绕障:路径上的点能过去,执行器就能过去吗? →

当前学习位置

探索 / 具身智能

  1. ○ OpenVLA 代码导读:图像和一句指令,怎样变成机器人动作?
  2. ○ MuJoCo 第二场景:目标位置相同,为什么有的控制器停不住?
  3. ○ MuJoCo 绕障:路径上的点能过去,执行器就能过去吗?

继续探索

继续探索

  1. 实验 / 036

    MuJoCo 第二场景:目标位置相同,为什么有的控制器停不住?

    用二维力控执行器比较质量与PD阻尼,记录饱和、超调和稳定完成,避免把经过目标当作任务成功。

    已完成
  2. 项目 / 003

    Hohoo 具身实验

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

    实验中
  3. 工程案例

    具身智能实践(十四):方块落进盒子,就能宣布任务完成吗?

    8条MuJoCo轨迹、三个旁路判定器与真实回放,区分历史放置、当前证据和恢复流程中的完成资格。

    13 分钟已发布

接下来,走哪条路?

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

← 全部文章