4. 环境与数据准备

ACT(Action Chunking Transformer)属于模仿学习策略,其训练效果高度依赖“环境一致性”和“数据质量”。在正式训练之前,必须完成四件事:搭建可复现的仿真平台、确认真实机器人接口、按统一规范采集示教数据、建立标准化的数据格式与预处理流水线。本节将围绕这四步展开,并给出可直接落地的目录结构、参数配置与检查清单。

一、核心原理:环境与数据是策略的“地基”

ACT 的学习目标是:给定当前观测(多路相机图像 + 关节状态),预测未来一段时间内的动作序列(action chunk)。因此数据中必须同时包含观测流与动作流,且两者在时间上严格对齐。若仿真与真机的相机内参、关节顺序、控制频率不一致,策略在迁移时会出现“看得见但动不对”的问题。环境准备的本质,是让仿真、真机、数据三者共享同一套“坐标系、单位、频率、命名”约定。

关键一致性维度:关节顺序与单位(弧度/度)、相机名称与分辨率、控制频率(如 30Hz)、时间戳基准、动作维度(6/7 自由度)、夹爪开合表示(0~1 或 -1~1)。

二、仿真平台搭建:以 MuJoCo / Isaac 为例

仿真平台用于低成本验证算法与生成大规模数据。推荐使用 MuJoCo 进行快速原型验证,Isaac Sim/Gym 用于高保真渲染与并行采样。搭建时需固定随机种子、物理步长与渲染分辨率,并导出与真机一致的观测接口。

# 仿真环境关键配置示例(YAML)
env:
  name: "sim_arm_pick"
  control_freq: 30          # 控制频率 Hz
  physics_dt: 0.002         # 物理步长
  cameras:
    - name: "top"
      resolution: [480, 640]
    - name: "wrist"
      resolution: [480, 640]
  robot:
    dof: 7
    joint_order: ["j1","j2","j3","j4","j5","j6","gripper"]
    action_dim: 7
  seed: 42

仿真数据采集通常通过脚本化专家策略或遥操作完成。建议每个任务至少采集 50~100 条成功轨迹,并保留少量失败轨迹用于鲁棒性分析。

三、真实机器人接入:接口与安全

真机接入的核心是“控制接口 + 状态回读 + 安全限位”。常见方案包括 ROS/ROS2 话题、SDK 直连或 EtherCAT。采集前必须确认:关节状态回读频率与动作下发频率一致;相机触发与动作时间戳对齐;急停与限位保护生效。

  • 状态回读:关节角、夹爪开合、末端位姿,频率建议 ≥ 30Hz。
  • 动作下发:位置/速度/力矩模式需与训练动作空间一致。
  • 时间同步:使用统一时钟源,图像与状态时间戳误差控制在 10ms 内。
  • 安全策略:软限位、速度上限、碰撞检测、急停按钮。
真机采集前,先用“空跑”模式验证动作回放是否与示教一致,再接入相机录制,避免数据与动作错位。

四、数据采集与格式规范

ACT 官方实现常用 HDF5 存储每条 episode,内部包含观测、动作、时间戳等数据集。推荐目录结构如下:

dataset/
├── episode_0000.hdf5
├── episode_0001.hdf5
└── meta.json
# 单个 hdf5 内部结构
/observations/images/top      (T, H, W, 3) uint8
/observations/images/wrist    (T, H, W, 3) uint8
/observations/qpos            (T, 7) float32
/action                       (T, 7) float32
/timestamps                   (T,)   float64

采集时需记录任务描述、成功标志、操作者、环境参数等元信息,便于后续筛选与复现。下表给出数据字段的规范清单:

字段维度/类型说明常见错误
images/top(T,H,W,3) uint8顶部相机 RGB分辨率不一致、BGR 顺序
images/wrist(T,H,W,3) uint8腕部相机 RGB与 top 时间戳错位
qpos(T,7) float32关节角+夹爪单位混用(度/弧度)
action(T,7) float32目标动作与 qpos 顺序不一致
timestamps(T,) float64统一时钟使用本地时间导致漂移

五、预处理流程:从原始数据到训练张量

预处理的目标是“对齐、归一化、增强、切分”。典型流程为:时间对齐 → 缺失值处理 → 图像缩放与归一化 → 动作归一化 → 动作分块(chunk)→ 数据集切分。ACT 训练时通常将动作归一化到 [-1,1],图像归一化到 [0,1] 或使用 ImageNet 均值方差。

# 预处理伪代码
for ep in episodes:
    sync = align(ep.images, ep.qpos, ep.action, tol=0.01)
    sync = drop_invalid(sync)
    imgs = resize(sync.images, (224,224)) / 255.0
    acts = normalize(sync.action, mean, std)
    chunks = make_chunk(acts, chunk_size=100)
    save(chunks)

下图展示了从仿真/真机到训练数据集的完整数据流与关键检查点:

仿真平台 MuJoCo / Isaac 固定种子·物理步长 多相机渲染 真实机器人 ROS/SDK 接口 状态回读·安全限位 统一时钟同步 数据采集 示教/遥操作 图像+关节+动作 成功标志·元信息 数据格式 HDF5 每 episode images/qpos/action timestamps·meta.json 预处理流程 对齐·归一化 动作分块 chunk 训练/验证切分 ACT 训练数据集 观测张量 + 动作 chunk 检查点1:频率一致 检查点2:字段完整 检查点3:归一化参数

六、常见误区与复盘

误区一:仿真与真机相机内参不同,导致策略迁移失败。复盘:统一分辨率与焦距,或在训练时加入随机裁剪增强。
误区二:动作与观测时间戳错位。复盘:使用硬件触发或统一时钟,采集后做互相关对齐检查。
误区三:动作归一化参数仅用单条轨迹统计。复盘:应在全数据集上统计均值与标准差,并保存到 meta.json。
误区四:忽略失败轨迹。复盘:保留少量失败数据,有助于策略学习恢复行为。

完成上述环境与数据准备后,即可进入 ACT 模型训练阶段。建议在训练前运行一次“数据体检”脚本,检查 episode 数量、字段维度、时间戳单调性、动作范围与图像亮度分布,确保数据可直接用于训练。