
یک Action Chunking Transformer را از ابتدا روی SO-100 با lerobot آموزش دهید: پیکربندی act، chunk_size و n_action_steps، برنامه 100000 مرحلهای، استنتاج 20 میلیثانیه.
ACT در میان سیاستهای SO-100 یک استثنا است. GR00T N1.7 و N1.5 از nvidia/GR00T-N1.7-3B و nvidia/GR00T-N1.5-3B، Pi0.5 از lerobot/pi05_base. ACT از هیچ شروع میکند: هیچ نقطه بازرسی پایهای وجود ندارد، زیرا یک مدل بنیادی نیست. این یک ترانسفورمر تقریباً ۸۰ میلیون پارامتری است که شما آن را از ابتدا برای یک وظیفه، روی بازوی خود، تحت نورپردازی خود آموزش میدهید.
به همین دلیل است که یک گام کنترلی را در 20 ms اجرا میکند، در حالی که یک VLA با 3 میلیارد پارامتر به 152 تا 485 ms نیاز دارد و به جای 4 تا 12 USD، 1 تا 3 USD در هر اجرا هزینه دارد. این راهنما مسیر دستی را با لربات روی یک SO-100: ضبط، پیکربندی act، آنچه chunk_size و n_action_steps کنترل میکنند، برنامه 100000 گامی، و رولاوت. سپس همین کار روی AY-Robots، از جمله مواردی که پلتفرم کمکی نمیکند.
آنچه باید بدانید
- •ACT از ابتدا آموزش میبیند: بدون مدل پایه، بدون پیشآموزش، بدون ورودی زبان. یک نقطه بازرسی، یک وظیفه.
- •مقاله: حدود 80 M پارامتر، حدود 5 hours روی یک 11 GB RTX 2080 Ti، 0.01 s استنتاج.
- •پیشفرضهای لربات: chunk_size 100, n_action_steps 100, batch 8, lr 1e-5, 100000 steps, seed 1000.
- •روی AY-Robots: 20 ms در هر گام، سریعترین در میان پنج مورد. حداقل 50 episodes، LeRobot v3.0، یک کارت 24 GB، 1 تا 3 USD در هر اجرا.
- •در وظایفی که دیده است برنده میشود و به محض اینکه شرطیسازی زبانی بخواهید، بازنده میشود.
در تاریخ 23 August 2026 در برابر لربات 0.6.x بررسی شد: pyproject.toml در main میخواند version = "0.6.2"، جدیدترین تگ v0.6.1، 3 August 2026. یک آموزش که با python lerobot/scripts/train.py شروع میشود، قبل از نقاط ورودی کنسول lerobot-train، lerobot-record و lerobot-rollout است.
ACT واقعاً چیست
Action Chunking with Transformers از مقاله ALOHA میآید، Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware، توسط ژائو، کومار، لوین و فین، arXiv، ۲۳ آوریل ۲۰۲۳. این سیستم با چهار وبکم که با سرعت ۳۰ فریم بر ثانیه و رزولوشن ۴۸۰x۶۴۰ استریم میکنند، با فرکانس ۵۰ هرتز ضبط میکند: دو وبکم روی گریپرها، یکی بالا، یکی جلو. چکیده مقاله ادعا میکند که شش مهارت با موفقیت ۸۰ تا ۹۰ درصدی، از جمله باز کردن یک فنجان چاشنی شفاف و قرار دادن باتری، از ۱۰ دقیقه نمایش به دست آمده است.
متن اصلی هنگام برنامهریزی یک جلسه ضبط مفیدتر است: ۵۰ نمایش برای هر وظیفه، به جز Thread Velcro با ۱۰۰ نمایش، که ۱۰ تا ۲۰ دقیقه داده و ۳۰ تا ۶۰ دقیقه زمان واقعی (wall-clock time) پس از شمارش ریستها است. موفقیت نیز یکنواخت نیست: Thread Velcro در ۲۰ درصد، Put On Shoe در ۹۲ درصد، Cup Open در ۸۴ درصد، Prep Tape در ۶۴ درصد به پایان میرسد.
| هایپرپارامتر | مقاله ALOHA، جدول III | lerobot در main |
|---|---|---|
| نرخ یادگیری | 1e-5 | optimizer_lr = 1e-5 |
| اندازه بچ | 8 | batch_size = 8, in TrainPipelineConfig not ACTConfig |
| لایههای انکودر / دیکودر | 4 / 7 | n_encoder_layers = 4 / n_decoder_layers = 1 |
| اندازه قطعه k | 100 | chunk_size = 100 |
| ابعاد نهفته z | غایب؛ Fig. 11 یک پروجکشن ۳۲ به ۵۱۲ را نشان میدهد | latent_dim = 32 |
| تجمیع زمانی | غایب؛ --temporal_agg در کد مرجع | temporal_ensemble_coeff = None |
مقاله ۷ لایه رمزگشا را فهرست میکند، lerobot عمداً ۱ لایه را ارائه میدهد. توضیحات در configuration_act.py میگوید که پیادهسازی اصلی یک باگ دارد به این معنی که فقط از لایه اول استفاده میشود، با استناد به issue 25 در tonyzhaozh/act: سر عمل hs[0] را میخواند، بنابراین هر هفت لایه اجرا میشوند اما فقط خروجی اول به پیشبینی میرسد. این مشکل از ۲۳ آوریل ۲۰۲۴ باز و بدون پاسخ مانده است. lerobot با رفتاری که نتایج منتشر شده را تولید کرده است مطابقت دارد، نه با عدد چاپ شده. مقدار --policy.n_decoder_layers را افزایش دهید و مدلی را آموزش میدهید که مقاله هرگز آن را ارزیابی نکرده است.
تکهبندی عمل، ایده اصلی است
شبیهسازی رفتاری معمولی یک مشاهده را به یک عمل نگاشت میکند و خطاها انباشته میشوند: یک انحراف بازو را از توزیع خارج میکند، عملی بدتر تولید میکند، و سی گام بعد، گریپر به هیچ وجه نزدیک شیء نیست. تکهبندی عمل k عمل را همزمان پیشبینی و اجرا میکند، و افق مؤثر را به نسبت k کاهش میدهد. همچنین یک مشکل خاص دادههای انسانی را مدیریت میکند: اپراتورهای از راه دور مکث میکنند، و یک سیاست مارکوفی تکگامی نمیتواند مکثی را مدل کند که به آنچه قبلاً آمده است بستگی دارد.
مقاله k را به جای اثبات آن، حذف میکند. با خاموش بودن ترکیب زمانی، به طور متوسط در چهار تنظیم، موفقیت از 1 درصد در k = 1 به 44 درصد در k = 100 افزایش مییابد، سپس در 200 و 400 کاهش مییابد زیرا سیاست به کنترل حلقه باز نزدیک میشود. این منحنی دلیل پیشفرض بودن 100 است.
- chunk_size: تعداد اقدامات آینده که رمزگشا در هر گذر رو به جلو پیشبینی میکند. پیشفرض 100.
- n_action_steps: تعداد اقداماتی که قبل از پرسوجوی مجدد اجرا میکنید. پیشفرض 100، بنابراین lerobot کل قطعه را به صورت حلقه باز اجرا میکند.
- lerobot اعتبار
n_action_steps <= chunk_sizeرا بررسی میکند و در صورت برعکس بودن، یکValueErrorایجاد میکند.
آنچه از نظر عملیاتی اهمیت دارد، chunk_size تقسیم بر نرخ فریم است. در نرخ 30 فریم بر ثانیه که مثالهای SO-100 از lerobot استفاده میکنند، یک قطعه 100 تایی حدود 3.3 ثانیه از یک مشاهده را پوشش میدهد. اگر وظیفه نیاز به اصلاح در آن بازه زمانی دارد، n_action_steps را کاهش دهید، نه chunk_size: شما پیشبینی طولانی را حفظ میکنید و بیشتر اوقات مجدداً مشاهده میکنید.
# predict 100 actions, re-query after 25 of them (about 0.8 s at 30 fps)
lerobot-train \
--dataset.repo_id=${HF_USER}/so100_cube \
--policy.type=act \
--policy.chunk_size=100 \
--policy.n_action_steps=25 \
--policy.device=cuda--policy.temporal_ensemble_coeff را تنظیم کنید و lerobot نیاز به n_action_steps = 1 دارد، در غیر این صورت یک NotImplementedError ایجاد میکند. ترکیبسازی (Ensembling) در هر گام زمانی از سیاست پرسوجو میکند و پیشبینیهای همپوشان برای آن گام زمانی را با وزنهای w_i = exp(-m * i) ترکیب میکند، که قدیمیترین آنها w_0 را دریافت میکند. مقاله این مقدار را برای ACT 3.3 درصد ذکر میکند: واقعی اما متوسط، و تعداد استنتاج را در طول قطعه ضرب میکند. با 20 میلیثانیه در هر گام مقرون به صرفه است، نه با 485 میلیثانیه. به تأخیر استنتاج مراجعه کنید.
هنگامی که ACT یک مدل بنیادی را شکست میدهد
پنج سیاست قابل آموزش در کنار هم، با اعدادی که AY-Robots اندازهگیری میکند و برای تعیین اندازه GPU اجارهای خود استفاده میکند.
| سیاست | خانواده | پارامترها | به ازای هر گام | رده GPU | حداقل اپیزودها | مجموعه داده |
|---|---|---|---|---|---|---|
| ACT | ترانسفورمر قطعهبندی، از ابتدا | ~80 M | 20 ms | RTX 4090 / 24 GB | 50 | LeRobot v3.0 |
| SmolVLA | VLA فشرده | ~450 M | 245 ms | RTX 4090 / 24 GB | 30 | LeRobot v3.0 |
| GR00T N1.7 | بنیاد VLA، سر انتشار | ~3 B (~40 M trained) | 152 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| GR00T N1.5 | بنیاد VLA، پیشین | ~3 B | 165 ms | A100 / H100 80 GB | 50 | LeRobot v2.0 or v2.1 |
| Pi0.5 | VLA تطبیق جریان، ببینید تطبیق جریان | ~3 B, PaliGemma backbone | 485 ms | A100 / H100 80 GB | 50 | LeRobot v3.0 |

