איסוף נתונים

OpenArm תוכננה כפלטפורמה מקורית לנתונים. מדריך זה מכסה הכל, החל מחיווט מצלמות ועד הקלטת פרקים בפורמט LeRobot, עם בדיקות איכות בכל שלב.

לפני ההקלטה

חיבורי חומרה להקלטה

איסוף נתונים דורש יותר חומרה מאשר בקרת זרוע בסיסית. סעיף זה מכסה מה להתחבר ולאן לפני שתפעיל את LeRobot.

📷

מצלמת פרק כף היד

חבר מצלמת רשת USB או Intel RealSense D435i לאוגן הקצה. התחבר באמצעות USB 3.0 עבור 30+ פריימים לשנייה. לְאַמֵת: ls /dev/video*

📖

מצלמה עילית / סביבת עבודה

מצלמה קבועה מעל סביבת העבודה לתצוגה גלובלית. התקן ב-~60 ס"מ מעל השולחן, בזווית מטה של ​​30°. יציאת USB 3.0 שנייה.

🔌

CAN Bus (בקרת זרוע)

כבר מחובר מההגדרה. לְאַמֵת: ip link show can0. ממשק ה-CAN חייב להיות פתוח לפני הפעלת LeRobot.

👤

מכשיר טלאופ

3D SpaceMouse, OpenArm שני כזרוע מובילה, או משטח משחק. מנהיג-עוקב עם שני OpenArms נותן הדגמות באיכות הגבוהה ביותר.

הערה לסנכרון המצלמה: LeRobot חותמת את כל הזרמים ברמת המחשב המארח. עבור הגדרות מרובות מצלמות, השתמש ברכזות USB 3.0 (לא ברכזות USB 2.0) כדי למזער את הטיית השהיה בין מסגרות מצלמה וקריאות מצב משותפות. יעד: < 5ms הטיה בין זרמים.

זרימת עבודה של הקלטה

תהליך הקלטה שלב אחר שלב

בצע את השלבים הבאים עבור כל הפעלת הקלטה. כל שלב מתבסס על השלב האחרון - אל תדלג על שלבים.

1

בדיקת בטיחות לפני הפגישה

נקה את סביבת העבודה (רדיוס 1 מטר), ודא שהזרוע מגיעה למצב הבית בחופשיות, בדוק עצירה חשמלית לפני ההקלטה. לִרְאוֹת דף בטיחות.

2

העלה את ממשק 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
3

הביתה את הזרוע

הפעל את שגרת הביות כדי להגדיר את מיקום הייחוס לפני כל פגישה. הזרוע חייבת להגיע למצב הביתי שלה ללא עומס על מפעיל הקצה.

python3 -m openarm_can.scripts.home --interface can0
4

אמת עדכוני מצלמה

בדוק שכל המצלמות זורמות לפני הפעלת LeRobot. מצלמה חסרה תשחית את מערך הנתונים שלך בשקט אם 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()
"
5

הגדר את סצנת המשימה

הצב אובייקטים בעמדות התחלה עקביות. אתחול סצינה עקבי הוא קריטי להכללת מדיניות. צלם או סמן את תצורת ההתחלה.

6

התחל להקליט LeRobot

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 כדי להכין את עמדת הטלאופ שלך לפני תחילת ההקלטה.

7

סקירה והשמעה חוזרת של פרקים

לאחר ההקלטה, הפעל מחדש פרקים חשודים לפני סיום מערך הנתונים. מחק מיד פרקים באיכות ירודה.

python -m lerobot.scripts.visualize_dataset \
  --repo_id=your-username/openarm-pick-place-v1 \
  --episode_index=0
8

דחף אל HuggingFace Hub

huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
  --repo_id=your-username/openarm-pick-place-v1
פורמט ערכת נתונים

פורמט ערכת נתונים של LeRobot

LeRobot מאחסן מערכי נתונים בפורמט הנתונים של HuggingFace באמצעות קבצי Parquet עבור נתונים טבלאיים וקבצי MP4/PNG עבור זרמי תמונות. כל פרק הוא רצף של תצפיות ופעולות עם חותמת זמן.

מבנה ספריות

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/
            └── ...

סכימת נתוני פרק

