去年夏天,当我第一次看到Action Chunking Transformer(ACT)模型在论文中流畅地完成虾仁烹饪任务时,就被这种端到端的机器人控制方法深深吸引。三个月前,我终于有机会在真实的SO-101双臂机器人上复现这个神奇的技术。与大多数教程展示的顺利过程不同,我的实践之路充满了意想不到的挑战——从数据收集的硬件问题到模型泛化的困境,甚至遭遇了机器人"罢工"的戏剧性时刻。本文将完整呈现三次迭代的实战细节,特别是那些在标准教程中不会提及的"血泪教训"。
参照LeRobot官方教程,我搭建了一个典型的示教学习环境:
关键提示:在初期就应记录所有硬件序列号和USB端口映射,这个疏忽后来导致了严重的数据中断问题
原计划收集50组演示数据(每组10个不同起始位置的抓取-放置动作),实际遇到了多个典型问题:
摄像头随机断开:由于使用两个同型号摄像头,系统USB总线会随机重新分配设备路径。临时解决方案是通过udev规则固定设备映射:
bash复制# /etc/udev/rules.d/99-webcam.rules
SUBSYSTEM=="video4linux", KERNELS=="3-4.1:1.0", SYMLINK+="front_cam"
SUBSYSTEM=="video4linux", KERNELS=="3-4.2:1.0", SYMLINK+="top_cam"
视角遮挡问题:侧视摄像头在夹爪闭合时会出现指尖视觉重叠(见图1),严重影响模型对抓取动作的理解。这促使我在后续迭代中将侧视摄像头改为顶视角度。

使用LeRobot默认配置训练52M参数的ACT模型后,出现了令人啼笑皆非的"啄木鸟"行为:
通过系统分析,发现主要问题根源在于:
python复制# 问题诊断检查表
problems = {
"camera_pose_variance": 15.2, # 摄像头位置偏移角度(°)
"calibration_drift": True, # 关节校准偏移
"grasp_position_bias": 0.8, # 抓取位置偏高(cm)
"data_diversity_score": 0.3 # 数据多样性指数
}
第二次迭代中,我对实验设置进行了全面升级:
视觉系统重构:
机械校准优化:
python复制def calibrate_arm(arm):
# 新增关节中位校准步骤
for joint in arm.joints:
joint.set_neutral_position()
# 验证各关节零点误差 < 0.5°
return verify_calibration(arm)
夹爪改进:
建立科学的数据采集流程是成功的关键:

python复制class DataQualityValidator:
def __init__(self):
self.criteria = {
'grasp_center_offset': <0.5cm,
'approach_angle': <15°,
'motion_smoothness': >0.8
}
def validate(self, episode):
# 实现多维度质量检查
...
开发了完整的评估工具链:
进度评分系统:
| 阶段 | 权重 | 完成标准 |
|---|---|---|
| 接近积木 | 0.2 | 夹爪距积木<3cm |
| 成功抓取 | 0.4 | 夹持力>1.5N |
| 到达容器 | 0.7 | 积木在容器上方 |
| 释放完成 | 1.0 | 积木稳定在容器内 |
自动化测试脚本:
bash复制python eval_pipeline.py \
--model act_52m \
--eval_set ood_bin4 \
--num_episodes 12 \
--output_dir ./eval_results
在第二次数据收集中,遭遇了典型的硬件故障:
code复制[ERROR] Dynamixel sync_read failed on ID6
[DEBUG] Gripper response latency: 128ms (threshold 50ms)
根本原因是:
解决方案包括:
python复制def safety_check():
while True:
temp = gripper.get_temperature()
if temp > 65°C: # 安全阈值
emergency_stop()
sleep(0.1)
第三次迭代中采用分层采样方法大幅改进模型性能:
空间覆盖优化:
姿态多样性增强:
python复制def generate_poses():
for yaw in np.linspace(-45, 45, 5): # 偏航角
for pitch in [0, 15]: # 俯仰角
yield build_pose(x, y, z, yaw, pitch)
多模态抓取示范:
经过三次迭代后的关键指标提升:
| 指标 | 第一次 | 第二次 | 第三次 |
|---|---|---|---|
| 分布内成功率 | 12% | 60% | 90% |
| OOD成功率 | 0% | 10% | 75% |
| 平均进度分 | 0.25 | 0.68 | 0.92 |
| 恢复成功率 | NA | 8% | 63% |
硬件可靠性第一:
数据质量金字塔:
code复制 ▲
Generalization ← Diversity
↑
Robustness ← Noise Control
↑
Accuracy ← Precise Demonstration
调试工具链建议:
基于当前成果,下一步计划:
这个项目最深刻的体会是:机器人学习不是简单的"数据+算法",而需要建立完整的感知-决策-执行验证闭环。每个环节的微小误差都可能被放大为系统级故障。当看到机械臂最终流畅地完成物品分拣时,那些调试到凌晨三点的夜晚都变得值得了。