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 上更新