機械臂
五個串聯關節
伺服模式一次將一個關節驅動到絕對角度,由學習者推算角度。認證 Cutter Grid 練習是例外:固定世界座標移動會在執行前透過確定性逆向運動學編譯。
| Joint | Axis | Range | Initial | Speed |
|---|---|---|---|---|
| 底座偏航baseYaw | X | 30° … 150° | 90° | 60°/s |
| 肩部滾轉(僅模擬)shoulderRoll | — | -45° … 45° | 0° | 45°/s |
| 肩關節shoulder | Y | 30° … 150° | 90° | 45°/s |
| 肘關節elbow | Z | 17.5° … 162.5° | 90° | 60°/s |
| 腕關節wrist | B | 0° … 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.25min(100, ReferenceProgramCost / ProgramCost × 100)
程式成本為來源積木數,再加上每條已執行指令 0.25。使用迴圈比逐一寫出相同動作更省。
時間
×0.15min(100, ReferenceTimeMs / EstimatedDurationMs × 100)
時間依關節行程與速度估算,不取自瀏覽器實測。電腦較慢不會讓你失分。
最終分數
0.60 × Completion + 0.25 × Efficiency + 0.15 × Time
若提供者給出的權重總和不等於 1,模擬器會明確回報錯誤,而不會暗中將其標準化。
校準基準:俐落短髮
起始程式完成任務可得至少 80 分,同時刻意保留改進空間。達到它的水準並不是上限。
控制
執行程式
- 執行
- 從挑戰的初始狀態開始執行。
- 暫停/繼續
- 暫停並重新啟動計時,機械臂姿態保持不變。
- 單步
- 在閒置或暫停狀態下,只執行一條原子命令。
- 停止
- 結束執行但不記錄分數。面板只顯示暫時完成度。
- 重設
- 恢復模擬初始狀態,同時保留程式。
- 測試
- 使用同一引擎在背景評估程式,幾毫秒內得到相同結果。
如實說明
尚未實作的功能
現在明確列出這些限制,總比課堂上才發現更好。
- 帳號與工作區儲存
- 認證 Cutter Grid 規劃器以外的通用執行期逆向運動學
- 剪刀驅動或物理引擎
- 真實髮絲(模擬器使用體素)
- 機器人自碰撞
- 專用行動版
- 應用程式內 MQTT 傳輸(已有規格,尚未接入)
- 登入與經驗證的玩家身分
問題
常見問題
- 需要購買機器人嗎?
- 不需要。模擬器本身就是產品,可直接在瀏覽器執行。實體機械臂確實存在,韌體也已開源,但教學過程不依賴實體設備。
- 支援哪些裝置?
- 請在桌上型電腦使用 Chrome 或 Edge,建議解析度不低於 1280×720。3D 工作台需要鍵盤和指標裝置,目前沒有專用行動版。
- 學生能竄改分數嗎?
- 對戰回合會在伺服器上重播程式,並以伺服器評分為準。瀏覽器回報的結果不會被直接信任;執行時間依關節行程計算,而非實際量測,因此裝置效能不會影響分數。
- 機器人會撞到頭部嗎?
- 不會。頭部安全間距由連續掃掠幾何檢測保證,不依賴帶容差的物理模擬。偵測到接觸時,機械臂會停在最後的安全姿態並進入可復原錯誤狀態。
- 需要帳號嗎?
- 單人練習無需帳號。帳號和工作區儲存尚未實作;下方列出其他待完成功能。
- 專案完成了嗎?
- 公開網頁客戶端與 Rust API 已部署。伺服流程、Cutter Grid 練習與課程、單人及對戰模式均可使用,並通過 Chrome 與 Edge 驗收。帳號、儲存工作區、應用程式端 MQTT 與專用行動裝置支援尚未實作。