学习 / 实践
MuJoCo 第二场景:目标位置相同,为什么有的控制器停不住?
具身智能 / 探索 · 工程案例
用二维力控执行器比较质量与PD阻尼,记录饱和、超调和稳定完成,避免把经过目标当作任务成功。
这篇之后,已经有了哪些结果?
保留本文发表时的结论与下一步设想;以下是已发表的后续内容,不代表所有局限都已解决。
继续探索
继续探索
浏览统计暂不可用
本文目录 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 | 是 |
无阻尼两组未稳定;相同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 绕障:路径上的点能过去,执行器就能过去吗? →
当前学习位置
探索 / 具身智能
- ○ OpenVLA 代码导读:图像和一句指令,怎样变成机器人动作?
- ○ MuJoCo 第二场景:目标位置相同,为什么有的控制器停不住?
- ○ MuJoCo 绕障:路径上的点能过去,执行器就能过去吗?
继续探索
继续探索
接下来,走哪条路?
- 具身智能实践(十四):方块落进盒子,就能宣布任务完成吗? →
8条MuJoCo轨迹、三个旁路判定器与真实回放,区分历史放置、当前证据和恢复流程中的完成资格。
依据文章关联与同主题已发布内容整理,不使用随机推荐。