- ۲۰ میلیثانیه در هر گام عملیاتی، سریعترین در میان پنج روش، روی کارت ۲۴ گیگابایتی نه A100.
- ۱ تا ۳ دلار آمریکا در هر اجرا در مقابل ۴ تا ۱۲ دلار برای کلاس ۳ B.
- دقیق در کارهای پر تماس که دیده است: ۸۸ و ۹۶ درصد در Slide Ziploc و Slot Battery، جایی که روشهای قبلی هرگز از مرحله اول عبور نکردند.
- عدم شرطیسازی زبانی: رشته وظیفه نادیده گرفته میشود، بنابراین هر نقطه بازرسی یک وظیفه است.
- عدم پیشفرضهای معنایی: هر آنچه میداند از ۵۰ اپیزود شما آمده است.
- تعمیمپذیری محدود: دوربین را جابجا کنید و باید دوباره آموزش دهید.
- بیصدا شکست میخورد: افت زیان، بازو کاری نمیکند، گزارشها چیزی نمیگویند.
- مزیت سرعت تنها در صورتی کمک میکند که استنتاج در کنار سرووها قرار گیرد.
ACT را زمانی انتخاب کنید که وظیفه و صحنه ثابت هستند و حرکت باید سریع و دقیق باشد. یک را زمانی انتخاب کنید که یک نقطه بازرسی باید چندین دستورالعمل را پوشش دهد. دو صفحه این تصمیم را رو در رو بررسی میکنند: و . برای معیارهای منتشر شده، هر عدد را به منبع آن پیوند میدهد.
آنچه قبل از شروع نیاز دارید
یک بازوی پیرو، یک بازوی رهبر برای ، حداقل یک دوربین، یک GPU با ۲۴ گیگابایت حافظه. ACT فقط تصاویر و موقعیتهای مفصل را میخواند. دو دوربین نقطه بهینه است: یک نمای ثابت از جلو برای اینکه اشیاء کجا هستند، یک دوربین مچی برای اینکه در شرف لمس کردن است، مانند ALOHA.
| بازو | سرووها | ولتاژ | هزینه قطعات | وضعیت |
|---|---|---|---|---|
| SO-100 | Feetech STS3215 | 7.4 V | ~110 to 150 EUR | پشتیبانی کامل، بازوی مرجع |
| SO-101 | Feetech STS3215 | 7.4 V | ~130 to 170 EUR | پشتیبانی کامل |
| Koch v1.1 | Dynamixel XL330 / XL430 | 5 V and 12 V rails | ~250 to 350 EUR | سازگار |
| LeKiwi | Feetech STS3215 (arm) | 7.4 V arm, 12 V base | ~400 to 500 EUR | سازگار |
SO-100 و SO-101 از سرووهای Feetech STS3215 بر روی ریل 7.4 V استفاده میکنند. تغذیه آنها با 12 V آنها را از بین میبرد، آنقدر بیصدا که مردم ابتدا نرمافزار را مقصر میدانند، و یک منبع تغذیه 12 V Koch به طور فیزیکی روی برد SO-100 جا میشود. برچسب را بررسی کنید. علائم: سروو پاسخ نمیدهد، بازو تکان میخورد سپس افت میکند. همچنین SO-100 در مقابل SO-101.
از بازوی خام تا مجموعه داده ضبط شده
جریان زیر lerobot 0.6.x است. اگر بازوی کالیبره شده و مجموعه داده دارید، از آن صرف نظر کنید. در غیر این صورت، راهنمای شروع به کار SO-100 مونتاژ را پوشش میدهد، راهنمای گام به گام ضبط ضبط را پوشش میدهد و مستندات مجموعه داده قالب را پوشش میدهد.
- 1نصب lerobot با افزونههای مناسب
برای ضبط به
core_scripts، برای آموزش بهtrainingو برای سرووهای Feetech بهfeetechنیاز است. پایتون 3.12+.bashconda create -y -n lerobot python=3.12 conda activate lerobot conda install ffmpeg -c conda-forge pip install 'lerobot[core_scripts,training,feetech]' lerobot-info - 2پورت USB هر بازو را پیدا کنید
آن را با هر دو بازو متصل اجرا کنید و در صورت درخواست یکی را جدا کنید. در لینوکس ممکن است نیاز باشد مجوزهای گره را باز کنید.
bashlerobot-find-port # on Linux, if the port exists but is unreadable: sudo chmod 666 /dev/ttyACM0 - 3شناسههای موتور و نرخ باود را تنظیم کنید
در SO-100 این کار قبل از مونتاژ انجام میشود: برخلاف SO-101، کانکتورها پس از ساخت غیرقابل دسترس هستند. اسکریپت باس را یک موتور در هر زمان از گریپر پیمایش میکند و شناسهها را در EEPROM مینویسد.
bashlerobot-setup-motors \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 lerobot-setup-motors \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 - 4هر دو بازو را کالیبره کنید
هر مفصل را در وسط دامنه خود قرار دهید، Enter را فشار دهید، سپس هر یک را در کل دامنه خود حرکت دهید. کالیبراسیون به یک سیاست آموزشدیده روی یک بازو اجازه میدهد روی بازوی دیگر اجرا شود. از همان
idاستفاده مجدد کنید.bashlerobot-calibrate \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=my_follower lerobot-calibrate \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 \ --teleop.id=my_leader - 5یک بار با دوربینهای روشن تلهاپراتوری کنید
قانون کلی lerobot: شما باید بتوانید کار را فقط با نگاه کردن به تصاویر دوربین انجام دهید. اگر نمیتوانید، ACT نیز نمیتواند. این کار دادههای بد بیشتری را نسبت به اشکالزدایی بعدی شناسایی میکند.
bashlerobot-teleoperate \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM0 \ --robot.id=my_follower \ --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 \ --teleop.id=my_leader \ --display_data=true - 650 اپیزود را ضبط کنید
50 حداقل AY-Robots و مقداری است که ALOHA برای هر کار استفاده میکرد. lerobot برای هر مکان شیء 10، دوربینهای ثابت، و گرفتن ثابت را توصیه میکند.
nیک اپیزود را پایان میدهد،rدوباره ضبط میکند،qمتوقف و کدگذاری میکند.bashHF_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_follower \ --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \ --teleop.type=so100_leader \ --teleop.port=/dev/ttyACM1 \ --teleop.id=my_leader \ --dataset.repo_id=${HF_USER}/so100_cube \ --dataset.num_episodes=50 \ --dataset.single_task="Grab the black cube and put it in the bin" \ --display_data=true

