데이터 수집
OpenArm은 데이터 기반 플랫폼으로 설계되었습니다. 이 가이드는 카메라 배선부터 LeRobot 형식의 에피소드 녹화까지 모든 단계에서 품질 검사를 포함하여 모든 것을 다룹니다.
녹음을 위한 하드웨어 연결
데이터 수집에는 기본 팔 제어보다 더 많은 하드웨어가 필요합니다. 이 섹션에서는 르로봇을 시작하기 전에 무엇을 연결하고 어디에 연결해야 하는지 설명합니다.
손목 카메라
USB 웹캠 또는 Intel RealSense D435i를 엔드 이펙터 플랜지에 장착합니다. 30fps 이상을 위해 USB 3.0을 통해 연결하세요. 확인하다: ls /dev/video*
오버헤드/작업 공간 카메라
전역 보기를 위해 작업 공간 위에 있는 카메라를 수정했습니다. 테이블 위 ~60cm에 30° 각도로 장착합니다. 두 번째 USB 3.0 포트.
CAN 버스(암 제어)
설정에서 이미 연결되었습니다. 확인하다: ip link show can0. 르로봇을 시작하기 전에 CAN 인터페이스가 켜져 있어야 합니다.
텔레오프 장치
3D SpaceMouse, 리더 암으로서의 두 번째 OpenArm 또는 게임 패드. 두 개의 OpenArms를 사용하는 리더-팔로어는 최고 품질의 시연을 제공합니다.
카메라 동기화 참고사항: LeRobot은 호스트 PC 수준에서 모든 스트림에 타임스탬프를 기록합니다. 다중 카메라 설정의 경우 USB 3.0 허브(USB 2.0 허브 아님)를 사용하여 카메라 프레임과 결합 상태 판독값 간의 지연 시간 차이를 최소화합니다. 목표: 스트림 간 왜곡이 5ms 미만입니다.
단계별 녹음 작업 흐름
각 녹음 세션에 대해 다음 단계를 따르세요. 각 단계는 마지막 단계를 기반으로 구축됩니다. 단계를 건너뛰지 마세요.
세션 전 안전 점검
작업 공간(반경 1m)을 비우고 암이 홈 위치에 자유롭게 도달하는지 확인하고 기록하기 전에 E-stop을 테스트하십시오. 보다 안전 페이지.
CAN 인터페이스와 ROS2를 불러옵니다.
sudo ip link set up can0
source /opt/ros/humble/setup.bash
source ~/openarm_ws/install/setup.bash
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=false can_interface:=can0
팔 홈
각 세션 전에 기준 위치를 설정하려면 원점 복귀 루틴을 실행하세요. 팔은 엔드 이펙터에 부하가 없는 상태로 원래 위치에 도달해야 합니다.
python3 -m openarm_can.scripts.home --interface can0
카메라 피드 확인
르로봇을 시작하기 전에 모든 카메라가 스트리밍되고 있는지 확인하세요. LeRobot이 보고하지 않으면 누락된 카메라로 인해 데이터 세트가 자동으로 손상됩니다.
# Quick camera check (press Q to exit)
python3 -c "
import cv2
for i in range(4):
cap = cv2.VideoCapture(i)
if cap.isOpened():
print(f'Camera {i}: OK')
cap.release()
"
작업 장면 설정
일관된 시작 위치에 개체를 배치합니다. 일관된 장면 초기화는 정책 일반화에 매우 중요합니다. 시작 구성을 사진으로 찍거나 표시합니다.
르로봇 녹화 시작
source ~/.venvs/openarm/bin/activate
python -m lerobot.scripts.control_robot \
--robot.type=openarm \
--control.type=record \
--control.fps=30 \
--control.repo_id=your-username/openarm-pick-place-v1 \
--control.num_episodes=50 \
--control.single_task="Pick up the red cube and place it in the bin" \
--control.warmup_time_s=5 \
--control.reset_time_s=10
LeRobot은 각 에피소드가 시작되기 전에 메시지를 표시합니다. 녹음이 시작되기 전에 Warmup_time_s를 사용하여 텔레오프 위치를 준비하세요.
에피소드 검토 및 재생
녹화 후 데이터세트를 마무리하기 전에 의심스러운 에피소드를 재생하세요. 품질이 낮은 에피소드는 즉시 삭제하세요.
python -m lerobot.scripts.visualize_dataset \
--repo_id=your-username/openarm-pick-place-v1 \
--episode_index=0
HuggingFace 허브로 푸시
huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
--repo_id=your-username/openarm-pick-place-v1
LeRobot 데이터세트 형식
LeRobot은 테이블 형식 데이터용 Parquet 파일과 이미지 스트림용 MP4/PNG 파일을 사용하여 HuggingFace 데이터세트 형식으로 데이터세트를 저장합니다. 각 에피소드는 타임스탬프가 표시된 일련의 관찰 및 작업입니다.
디렉토리 구조
your-username/openarm-pick-place-v1/
├── meta/
│ ├── info.json # Dataset metadata, fps, shapes
│ ├── episodes.jsonl # Per-episode metadata (task, length, outcome)
│ └── stats.json # Min/max/mean/std for all fields
├── data/
│ └── chunk-000/
│ ├── episode_000000.parquet
│ ├── episode_000001.parquet
│ └── ...
└── videos/
└── chunk-000/
├── observation.images.wrist_cam/
│ ├── episode_000000.mp4
│ └── ...
└── observation.images.overhead_cam/
└── ...
에피소드 데이터 스키마
데이터로서의 실패 에피소드
OpenArm은 성공뿐만 아니라 실패한 시도도 안전하게 기록하도록 설계되었습니다. 오류 궤적(미끄러짐, 잘못 파악, 충돌, 복구 시도)은 강력한 정책 일반화에 중요한 일급 데이터입니다. 실패 에피소드를 자동으로 삭제하지 마세요. 대신에 success 필드를 에피소드 메타데이터에 입력하고 학습 프레임워크에서 이를 사용할지 여부를 결정하도록 합니다.
수집된 데이터에 대한 품질 체크리스트
각 녹음 세션이 끝난 후 허브로 푸시하기 전에 이 체크리스트를 실행하세요. 품질이 낮은 데이터는 에피소드 수가 적은 것보다 정책 성과를 더 악화시킵니다.
-
1에피소드 길이가 일정함 동일한 작업에 대한 모든 에피소드는 중앙값 길이의 ±30% 이내에 있어야 합니다. 이상값은 일반적으로 운영자가 일시 중지했거나 파악을 놓쳤거나 녹음이 중단되었음을 나타냅니다.
-
2누락된 카메라 프레임 없음 모든 에피소드에 스트림당 예상 프레임 수가 있는지 확인하세요. 달리다
lerobot.scripts.visualize_dataset3~5회에 걸쳐 영상 품질을 확인합니다. -
3공동 위치가 안전한 한계 내에 있습니다. 확인하다
observation.state결코 공동 한도를 초과하지 않습니다. 명세서. 고속 스파이크는 CAN 드롭아웃 또는 제어 결함을 나타냅니다. 해당 에피소드를 삭제하십시오. -
4에피소드 사이에 작업 장면이 재설정되었습니다. 각 에피소드는 동일한 초기 위치에 있는 개체로 시작해야 합니다. 재설정을 건너뛴 경우 정책은 일관되지 않은 초기 조건에서 학습하여 제대로 일반화되지 않습니다.
-
5카메라 취재 완료 손목 카메라에는 항상 엔드 이펙터와 조작되는 개체가 표시되어야 합니다. 오버헤드 카메라는 전체 작업 공간을 보여주어야 합니다. 개체가 에피소드 중간에 프레임을 벗어나면 마운트를 다시 조정합니다.
-
6시연 스타일이 일관됨 모든 운전자는 동일한 접근 경로와 파악 스타일을 사용해야 합니다. 혼합 전략은 정책 교육을 혼란스럽게 합니다. 작업 버전별로 단일 연산자를 사용하거나 연산자별로 에피소드에 라벨을 지정하세요.
-
7데이터 세트 통계가 합리적으로 보입니다. 확인하다
meta/stats.json녹음 후. 동작 평균이 0에 가까우며(관절 한계에 갇히지 않음) 동작 표준이 에피소드 간 변화를 표시할 만큼 충분히 큰지 확인합니다. -
8성공률이 문서화되어 있습니다. 수집 중에 인간의 성공률을 기록합니다. 접촉이 많은 작업의 경우 일반적으로 성공률이 60~70%입니다. 낮은 성공률은 작업이 너무 어렵다는 것을 의미할 수 있습니다. 높을수록 작업이 너무 쉬워 유용한 훈련 신호를 제공할 수 없음을 의미할 수 있습니다.
데이터 세트에서 정책 교육
데이터 세트가 품질 체크리스트를 통과하면 LeRobot을 사용하여 ACT 또는 확산 정책을 직접 교육할 수 있습니다.
기차 ACT
python -m lerobot.scripts.train \
--policy.type=act \
--dataset.repo_id=your-username/openarm-pick-place-v1 \
--policy.chunk_size=100 \
--training.num_epochs=5000 \
--output_dir=outputs/act-pick-place
열차 확산 정책
python -m lerobot.scripts.train \
--policy.type=diffusion \
--dataset.repo_id=your-username/openarm-pick-place-v1 \
--training.num_epochs=8000 \
--output_dir=outputs/diffusion-pick-place
더 자세히 알아보기: 전체 내용을 읽어보세요 데이터 수집 파이프라인 개요 에피소드 구조, 데이터 세트 버전 관리, 시뮬레이션-실제 정렬 및 다중 작업 데이터 세트 구성을 철저히 처리하기 위해 로보틱스 라이브러리에 있습니다.