
Καταγράψτε ένα χρησιμοποιήσιμο σύνολο δεδομένων LeRobot με ένα SO-100: βαθμονόμηση, τηλελειτουργία leader-follower, οι πραγματικές σημαίες και προεπιλογές του lerobot-record, ρύθμιση κάμερας, αριθμός επεισοδίων, και τα ελαττώματα που καταστρέφουν μια εκτέλεση.
Ένας SO-100 ακολουθητής, ένας βραχίονας οδηγός του ίδιου σχεδιασμού και δύο κάμερες USB μπορούν να ρυθμίσουν λεπτομερώς μια πολιτική μέσα σε ένα απόγευμα. Ο ίδιος πάγκος μπορεί εξίσου εύκολα να παράγει εξήντα επεισόδια που φαίνονται υγιή σε ένα πρόγραμμα περιήγησης αρχείων και να σπαταλήσει μια εξάωρη εκτέλεση GPU. Η διαφορά σπάνια είναι το μοντέλο· είναι αυτό που συνέβη μεταξύ των σερβομηχανισμών και του αρχείου parquet.
Εδώ είναι η χειροκίνητη διαδρομή, και μετά η συντομότερη. Κάθε εντολή προέρχεται από το lerobot 0.6.1, που κυκλοφόρησε στις 3 Αυγούστου 2026 και είναι τρέχον στο PyPI. Μετακινήθηκε σε σημεία εισόδου κονσόλας, οπότε τα tutorials που εκτελούν python lerobot/scripts/control_robot.py περιγράφουν ένα αρχείο που δεν υπάρχει πλέον.
Η σύντομη έκδοση
- •Το lerobot 0.6.1 καταγράφει v3.0· τα GR00T N1.7 και N1.5 θέλουν v2.1. Καθορίστε τη μορφή πριν πατήσετε εγγραφή.
- •Τέσσερις εντολές: lerobot-find-port, lerobot-setup-motors, lerobot-calibrate, lerobot-record. Χρησιμοποιήστε τα ίδια --robot.id και --teleop.id από τη βαθμονόμηση στην περίοδο καταγραφής.
- •Πραγματικές προεπιλογές: 30 fps, 60 δευτερόλεπτα ανά επεισόδιο, 60 δευτερόλεπτα επαναφορά, 50 επεισόδια, περίπου 100 λεπτά πραγματικού χρόνου.
- •Ελάχιστα επεισόδια εδώ: 30 για το SmolVLA, 50 για τα υπόλοιπα.
- •Η ποικιλομορφία υπερτερεί του όγκου. Τα σύνολα δεδομένων αποτυγχάνουν λόγω τεσσάρων πραγμάτων: εναλλαγμένων δεικτών κάμερας, χαμένων ή παγωμένων καρέ, μιας άρθρωσης παρκαρισμένης στο όριό της, μιας μη αναγνώσιμης συμβολοσειράς εργασίας.
Τι καταγράφει μια περίοδος καταγραφής
Ένα σύνολο δεδομένων LeRobot δεν είναι ένας φάκελος βίντεο αλλά ένας χρονο-ευρετηριασμένος πίνακας με συνημμένο βίντεο: κάθε κύκλος ελέγχου γράφει μία γραμμή που περιέχει την εντολή δράσης, την κατάσταση που έφτασε ο ακόλουθος, ένα καρέ ανά κάμερα, μια χρονική σήμανση και δείκτες. Η πολιτική βλέπει μόνο αυτές τις στήλες. Το σχήμα του lerobot/svla_so100_pickplace, όπως διαβάζεται από το meta/info.json του.
| Χαρακτηριστικό | dtype | Σχήμα | Τι είναι |
|---|---|---|---|
| action | float32 | [6] | στόχοι αρθρώσεων από τον βραχίονα του ηγέτη |
| observation.state | float32 | [6] | θέσεις αρθρώσεων που έφτασε ο ακόλουθος |
| observation.images.top | video | [480, 640, 3] | κάμερα σκηνής, MP4 (av1 εδώ) |
| observation.images.wrist | video | [480, 640, 3] | κάμερα καρπού, ίδια συχνότητα |
| timestamp | float32 | [1] | δευτερόλεπτα από την έναρξη του επεισοδίου |
| frame_index, episode_index, index, task_index | int64 | [1] | αυτόματα συμπληρωμένη λογιστική καταγραφή |
Οι αρθρώσεις είναι main_shoulder_pan, main_shoulder_lift, main_elbow_flex, main_wrist_flex, main_wrist_roll και main_gripper: οι έξι βαθμοί ελευθερίας του SO-100. Η δράση και η κατάσταση μοιράζονται ένα σχήμα επειδή τηλελειτουργία ηγέτη-ακόλουθου καταγράφει έναν στόχο και τη θέση που επιτεύχθηκε ένα βήμα αργότερα. Αυτό το κενό είναι πληροφορία: πού ο βραχίονας πάλεψε τη βαρύτητα ή ένα κολλημένο αντικείμενο. Αυτές οι συμβολοσειρές ανήκουν σε αυτό το σύνολο δεδομένων. Μια συνεδρία που καταγράφηκε με 0.6.1 σήμερα γράφει shoulder_pan.pos έως gripper.pos, αναγνωριστικά 1 έως 6 στον δίαυλο: οι ίδιες έξι αρθρώσεις, διαφορετικά κλειδιά, κάτι που έχει σημασία τη στιγμή που μια διαμόρφωση αναφέρεται σε ένα χαρακτηριστικό με το όνομά του.
Αυτό το σύνολο δεδομένων περιέχει 50 επεισόδια και 19.631 καρέ στα 30 fps: περίπου 393 καρέ, ή 13 δευτερόλεπτα, ανά επεισόδιο. Εάν τα δικά σας έχουν μέσο όρο ένα λεπτό, κάνετε κάτι πιο δύσκολο ή καταγράφετε νεκρό χρόνο και στα δύο άκρα.

