學習 / 實作

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 分鐘已發布

接下來,走哪條路?

依據文章關聯與同主題已發布內容整理,不使用隨機推薦。

← 全部文章