איסוף נתונים
ה-SO-101 היא אחת מזרועות איסוף הנתונים הנפוצות ביותר בקהילת LeRobot. מדריך זה מכסה הכל, החל מחיבורי חומרה ועד הקלטת פרקים ודחיפת מערך הנתונים שלך אל HuggingFace.
הגדרת חומרה להקלטה
הגדרת איסוף הנתונים SO-101 פשוטה יותר מזרועות CAN-bus - הכל פועל באמצעות USB. הנה מה להתחבר.
מצלמת סביבת עבודה
מצלמת USB מכוונת אל סביבת העבודה מלמעלה או מהצד. התקן במיקום קבוע - אל תעביר אותו בין פרקים. לְאַמֵת: ls /dev/video*
מצלמת פרק כף היד (אופציונלי)
מצלמת USB קטנה מותקנת על אפקטור הקצה. מוסיף תצוגת גוף ראשון. נדרשת יציאת USB שנייה. LeRobot תומך בסנכרון מרובה מצלמות.
זרוע עוקב (USB טורי)
הזרוע שמבצעת פעולות. התחבר באמצעות בקר סרוו USB. אמת יציאה עם ls /dev/ttyUSB*
Leader Arm (USB טורי)
SO-101 שני במצב תאימות - הזז אותו עם היד שלך כדי להניע את העוקב. חבר ביציאת USB שנייה. נותן הדגמות באיכות הגבוהה ביותר.
ללא ROS, ללא מנהלי התקנים של ליבה: שלא כמו הגדרות CAN-bus, מחסנית איסוף הנתונים SO-101 פועלת כולה על גבי USB טורי. אתה יכול להקליט במחשב נייד MacBook או Windows - אין צורך באובונטו.
תהליך הקלטה שלב אחר שלב
ודא שהכיול עדכני
הפעל כיול לפני כל הפעלה חדשה אם הזרוע פורקה או הוזזה. לִרְאוֹת תוכנה → כיול.
python -m lerobot.scripts.control_robot \
--robot.type=so101 --robot.port=/dev/ttyUSB0 \
--control.type=calibrate
אמת עדכוני מצלמה
python -c "
import cv2
for i in range(4):
cap = cv2.VideoCapture(i)
if cap.isOpened():
print(f'Camera {i}: OK')
cap.release()
"
העבר את הזרוע למצב הבית
הנח את זרוע העוקבת בעמדת הבית (ארוכה במלואה, גורם הקצה מצביע קדימה). אפס את זרוע המנהיג לאותו מיקום לפני תחילת הטלאופ.
הגדר את סצנת המשימה
הצב אובייקטים בעמדות ההתחלה העקביות שלהם. סמן את הטבלה במידת הצורך - תנאים ראשוניים עקביים הם קריטיים להכללת מדיניות.
התחל להקליט LeRobot
python -m lerobot.scripts.control_robot \
--robot.type=so101 \
--robot.port=/dev/ttyUSB1 \
--robot.leader_arms.main.type=so101 \
--robot.leader_arms.main.port=/dev/ttyUSB0 \
--control.type=record \
--control.fps=30 \
--control.repo_id=your-username/so101-pick-place-v1 \
--control.num_episodes=50 \
--control.single_task="Pick the red block and place it in the bin" \
--control.warmup_time_s=3 \
--control.reset_time_s=8
LeRobot מבקש לפני כל פרק. במהלך החימום ניתן לכוונן את האחיזה בזרוע המוביל לפני תחילת ההקלטה.
סקירה והשמעה חוזרת של פרקים
python -m lerobot.scripts.visualize_dataset \
--repo_id=your-username/so101-pick-place-v1 \
--episode_index=0
מחק מיד פרקים באיכות ירודה. בדוק אם נפלו מסגרות מצלמה, מהירויות מפרקים לא יצירות או ביצוע משימה לא שלם.
דחף אל HuggingFace Hub
huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
--repo_id=your-username/so101-pick-place-v1
SO-101 פורמט מערך נתונים
ה-SO-101 משתמש בפורמט הנתונים הסטנדרטי של LeRobot / HuggingFace - סכימה זהה לזרועות OpenArm, Koch ושאר זרועות LeRobot. משמעות הדבר היא כי מערכי הנתונים שלך תואמים ישירות לאקו-סיסטם האימון המלא של LeRobot.
סכימת נתוני פרק
הערות ספציפיות ל-SO-101
חלל הפעולה SO-101 משתמש במיקומי משותף במעלות (יחידות סרוו של Feetech), לא ברדיאנים. בעת ערבוב מערכי נתונים SO-101 ו-OpenArm לאימון חוצה פלטפורמות, נרמל את שניהם לרדיאנים תחילה באמצעות הנתונים הסטטיסטיים ב meta/stats.json.
רשימת רשימת איכות לנתונים שנאספו
הפעל את זה לאחר כל סשן הקלטה לפני שאתה דוחף ל-Hub.
-
1אורך הפרקים עקבי פרקים באורך חריג פירושם בדרך כלל שהמפעיל עצר, התפסן החליק או שההקלטה נקטעה. שמור בטווח של ±30% מהאורך החציוני.
-
2אין קוצים במהירות סרוו לסרוו STS3215 יש רוחב פס מוגבל - עליות מהירות פתאומיות פנימה
observation.stateלהצביע על נשירת אוטובוס טורי. תמחק את הפרקים האלה. -
3מסגרות מצלמה מיושרות עם נתונים משותפים בדוק שחותמות זמן של מצלמה וחותמות זמן משותפות נמצאות בטווח של 20 אלפיות השנייה זה מזה. השהייה טורית של USB יכולה לגרום להיסחפות במהלך הקלטות ארוכות. סנכרן מחדש את המצלמות כל 100 פרקים.
-
4המעקב אחר זרועות המנהיג היה חלק אם העוקב פיגר באופן ניכר במהלך ההקלטה (עקב חביון טורי USB), תוויות הפעולה יועברו זמן מהתצפיות. הפעל מחדש כדי לבדוק.
-
5סצנת המשימות הייתה עקבית בתחילת כל פרק חפצים באותו מיקום וכיוון. יכולת החזרה הנמוכה של ה-SO-101 (לעומת זרועות CAN) הופכת את זה לחשוב במיוחד - השונות בתנאים ההתחלתיים פוגעת באימון המדיניות.
-
6פתיחה/סגירה של התפס מתועד בבירור מצב האחיזה SO-101 הוא משותף 6. ודא שאירועי אחיזה מראים מעבר ברור של מיקום משותף (פתוח → סגור) בנתונים, לא סחיפה הדרגתית.
הכשרת מדיניות מתוך מערך הנתונים שלך
לאחר שהמערך שלך יעבור בדיקות איכות, אמן את ACT או Diffusion Policy עם LeRobot.
רכבת ACT
python -m lerobot.scripts.train \
--policy.type=act \
--dataset.repo_id=your-username/so101-pick-place-v1 \
--policy.chunk_size=100 \
--training.num_epochs=5000 \
--output_dir=outputs/act-so101-pick-place
מדיניות פיזור רכבות
python -m lerobot.scripts.train \
--policy.type=diffusion \
--dataset.repo_id=your-username/so101-pick-place-v1 \
--training.num_epochs=8000 \
--output_dir=outputs/diffusion-so101-pick-place
מערכי נתונים של קהילה: ל-SO-101 יש את אחד מאוספי הנתונים הקהילתיים הגדולים ביותר במערכת האקולוגית של LeRobot. לפני איסוף הנתונים שלך, בדוק HuggingFace Hub עבור מערכי נתונים קיימים של SO-101 - ייתכן שתוכל לכוונן ממערך נתונים בסיסי קיים ולחסוך זמן הקלטה.