跳至主要內容

模擬器

由 Blockly 驅動的免費 3D 機械臂模擬器

在瀏覽器數位分身中線上學習機器人編程。左側編寫 Blockly 程式,中間模擬五關節機械臂,右側查看碰撞偵測與評分。

機械臂

五個串聯關節

伺服模式一次將一個關節驅動到絕對角度,由學習者推算角度。認證 Cutter Grid 練習是例外:固定世界座標移動會在執行前透過確定性逆向運動學編譯。

關節鏈順序、旋轉軸、角度範圍、初始角度與速度
JointAxisRangeInitialSpeed
底座偏航baseYawX30° … 150°90°60°/s
肩部滾轉(僅模擬)shoulderRoll-45° … 45°0°45°/s
肩關節shoulderY30° … 150°90°45°/s
肘關節elbowZ17.5° … 162.5°90°60°/s
腕關節wristB0° … 180°90°75°/s

X、Y、Z、B 軸與停放的刀具軸 E 都從韌體的 Home 值 90° 開始。Shoulder Roll 僅存在於模擬器中,初始值為 0°。幾何偏移會把該硬體狀態映射為一個安全的顯示姿態,不存在隱藏的第二個初始姿態。

積木塊

三種伺服積木,加上認證 Cutter Grid 移動

伺服模式使用角度、等待與重複積木。Cutter Grid 練習增加六個固定世界方向與整數距離。Blockly 輸出經驗證的 Program IR,而非 JavaScript;規劃器會在重播前凍結確定性關節軌跡。

set <joint> to <angle>°

將一個關節移動到絕對角度。可用關節由挑戰定義,超出範圍的角度會在執行前被拒絕。

wait <ms>

保持目前姿態,可設定 0 至 5000 毫秒。

repeat <n> times

將內部積木重複 1 至 20 次。迴圈只計一個積木,而不是 n 個,因此能顯著提高效率分數。

頭部安全間距

拒絕危險動作,而不是等待碰撞

頭部並非由體素構成,也不能被切割。模擬器執行命令前,會連續掃掠工具路徑並與頭部幾何體檢測。此約束以幾何計算為基礎,因此快速移動也無法穿透容差。

若掃掠偵測到接觸,執行會停在最後一個安全姿態,並標示觸發問題的積木;模擬器隨後進入可復原的錯誤狀態。渲染器不會掩蓋修正:機械臂一旦停止,介面會明確指出相關積木。

日誌顯示內容

12:04:31 開始執行 · 挑戰 neat-short-haircut

12:04:31 shoulderRoll → 15°

12:04:32 shoulder → 72°

12:04:33 手肘關節 → 10° 遭拒絕 · 頭部淨空不足 · 保持最後的安全姿態

12:04:33 狀態 → 錯誤(可復原)· 積木 3

評分

分數的組成

三個子分數均限制在 0–100,再按固定權重合併。介面顯示一位小數,內部計算保留完整精度。

完成度

×0.60

|Target ∩ Result| / |Target ∪ Result| × 100

以目標髮型計算體素 IoU。剪多與剪少的扣分完全相同。

效率

×0.25

min(100, ReferenceProgramCost / ProgramCost × 100)

程式成本為來源積木數,再加上每條已執行指令 0.25。使用迴圈比逐一寫出相同動作更省。

時間

×0.15

min(100, ReferenceTimeMs / EstimatedDurationMs × 100)

時間依關節行程與速度估算,不取自瀏覽器實測。電腦較慢不會讓你失分。

最終分數

0.60 × Completion + 0.25 × Efficiency + 0.15 × Time

若提供者給出的權重總和不等於 1,模擬器會明確回報錯誤,而不會暗中將其標準化。

校準基準:俐落短髮

Reference blocks5
Reference program cost6.25
Reference time5645 ms

起始程式完成任務可得至少 80 分,同時刻意保留改進空間。達到它的水準並不是上限。

控制

執行程式

執行
從挑戰的初始狀態開始執行。
暫停/繼續
暫停並重新啟動計時,機械臂姿態保持不變。
單步
在閒置或暫停狀態下,只執行一條原子命令。
停止
結束執行但不記錄分數。面板只顯示暫時完成度。
重設
恢復模擬初始狀態,同時保留程式。
測試
使用同一引擎在背景評估程式,幾毫秒內得到相同結果。

如實說明

尚未實作的功能

現在明確列出這些限制,總比課堂上才發現更好。

  • 帳號與工作區儲存
  • 認證 Cutter Grid 規劃器以外的通用執行期逆向運動學
  • 剪刀驅動或物理引擎
  • 真實髮絲(模擬器使用體素)
  • 機器人自碰撞
  • 專用行動版
  • 應用程式內 MQTT 傳輸(已有規格,尚未接入)
  • 登入與經驗證的玩家身分

問題

常見問題

需要購買機器人嗎?
不需要。模擬器本身就是產品,可直接在瀏覽器執行。實體機械臂確實存在,韌體也已開源,但教學過程不依賴實體設備。
支援哪些裝置?
請在桌上型電腦使用 Chrome 或 Edge,建議解析度不低於 1280×720。3D 工作台需要鍵盤和指標裝置,目前沒有專用行動版。
學生能竄改分數嗎?
對戰回合會在伺服器上重播程式,並以伺服器評分為準。瀏覽器回報的結果不會被直接信任;執行時間依關節行程計算,而非實際量測,因此裝置效能不會影響分數。
機器人會撞到頭部嗎?
不會。頭部安全間距由連續掃掠幾何檢測保證,不依賴帶容差的物理模擬。偵測到接觸時,機械臂會停在最後的安全姿態並進入可復原錯誤狀態。
需要帳號嗎?
單人練習無需帳號。帳號和工作區儲存尚未實作;下方列出其他待完成功能。
專案完成了嗎?
公開網頁客戶端與 Rust API 已部署。伺服流程、Cutter Grid 練習與課程、單人及對戰模式均可使用,並通過 Chrome 與 Edge 驗收。帳號、儲存工作區、應用程式端 MQTT 與專用行動裝置支援尚未實作。