שדות בכל פרק קובץ פרקט
תצפית.מצב float32[8] עמדות משותפות ברדיאנים (8 DOF)
תצפית.מהירות float32[8] מהירויות המפרק בראד/ש
תצפית.מאמץ float32[8] מומנטים מפרקים ב-Nm
תצפית.תמונות.* נתיב וידאו התייחסות למסגרת בקובץ וידאו MP4
פְּעוּלָה float32[8] כוון עמדות מפרקים ממכשיר טלאופ
חותמת זמן לצוף64 חותמת זמן של יוניקס בשניות
frame_index int64 מספר מסגרת בתוך פרק
episode_index int64 מספר פרק בתוך מערך הנתונים
הבא.בוצע bool נכון בפריים האחרון של פרק
task_index int64 אינדקס לטבלת חיפוש תיאור משימה

פרקי כשל כנתונים

OpenArm נועד להקליט בבטחה ניסיונות כושלים, לא רק הצלחות. מסלולי כשל - החלקה, אי אחיזה, התנגשות, ניסיונות התאוששות - הם נתונים מהשורה הראשונה קריטיים להכללת מדיניות חזקה. אל תמחק פרקי כשל באופן אוטומטי. במקום זאת, ציין אותם ב- success שדה במטא נתונים של פרק ולתת למסגרת ההדרכה להחליט אם להשתמש בהם.

אבטחת איכות

רשימת רשימת איכות לנתונים שנאספו

רוץ על רשימת הבדיקה הזו לאחר כל מפגש הקלטה ולפני דחיפה ל-Hub. נתונים באיכות ירודה פוגעים בביצועי המדיניות יותר מאשר מספר פרקים נמוך.

  • 1
    אורך הפרק עקבי כל הפרקים עבור אותה משימה צריכים להיות בטווח של ±30% מהאורך החציוני. חריגים מציינים בדרך כלל שהמפעיל השהה, החמיץ אחיזה או שההקלטה נקטעה.
  • 2
    לא חסרות מסגרות מצלמה בדוק שלכל פרק יש את המספר הצפוי של פריימים לכל זרם. לָרוּץ lerobot.scripts.visualize_dataset על 3-5 פרקים כדי לאמת את איכות הסרטון.
  • 3
    עמדות משותפות נמצאות בגבולות בטוחים לְאַמֵת observation.state לעולם לא חורג מהמגבלות המשותפות ב מפרט. עליות מהירות גבוהות מצביעות על נשירת CAN או תקלת בקרה - מחק את הפרקים האלה.
  • 4
    סצנת המשימות אופסה בין פרקים כל פרק חייב להתחיל עם האובייקט באותו מיקום התחלתי. אם דילגת על איפוס, הפוליסה תלמד מתנאים ראשוניים לא עקביים ותכליל בצורה גרועה.
  • 5
    כיסוי המצלמה הושלם מצלמת שורש כף היד צריכה תמיד להראות את גורם הקצה ואת האובייקט המטופל. המצלמה העליונה צריכה להראות את סביבת העבודה המלאה. כוונן מחדש את הרכיבים אם האובייקט עוזב את המסגרת באמצע הפרק.
  • 6
    סגנון ההפגנה עקבי כל המפעילים צריכים להשתמש באותו נתיב גישה וסגנון אחיזה. אסטרטגיות מעורבות מבלבלות את הכשרת המדיניות. השתמש באופרטור בודד לכל גרסת משימה, או תווי פרקים לפי מפעיל.
  • 7
    הנתונים הסטטיסטיים של מערכי הנתונים נראים סבירים לִבדוֹק meta/stats.json לאחר ההקלטה. ודא שממוצע הפעולה קרוב לאפס (לא תקוע במגבלות המפרק), והפעולה STD גדולה מספיק כדי להראות שונות בין פרקים.
  • 8
    שיעור ההצלחה מתועד רשום את שיעור ההצלחה האנושית במהלך האיסוף. שיעור הצלחה של 60-70% אופייני למשימות עשירות באנשי קשר. הצלחה נמוכה יותר עשויה להצביע על המשימה קשה מדי; גבוה יותר עשויה לומר שהמשימה קלה מכדי לספק אות אימון שימושי.
השלב הבא

הכשרת מדיניות מתוך מערך הנתונים שלך

לאחר שהמערכה שלך תעבור את רשימת הבדיקה האיכותית, תוכל לאמן ACT או Diffusion Policy ישירות עם LeRobot.

רכבת 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

תעמיק יותר: קרא את המלא סקירת צינור איסוף נתונים בספריית הרובוטיקה לטיפול יסודי במבנה הפרק, גירסאות הנתונים של הנתונים, יישור ה-sim-to-real והרכב מערך הנתונים מרובה משימות.

ערכת נתונים מוכנה? התחל אימון.

דחוף את מערך הנתונים שלך אל HuggingFace והתחל לאמן ACT או Diffusion Policy.