ACT هیچ پیشفرضی برای تکیه کردن ندارد، بنابراین هر ناسازگاری دائمی میشود. سه مورد پرهزینهتر: دوربینی که بین اپیزود 20 و 21 جابجا شده، نوری که تغییر کرده زیرا نیمی از مجموعه را در بعدازظهر ضبط کردهاید، گرفتن شیء به دو روش مختلف. هر یک از اینها یک منحنی افت (loss curve) با ظاهر عالی و بازویی که به جای اشتباه میرود، ایجاد میکند. به افت کاهش مییابد، سیاست کاری نمیکند، سیاست فقط در یک تنظیمات کار میکند و جمعآوری دادههای آموزشی با کیفیت بالا مراجعه کنید.
قبل از آموزش، حداقل پنج اپیزود را بازپخش کنید. جریانهای دوربین، وضعیتهای مفصل و اقدامات را به ازای هر ذخیره میکند، و بازپخش آن اقدامات را به بازو بازمیگرداند. اگر بازپخش کار را انجام ندهد، دادهها آن را شامل نمیشوند و آموزش آن را ابداع نخواهد کرد.
lerobot-replay \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--dataset.repo_id=${HF_USER}/so100_cube \
--dataset.episode=0آموزش سیاست ACT
این کل دستور است. همه چیزهای خاص ACT از قبل پیشفرض هستند، به همین دلیل صفحه ACT لروبات میگوید با آنها شروع کنید.
lerobot-train \
--dataset.repo_id=${HF_USER}/so100_cube \
--policy.type=act \
--output_dir=outputs/train/act_so100_cube \
--job_name=act_so100_cube \
--policy.device=cuda \
--wandb.enable=true \
--policy.repo_id=${HF_USER}/act_so100_cube--policy.type=act پیکربندی ACTConfig را بارگذاری میکند که با هر تعداد موتور و دوربینی که مجموعه داده شما ضبط کرده است، سازگار میشود، بنابراین هرگز شکل مشاهده را اعلام نمیکنید. --wandb.enable=true اختیاری و ارزشمند است: منحنی افت (loss curve) تنها سیگنال ارزان در یک اجرای ۱۰۰۰۰۰ مرحلهای است. برنامه زمانبندی از پیکربندی آموزش lerobot میآید، نه ACTConfig: ۱۰۰۰۰۰ مرحله، دسته ۸، سید ۱۰۰۰، یک نقطه بازیابی هر ۲۰۰۰۰ مرحله، ثبت وقایع هر ۲۰۰ مرحله.
یک اجرای کامل پنج دایرکتوری نقطه بازیابی، از 020000 تا 100000، به علاوه یک last سیملینک بر جای میگذارد. همه آنها را نگه دارید: بهترین سیاست اغلب آخرین سیاست نیست.
| تنظیم | پیشفرض lerobot | فرم ACT در AY-Robots | توضیح |
|---|---|---|---|
| اندازه دسته | 8 | 8 | اگر به محدودیتهای VRAM برخورد کردید، ابتدا آن را کاهش دهید. |
| نرخ یادگیری | 1e-5 | 1e-5 | مشابه مقاله ALOHA. |
| حداکثر مراحل | 100000 | 100000 | تقریباً جایی که یک مجموعه ۵۰ اپیزودی از بهبود باز میایستد. |
| انباشت گرادیان | 1 | 1, does not apply | به جای آن اندازه دسته را تغییر دهید. |
| سید | 1000 | exposed | نقطه ورودی tyro در GR00T سید ندارد؛ اجراهای ACT قابل بازتولید هستند. |
| chunk_size / n_action_steps | 100 / 100 | 100 / 100, editable | افق پیشبینی و اجرا. دومی را کاهش دهید، نه اولی. |
| فرکانس نقطه بازیابی | 20000 | not exposed | saveSteps در اینجا یک تنظیم GR00T است. |
ACT با اندازه دسته ۸ و دو دوربین 640x480 به راحتی روی ۲۴ گیگابایت جا میشود. زمانی که افراد برای سرعت، اندازه دسته را افزایش میدهند، یا فریمهای 1920x1080 را که یک مثال ضبط lerobot نشان میدهد به آن میدهند، دیگر جا نمیشود. دو backbone ResNet-18 در 1080p مشخصات حافظه بسیار متفاوتی دارد. قبل از اجاره کارت بزرگتر، --batch_size را به ۴ کاهش دهید. به خارج از حافظه بودن در آموزش مراجعه کنید.
مدت زمان: حدود ۵ ساعت روی یک RTX 2080 Ti با ۱۱ گیگابایت در مقاله، چند ساعت برای ۱۰۰ هزار گام طبق صفحه ACT لربات، ۲ تا ۵ ساعت روی رده ۲۴ گیگابایتی AY-Robots. آن را کوتاه نکنید. README مخزن مرجع میگوید که یک سیاست ناپایدار یا متوقفشونده معمولاً فقط به آموزش بیشتری نیاز دارد، زیرا موفقیت و روان بودن پس از تثبیت کاهش خطا (loss plateaus) همچنان بهبود مییابد: برای دادههای دنیای واقعی حداقل ۵۰۰۰ اپوک یا ۳ تا ۴ برابر طول بیشتر پس از تثبیت نیاز دارد.
lerobot-train \
--config_path=outputs/train/act_so100_cube/checkpoints/last/pretrained_model/train_config.json \
--resume=trueاجرای سیاست آموزشدیده روی بازو
استقرار از lerobot-rollout استفاده میکند. کلیدهای دوربین باید با موارد ضبط شده مطابقت داشته باشند: یک سیاست آموزشدیده روی front و wrist، cam0 و cam1 را نمیپذیرد، و rename_map کمکی نمیکند، زیرا به یک نقطه بازرسی از پیش آموزشدیده نیاز دارد. رشته وظیفه (task string) میتواند حذف شود؛ مثال خود لربات آن را برای ACT قابل صرفنظر کردن (skippable) علامتگذاری کرده است.
lerobot-rollout \
--strategy.type=base \
--policy.path=${HF_USER}/act_so100_cube \
--robot.type=so100_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=my_follower \
--robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30} }" \
--display_data=true \
--duration=60ارزیابی قبلاً از طریق lerobot-record --policy.path=... اجرا میشد. در نسخه 0.6.x، این کار با lerobot-rollout و یک انتخابگر --strategy.type انجام میشود: base، sentry (ضبط با آپلود خودکار)، highlight (بافر حلقوی ذخیره شده با فشار کلید)، dagger (انسان در حلقه) و episodic. از تاریخ ۲۳ آگوست ۲۰۲۶، صفحه مستندات ACT همچنان مستقیماً بالای بلوکی که lerobot-rollout را اجرا میکند، میگوید "با استفاده از دستور lerobot-record". دستور را دنبال کنید، نه جمله را.
برای پین کردن یک نقطه بازرسی به جای مدل نهایی، اضافه کنید --policy.pretrained_revision. این نیاز دارد که اجرا با --save_checkpoint_to_hub=true شروع شده باشد، که به طور پیشفرض غیرفعال است: بدون آن lerobot فقط مدل نهایی را ارسال میکند و نه چیز دیگری. با آن، هر نقطه بازرسی با گام صفر-پد شده خود برچسبگذاری میشود، بنابراین --policy.pretrained_revision=060000 نقطه بازرسی ۶۰۰۰۰ گامی را بازیابی میکند. مقایسه آن با ۱۰۰۰۰۰ روی بازوی واقعی ارزانترین آزمایش موجود است.
دو مسیر به یک نقطه بازرسی
تمام موارد بالا مسیر دستی هستند و کار میکنند. مسیر پلتفرم، کنترل را در ازای عدم نیاز به داشتن GPU یا محیط پایتون معامله میکند.
- lerobot 0.6.x را با
core_scripts،training،feetech، ffmpeg نصب کنید. - پورتها را پیدا کنید، شناسههای موتور را تنظیم کنید، هر دو بازو را کالیبره کنید، 50 اپیزود ضبط کنید.
- چند اپیزود را بازپخش کنید تا تأیید شود دادهها شامل وظیفه هستند.
- یک GPU 24 گیگابایتی اجاره کنید یا بخرید، CUDA و PyTorch را مطابقت دهید،
lerobot-train --policy.type=actرا اجرا کنید. - چند ساعت صبر کنید، سپس
lerobot-rolloutرا روی دستگاه کنار بازو اجرا کنید.
# the two commands that matter, end to end
lerobot-record --robot.type=so100_follower --robot.port=/dev/ttyACM0 \
--teleop.type=so100_leader --teleop.port=/dev/ttyACM1 \
--dataset.repo_id=${HF_USER}/so100_cube --dataset.num_episodes=50 \
--dataset.single_task="Grab the black cube"
lerobot-train --dataset.repo_id=${HF_USER}/so100_cube --policy.type=act \
--output_dir=outputs/train/act_so100_cube --policy.device=cudaکنترل کامل: configuration_act.py را ویرایش کنید، یک دوربین اضافه کنید، ترینر را فورک کنید. برای تحقیق به جای تحویل یک وظیفه، یک پلتفرم حواسپرتی است.
- با کلاینت دسکتاپ ضبط کنید، یا یک repo id از Hugging Face یا مجموعه داده محلی بیاورید.
- راهنمای ACT در SO-100 را باز کنید و مدل و مجموعه داده را انتخاب کنید. پیشفرضها همانهای lerobot هستند؛ chunkSize، nActionSteps، seed و logFreq قابل ویرایش هستند.
- بکاند یک GPU با اندازه VRAM اجاره میکند و چکپوینتها را در فضای ذخیرهسازی اشیاء مینویسد.
- سپس
/api/inference/podسیاست را به کلاینت ربات محلی ارائه میدهد. یک watchdog بیکار، پاد را از بین میبرد، بنابراین هیچ هزینهای بیصدا محاسبه نمیشود. - همین عملیات در CLI، سرور MCP و مستندات آموزش وجود دارد.
این پلتفرم دادههای شما را اصلاح نمیکند: یک مجموعه داده با دوربین جابجا شده دقیقاً به همان بدی در اینجا آموزش میبیند و فرم نمیتواند آن را تشخیص دهد. همچنین مشکل تأخیر را برطرف نمیکند. حلقه کنترل 20 تا 485 میلیثانیه در هر گام عملیاتی است، با رفت و برگشتهای اینترنت عمومی در بالا، و ACT بیشترین آسیب را میبیند زیرا گام آن کوتاهترین است: 60 میلیثانیه یک کندی 12 درصدی در 485 میلیثانیه Pi0.5 است اما چهار برابر گام در 20 میلیثانیه ACT است. استنتاج از راه دور برای عملیات کند برداشت و قرار دادن مناسب است، نه حرکت واکنشی سریع.

