איסוף נתונים
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 מטר), ודא שהזרוע מגיעה למצב הבית בחופשיות, בדוק עצירה חשמלית לפני ההקלטה. לִרְאוֹת דף בטיחות.
העלה את ממשק 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. מצלמה חסרה תשחית את מערך הנתונים שלך בשקט אם 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()
"
הגדר את סצנת המשימה
הצב אובייקטים בעמדות התחלה עקביות. אתחול סצינה עקבי הוא קריטי להכללת מדיניות. צלם או סמן את תצורת ההתחלה.
התחל להקליט 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 כדי להכין את עמדת הטלאופ שלך לפני תחילת ההקלטה.
סקירה והשמעה חוזרת של פרקים
לאחר ההקלטה, הפעל מחדש פרקים חשודים לפני סיום מערך הנתונים. מחק מיד פרקים באיכות ירודה.
python -m lerobot.scripts.visualize_dataset \
--repo_id=your-username/openarm-pick-place-v1 \
--episode_index=0
דחף אל 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/
└── ...
סכימת נתוני פרק
פרקי כשל כנתונים
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 והרכב מערך הנתונים מרובה משימות.