
ایک SO-100 کے ساتھ ایک قابل استعمال LeRobot ڈیٹا سیٹ ریکارڈ کریں: کیلیبریشن، لیڈر-فالور ٹیلی آپریشن، حقیقی lerobot-record فلیگز اور ڈیفالٹس، کیمرہ سیٹ اپ، ایپیسوڈ کی گنتی، اور وہ نقائص جو ایک رن کو خراب کرتے ہیں۔
ایک SO-100 فالوور، اسی ڈیزائن کا ایک لیڈر آرم اور دو USB کیمرے ایک پالیسی کو ایک دوپہر میں بہتر بنا سکتے ہیں۔ وہی بینچ اتنی ہی آسانی سے ساٹھ ایپیسوڈز تیار کر سکتا ہے جو فائل براؤزر میں صحت مند نظر آتے ہیں اور چھ گھنٹے کی GPU رن کو ضائع کر سکتے ہیں۔ فرق شاذ و نادر ہی ماڈل ہوتا ہے؛ یہ وہ ہے جو سرووز اور پارکیٹ فائل کے درمیان ہوا۔
یہاں دستی راستہ ہے، پھر مختصر والا۔ ہر کمانڈ lerobot 0.6.1 سے ہے، جو 3 اگست 2026 کو جاری ہوا اور PyPI پر موجود ہے۔ یہ کنسول انٹری پوائنٹس پر منتقل ہو گیا ہے، لہذا وہ ٹیوٹوریلز جو 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 منٹ کا وال کلاک۔
- •یہاں کم از کم ایپیسوڈز: SmolVLA کے لیے 30، باقی کے لیے 50۔
- •تنوع مقدار سے بہتر ہے۔ ڈیٹا سیٹس چار چیزوں سے ختم ہو جاتے ہیں: کیمرہ انڈیکسز کا تبادلہ، گرے ہوئے یا منجمد فریمز، ایک جوائنٹ کا اپنی حد پر کھڑا ہونا، ایک ناقابلِ پڑھائی ٹاسک سٹرنگ۔
ایک ریکارڈنگ سیشن کیا کیپچر کرتا ہے
ایک LeRobot ڈیٹا سیٹ ویڈیوز کا فولڈر نہیں بلکہ ایک وقت کے لحاظ سے ترتیب شدہ جدول ہے جس کے ساتھ ویڈیو منسلک ہے: ہر کنٹرول-لوپ ٹک ایک قطار لکھتا ہے جس میں کمانڈ شدہ عمل، فالوور کی پہنچی ہوئی حالت، فی کیمرہ ایک فریم، ایک ٹائم اسٹیمپ اور انڈیکس شامل ہوتے ہیں۔ پالیسی صرف ان کالموں کو دیکھتی ہے۔ lerobot/svla_so100_pickplace کا اسکیما، جو اس کی meta/info.json سے پڑھا گیا ہے۔
| فیچر | ڈی ٹائپ | شکل | یہ کیا ہے |
|---|---|---|---|
| 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 تک، بس پر IDs 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 |
| ہب اکاؤنٹ | Hugging Face رائٹ ٹوکن | اختیاری، --dataset.push_to_hub=false کے ساتھ |
STS3215 دو ورژن میں آتا ہے: SO-ARM100 README 7.4 V ورژن کو 6 V پر ماپے گئے 16.5 kg.cm اسٹال ٹارک اور 12 V ورژن کو 30 kg.cm پر ریٹ کرتا ہے، اور نوٹ کرتا ہے کہ 12 V موٹرز لینے کا مطلب 5 V سپلائی کے بجائے 12 V 5 A+ سپلائی خریدنا بھی ہے۔ بل آف میٹریلز میں 7.4 V سرووز درج ہیں۔ 7.4 V ریٹڈ سرووز کو 12 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 انحصار انسٹال کرتا ہے، روبوٹ سے بات کرنے والی کوئی چیز نہیں۔ کوچ آرمز کو dynamixel کی بجائے feetech کی ضرورت ہوتی ہے۔ اگر آپ کے شیل نے کبھی lerobot-record کے بارے میں نہیں سنا، تو اس کی وجہ یہی ہے۔
پورٹس، موٹر آئی ڈیز اور کیلیبریشن
تین ایک بار کے اقدامات پرزوں اور ایک فعال ٹیلی اوپ لوپ کے درمیان حائل ہیں۔ آپ کے بازو پر تربیت یافتہ پالیسی کو کسی اور کے بازو پر چلاتی ہے، جو خام انکوڈر گنتی کو مشترکہ جوائنٹ کنونشن پر نقش کرتی ہے۔
- 1ہر بازو کا USB پورٹ تلاش کریں
اسے دونوں بازوؤں کو پلگ ان کر کے چلائیں، جب اشارہ کیا جائے تو جس بازو کی شناخت کر رہے ہیں اسے ان پلگ کریں، اور نوٹ کریں کہ کون سا پورٹ غائب ہوتا ہے۔ لینکس پر آپ کو
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موٹر آئی ڈیز اور باڈریٹس لکھیں
آئی ڈیز ایک وقت میں ایک موٹر پر لکھے جاتے ہیں، اور دستاویزات اس بارے میں سخت ہیں کہ کیسے: کنٹرولر بورڈ سے صرف ایک موٹر کو جوڑیں، جو ابھی تک کسی دوسرے سے ڈیزی چین نہ ہو۔ اسکرپٹ چین کو پیچھے کی طرف چلاتی ہے، پہلے گریپر کے لیے اشارہ کرتی ہے اور اسے آئی ڈی 6 دیتی ہے، پھر رسٹ_رول کو 5، اور شولڈر_پین کو 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 خود کہتا ہے: اس کی کیمرہ کلاس ایک ڈیوائس پاتھ کے ساتھ ساتھ ایک انٹیجر بھی لیتی ہے، اور خبردار کرتی ہے کہ انڈیکس ریبوٹ یا پورٹ کی تبدیلیوں کے دوران غیر مستحکم ہوتے ہیں، خاص طور پر لینکس پر۔ `index_or_path` کو `/dev/v4l/by-id/` کے تحت udev سم لنک کی طرف اشارہ کریں، جو شمار کی ترتیب کے بجائے ڈیوائس کی پیروی کرتا ہے۔ یہ سب سے عام طریقہ ہے جس سے ایک ڈیٹا سیٹ اندرونی طور پر غیر متضاد ہو جاتا ہے، اور تربیت اسے ٹھیک نہیں کر سکتی۔ کیمرہ کا پتہ نہیں چلا۔
ریکارڈ کمانڈ اور ہر فلیگ
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 مین سے آتی ہیں، کسی ٹیوٹوریل سے نہیں۔ کئی ایسی نہیں جو لوگ فرض کرتے ہیں۔
| فلیگ | ڈیفالٹ | یہ کیا کرتا ہے |
|---|---|---|
| --dataset.repo_id | empty | نام؛ ٹائم سٹیمپ بطور ڈیفالٹ شامل کیا جاتا ہے |
| --dataset.single_task | empty | ہر ایپی سوڈ کے ساتھ ٹاسک سٹرنگ محفوظ کی جاتی ہے |
| --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 | فی کیمرہ بفرڈ فریمز، 30 fps پر تقریباً 1 سیکنڈ |
| --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 لازمی ہو جاتا ہے۔ 30 ایپی سوڈ والے ڈیٹا سیٹ پر 50 کا مطالبہ کریں تو آپ کو 80 ملیں گے۔
ایک سیشن کے دوران کی بورڈ کنٹرول
- دائیں تیر یا
n: ایپی سوڈ کو ختم کریں یا ری سیٹ فیز کو جلد ختم کریں۔ یہ وہ کلید ہے جو آپ سب سے زیادہ استعمال کرتے ہیں، کیونکہ ایک صاف گرفت کو شاذ و نادر ہی 25 سیکنڈ کی ضرورت ہوتی ہے۔ - بائیں تیر یا
r: ایپی سوڈ کو مسترد کریں اور اسے دوبارہ کریں۔ ایک خراب ٹیک اب کچھ بھی خرچ نہیں کرتا اور بعد میں بہت کچھ۔ - Escape یا
q: سیشن کو روکیں، انکوڈنگ مکمل کریں، اپ لوڈ کریں۔ - یہ X11، Wayland اور ہیڈ لیس SSH پر کام کرتے ہیں: بغیر کسی گلوبل کی بیک اینڈ کے، lerobot-record کنٹرولنگ ٹرمینل سے وہی کیز پڑھتا ہے۔ یہ حروف سست SSH لنکس پر بھی کام کرتے ہیں، جہاں تیر کے سلسلے ٹوٹ جاتے ہیں۔
- کی بورڈ ٹیلی آپریشن مختلف ہے اور اسے ایک گلوبل بیک اینڈ کی ضرورت ہوتی ہے: X11، Windows، یا macOS Accessibility کے ساتھ۔
کتنے ایپی سوڈز، اور ایک اچھا کیسا لگتا ہے
ریکارڈنگ گائیڈ پہلی ٹاسک کے لیے کم از کم 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 |
بہتر سوال یہ ہے کہ کتنے اور کس چیز کے۔ Data Scaling Laws in Imitation Learning for Robotic Manipulation (لن ایٹ ال، 2024) نے 40,000 سے زیادہ مظاہرے جمع کیے اور 15,000 سے زیادہ حقیقی دنیا کے رول آؤٹس چلائے۔ عمومی کاری کا تعلق تقریباً پاور-لا کے مطابق تھا، جس میں ماحول اور اشیاء کی تعداد شامل تھی، اور فی ماحول یا آبجیکٹ ایک حد سے تجاوز کرنے کے بعد، اضافی مظاہروں کا کم سے کم اثر ہوا۔ ایک بینچ پر: آبجیکٹ کو حرکت دیں، روشنی تبدیل کریں، کیوب کو تبدیل کریں، بجائے اس کے کہ ایک ہی ٹیک کو دہرایا جائے۔
- مسلسل جوائنٹ ٹریجیکٹریز جو ایک سروو دوبارہ پیدا کر سکتا ہے، کی بورڈ یا گیم پیڈ کے برعکس
- ایکشن اور اسٹیٹ ایک کوآرڈینیٹ کنونشن کا اشتراک کرتے ہیں، لہذا پالیسی ایک ایسا ہدف سیکھتی ہے جسے وہ براہ راست کمانڈ کر سکتی ہے
- ایک 25 سیکنڈ کا ایپی سوڈ اور 10 سیکنڈ کا ری سیٹ تقریباً 100 ایپی سوڈز فی گھنٹہ بنتے ہیں
- آپریٹر فالور کو رکتے یا پھنستے ہوئے محسوس کرتا ہے، لہذا ڈیٹا کے کمٹ ہونے سے پہلے خرابیاں سامنے آ جاتی ہیں
- دوسرا بازو تقریباً پرزوں کی لاگت کو دوگنا کر دیتا ہے
- مظاہرے آپریٹر کی عادات کو وراثت میں لیتے ہیں؛ منڈلیکر ایٹ ال نے پایا کہ پالیسی کا معیار مظاہرے کے معیار پر بہت زیادہ منحصر ہوتا ہے
- لیڈر کو لوپ ریٹ پر نمونہ کیا جاتا ہے، لہذا وقفے تقریباً یکساں قطاریں بن جاتے ہیں جو پالیسی کو انتظار کرنا سکھاتے ہیں
- سیشنز کے درمیان کوئی چیز مستقل مزاجی کو نافذ نہیں کرتی: 5 سینٹی میٹر ہٹایا گیا کیمرہ ایک پوشیدہ ڈسٹری بیوشن شفٹ ہے
ایک اچھا واقعہ بورنگ ہوتا ہے: دہرائی جانے والی ہوم پوز، ایک کام مکمل، جب آبجیکٹ بن میں ہو تو ختم، ٹاسک سٹرنگ 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، اسٹریمنگ بند کریں۔
ایک انتباہ: اسٹریمنگ-انکوڈنگ گائیڈ کی جدول میں ڈیفالٹ کے طور پر True درج ہے، جبکہ مین پر موجود ڈیٹا کلاس میں streaming_encoding: bool = False لکھا ہے۔ دستاویزات اور کوڈ میں اختلاف ہے، لہذا اسے واضح طور پر سیٹ کریں؛ lerobot جب بھی فلیگ آف کے ساتھ شروع ہوتا ہے تو اس کی سفارش کرنے والا ایک اشارہ لاگ کرتا ہے۔
جی پی یو کرائے پر لینے سے پہلے ڈیٹا سیٹ چیک کریں
دستاویزات سے قبولیت کا ٹیسٹ: ویڈیو کی مدت کا موازنہ اس ایپی سوڈ کی مدت سے کریں جو 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 ایک ایپی سوڈ کو کیمرے کے مناظر کے ساتھ جوائنٹ ٹریسز کے ساتھ فریم بہ فریم دوبارہ چلاتا ہے، ریرن یا فاکسگلو میں۔ تبدیل شدہ کیمرے اور منجمد فریم دس سیکنڈ میں ظاہر ہو جاتے ہیں۔ لوگ اس قدم کو چھوڑ دیتے ہیں۔
# 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 نے ہر ایپی سوڈ کے لیے ایک پارکیٹ اور ایک MP4 لکھا۔ v3.0 بہت سے ایپی سوڈز کو مشترکہ شارڈز میں جوڑتا ہے اور میٹا ڈیٹا سے حدود کو دوبارہ بناتا ہے، لہذا info.json پاتھ ٹیمپلیٹس کو اس طرح رکھتا ہے data/chunk-{chunk_index:03d}/file-{file_index:03d}.parquet ایک ایپی سوڈ نمبر کے بجائے۔ اوپر کی توجیہ کم، بڑی فائلیں ہیں: تیز تر آغاز اور بڑے پیمانے پر کم فائل سسٹم کا دباؤ۔
| LeRobot v2.1 | LeRobot v3.0 | |
|---|---|---|
| لے آؤٹ | ہر ایپی سوڈ کے لیے ایک پارکیٹ اور ایک MP4 | ہر شارڈ کے لیے کئی ایپی سوڈز |
| ایپی سوڈ میٹا ڈیٹا | JSONL فائلیں | meta/episodes/ کے تحت چنکڈ پارکیٹ، ڈیٹا سیٹس اسٹیک کے ذریعے |
| ہب سے سٹریمنگ | نہیں | ہاں، 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 موجود ہے اور کوئی چیز دوسری طرف نہیں جاتی۔ سیشن سے پہلے اس کا فیصلہ کر لیں۔ حل: 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 بلڈ، انکوڈر ٹیوننگ اور کیلیبریشن فائلوں کے مالک ہیں۔ پائپ لائن کو سمجھنے، ایک غیر معمولی کیمرہ رگ چلانے، یا ڈیٹا کو مقامی رکھنے کا صحیح راستہ۔
ڈیسک ٹاپ کلائنٹ LeRobot فارمیٹ کے ڈیٹا سیٹس، ایپی سوڈز، کیمرہ سٹریمز اور جوائنٹ سٹیٹس کو براہ راست ایک ٹیلی آپریشن سیشن سے ریکارڈ کرتا ہے۔ وہ ڈیٹا سیٹ ٹریننگ فارم کو فیڈ کرتا ہے: ماڈل، ڈیٹا سیٹ اور ہائپر پیرامیٹرز کا انتخاب کریں، اور بیک اینڈ ماڈل کے VRAM کے مطابق ایک GPU کرائے پر لیتا ہے، ٹرینر چلاتا ہے اور چیک پوائنٹس کو آبجیکٹ سٹوریج میں لکھتا ہے۔
- 1کلائنٹ انسٹال کریں
ڈاؤن لوڈ صفحہ پر؛ کلائنٹ دستاویزات میں سیٹ اپ کریں۔
- 2ٹیلی آپ سیشن سے ریکارڈ کریں
بازو چلائیں؛ کلائنٹ LeRobot فارمیٹ میں ایپی سوڈز لکھتا ہے۔ واک تھرو: اپنا پہلا ڈیٹا سیٹ ریکارڈ کریں۔
- 3یا اپنا ڈیٹا لائیں
ایک ڈیٹا سیٹ Hugging Face repo id یا آپ کی اپنی مشین سے بھی آ سکتا ہے: ڈیٹا سیٹ دستاویزات، عوامی ڈائریکٹری۔
- 4ٹرین کریں اور اسے واپس چلائیں
ٹریننگ میٹرکس پر امتزاج کا انتخاب کریں، پھر پالیسی کو بازو پر واپس چلائیں۔ تقریباً 24 GB ٹیر پر 1 سے 3 USD، A100 یا H100 ٹیر پر 4 سے 12 USD۔
پائپ لائن کو خود وائر کیے بغیر LeRobot ڈیٹا سیٹس ریکارڈ کریں
AY-Robots ڈیسک ٹاپ کلائنٹ ٹیلی آپریشن سیشن سے LeRobot فارمیٹ میں ایپی سوڈز، کیمرہ سٹریمز اور جوائنٹ سٹیٹس ریکارڈ کرتا ہے، پھر ڈیٹا سیٹ کو ٹرینر کے حوالے کرتا ہے۔
ڈیسک ٹاپ کلائنٹ حاصل کریںڈیٹا سیٹ سے پالیسی تک
پچاس صاف ایپی سوڈز ہر نقلی سیکھنے کو یہاں چلاتے ہیں۔ ACT آپ کے کام پر اکیلے شروع سے تربیت دیتا ہے، تقریباً 80 ملین پیرامیٹرز کے ساتھ تقریباً 20 ملی سیکنڈ فی ایکشن سٹیپ پر، پانچ میں سے واحد جو تیز حرکت کے ساتھ آرام دہ ہے۔ SmolVLA تقریباً 450 ملین پیرامیٹرز کا ہے جو 24 جی بی کارڈ پر چلتا ہے۔ GR00T N1.7 تقریباً 3 بلین پیرامیٹرز کا ایک فاؤنڈیشن ماڈل ہے جہاں فائن ٹیوننگ تقریباً 40 ملین پیرامیٹرز کو چھوتی ہے، اسے A100 یا H100 کی ضرورت ہوتی ہے، اور وہ v2.1 ڈیٹا سیٹ چاہتا ہے۔
اگلا، آپ کے امتزاج کے لیے گائیڈ: ACT on SO-100، SmolVLA on SO-100 یا GR00T N1.7 on SO-100؛ پہلے رن کے لیے، اپنی پہلی پالیسی کو تربیت دیں مختصر ہے۔ جب پالیسی بینچ پر کام کرتی ہے لیکن میز کو حرکت دیتے ہی گر جاتی ہے، تو یہ ڈیٹا کا مسئلہ ہے: پالیسی صرف ایک سیٹ اپ میں کام کرتی ہے اور اعلیٰ معیار کا VLA تربیتی ڈیٹا جمع کرنا تنوع پر مزید گہرائی میں جاتے ہیں۔
پہلی کام کرنے والی پالیسی کے لیے مجھے واقعی کتنے ایپی سوڈز کی ضرورت ہے؟▾
SmolVLA کے لیے تیس، ACT، Pi0.5، GR00T N1.5 اور N1.7 کے لیے پچاس، یہ وہ کم از کم تعداد ہے جو AY-Robots ٹرینرز نافذ کرتے ہیں۔ LeRobot گائیڈ آزادانہ طور پر پہلے کام کے لیے کم از کم 50 کی سفارش کرتا ہے، تقریباً 10 فی آبجیکٹ لوکیشن۔ ڈیٹا اسکیلنگ کے کام سے پتہ چلا کہ عمومیت مظاہرے کی تعداد کے بجائے ماحول اور اشیاء کے ساتھ بڑھتی ہے، لہذا ایک منظر کے سو ٹیکس پانچ مختلف جگہوں پر پچاس سے بدتر ہیں۔
کیا مجھے لیڈر آرم کی ضرورت ہے، یا میں کی بورڈ سے ٹیلی آپریٹ کر سکتا ہوں؟▾
lerobot کی بورڈ اور گیم پیڈ ٹیلی آپریٹرز فراہم کرتا ہے، لہذا لیڈر آرم کی سختی سے ضرورت نہیں ہے، لیکن یہ بہت زیادہ بہتر ہے: لیڈر-فالور ریکارڈ شدہ ایکشن کے کوآرڈینیٹ کنونشن میں مسلسل جوائنٹ ٹریجیکٹریز دیتا ہے، جبکہ کی بورڈ ان پٹ قدم بہ قدم حرکت پیدا کرتا ہے جسے پالیسی جھٹکے کے طور پر سیکھتی ہے۔ کی بورڈ ٹیلی آپریشن کو گلوبل کی بیک اینڈ کی بھی ضرورت ہوتی ہے، لہذا یہ Wayland اور ہیڈ لیس پر ناکام ہو جاتا ہے۔
کیا میں Raspberry Pi یا ایک چھوٹے منی پی سی پر ریکارڈ کر سکتا ہوں؟▾
ہاں، ٹیوننگ کے ساتھ۔ سٹریمنگ-انکوڈنگ گائیڈ میں ایک کم وسائل والا بریکٹ ہے جو جدید 4-کور مشینوں اور Raspberry Pi 5 کا احاطہ کرتا ہے، اور دو کیمروں کو 640x480 اور 30 fps پر اپنی 'کچھ ٹیوننگ کی ضرورت ہے' والے کالم میں رکھتا ہے۔ اس کا مشورہ: انکوڈر کو کیپچر لوپ سے مقابلہ کرنے سے روکیں، via --dataset.rgb_encoder.vcodec=h264 اور --dataset.streaming_encoding=false کے ذریعے۔ یہ دو کیمروں کو 640x480 پر تقریباً 55 ملین پکسلز فی سیکنڈ اور دو کو 1920x1080 پر تقریباً 373 ملین پکسلز فی سیکنڈ کی درجہ بندی کرتا ہے۔
میں کیسے جانوں کہ جو ڈیٹا سیٹ میں نے ابھی ریکارڈ کیا ہے وہ واقعی صحت مند ہے؟▾
تین سستے چیک۔ ہر ایپی سوڈ کی ویڈیو کی مدت کا موازنہ اس مدت سے کریں جو CLI نے رپورٹ کی تھی اور تصدیق کریں کہ قطاروں کی گنتی fps ضرب اس مدت کے برابر ہے، فی ایپی سوڈ کے حساب سے نہ کہ کل پر؛ یہ وہ قبولیت ٹیسٹ ہے جو lerobot کی انکوڈنگ گائیڈ دیتی ہے۔ ds.meta.stats پڑھیں، جہاں ایک جوائنٹ جس کا min اس کے max کے برابر ہے وہ کبھی حرکت نہیں کیا۔ پھر 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: انسٹالیشن اور ایکسٹراز میٹرکس
- LeRobotDataset v3.0: لے آؤٹ اور v2.1 مائیگریشن
- LeRobot: سٹریمنگ ویڈیو انکوڈنگ اور ڈراپ شدہ فریمز
- LeRobot: بڑے ڈیٹا سیٹس کو v3.0 پر پورٹ کرنا (DROID)
- lerobot v0.6.1 release, 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), آف لائن انسانی مظاہروں سے سیکھنے میں کیا اہمیت رکھتا ہے
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