LeRobot 文件
向後相容性
加入 Hugging Face 社群
並獲得增強的文件體驗
開始使用
向後相容性
硬體 API 重新設計
PR #777 改進了 LeRobot 的校準,但**不向後相容**。下面概述了所做的更改以及如何繼續使用在此 PR 之前建立的資料集。
發生了什麼變化?
PR #777 之前 | PR #777 之後 | |
---|---|---|
關節範圍 | 角度 -180...180° | **歸一化範圍** 關節:–100...100 夾爪:0...100 |
零位(SO100 / SO101) | 機械臂水平完全伸展 | 在每個關節的範圍中間 |
邊界處理 | 用於檢測 ±180° 環繞的軟體保護措施 | 由於零位在範圍中間,不需要環繞邏輯 |
對現有資料集的影響
- 如果直接載入 PR #777 **之前**建立的軌跡記錄,它們將無法正確重放。
- 關節角度有偏移且歸一化不正確。
- 任何直接在舊資料上進行微調或訓練的模型都需要轉換其輸入和輸出。
使用舊校準系統建立的資料集
我們在此提供了一個遷移示例指令碼,用於重放使用舊校準系統記錄的片段:`examples/backward_compatibility/replay.py`。下面,我們將帶你瞭解示例指令碼中為使舊校準資料集能夠正常工作而進行的修改。
+ key = f"{name.removeprefix('main_')}.pos"
action[key] = action_array[i].item()
+ action["shoulder_lift.pos"] = -(action["shoulder_lift.pos"] - 90)
+ action["elbow_flex.pos"] -= 90
讓我們來分解一下。新的程式碼庫對位置觀測值使用 `.pos` 字尾,並且我們移除了 `main_` 字首。
key = f"{name.removeprefix('main_')}.pos"
對於 "shoulder_lift"
(id = 2),與舊校準/程式碼相比,零位改變了-90度,且方向相反。
action["shoulder_lift.pos"] = -(action["shoulder_lift.pos"] - 90)
對於 "elbow_flex"
(id = 3),與舊校準/程式碼相比,零位改變了-90度。
action["elbow_flex.pos"] -= 90
為了使用角度歸一化,我們接著將 `--robot.use_degrees` 選項設定為 `true`。
python examples/backward_compatibility/replay.py \
--robot.type=so101_follower \
--robot.port=/dev/tty.usbmodem5A460814411 \
--robot.id=blue \
+ --robot.use_degrees=true \
--dataset.repo_id=my_dataset_id \
--dataset.episode=0
使用舊校準系統訓練的策略
策略以與資料集相同的格式(`torch.Tensors`)輸出動作。因此,應應用相同的轉換。
要找到這些轉換,我們建議首先嚐試使用上一節的方法重放你的策略所訓練的資料集中的一個片段。然後,將這些相同的轉換新增到你的推理指令碼中(此處顯示在 `record.py` 指令碼中)。
action_values = predict_action(
observation_frame,
policy,
get_safe_torch_device(policy.config.device),
policy.config.use_amp,
task=single_task,
robot_type=robot.robot_type,
)
action = {key: action_values[i].item() for i, key in enumerate(robot.action_features)}
+ action["shoulder_lift.pos"] = -(action["shoulder_lift.pos"] - 90)
+ action["elbow_flex.pos"] -= 90
robot.send_action(action)
如果你有任何問題或遇到遷移問題,請隨時在 Discord 上提問。
< > 在 GitHub 上更新