11. 跳转至

11. ACT数据采集#

11.1 环境配置#

  • 创建conda环境
  conda create -n airbot_data python=3.10
  default_action: [
  # arms will not move when demonstrating
  -0.233,-0.73, 1.088, 1.774, -1.1475, -0.1606,     # left_arm (6 joints)
  1.0,                                              # left_arm_eef (1 joint)
  0.2258, -0.6518, 0.9543, -1.777, 1.0615, 0.3588,  # right_arm (6 joints)
  1.0,                                              # right_arm_eef (1 joint)
  0.0, -0.0,                                        # head (2 joints)
  0.0,                                              # spine (1 joint)  
  0.0, -0.0,                                        # head (2 joints)
 ] 

进入airbot_data虚拟环境:

  conda activate airbot_data

注意:后续命令要在airbot_data环境下执行!

11.2 数据采集#

11.2.1 配置环境#

下载data-collection并进入根目录中执行安装脚本:

git clone https://git.qiuzhi.tech/airbot-data-loop/data-collection.git  
cd data-collection
bash install.sh

11.2.2 采集数据#

11.2.2.1 启动MMK2#

  1. 开启底盘电源
  2. 开启本体电源
  3. 开启机械臂电源
  4. 进入遥控模式:待自检通过(白灯)后,按手柄 Start 键进入遥控模式(绿灯)
  5. 进入背包示教模式:按手柄 X 键进入背包示教模式(身体浅蓝灯,头白灯)
  6. 开始示教同步
    • 打开示教背包电源
    • 穿戴背包
    • 等待30秒后按手柄 LB + RB 开始示教同步(头灯由白变浅蓝)

11.2.2.2 连接MMK2#

11.2.2.3 mmk2配置文件#

打开data-collection文件夹,配置文件路径如下:airbot_data_collection/airbot/configs/robots/airbot_mmk.yaml

_target_: airbot_data_collection.airbot.robots.airbot_mmk.AIRBOTMMK

ip: 192.168.11.200
components: [left_arm, left_arm_eef, right_arm, right_arm_eef, head, spine]
cameras:
  head_camera:
    camera_type: REALSENSE
    rgb_camera.color_profile: 640,480,30
    enable_depth: "false"
    align_depth.enable: "false"
    # serial_no: "'123456'"  # multiple rs-cameras case
  left_camera:
    camera_type: USB
    video_device: /dev/left_camera
    image_width: "640"
    image_height: "480"
    framerate: "25"
  right_camera:
    camera_type: "USB"
    video_device: /dev/right_camera
    image_width: "640"
    image_height: "480"
    framerate: "25"
default_action:
  [ 
    # arms will not move when demonstrating
    -0.233, -0.73, 1.088, 1.774, -1.1475, -0.1606,    # left_arm (6 joints)
    1.0,                                              # left_arm_eef (1 joint)
    0.2258, -0.6518, 0.9543, -1.777, 1.0615, 0.3588,  # right_arm (6 joints)
    1.0,                                              # right_arm_eef (1 joint)
    0.0, -0.0,                                        # head (2 joints)
    0.0,                                              # spine (1 joint)
  ]

参数解释

  • ip:机器人的ip地址,建议使用有线连接以提高数据采集频率,保证数据质量
  • components:需要使用的机器人的部件
  • cameras: 需要使用的相机的配置参数
  • default_action:机器人的初始关节角,注意顺序与components保持对齐!

11.2.3 数据采集主配置文件#

数据采集主配置文件位于:airbot_data_collection/airbot/configs/mains/mmk.yaml,通常需进行如下修改:

  • 任务信息(task_info)。如果训练 pi0 等VLA模型,对文本描述有要求,需要尽量准确,示例如下:
    task_info:
      operator: hanyang
      station: mmk-MK11QWZ025170023
      task_name: pick wooden blocks and place and stack
      task_description: pick the wooden blocks from the bowl with the gripper, and place all wooden blocks on the desktop,and stack the wooden blocks one by one
      task_description_zh: 用夹爪从碗中拾取木制积木,将木制积木放置在桌面上,将木制积木逐个堆叠
      task_id: 120
      # 单个技能配置
      # skill: grasp
      # 多个技能配置示例 (取消注释并注释上面的单行配置):
      skill:
        - grasp
        - place
      object:
        - wooden blocks
        - bowl
      scene: desktop
      subtasks:
        - skill: grasp
          description: "pick the wooden blocks from the bowl with the gripper"
          description_zh: "用夹爪从碗中拾取木制积木"
        - skill: "place {A} on {B}"
          description: "place the wooden blocks on the desktop"
          description_zh: "将木制积木放置在桌面上"
        - skill: "stack {A} on {B}"
          description: "stack the wooden blocks one by one"
          description_zh: "将木制积木逐个堆叠"
  • 数据保存目录(dataset.directory)。数据将默认保存在airbot_data_collection/data/路径下
  • 数据采集频率(update_rate)。所有数据更新的频率,单位为Hz
  • 数据大小上限(sample_limit.size)。数据采集的最大长度,即最多采集多少数据点,在到达该上限之前若未手动保存,则在到达时默认将自动保存

11.2.4 mcap数据集格式定义#

采集话题如下