چه چیزی واقعاً اشتباه پیش میرود
تقریباً هیچ یک از مشکلات در دستور آموزش نیست. بلکه در موارد پیرامون آن است، که بر اساس دفعات بروز مشکل در اولین بار مرتب شدهاند.
| نشانه | علت معمول | صفحه |
|---|---|---|
| lerobot-find-port چیزی نشان نمیدهد | درایور، کابل یا مجوزهای گره | بازو شناسایی نشد |
| دوربین در زمان ضبط موجود نیست | شاخص پس از راهاندازی مجدد تغییر کرده، یا دو دوربین روی یک کنترلر USB | دوربین شناسایی نشد |
| آموزش مجموعه داده را رد میکند | ACT نسخه v3.0 را میخواهد، GR00T به v2.1 نیاز دارد | مجموعه داده به عنوان v3 رد شد |
| حافظه CUDA پر است | اندازه دسته افزایش یافته، یا فریمهای 1080p به جای 480p | کمبود حافظه در آموزش |
| Loss خوب به نظر میرسد، بازو کاری نمیکند | دادهها فاقد وظیفه هستند، یا دوربین جابجا شده است | loss کاهش مییابد، policy کاری نمیکند |
| حرکت ناگهانی یا مکث در میانه اپیزود | آموزش ناکافی، توقف در مرز قطعه، یا فراخوانی استنتاج با زمانبندی منقضی شده | policy در میانه حرکت متوقف میشود |
دو ردیف نیاز به تاکید دارند. ACT بر روی LeRobot v3.0 آموزش میبیند در حالی که لودر GR00T بر روی آن کرش میکند و به v2.1 نیاز دارد، بنابراین یک مجموعه داده که ACT را آموزش میدهد میتواند اجرای GR00T را با شکست مواجه کند. و ردیف آخر دو راه حل دارد: نویسندگان ACT حرکت ناگهانی را با آموزش بیشتر پاسخ میدهند، در حالی که با n_action_steps در 100، یک توقف واقعی در مرز قطعه رخ میدهد، یک مکث قابل مشاهده هر 3.3 ثانیه در 30 فریم بر ثانیه. دو نکته دیگر برای دانستن: یک مفصل مرده معمولاً یک شناسه سروو که هرگز نوشته نشده است، و یک گریپر که نزدیک میشود اما هرگز بسته نمیشود به معنای دامنه گریپر بسیار کم در نمایشها است. فهرست کامل: صفحات حالتهای خرابی.
هزینه یک اجرا
| سطح | مدلها | زمان اجرا | قیمت ساعتی | هزینه هر اجرا |
|---|---|---|---|---|
| RTX 4090 / 24 GB | ACT, SmolVLA | 2 to 5 hours | 0.30 to 0.60 USD | about 1 to 3 USD |
| A100 80 GB / H100 | GR00T N1.7, GR00T N1.5, Pi0.5 | 3 to 6 hours | 1.20 to 2.00 USD | about 4 to 12 USD |
این استدلال برای شروع با ACT است، حتی اگر بعداً یک VLA بخواهید. یک اجرای ناموفق ACT به اندازه قیمت یک قهوه هزینه دارد و در عرض چند ساعت به شما میگوید که آیا مجموعه داده شما شامل این وظیفه است یا خیر. یک اجرای ناموفق GR00T چهار برابر آن برای همان درس هزینه دارد. ارتقاء به GR00T N1.7 یا SmolVLA پس از آن یک تغییر فرم است، نه بازسازی. پیشزمینه: مدلهای بینایی-زبان-عمل، راهنمای کامل SO-100، اولین خطمشی خود را آموزش دهید و یادگیری تقلیدی. بازو ندارید؟ صفحه زنده یک SO-100 واقعی را برای رانندگی بدون نیاز به ثبتنام پخش میکند.
آموزش ACT روی SO-100 شما
راهنمای این ترکیب دقیق: پیشفرضها، سطح GPU و هزینه یک اجرا. مجموعه داده را انتخاب کنید، بکاند کارت را اجاره میکند و نقاط بازرسی را مینویسد.
باز کردن راهنمای آموزشآیا مدل ACT از پیش آموزشدیدهای وجود دارد که بتوانم به جای آن تنظیم دقیق کنم؟▾
خیر. ACT مدل پایه ندارد؛ تنها پس از آموزش شما وجود پیدا میکند. این یک نقص در ابزار نیست، بلکه ماهیت ACT همین است: مقاله یک خطمشی را از ابتدا برای هر وظیفه آموزش میدهد. برای یک نقطه بازرسی از فروشنده، از GR00T N1.7 یا Pi0.5 استفاده کنید.
واقعاً به چند اپیزود نیاز دارم؟▾
۵۰: آنچه ALOHA برای هر وظیفه ضبط کرده است (۱۰۰ برای Thread Velcro، سختترین آن) و حداقل AY-Robots. lerobot حدود ۱۰ اپیزود برای هر مکان شیء، با دوربینهای ثابت و گرفتن ثابت توصیه میکند. پنجاه اپیزود تمیز بهتر از صد اپیزود است که در آن دوربین حرکت کرده است.
آیا باید chunk_size را از ۱۰۰ تغییر دهم؟▾
معمولاً خیر. کاهش از ۱ درصد در k = 1 به ۴۴ درصد در k = 100 افزایش مییابد و پس از آن کاهش مییابد، بنابراین ۱۰۰ نزدیک به اوج قرار دارد. اگر بازو بیش از حد طولانی متعهد میشود، به جای آن n_action_steps را کاهش دهید: در ۳۰ فریم بر ثانیه، ۲۵ درخواست مجدد هر ۰.۸ ثانیه.
یک اجرای آموزشی چقدر طول میکشد و آیا میتوانم آن را زودتر متوقف کنم؟▾
دو تا پنج ساعت روی یک کارت ۲۴ گیگابایتی برای ۱۰۰۰۰۰ گام. نقاط بازرسی هر ۲۰۰۰۰ گام ذخیره میشوند و --resume=true یک اجرا را از سر میگیرد، بنابراین توقف زودهنگام ایمن است. فقط نه در اولین بخش مسطح: همواری پس از تثبیت کاهش ضرر بهبود مییابد.
ضرر کاهش یافت و بازو همچنان شکست میخورد. حالا چه؟▾
تقریباً همیشه مجموعه داده. اپیزودهای ضبط شده را روی بازو بازپخش کنید: اگر بازپخش وظیفه را انجام نمیدهد، دادهها شامل آن نیستند. سپس بررسی کنید که آیا چیزی حرکت کرده است، به خصوص یک دوربین. ACT هیچ پیشفرضی ندارد، بنابراین یک تکان کوچک در اپیزود ۲۱ دائمی است.
Sources
- Zhao, Kumar, Levine, Finn: Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware (ACT), arXiv 2304.13705
- ALOHA / ACT project page
- tonyzhaozh/act, the reference implementation and its training-length advice
- tonyzhaozh/act issue 25: the action head reads only the first decoder layer
- huggingface/lerobot
- lerobot ACTConfig: chunk_size, n_action_steps, n_decoder_layers and the rest of the defaults
- lerobot TrainPipelineConfig: steps, batch_size, seed, save_freq, log_freq, save_checkpoint_to_hub
- lerobot train_utils: zero-padded checkpoint dirs, the last symlink and checkpoint push tagging
- lerobot v0.6.1 release, 3 August 2026
- LeRobot docs: ACT
- LeRobot docs: imitation learning on real robots (record, replay, train, rollout)
- LeRobot docs: SO-100 setup, motor ids and calibration
- LeRobot docs: installation and the optional extras
- Hugging Face blog: LeRobot Community Datasets, the ImageNet of Robotics, When and How?
- TheRobotStudio/SO-ARM100: Standard Open Arm 100
Ready for high-quality robotics data?
AY-Robots connects your robots to skilled operators worldwide.
Get Started