根据你提供的信息和社区已有文档,机械臂在固定位置反复震荡是 LeRobot ACT Policy 部署中的典型问题。结合官方文档的排查指南,以下是系统性解决方案:
问题诊断
从你的截图和描述看,问题可能来自以下几个方面:
1. 模型训练不充分 最可能
- 6万步训练对于 ACT Policy 可能不够
- 官方建议:至少 50 组数据 × 60秒/组,训练 50k 步以上
- 检查训练 loss 曲线是否已收敛
2. 摄像头索引配置错误
- 多摄像头场景下,camera_index 配置错误会导致输入图像错位
- 验证方法:
python lerobot/common/robot_devices/cameras/opencv.py --images-dir outputs/images_from_opencv_cameras
3. 舵机 PID 参数问题
- 官方文档明确指出需要将 D 系数设为 0 来减少抖动
解决步骤
步骤 1:检查模型训练状态
# 查看训练日志中的 loss 曲线
# 如果 loss 还在下降,说明模型未收敛,需要继续训练
# 建议训练步数:50k-100k steps
关键指标检查:
loss是否已稳定在较低值(< 0.1)l1_loss是否趋于平稳- 如果曲线还在明显下降,继续训练
步骤 2:修正舵机 PID 参数
修改 lerobot/common/robot_devices/robots/manipulator.py:
def set_so100_robot_preset(self):
for name in self.follower_arms:
self.follower_arms[name].write("Mode", 0)
self.follower_arms[name].write("P_Coefficient", 16)
self.follower_arms[name].write("I_Coefficient", 0)
self.follower_arms[name].write("D_Coefficient", 0) # ← 关键:D=0
self.follower_arms[name].write("Lock", 0)
self.follower_arms[name].write("Maximum_Acceleration", 254)
self.follower_arms[name].write("Acceleration", 254)
步骤 3:验证摄像头配置
# 1. 检查摄像头索引
python lerobot/common/robot_devices/cameras/opencv.py --images-dir test_cameras
# 2. 确认 configs.py 中的配置
# 修改 lerobot/common/robot_devices/robots/configs.py
cameras: dict[str, CameraConfig] = field(
default_factory=lambda: {
"laptop": OpenCVCameraConfig(
camera_index=0, # ← 根据实际检测结果修改
fps=30,
width=640,
height=480,
),
"phone": OpenCVCameraConfig(
camera_index=2, # ← 根据实际检测结果修改
fps=30,
width=640,
height=480,
),
}
)
步骤 4:检查推理脚本配置
确认你使用的推理脚本正确加载了模型:
# 如果使用 cpu_act_control_robot.py 或 bpu_act_control_robot.py
# 检查模型路径是否正确指向训练完成的 pretrained_model 目录
model_path = "outputs/train/act_test_1epoch/pretrained_model" # ← 确认路径
步骤 5:增加训练数据量(如需要)
如果模型确实未收敛:
# 重新采集数据,建议至少 50 组
python lerobot/scripts/control_robot.py \
--robot.type=so100 \
--control.type=record \
--control.fps=30 \
--control.single_task="Pick and Place" \
--control.num_episodes=50 \
--control.episode_time_s=60 \
--control.root=datasets/so100_v2
# 重新训练
python lerobot/scripts/train.py \
--dataset.repo_id=YOUR_USERNAME/so100_v2 \
--policy.type=act \
--output_dir=outputs/train/act_v2 \
--policy.device=cuda \
--wandb.enable=true
快速验证清单
- 训练 loss 是否已收敛(查看 wandb 或训练日志)
- 舵机 D_Coefficient 是否设为 0
- 摄像头索引是否正确(运行 opencv.py 验证)
- 推理脚本是否加载了正确的模型权重
- 机械臂标定文件是否存在(
.cache/calibration/so100/)
参考资源
强烈建议参考社区精华帖:
- LeRobot: ACT Policy 全流程文档 - 包含完整的调试指南和常见问题排查
特别是文档中的附录四 - 机械臂在一个位置反复震荡章节,与你的问题完全匹配。
下一步建议
请先执行步骤 1 和步骤 2,这两个是最常见的根因。如果问题依旧,请提供:
- 训练 loss 曲线截图
- 使用的推理命令
- 摄像头检测结果
这样我可以帮你进一步定位问题。