學習 / 實作

MuJoCo 繞障:路徑上的點能過去,執行器就能過去嗎?

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

六條實際接觸軌跡對照直達、貼邊和留餘量路徑,解釋幾何尺寸、跟蹤誤差與碰撞之間的關係。

進階 · 9 分鐘 · 更新於 2026-10-07 · 步驟 17 / 22

這篇之後,已經有了哪些結果?

保留本文發表時的結論與下一步構想;以下是已發布的後續內容,不代表所有侷限皆已解決。

繼續探索

繼續探索

  1. 工程案例

    MuJoCo 延遲觀測:知道舊位置,能預測現在嗎?

    24條配對軌跡比較即時/80ms延遲、位置噪聲和常速度外推,保留超調下降但任務仍失敗的結果。

    9 分鐘已發布

瀏覽統計暫不可用

本文目錄 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 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=0.3米處放一個矩形障礙,目標仍在x=0.6米。控制器完全不變:質量1kg、Kp=80、Kd=18,仍只輸出±5N內的力。

最直觀的失敗是“直接沖過去”被擋住。更值得學習的是第二種失敗:為球心安排一條剛好擦過障礙邊緣的折線路徑,球卻仍卡住了。幾何路徑必須考慮物體體積,執行中的跟蹤誤差還需要額外余量。

三種路徑

障礙沿x的半寬40mm,沿y的半寬分別40mm或90mm;執行器球半徑35mm。

路徑 中間目標
direct 直接使用終點(0.6,0)
corner (0.16,h) → (0.44,h) → 終點
clearance (0.16,h+0.1) → (0.44,h+0.1) → 終點

h是障礙的y半寬。corner把球心高度設在障礙邊界,卻沒有留球半徑;clearance增加100mm,不宣稱這是最短路徑或最小安全距離。接近當前途經點15mm內才切換到下一個點。

為什麼不是畫一條漂亮折線就夠了

規劃球心的線 → 與障礙邊界不相交?
執行器有半徑 → 需要障礙膨脹或身體碰撞檢查
真實運動有慣性 → 實際軌跡可能切彎、超調或偏離線段

對于球形執行器,按半徑膨脹障礙能把體積問題轉成點路徑問題,但還必須考慮控制誤差。本文采用顯式留餘量的固定途經點,沒有實現搜索算法、最優規劃或通用碰撞檢測庫。

MuJoCo實際發生了什麼

每個條件運行4秒;物理接觸來自MuJoCo求解,不通過程式碼把執行器穿過障礙。

障礙y半寬 路徑 接觸步數 最終目標誤差 穩定完成
40mm direct 1850 374.79mm 否
40mm corner 1680 376.86mm 否
40mm clearance 0 <0.01mm 是
90mm direct 1850 374.79mm 否
90mm corner 1670 385.19mm 否
90mm clearance 0 <0.01mm 是

接觸步數是2ms記錄中存在接觸的樣本數量,不是獨立碰撞次數。卡住後持續接觸會貢獻很多步。終點誤差也不能單獨說明碰撞強度;本輪沒有測力峰值或真機損傷風險。

六條實際二維軌跡,貼邊路徑與有余量路徑的區別

兩種寬度下,固定的余量路徑都通過,其他四條失敗。這支持“本場景要計入身體尺寸與余量”,不能推導任意地圖都能安全繞行。

復現時怎樣看控制邏輯

run.py的waypoints只決定當前目標;真正位置仍由mj_step積分。日志中的waypoint是控制器階段,x/y是實際物理位置,不能把目標軌跡圖當實際軌跡圖。

圖表使用CSV的x/y繪制;預期direct停在障礙左側,corner靠邊但受接觸限制,clearance繞上方到終點。若出現直接穿墻,先檢查geom的contype/conaffinity是否關閉,而不是據此宣布規劃成功。

小練習與邊界

把執行器半徑增大但保持路徑不變。先計算球心所需的最小幾何高度,再考慮15mm途經點切換容差;最後運行檢查接觸記錄。另一練習是把控制器阻尼減小,看原先無接觸的路徑是否仍能跟蹤。

本輪沒有自動尋找可行路徑,沒有動態障礙、機器人姿態、狹窄通道或硬體安全論證。下一篇將感測器從即時真值改成有噪聲與延遲的觀測,觀察規劃正確之外的另一種失敗。

從干凈目錄復現

使用 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. ○ MuJoCo 第二場景:目標位置相同,為什麼有的控制器停不住?
  2. ○ MuJoCo 繞障:路徑上的點能過去,執行器就能過去嗎?
  3. ○ MuJoCo 延遲觀測:知道舊位置,能預測現在嗎?

繼續探索

繼續探索

  1. 實驗 / 037

    MuJoCo 繞障:路徑上的點能過去,執行器就能過去嗎?

    六條實際接觸軌跡對照直達、貼邊和留餘量路徑,解釋幾何尺寸、跟蹤誤差與碰撞之間的關係。

    已完成
  2. 專案 / 003

    Hohoo 具身實驗

    MuJoCo 抓取放置與二維力控兩個教學場景,記錄階段契約、調參、繞障和延遲反饋的實際結果與失敗。

    實驗中
  3. 工程案例

    MuJoCo 第二場景:目標位置相同,為什麼有的控制器停不住?

    用二維力控執行器比較質量與PD阻尼,記錄飽和、超調和穩定完成,避免把經過目標當作任務成功。

    9 分鐘已發布

接下來,走哪條路?

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

← 全部文章