# Topic configurations
# 状态数据
MCAP_STATE_TOPICS = [
    "/mmk/observation/left_arm/joint_state/position",
    "/mmk/observation/left_arm_eef/joint_state/position",
    "/mmk/observation/right_arm/joint_state/position",
    "/mmk/observation/right_arm_eef/joint_state/position",
    "/mmk/observation/head/joint_state/position",
    "/mmk/observation/spine/joint_state/position",
]
# 动作数据话题
MCAP_ACTION_TOPICS = [
    "/mmk/action/left_arm/joint_state/position",
    "/mmk/action/left_arm_eef/joint_state/position",
    "/mmk/action/right_arm/joint_state/position",
    "/mmk/action/right_arm_eef/joint_state/position",
    "/mmk/action/head/joint_state/position",
    "/mmk/action/spine/joint_state/position",
]
# 相机数据话题
MCAP_CAMERA_NAMES = [
    "/mmk/head_camera/color/image_raw",
    "/mmk/left_camera/color/image_raw",
    "/mmk/right_camera/color/image_raw",
]

11.2.5 开始采集#

11.2.5.1 指令#

重要提醒

  • 必须进入背包示教模式后才能运行数据采集! 否则会报错
  • 数据将保存为 MCAP 格式
cd airbot_data_collection
python3 main.py --path airbot/configs/mains/mmk.yaml

11.2.5.2 按键#

注意

避免连续按键以防止重复行为

执行上述命令后,您可以使用键盘来控制操作。键盘按键的功能说明如下:

按键 功能说明
空格键 开始录制一段数据。录制完所有帧后,数据将自动保存。
s键 在当前录制尚未完成所有帧时停止录制并保存数据。这会导致录制的数据长度不同。
q键 放弃当前录制或重新录制上一段数据。
p键 在终端打印当前机器人的状态信息。
i键 再次显示这些操作说明。
z/ESC键 退出采集程序。

11.2.5.3 操作步骤#

  1. 启动程序:每个摄像头的实时窗口将会出现。
  2. 开始录制:按下空格键开始录制数据并遥操MMK2完成目标任务。
  3. 放弃录制:如果示教操作不可接受,请按 q 键以放弃当前录制过程。
  4. 任务完成
    • 等待收集到指定数量的帧或按 s 键立即保存数据(实际任务所花费的帧数应尽可能接近最大收集帧数)
    • 收集完所有帧后,数据将自动保存。保存后,MMK2将自动返回到初始位置。
  5. 数据保存:数据将默认保存到当前目录下的 ./data/<task_name> 文件夹中。每个收集的场景数据包括:
    • index.mcap:摄像头的视频,机器人的状态,帧数及采集帧率,每帧(低维数据和图像)的时间戳

11.2.5.4 附加建议#

  1. 任务时长:尽量确保在达到最大帧数限制之前完成任务,即不要过早结束动作。
  2. 移动速度:机械臂的移动速度不应过快,否则收集到的信息将会变得稀疏,且图像质量也会不高。
  3. 数据备份:建议将收集到的任务数据文件夹 <task_name> 保存在便携式硬盘上的相同目录结构中,以作为备份。

11.2.6 数据检查(可选)#

  • 图像质量:图像数据不能存在破损
  • 话题格式:话题格式需要满足要求

airbot_data_collection 运行如下脚本:

python3 tests/check_mmk_mcap_dataset.py --print_details --dir data/<dir_name>
参数解释

- dir参数:mcap 数据文件夹,存放多个数据集文件
- print_details:每个mcap文件的详细信息 ,可以省略

程序输出示例如下:

=== Summary Report ===
INFO:__main__:Total files: 55
INFO:__main__:Normal files: 53
INFO:__main__:Abnormal files: 2
INFO:__main__:Abnormal files and issues:
INFO:__main__:  data/mcap/mmk2_pick_and_place_wooden_blocks_0731/13.mcap:
INFO:__main__:    - Mismatch: Message len=492 > Min video frames=491
INFO:__main__:  data/mcap/mmk2_pick_and_place_wooden_blocks_0731/44.mcap:
INFO:__main__:    - Mismatch: Message len=507 > Min video frames=506
实际训练时建议 剔除 不满足要求的mcap文件进行训练,否则会导致出错。

注意:

该检查默认会检查3个相机(左右手和头部),并将缺少相机的数据列为不正常数据。如果实际仅使用了部分相机,请忽略该提示。

如果需要继续采集数据,请先删除status文件避免采集数据序号不连续:

rm -rf data/<dir_name>/*.status

11.2.7 数据可视化检查#

11.3 真机数据回放#

注意:

回放前请将退出背包示教模式(建议在绿灯的Start模式)

mcap格式的真机数据回放(replay)功能位于airbot_data_collection/tests/replay_mcap_mmk.py,在data-collection目录下打开终端,然后执行如下命令:

conda activate airbot_data
cd airbot_data_collection
#使用示例,建议使用绝对路径索引需要回放的mcap文件位置
python3 tests/replay_mcap_mmk.py data/0606/0.mcap -f 20 -ip 172.25.11.188

参数解释

  • f:数据回放的频率,一般可设置与原始数据频率一致
  • ip:需要replay的mmk2 ip地址