Τι χρειάζεστε στον πάγκο εργασίας
| Στοιχείο | Λεπτομέρεια | Σημείωση |
|---|---|---|
| Βραχίονας ακολούθησης | SO-100, έξι σερβοκινητήρες Feetech STS3215 | περίπου 110 έως 150 EUR σε ανταλλακτικά |
| Βραχίονας οδηγού | ένας δεύτερος SO-100, αφαιρεμένα γρανάζια | αφαιρεμένα γρανάζια από όλους τους έξι κινητήρες οδηγού: μόνο κωδικοποιητής, λιγότερη τριβή |
| Τροφοδοσία | αντιστοιχισμένη στην έκδοση 7.4 V STS3215 στον κατάλογο υλικών | δείτε την προειδοποίηση παρακάτω |
| Κάμερες | δύο κάμερες USB, 640x480 στα 30 fps | μία προβολή σκηνής, μία στον καρπό |
| Κεντρικός υπολογιστής | Python 3.12 ή νεότερη, ffmpeg | requires-python >= 3.12 |
| Λογαριασμός Hub | Hugging Face write token | προαιρετικό με --dataset.push_to_hub=false |
Ο STS3215 διατίθεται σε δύο εκδόσεις: το README του SO-ARM100 αξιολογεί την έκδοση 7.4 V στα 16.5 kg.cm ροπή στάσης μετρημένη στα 6 V και την έκδοση 12 V στα 30 kg.cm, και σημειώνει ότι η επιλογή των κινητήρων 12 V σημαίνει επίσης την αγορά τροφοδοτικού 12 V 5 A+ αντί για το 5 V. Ο κατάλογος υλικών αναφέρει σερβοκινητήρες 7.4 V. Η τροφοδοσία 12 V σε σερβοκινητήρες ονομαστικής τάσης 7.4 V τους καταστρέφει, οπότε διαβάστε την ετικέτα του κινητήρα πριν συνδέσετε οτιδήποτε. Ο σερβοκινητήρας δεν ανταποκρίνεται.
Εάν ο βραχίονας δεν έχει κατασκευαστεί ακόμα, αυτό είναι ένα ξεχωριστό βράδυ: ξεκινήστε από Ξεκινώντας με το SO-100 και τον πλήρη οδηγό εγκατάστασης του SO-100. Εάν δεν έχετε αγοράσει τίποτα, διαβάστε την σύγκριση SO-100 έναντι SO-101 πρώτα: το SO-101 είναι η νεότερη αναθεώρηση με βελτιωμένη καλωδίωση και χωρίς βήμα αφαίρεσης γραναζιών, και η ροή εργασίας καταγραφής είναι πανομοιότυπη.
Εγκατάσταση lerobot 0.6.1
conda create -y -n lerobot python=3.12
conda activate lerobot
# TorchCodec is the default video decoder and needs ffmpeg
conda install ffmpeg -c conda-forge
# core_scripts = dataset + hardware + viz extras (record, replay, calibrate)
# feetech = SDK for the STS3215 bus servos in the SO-100
pip install 'lerobot[core_scripts,feetech]'
lerobot-infoΤα πρόσθετα μπερδεύουν τους περισσότερους. pip install lerobot εγκαθιστά μόνο βασικές εξαρτήσεις ML, τίποτα που να επικοινωνεί με ένα ρομπότ. Οι βραχίονες Koch χρειάζονται dynamixel αντί για feetech. Εάν το κέλυφός σας δεν έχει ακούσει ποτέ για το lerobot-record, αυτός είναι ο λόγος.
Θύρες, αναγνωριστικά κινητήρων και βαθμονόμηση
Τρία εφάπαξ βήματα χωρίζουν τα εξαρτήματα από έναν λειτουργικό βρόχο τηλελειτουργίας. επιτρέπει σε μια πολιτική εκπαιδευμένη στον δικό σας βραχίονα να λειτουργεί σε κάποιον άλλον, αντιστοιχίζοντας τις ακατέργαστες μετρήσεις κωδικοποιητή σε μια κοινή σύμβαση άρθρωσης.
- 1Βρείτε τη θύρα USB κάθε βραχίονα
Εκτελέστε το με τους δύο βραχίονες συνδεδεμένους, αποσυνδέστε αυτόν που αναγνωρίζετε όταν σας ζητηθεί και σημειώστε ποια θύρα εξαφανίζεται. Σε Linux ενδέχεται να χρειαστείτε
sudo chmod 666 /dev/ttyACM0.bashlerobot-find-port # Finding all available ports for the MotorsBus. # Ports before disconnecting: ['/dev/ttyACM0', '/dev/ttyACM1'] # Remove the USB cable from your MotorsBus and press Enter when done. # The port of this MotorsBus is '/dev/ttyACM1' # Reconnect the USB cable. - 2Γράψτε τα αναγνωριστικά κινητήρων και τις ταχύτητες baud
Τα αναγνωριστικά γράφονται ένας κινητήρας τη φορά, και οι οδηγίες είναι αυστηρές ως προς τον τρόπο: συνδέστε ακριβώς έναν κινητήρα στην πλακέτα ελέγχου, όχι ακόμα σε σειρά με κανέναν άλλο. Το σενάριο διασχίζει την αλυσίδα προς τα πίσω, ζητώντας πρώτα την αρπάγη και δίνοντάς της το αναγνωριστικό 6, μετά τον καρπό (wrist_roll) ως 5, μέχρι τον ώμο (shoulder_pan) ως 1. Κάντε το πριν τη συναρμολόγηση.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 3Βαθμονόμηση και των δύο βραχιόνων
Μετακινήστε κάθε άρθρωση στη μέση του εύρους της, πατήστε Enter και, στη συνέχεια, σαρώστε την πλήρη της εμβέλεια. Το
idγίνεται το όνομα αρχείου του προφίλ.bashlerobot-calibrate \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=my_so100_follower lerobot-calibrate \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 \ --teleop.id=my_so100_leader - 4Τηλελειτουργία πριν από οποιαδήποτε καταγραφή
Η δοκιμή αποδοχής για όλα τα παραπάνω. Εάν η τηλελειτουργία είναι ασταθής, αντικατοπτρισμένη ή μια άρθρωση δεν ακολουθεί, η καταγραφή το διατηρεί σε 50 επεισόδια.
bashlerobot-teleoperate \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=my_so100_follower \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 \ --teleop.id=my_so100_leader \ --display_data=true
Τα προφίλ αποθηκεύονται στο $HF_LEROBOT_CALIBRATION, προεπιλογή ~/.cache/huggingface/lerobot/calibration, και το αναγνωριστικό είναι το κλειδί αναζήτησης. Δώστε στο lerobot-record ένα βαθμονομημένο αναγνωριστικό και θα σας προσφέρει Enter για να επαναχρησιμοποιήσετε το προφίλ ή c για να το επαναλάβετε. Δώστε του ένα άγνωστο αναγνωριστικό και δεν υπάρχει αρχείο, οπότε μεταβαίνει σε βαθμονόμηση εν μέσω συνεδρίας.
Οι κάμερες αποφασίζουν τι βλέπει η πολιτική
lerobot-find-cameras opencv # or: lerobot-find-cameras realsense
# --- Detected Cameras ---
# Camera #0:
# Name: OpenCV Camera @ 0
# Type: OpenCV
# Id: 0
# Backend api: AVFOUNDATION
# Default stream profile:
# Format: 16.0
# Width: 1920
# Height: 1080
# Fps: 15.0Δύο όψεις, και η θέση τους έχει σημασία: μια σταθερή κάμερα σκηνής που καλύπτει τον χώρο εργασίας, και μια κάμερα καρπού κοντά στο τελικό εκτελεστικό όργανο που δείχνει τι πρόκειται να αγγίξει η αρπάγη. Η λίστα ελέγχου των συνόλων δεδομένων της κοινότητας LeRobot ζητά κατά προτίμηση δύο όψεις στα 480x640 / 720p ή καλύτερα, ένα στατικό φόντο, ουδέτερο σταθερό φωτισμό, και το κύριο χέρι και τα ανθρώπινα άκρα εκτός κάδρου. Ο οδηγός καταγραφής προσθέτει τον εμπειρικό κανόνα: θα πρέπει να μπορείτε να εκτελέσετε την εργασία μόνοι σας κοιτάζοντας μόνο τις εικόνες της κάμερας.
Οι δείκτες OpenCV προέρχονται από τη σειρά απαρίθμησης, οπότε μια επανεκκίνηση ή επανασύνδεση μπορεί να κάνει τους δείκτες 0 και 2 να αλλάξουν θέσεις και να τοποθετήσουν την όψη καρπού στην κορυφαία θέση για ολόκληρη τη συνεδρία. Το lerobot το λέει και το ίδιο: η κλάση κάμερας του δέχεται μια διαδρομή συσκευής καθώς και έναν ακέραιο αριθμό, και προειδοποιεί ότι οι δείκτες είναι ασταθείς σε επανεκκινήσεις ή αλλαγές θυρών, ειδικά στο Linux. Στρέψτε το index_or_path στον συμβολικό σύνδεσμο udev κάτω από το /dev/v4l/by-id/, ο οποίος ακολουθεί τη συσκευή και όχι τη σειρά απαρίθμησης. Αυτός είναι ο πιο συνηθισμένος τρόπος με τον οποίο ένα σύνολο δεδομένων καταλήγει εσωτερικά ασυνεπές, και η εκπαίδευση δεν μπορεί να το επιδιορθώσει. Η κάμερα δεν ανιχνεύτηκε.
Η εντολή record και κάθε σημαία
HF_USER=$(NO_COLOR=1 hf auth whoami | awk -F': *' 'NR==1 {print $2}')
lerobot-record \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_so100_follower \
--robot.cameras="{ top: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \
--teleop.type=so100_leader \
--teleop.port=/dev/ttyACM1 \
--teleop.id=my_so100_leader \
--display_data=true \
--dataset.repo_id=${HF_USER}/so100_pick_cube \
--dataset.single_task="Pick the red cube and drop it in the box" \
--dataset.num_episodes=50 \
--dataset.fps=30 \
--dataset.episode_time_s=25 \
--dataset.reset_time_s=10 \
--dataset.streaming_encoding=true \
--dataset.encoder_threads=2Οι προεπιλογές παρακάτω προέρχονται από src/lerobot/configs/dataset.py στο main, όχι από ένα σεμινάριο. Αρκετές δεν είναι αυτές που υποθέτουν οι άνθρωποι.
| Σημαία | Προεπιλογή | Τι κάνει |
|---|---|---|
| --dataset.repo_id | κενό | όνομα· χρονοσφραγίδα προστίθεται από προεπιλογή |
| --dataset.single_task | κενό | συμβολοσειρά εργασίας αποθηκευμένη με κάθε επεισόδιο |
| --dataset.root | $HF_LEROBOT_HOME/repo_id | διαδρομή εγγραφής, προεπιλογή ~/.cache/huggingface/lerobot/ |
| --dataset.fps | 30 | ρυθμός βρόχου ελέγχου και ρυθμός καρέ συνόλου δεδομένων |
| --dataset.episode_time_s | 60 | δευτερόλεπτα πριν ένα επεισόδιο προχωρήσει αυτόματα |
| --dataset.reset_time_s | 60 | επαναφορά σκηνής· το ρομποτικό χέρι κινείται, τίποτα δεν αποθηκεύεται |
| --dataset.num_episodes | 50 | επεισόδια που καταγράφηκαν σε αυτήν τη συνεδρία |
| --dataset.push_to_hub | true | μεταφόρτωση στο τέλος της συνεδρίας· false παραμένει τοπικό |
| --dataset.streaming_encoding | false in the dataclass, true in the docs table | κωδικοποίηση κατά τη λήψη· ορίστε το ρητά |
| --dataset.encoder_queue_maxsize | 30 | καρέ σε buffer ανά κάμερα, ~1 δευτ. στα 30 fps |
| --dataset.encoder_threads | null (codec decides) | νήματα ανά κωδικοποιητή· χαμηλότερα αν η λήψη κολλάει |
| --dataset.no_stamp | false | διατηρήστε το repo_id ακριβώς όπως πληκτρολογήθηκε |
| --resume | false | προσθήκη σε ένα υπάρχον σύνολο δεδομένων· απαιτεί --dataset.root |
Το σύνολο δεδομένων σας δεν ονομάζεται όπως πληκτρολογήσατε. Το lerobot προσθέτει μια ετικέτα ημερομηνίας-ώρας, οπότε το so100_pick_cube γίνεται so100_pick_cube_20260823_141530. Χρησιμοποιήστε το --dataset.no_stamp=true για ένα σταθερό όνομα. Η συνέχιση μετράει προσθήκες, όχι σύνολα. Με το --resume=true, το --dataset.num_episodes μετράει επιπλέον επεισόδια και το --dataset.root γίνεται υποχρεωτικό. Ζητήστε 50 σε ένα σύνολο δεδομένων 30 επεισοδίων και θα λάβετε 80.
Έλεγχος πληκτρολογίου κατά τη διάρκεια μιας συνεδρίας
- Δεξί βέλος ή
n: τερματίστε το επεισόδιο ή επαναφέρετε τη φάση νωρίτερα. Το πλήκτρο που χρησιμοποιείτε περισσότερο, επειδή μια καθαρή σύλληψη σπάνια χρειάζεται 25 δευτερόλεπτα. - Αριστερό βέλος ή
r: απορρίψτε το επεισόδιο και επαναλάβετε το. Μια κακή λήψη δεν κοστίζει τίποτα τώρα και πολλά αργότερα. - Escape ή
q: σταματήστε τη συνεδρία, ολοκληρώστε την κωδικοποίηση, ανεβάστε. - Αυτά λειτουργούν σε X11, Wayland και headless SSH: χωρίς καθολικό backend πλήκτρων, το lerobot-record διαβάζει τα ίδια πλήκτρα από το τερματικό ελέγχου. Τα γράμματα επιβιώνουν σε αργές συνδέσεις SSH, όπου οι ακολουθίες βελών διαχωρίζονται.
- Η τηλελειτουργία πληκτρολογίου είναι διαφορετική και χρειάζεται ένα καθολικό backend: X11, Windows, ή macOS με Προσβασιμότητα.
Πόσα επεισόδια, και πώς μοιάζει ένα καλό
Ο οδηγός καταγραφής προτείνει τουλάχιστον 50 επεισόδια για μια πρώτη εργασία, περίπου 10 ανά θέση αντικειμένου. Οι σελίδες πολιτικής αναφέρουν ένα ελάχιστο ανά μοντέλο, κάτω από το οποίο μια εκτέλεση δεν αξίζει τον χρόνο της GPU.
| Πολιτική | Ελάχιστα επεισόδια | Μορφή συνόλου δεδομένων | Κατηγορία GPU | Κόστος ανά εκτέλεση |
|---|---|---|---|---|
| SmolVLA | 30 | LeRobot v3.0 | RTX 4090 or any 24 GB card | about 1 to 3 USD |
| ACT | 50 | LeRobot v3.0 | RTX 4090 or any 24 GB card | about 1 to 3 USD |
| GR00T N1.7 | 50 | LeRobot v2.0 or v2.1 | A100 80 GB or H100 80 GB | about 4 to 12 USD |
| GR00T N1.5 | 50 | LeRobot v2.0 or v2.1 | A100 80 GB or H100 80 GB | about 4 to 12 USD |
| Pi0.5 | 50 | LeRobot v3.0 | A100 80 GB or H100 80 GB | about 4 to 12 USD |
Η καλύτερη ερώτηση είναι πόσα από τι. Νόμοι Κλιμάκωσης Δεδομένων στην Εκμάθηση Μίμησης για Ρομποτική Χειραγώγηση (Lin et al., 2024) συνέλεξε πάνω από 40.000 επιδείξεις και πραγματοποίησε περισσότερες από 15.000 πραγματικές εκτελέσεις. Η γενίκευση ακολούθησε μια σχέση περίπου νόμου δύναμης με τον αριθμό των περιβαλλόντων και αντικειμένων, και πέρα από ένα όριο ανά περιβάλλον ή αντικείμενο, οι επιπλέον επιδείξεις είχαν ελάχιστη επίδραση. Σε ένα πάγκο: μετακινήστε το αντικείμενο, αλλάξτε τον φωτισμό, ανταλλάξτε τον κύβο, αντί να επαναλάβετε μία λήψη.
- Συνεχείς τροχιές αρθρώσεων που μπορεί να αναπαράγει ένας σερβοκινητήρας, σε αντίθεση με πληκτρολόγιο ή gamepad
- Η ενέργεια και η κατάσταση μοιράζονται μια σύμβαση συντεταγμένων, οπότε η πολιτική μαθαίνει έναν στόχο που μπορεί να διατάξει απευθείας
- Ένα επεισόδιο 25 δευτερολέπτων συν μια επαναφορά 10 δευτερολέπτων είναι περίπου 100 επεισόδια την ώρα
- Ο χειριστής αισθάνεται τον follower να κολλάει ή να μπλοκάρει, οπότε οι βλάβες εμφανίζονται πριν δεσμευτούν τα δεδομένα
- Ένας δεύτερος βραχίονας διπλασιάζει περίπου το κόστος των εξαρτημάτων
- Οι επιδείξεις κληρονομούν τις συνήθειες του χειριστή· οι Mandlekar et al. διαπίστωσαν ότι η ποιότητα της πολιτικής εξαρτάται σε μεγάλο βαθμό από την ποιότητα της επίδειξης
- Ο leader λαμβάνεται δείγμα με τον ρυθμό του βρόχου, οπότε οι παύσεις γίνονται σχεδόν πανομοιότυπες γραμμές που διδάσκουν την πολιτική να περιμένει
- Τίποτα δεν επιβάλλει συνέπεια μεταξύ των συνεδριών: μια κάμερα που μετακινήθηκε 5 cm είναι μια κρυφή μετατόπιση κατανομής
Ένα καλό επεισόδιο είναι βαρετό: επαναλαμβανόμενη αρχική πόζα, ένα πράγμα γίνεται, τελειώνει μόλις το αντικείμενο μπει στον κάδο, συμβολοσειρά εργασίας στους 25 έως 50 χαρακτήρες που συνιστά η λίστα ελέγχου. Pick the red cube and drop it in the box είναι μια συμβολοσειρά εργασίας· task1 είναι το αντι-μοτίβο που αναφέρει ρητά η λίστα ελέγχου. Οι ασαφείς σημειώσεις βρίσκονται στην κορυφή της λίστας προβλημάτων της, και έχουν τη μεγαλύτερη σημασία για μοντέλα όρασης-γλώσσας-δράσης, όπου η συμβολοσειρά είναι είσοδος μοντέλου, όχι όνομα αρχείου.
Ελαττώματα που καταστρέφουν αθόρυβα ένα σύνολο δεδομένων
Κανένα δεν προκαλεί εξαίρεση. Όλα επιβιώνουν στην εκπαίδευση, εμφανιζόμενα ως μια καμπύλη απώλειας που φαίνεται εντάξει και ένα ρομπότ που δεν κάνει τίποτα. Ελέγξτε ενώ η σκηνή είναι στημένη.
| Ελάττωμα | Πώς φαίνεται | Από πού προέρχεται | Πώς να το εντοπίσετε |
|---|---|---|---|
| Ανταλλαγμένες προβολές κάμερας | εικόνα καρπού κάτω από το επάνω κλειδί | επαναπροσδιορισμός δείκτη μετά από επανασύνδεση | lerobot-find-cameras each session; by-id paths |
| Παγωμένα καρέ | η ίδια εικόνα για δεκάδες γραμμές | η κάμερα σταματά να παραδίδει· ο βρόχος επαναλαμβάνει το τελευταίο καρέ | scrub it in lerobot-dataset-viz |
| Πεσμένα καρέ | αριθμός γραμμών κάτω από fps επί δευτερόλεπτα | η ουρά υπερχειλίζει, απορρίπτει αντί να μπλοκάρει | 'Encoder queue full' in the log; rows vs fps times duration |
| Άρθρωση στο όριό της | μία άρθρωση επίπεδη στο ελάχιστο ή μέγιστο | το εύρος του ηγέτη υπερβαίνει αυτό του ακόλουθου, ή μια κακή ενδιάμεση πόζα | per-joint min/max in ds.meta.stats; lerobot-find-joint-limits beforehand |
| Εικόνα και δράση εκτός συγχρονισμού | η πολιτική προλαμβάνει ή καθυστερεί | κάμερες σε διαφορετικό fps από τον βρόχο | keep every camera at --dataset.fps |
| Νεκρός χρόνος | μεγάλες ακολουθίες πανομοιότυπων γραμμών δράσης | ο χειριστής έκανε παύση με την εγγραφή σε λειτουργία | share of consecutive identical action rows |
| Μη χρησιμοποιήσιμη συμβολοσειρά εργασίας | task1, demo2, test | γρήγορη πληκτρολόγηση | meta/tasks.parquet in v3.0 (it was meta/tasks.jsonl in v2.1); fix with lerobot-edit-dataset modify_tasks |
Ο κωδικοποιητής διατηρεί μια περιορισμένη ουρά ανά κάμερα, 30 καρέ από προεπιλογή. Όταν δεν μπορεί να ανταποκριθεί, τα καρέ απορρίπτονται αντί να μπλοκάρονται: η λήψη συνεχίζεται και τίποτα δεν κρασάρει. Λαμβάνετε Encoder queue full for {camera}, dropped N frame(s) και ένα σύνολο ανά κάμερα στο τέλος του επεισοδίου. Το όριο του lerobot: περίπου 5 τοις εκατό απώλειας σημαίνει υπερφορτωμένο σύστημα, 2 τοις εκατό είναι αναμενόμενο φορτίο εκκίνησης. Λύσεις κατά σειρά: --display_data=false, χαμηλότερο --dataset.encoder_threads, vcodec=h264, απενεργοποίηση streaming.
Μια προειδοποίηση: ο πίνακας του οδηγού streaming-encoding αναφέρει την προεπιλογή ως True, ενώ η dataclass στο main αναφέρει streaming_encoding: bool = False. Η τεκμηρίωση και ο κώδικας διαφωνούν, οπότε ορίστε το ρητά· το lerobot καταγράφει μια υπόδειξη που το συνιστά κάθε φορά που ξεκινά με την σημαία απενεργοποιημένη.
Ελέγξτε το σύνολο δεδομένων πριν νοικιάσετε μια GPU
Η δοκιμή αποδοχής από την τεκμηρίωση: συγκρίνετε τη διάρκεια του βίντεο με τη διάρκεια του επεισοδίου που ανέφερε το CLI, και επιβεβαιώστε ότι ο αριθμός των γραμμών ισούται με fps επί διάρκεια. Ανά επεισόδιο, όχι στο σύνολο.
from lerobot.datasets import LeRobotDataset
ds = LeRobotDataset("your-user/so100_pick_cube_20260823_141530")
print("fps:", ds.fps, "frames:", ds.num_frames)
# In v3.0 the per-episode records live in meta/episodes/ as chunked parquet:
# lengths, tasks and offsets into the shared parquet and mp4 shards.
# They load through the datasets stack, so this is a datasets.Dataset --
# use .column_names and integer indexing, not pandas .columns / .head().
eps = ds.meta.episodes
print(eps.column_names)
print(eps[0])
# Global feature statistics, including per-joint min and max.
# A joint whose min equals its max never moved. A joint sitting at a
# hard limit for most of the run is the one that will stall the policy.
print(ds.meta.stats["observation.state"])Στη συνέχεια, δείτε το. lerobot-dataset-viz αναπαράγει ένα επεισόδιο καρέ-καρέ με ίχνη αρθρώσεων δίπλα στις προβολές της κάμερας, στο Rerun ή στο Foxglove. Οι εναλλαγμένες κάμερες και τα παγωμένα καρέ εμφανίζονται σε δέκα δευτερόλεπτα. Οι άνθρωποι παραλείπουν αυτό το βήμα.
# Replay one episode with camera views and joint traces
lerobot-dataset-viz \
--repo-id your-user/so100_pick_cube_20260823_141530 \
--episode-index 0
# Foxglove instead, for a seekable, scrubbable timeline
lerobot-dataset-viz \
--repo-id your-user/so100_pick_cube_20260823_141530 \
--episode-index 0 \
--display-mode foxglove
# Drop the episodes that did not survive review
lerobot-edit-dataset \
--repo_id your-user/so100_pick_cube_20260823_141530 \
--new_repo_id your-user/so100_pick_cube_clean \
--operation.type delete_episodes \
--operation.episode_indices "[3, 17, 41]"
v2.1 ή v3.0: αποφασίστε πριν την καταγραφή
Το v2.1 έγραφε ένα parquet και ένα MP4 ανά επεισόδιο. Το v3.0 συνενώνει πολλά επεισόδια σε κοινά shards και αναδομεί τα όρια από τα μεταδεδομένα, οπότε το info.json περιέχει πρότυπα διαδρομών όπως data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet αντί για έναν αριθμό επεισοδίου. Η αιτιολόγηση από την πηγή είναι λιγότερα, μεγαλύτερα αρχεία: ταχύτερη αρχικοποίηση και λιγότερη πίεση στο σύστημα αρχείων σε κλίμακα.
| LeRobot v2.1 | LeRobot v3.0 | |
|---|---|---|
| Διάταξη | ένα parquet και ένα MP4 ανά επεισόδιο | πολλά επεισόδια ανά shard |
| Μεταδεδομένα επεισοδίου | Αρχεία JSONL | chunked parquet κάτω από το meta/episodes/, μέσω του stack δεδομένων |
| Streaming από το Hub | όχι | ναι, μέσω του StreamingLeRobotDataset |
| Γραμμένο από το lerobot 0.6.1 | όχι | ναι, αυτό που λαμβάνετε σήμερα |
| Αναγνώσιμο από GR00T N1.7 και N1.5 | ναι | όχι, πρέπει να μετατραπεί προς τα κάτω |
Το lerobot 0.6.1 γράφει v3.0, αλλά τα GR00T N1.7 και N1.5 διαβάζουν v2.0 ή v2.1 και κρασάρουν σε αυτό. Σημειώστε την κατεύθυνση: το src/lerobot/scripts/ περιέχει το convert_dataset_v21_to_v30.py και τίποτα που να πηγαίνει προς την αντίθετη κατεύθυνση. Τακτοποιήστε αυτό πριν από τη συνεδρία. Επιδιόρθωση: το dataset απορρίφθηκε ως v3.
# Upgrade an older v2.1 dataset to v3.0
python -m lerobot.scripts.convert_dataset_v21_to_v30 \
--repo-id=your-user/so100_pick_cube
# By default it pushes the converted dataset back to the hub and tags it v3.0.
# To convert a local copy and keep it off the hub:
python -m lerobot.scripts.convert_dataset_v21_to_v30 \
--repo-id=your-user/so100_pick_cube \
--root=/path/to/dataset/directory \
--push-to-hub=falseΔύο διαδρομές προς το ίδιο σύνολο δεδομένων
Όλα τα παραπάνω, στη δική σας μηχανή: εσείς έχετε την κυριότητα της απαρίθμησης USB, της κατασκευής ffmpeg, της ρύθμισης του κωδικοποιητή και των αρχείων βαθμονόμησης. Η σωστή διαδρομή για να κατανοήσετε την pipeline, να χρησιμοποιήσετε μια ασυνήθιστη διάταξη κάμερας ή να διατηρήσετε τα δεδομένα τοπικά.
Χρόνος: ένα βράδυ ανά βραχίονα για συναρμολόγηση, μια δύσκολη πρώτη βαθμονόμηση και μια πρώτη συνεδρία που θα πετάξετε επειδή μια κάμερα ήταν στη λάθος υποδοχή.
Ο επιτραπέζιος πελάτης καταγράφει σύνολα δεδομένων μορφής LeRobot, επεισόδια, ροές κάμερας και καταστάσεις αρθρώσεων, απευθείας από μια συνεδρία τηλελειτουργίας. Αυτό το σύνολο δεδομένων τροφοδοτεί τη φόρμα εκπαίδευσης: επιλέξτε μοντέλο, σύνολο δεδομένων και υπερπαραμέτρους, και το backend ενοικιάζει μια GPU μεγέθους ανάλογου με τη VRAM του μοντέλου, εκτελεί τον εκπαιδευτή και γράφει σημεία ελέγχου σε αποθήκευση αντικειμένων.
- 1Εγκαταστήστε τον πελάτη
Στη σελίδα λήψης· εγκατάσταση στα έγγραφα του πελάτη.
- 2Καταγραφή από συνεδρία τηλελειτουργίας
Οδηγήστε τον βραχίονα· ο πελάτης γράφει επεισόδια σε μορφή LeRobot. Αναλυτική περιγραφή: καταγράψτε το πρώτο σας σύνολο δεδομένων.
- 3Ή φέρτε τα δικά σας δεδομένα
Ένα σύνολο δεδομένων μπορεί επίσης να προέρχεται από ένα αναγνωριστικό αποθετηρίου Hugging Face ή τη δική σας μηχανή: έγγραφα συνόλων δεδομένων, δημόσιος κατάλογος.
- 4Εκπαιδεύστε και εκτελέστε το
Επιλέξτε τον συνδυασμό στον πίνακα εκπαίδευσης, και μετά εκτελέστε την πολιτική πίσω στον βραχίονα. Περίπου 1 έως 3 USD στην κατηγορία 24 GB, 4 έως 12 στην κατηγορία A100 ή H100.
Δεν συναρμολογεί ή βαθμονομεί τον βραχίονά σας, και δεν επιδιορθώνει ένα ελαττωματικό επεισόδιο, οπότε το βήμα επιθεώρησης εξακολουθεί να ισχύει. Υπάρχει επίσης ένα σκληρό όριο στο άλλο άκρο: για γρήγορες εργασίες, η εξαγωγή συμπερασμάτων πρέπει να βρίσκεται δίπλα στους σερβοκινητήρες. Ο βρόχος ελέγχου εκτελείται 20 έως 485 ms ανά βήμα δράσης, και οι επιπλέον διαδρομές μετ' επιστροφής μέσω του δημόσιου διαδικτύου μετατρέπουν μια λειτουργική πολιτική σε διστακτική.
Καταγράψτε σύνολα δεδομένων LeRobot χωρίς να συνδέσετε μόνοι σας την pipeline
Ο επιτραπέζιος πελάτης AY-Robots καταγράφει επεισόδια, ροές κάμερας και καταστάσεις αρθρώσεων σε μορφή LeRobot από μια συνεδρία τηλελειτουργίας, και στη συνέχεια παραδίδει το σύνολο δεδομένων στον εκπαιδευτή.
Αποκτήστε τον επιτραπέζιο πελάτηΑπό το σύνολο δεδομένων στην πολιτική
Πενήντα καθαρά επεισόδια τροφοδοτούν κάθε εκτέλεση εδώ. εκπαιδεύεται από την αρχή μόνο στην εργασία σας, περίπου 80 εκατομμύρια παραμέτρους με περίπου 20 ms ανά βήμα ενέργειας, το μόνο από τα πέντε που είναι άνετο με γρήγορη κίνηση. είναι περίπου 450 εκατομμύρια παράμετροι σε μια κάρτα 24 GB. είναι ένα μοντέλο βάσης περίπου 3 δισεκατομμυρίων παραμέτρων όπου αγγίζει περίπου 40 εκατομμύρια παραμέτρους, χρειάζεται μια A100 ή H100 και θέλει αυτό το σύνολο δεδομένων v2.1.
Στη συνέχεια, ο οδηγός για τον συνδυασμό σας: , ή · για μια πρώτη εκτέλεση, είναι συντομότερος. Όταν η πολιτική λειτουργεί στον πάγκο αλλά καταρρέει τη στιγμή που μετακινείτε το τραπέζι, αυτό είναι ένα πρόβλημα δεδομένων: και εμβαθύνουν στην ποικιλομορφία.
Πόσα επεισόδια χρειάζομαι πραγματικά για μια πρώτη λειτουργική πολιτική;▾
Τριάντα για το SmolVLA, πενήντα για τα ACT, Pi0.5, GR00T N1.5 και N1.7, τα ελάχιστα που επιβάλλουν οι εκπαιδευτές AY-Robots. Ο οδηγός LeRobot συνιστά ανεξάρτητα τουλάχιστον 50 για μια πρώτη εργασία, περίπου 10 ανά θέση αντικειμένου. Η εργασία κλιμάκωσης δεδομένων διαπίστωσε ότι η γενίκευση κλιμακώνεται με περιβάλλοντα και αντικείμενα και όχι με τον αριθμό των επιδείξεων, οπότε εκατό λήψεις μιας σκηνής είναι χειρότερες από πενήντα σε πέντε τοποθετήσεις.
Χρειάζομαι ένα κύριο βραχίονα, ή μπορώ να τηλεχειριστώ με πληκτρολόγιο;▾
Το lerobot παρέχει τηλεχειριστήρια πληκτρολογίου και gamepad, οπότε ένας κύριος βραχίονας δεν είναι απολύτως απαραίτητος, αλλά είναι πολύ προτιμότερος: ο κύριος-ακόλουθος δίνει συνεχείς τροχιές αρθρώσεων στη συνθήκη συντεταγμένων της καταγεγραμμένης ενέργειας, ενώ η εισαγωγή πληκτρολογίου παράγει διακεκομμένη κίνηση που μια πολιτική μαθαίνει ως απότομη κίνηση. Η τηλελειτουργία πληκτρολογίου χρειάζεται επίσης ένα καθολικό backend πλήκτρων, οπότε αποτυγχάνει σε Wayland και headless.
Μπορώ να καταγράψω σε ένα Raspberry Pi ή σε ένα μικρό mini PC;▾
Ναι, με ρύθμιση. Ο οδηγός streaming-encoding έχει μια κατηγορία χαμηλών πόρων που καλύπτει σύγχρονους υπολογιστές 4 πυρήνων και το Raspberry Pi 5, και τοποθετεί δύο κάμερες στα 640x480 και 30 fps στη στήλη του που απαιτεί κάποια ρύθμιση. Η συμβουλή του: σταματήστε τον κωδικοποιητή να ανταγωνίζεται τον βρόχο καταγραφής, μέσω --dataset.rgb_encoder.vcodec=h264 και --dataset.streaming_encoding=false. Βαθμολογεί δύο κάμερες στα 640x480 ως περίπου 55 εκατομμύρια pixel ανά δευτερόλεπτο και δύο στα 1920x1080 ως περίπου 373 εκατομμύρια.
Πώς ξέρω ότι το σύνολο δεδομένων που μόλις κατέγραψα είναι πραγματικά υγιές;▾
Τρεις φθηνοί έλεγχοι. Συγκρίνετε τη διάρκεια βίντεο κάθε επεισοδίου με τη διάρκεια που ανέφερε το CLI και επιβεβαιώστε ότι ο αριθμός γραμμών ισούται με τα fps επί αυτή τη διάρκεια, ανά επεισόδιο και όχι στο σύνολο· αυτή είναι η δοκιμή αποδοχής που δίνει ο οδηγός κωδικοποίησης του lerobot. Διαβάστε το ds.meta.stats, όπου μια άρθρωση της οποίας το ελάχιστο ισούται με το μέγιστο δεν κινήθηκε ποτέ. Στη συνέχεια, αναπαράγετε δύο ή τρία επεισόδια στο lerobot-dataset-viz, ο μόνος τρόπος να εμφανιστούν οι εναλλαγμένες προβολές και τα παγωμένα καρέ. Για τα χαμένα καρέ, ο οδηγός θέτει το όριο στο περίπου 5 τοις εκατό που λείπει· περίπου 2 τοις εκατό είναι φυσιολογικό παροδικό φορτίο, συχνά απλώς κατά την εκκίνηση.
Η εργασία εκπαίδευσής μου απέρριψε το σύνολο δεδομένων ως v3.0. Τι κάνω τώρα;▾
Τα GR00T N1.7 και N1.5 διαβάζουν LeRobot v2.0 ή v2.1 και καταρρέουν στο v3.0, το οποίο είναι αυτό που καταγράφει το lerobot 0.6.1. Είτε καθορίστε τη μορφή πριν την εκπαίδευση, είτε χρησιμοποιήστε μια πολιτική που διαβάζει το v3.0 εγγενώς: Pi0.5, SmolVLA ή ACT. Το lerobot παρέχει έναν μετατροπέα από v2.1 σε v3.0 και τίποτα αντίστροφα.
Sources
- LeRobot: Μάθηση Μίμησης σε Πραγματικά Ρομπότ
- LeRobot: Συναρμολόγηση SO-100, ρύθμιση κινητήρα και βαθμονόμηση
- LeRobot: Κάμερες και lerobot-find-cameras
- LeRobot: Εγκατάσταση και ο πίνακας extras
- LeRobotDataset v3.0: διάταξη και μετεγκατάσταση από v2.1
- LeRobot: Κωδικοποίηση βίντεο ροής και χαμένα καρέ
- LeRobot: Μεταφορά μεγάλων συνόλων δεδομένων σε v3.0 (DROID)
- lerobot v0.6.1 κυκλοφορία, 3 Αυγούστου 2026
- DatasetRecordConfig: οι πραγματικές προεπιλογές καταγραφής
- lerobot_record.py: βρόχος καταγραφής και χειρισμός συνέχισης
- TheRobotStudio/SO-ARM100: αποθετήριο κατασκευής και κατάλογος υλικών
- Hugging Face: Λίστα ελέγχου συνόλων δεδομένων κοινότητας LeRobot
- lerobot/svla_so100_pickplace: 50 επεισόδια, 19.631 καρέ
- Lin et al. (2024), Νόμοι Κλιμάκωσης Δεδομένων στη Μάθηση Μίμησης
- Mandlekar et al. (2021), Τι Μετράει στη Μάθηση από Offline Ανθρώπινες Επιδείξεις
Sources
- LeRobot: Imitation Learning on Real-World Robots
- LeRobot: SO-100 assembly, motor setup and calibration
- LeRobot: Cameras and lerobot-find-cameras
- LeRobot: Installation and the extras matrix
- LeRobotDataset v3.0: layout and v2.1 migration
- LeRobot: Streaming video encoding and dropped frames
- LeRobot: Porting large datasets to v3.0 (DROID)
- lerobot v0.6.1 release, 3 August 2026
- DatasetRecordConfig: the real recording defaults
- lerobot_record.py: record loop and resume handling
- TheRobotStudio/SO-ARM100: build repo and bill of materials
- Hugging Face: LeRobot Community Datasets checklist
- lerobot/svla_so100_pickplace: 50 episodes, 19,631 frames
- Lin et al. (2024), Data Scaling Laws in Imitation Learning
- Mandlekar et al. (2021), What Matters in Learning from Offline Human Demonstrations
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started