یادگیری ماشین

آموزش تمرین مدل بازوی رباتیک با LeRobot و Jetson

در این مسیر عملی Physical AI، یک بازوی رباتیک واقعی را با تکیه بر Hugging Face LeRobot و روش یادگیری تقلیدی آموزش می دهیم. سخت افزار اصلی شامل بازوی رباتیک Seeed Studio SO-ARM101 به صورت لیدر و فالوئر و یک reComputer J4012 مبتنی بر NVIDIA Jetson Orin NX است

آموزش تمرین مدل بازوی رباتیک

فرایند کار از پیکربندی و کالیبراسیون SO-ARM101 شروع می شود، سپس تله اپراتوری و ضبط دیتاست انجام می شود. با ثبت حدود 150 نمایش انسانی، یک سیاست ACT را با LeRobot آموزش می دهیم و بررسی می کنیم که بازو بتواند به شکل خودکار گوجه و سیب زمینی را دسته بندی کند. این راهنمای گام به گام، همه مراحل را پوشش می دهد: نصب و راه اندازی سخت افزار، تنظیم موتور، کالیبراسیون، تله اپراتوری، ضبط دیتاست، آموزش مدل هوش مصنوعی، عیب یابی و ارزیابی میدانی. در پایان، تمام اجزای لازم برای درک و تکرار این پایپ لاین یادگیری رباتیک را در اختیار دارید.

قطعات مورد نیاز برای پروژه Physical AI 

برای راه اندازی کامل سیستم، به مجموعه ای از قطعات مکانیکی، الکترونیکی، تغذیه و ارتباطی نیاز است.

دوره آموزش آردوینو دوره آموزش ESP32 دوره آموزش اینترنت اشیا حرفه ای دوره آموزش AVR
ردیف قطعه تعداد کاربرد
1. Seeed Studio Leader Arm 1 برای اجرای حرکات توسط اپراتور انسانی و نمایش حرکات مدنظر در تله اپراتوری.
2. Seeed Studio Follower Arm 1 بازوی کاری که ابتدا حرکات لیدر را تقلید می کند و بعد سیاست آموزش دیده را اجرا می کند.
3. reComputer J4012 با NVIDIA Jetson Orin NX 1 واحد محاسباتی اصلی برای آموزش مدل و اجرای استنتاج روی ربات.
4. USB Camera 1 گرفتن مشاهدات بصری از فضای کار، اشیا، گریپر و کاسه ها برای یادگیری و کنترل مبتنی بر بینایی.
5. آداپتور 12V 2 تغذیه موتورها در بازوی فالوئر و تامین تغذیه Jetson Orin.
6. آداپتور 5V 1 تغذیه موتورها در بازوی لیدر (7.4V / 5V motors).
7. لپ تاپ 1 برای راه اندازی اولیه، تله اپراتوری، ضبط دیتاست و توسعه در Windows.
8. کابل های USB نوع C 2 ارتباط لیدر، فالوئر، دوربین ها و Jetson با لپ تاپ.
9. مانیتور، ماوس و کیبورد اختیاری نمایشگر و ابزار ورودی برای reComputer مبتنی بر Jetson Orin NX.

{'placeholder': '[[IMAGE_1]]', 'alt': 'چیدمان کامل پروژه بازوی رباتیک SO-ARM101'}

شناخت سخت افزار و نرم افزار

در این بخش قطعات کلیدی سخت افزاری و نرم افزاری و دلیل انتخاب آن ها مرور می شوند.

بازوی رباتیک SO-101

SO-101 یک بازوی رباتیک 6-DOF متن باز و اقتصادی برای پژوهش و یادگیری است. این مجموعه شامل دو بازو است: Leader و Follower. اپراتور انسانی با حرکت دادن لیدر، نمایش لازم را انجام می دهد و فالوئر در حالت تله اپراتوری همان حرکت ها را تکرار می کند. پس از آموزش، فالوئر به تنهایی سیاست هوش مصنوعی را اجرا می کند. این پیکربندی لیدر-فالوئر برای جمع آوری داده های باکیفیت جهت یادگیری تقلیدی بسیار کارآمد است.

{'placeholder': '[[IMAGE_2]]', 'alt': 'بازوی رباتیک SO-101 شامل لیدر و فالوئر'}

برخلاف بسیاری از بازوهای صنعتی، SO-101 کنترلر خارجی جداگانه ندارد. به جای آن، دو بورد درایور موتور ارائه می شود: یکی برای لیدر و یکی برای فالوئر. این بوردها وظیفه اصلی واسط ارتباطی و توزیع توان بین رایانه و موتورها را بر عهده دارند.

{'placeholder': '[[IMAGE_3]]', 'alt': 'بردهای درایور موتور بازوی SO-101 روی میز'}

موتورها: سرووهای هوشمند Feetech STS3215

در SO-101 از سرووهای باس هوشمند Feetech STS3215 استفاده شده است. این موتورها صرفا DC معمولی نیستند؛ کنترلر داخلی سروو وظیفه کنترل موقعیت، سرعت، گشتاور و بازخورد موقعیت مفصلی را بر عهده دارد.

{'placeholder': '[[IMAGE_4]]', 'alt': 'سروو هوشمند Feetech STS3215 نمای نزدیک'}

با توجه به هوشمندی داخل خود سروو، بورد درایور خارجی صرفا پل ارتباطی فرمان و توان است و برنامه ریزی مسیر پیچیده در آن انجام نمی شود. به بیان ساده، کنترلر داخل موتور است، بورد درایور نقش پل ارتباطی دارد و رایانه (که LeRobot را اجرا می کند) موقعیت های هدف را ارسال می کند. برای تعادل بین گشتاور و سرعت، ضرایب دنده متفاوتی در مفاصل مختلف استفاده شده است. معمولا در بازوی لیدر از موتورها با ولتاژ پایین تر (اغلب 7.4V) استفاده می شود تا حرکت دستی روان باشد و فالوئر برای اجرای وظایف واقعی تنظیم می شود.

reComputer J4012 با NVIDIA Jetson Orin NX

reComputer J4012 با Jetson Orin NX یک پلتفرم لبه ای جمع و جور و قدرتمند برای بارهای کاری AI است. در این پروژه، این دستگاه هم برای آموزش مدل یادگیری تقلیدی و هم برای اجرای سیاست آموزش دیده روی ربات استفاده می شود.

{'placeholder': '[[IMAGE_5]]', 'alt': 'کامپیوتر لبه reComputer J4012 با Jetson Orin NX'}

وجود GPU، اجرای مدل هایی مانند ACT (Action Chunking with Transformers) را ممکن و سریع می کند؛ کاری که روی لپ تاپ های فاقد GPU انویدیا عملا بسیار کند یا غیرعملی است.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

Hugging Face و فریم ورک LeRobot

Hugging Face اکوسیستم مرتبط با LeRobot را فراهم می کند: خود فریم ورک، معماری مدل ها، ابزار دیتاست و امکانات اشتراک گذاری پروژه های رباتیک.

{'placeholder': '[[IMAGE_6]]', 'alt': 'معرفی فریم ورک LeRobot از Hugging Face'}

در این پروژه، دیتاست ها و مدل های آموزش دیده در طی توسعه عمدتا به صورت محلی ذخیره شدند و از اکوسیستم Hugging Face برای چارچوب نرم افزاری و ابزارهای زیربنایی استفاده شده است.

LeRobot چیست؟

LeRobot یک فریم ورک متن باز رباتیک از Hugging Face است که کل زنجیره یادگیری ربات دنیای واقعی را پوشش می دهد: ارتباط با سخت افزار، تله اپراتوری، ضبط دیتاست، آموزش مدل و ارزیابی سیاست. بدون LeRobot لازم بود بیشتر این پایپ لاین نرم افزاری از ابتدا پیاده سازی شود.

{'placeholder': '[[IMAGE_7]]', 'alt': 'نمودار کاری LeRobot از تله اپ تا آموزش'}

راه اندازی LeRobot در Windows

نصب Hugging Face LeRobot روی Windows

در این پروژه از کیت SO-ARM101 Low-Cost AI Arm Assembled Kit Pro (شامل لیدر و فالوئر) در کنار LeRobot استفاده می شود. در فاز Windows، هدف انجام تنظیم موتور و کالیبراسیون، تله اپراتوری، ضبط دیتاست و بازپخش دیتاست است. برای راه اندازی نرم افزار، ابتدا Miniconda را نصب کنید. نسخه 64 بیتی Windows را دانلود و نصب کرده و هنگام نصب گزینه “Add Miniconda3 to my PATH environment variable” را فعال کنید. بعد از نصب، سیستم را ری استارت کنید. سپس Command Prompt را باز کرده و یک محیط اختصاصی ایجاد کنید:

conda --version
conda create -n lerobot python=3.10 -y
conda activate lerobot

اگر با خطای Terms of Service مواجه شدید، ابتدا این دستورات را اجرا کنید:

conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/msys2

پس از فعال کردن محیط، مخزن LeRobot را کلون و با پشتیبانی موتورهای Feetech نصب کنید:

git clone https://github.com/huggingface/lerobot.git
cd lerobot
pip install -e ".[feetech]"

راستی آزمایی نصب:

python -c "import lerobot; print(lerobot.__version__)"

در صورت نصب موفق، نسخه ای مانند 0.4.x یا بالاتر نمایش داده می شود.

اتصال سخت افزار و تنظیم موتور

پیش از پیکربندی، موتورها را برچسب گذاری کنید: مفاصل فالوئر را با F1 تا F6 و مفاصل لیدر را با L1 تا L6 مشخص کنید. در اتصال تغذیه دقت کنید. بازوی لیدر معمولا از موتورها با 7.4V استفاده می کند و در این پروژه با آداپتور 5V تغذیه شد. بسته به پیکربندی، بازوی فالوئر ممکن است به 12V نیاز داشته باشد. توجه کنید تغذیه و USB هر دو باید متصل باشند؛ USB به تنهایی توان موتورها را تامین نمی کند. ابتدا آداپتور 12V را به بورد فالوئر وصل کنید، سپس آداپتور 5V را به بورد لیدر متصل کنید. بعد، کابل های USB هر دو بورد را به لپ تاپ وصل کنید. برای شناسایی پورت های COM دستورات زیر را اجرا کنید:

lerobot-find-port 

راهنمای روی صفحه را دنبال کنید و پورت های لیدر و فالوئر را یادداشت کنید.

نتیجه مورد انتظار:
Follower → COM(any number)
Leader → COM(any number)

تنظیم شناسه سرووهای SO-ARM101

پس از شناسایی پورت ها، باید ID موتورها تنظیم شود. حتما پیش از ست کردن ID هر سروو، اتصال زنجیره ای باس را جدا کنید؛ در غیر این صورت با خطا مواجه می شوید. از بازوی لیدر شروع کنید و دستور زیر را با جایگزینی COM متناسب سیستم خود اجرا کنید:

{'placeholder': '[[IMAGE_8]]', 'alt': 'فرایند ست کردن آیدی سرووهای SO-ARM101'}

lerobot-setup-motors --teleop.type=so101_leader --teleop.port=COM26

طبق راهنما، هر بار تنها یک سروو را متصل و ID آن را تنظیم کنید. سپس همین کار را برای فالوئر تکرار کنید:

lerobot-setup-motors --robot.type=so101_follower --robot.port=COM23

به هر موتور یک ID یکتا از 1 تا 6 اختصاص دهید تا نرم افزار بتواند به صورت مجزا با آن ها ارتباط بگیرد.

{'placeholder': '[[IMAGE_9]]', 'alt': 'روند شناسایی و نقشه مفاصل هنگام تنظیم'}

کالیبراسیون بازوی SO-ARM101

بعد از تنظیم ID ها، همه موتورها را متصل کرده و به مرحله کالیبراسیون بروید. طبق راهنما هر مفصل را آرام به جلو و عقب، سپس تا موقعیت های حداقل و حداکثر حرکت دهید. مقادیر مفاصل روی صفحه تغییر می کنند. پس از اطمینان از صحت حرکات، Enter را برای ذخیره مقادیر بزنید. ابتدا بازوی لیدر را کالیبره کنید:

lerobot-calibrate --teleop.type=so101_leader --teleop.port=COM26 --teleop.id=my_leader_arm

{'placeholder': '[[IMAGE_10]]', 'alt': 'رابط کالیبراسیون مفاصل بازوی لیدر'}

سپس فالوئر را با دستور زیر کالیبره کنید:

lerobot-calibrate --robot.type=so101_follower --robot.port=COM23 --robot.id=my_follower_arm

{'placeholder': '[[IMAGE_11]]', 'alt': 'کالیبراسیون مفاصل بازوی فالوئر روی سیستم'}

نکات کالیبراسیون

  • مفاصل را آهسته حرکت دهید.
  • به محدودیت های مکانیکی فشار نیاورید.
  • صحت اختصاص ID هر موتور را بررسی کنید.
  • از تغذیه مناسب بازو مطمئن شوید.
  • در صورت مقادیر غیرعادی، متوقف شوید و نگاشت مفصل و ID موتور را بازبینی کنید.
  • پس از اطمینان از حرکت صحیح، مقادیر کالیبراسیون را ذخیره کنید.

تله اپراتوری بازو با LeRobot

پس از کالیبراسیون هر دو بازو، تله اپراتوری را تست کنید:

lerobot-teleoperate --robot.type=so101_follower --robot.port=COM23 --robot.id=my_follower_arm --teleop.type=so101_leader --teleop.port=COM26 --teleop.id=my_leader_arm

با حرکت دادن لیدر، فالوئر به صورت زمان واقعی همان حرکات را دنبال می کند. برای توقف از Ctrl + C استفاده کنید.

ضبط دیتاست یادگیری تقلیدی (بدون دوربین)

برای ضبط دیتاست بدون دوربین از دستور زیر استفاده کنید:

lerobot-record --robot.type=so101_follower --robot.port=COM23 --robot.id=my_follower_arm --teleop.type=so101_leader --teleop.port=COM26 --teleop.id=my_leader_arm --dataset.repo_id=semicon/arm_only_v1 --dataset.root="D:/lerobot_datasets/arm_only_v1" --dataset.num_episodes=3 --dataset.single_task="Pick and place small object" --dataset.push_to_hub=false --dataset.fps=30 --display_data=false

پورت های COM و مسیر root دیتاست را مطابق سیستم خود تنظیم کنید. این ضبط بدون دوربین انجام می شود.

بازپخش دیتاست ضبط شده

برای اجرای مجدد یک اپیزود ضبط شده:

lerobot-replay --robot.type=so101_follower --robot.port=COM23 --robot.id=my_follower_arm --dataset.repo_id=semicon/arm_only_v1 --dataset.root="D:/lerobot_datasets/arm_only_v1" --dataset.episode=0

با این کار فالوئر حرکت ضبط شده در اپیزود انتخابی را تکرار می کند.

{'placeholder': '[[IMAGE_12]]', 'alt': 'اجرای ریپلای دیتاست روی بازوی فالوئر'}

دستورات شروع روزانه

در هر نوبت کار، محیط را فعال و وارد پوشه LeRobot شوید:

conda activate lerobot
cd path\to\lerobot

سپس هر یک از دستورات بالا قابل اجرا است.

چرا آموزش را به Jetson Orin NX منتقل کنیم؟

هرچند روی Windows می توان تله اپراتوری، ضبط و بازپخش را انجام داد، اما آموزش کامل مدل روی این پلتفرم معمولا عملی نیست. ضبط دیتاست روی Windows مسئله ای ندارد، اما آموزش مدل AI برای شتاب GPU به CUDA نیاز دارد. بدون GPU انویدیا یا با RAM محدود، آموزش بسیار کند یا غیرقابل اجرا می شود. به همین دلیل، آموزش روی reComputer J4012 با Jetson Orin NX انجام شد.

راه اندازی LeRobot روی NVIDIA Jetson Orin NX

پیش از شروع روی reComputer J4012، چند مفهوم کلیدی در آموزش مدل های AI و یادگیری ربات اهمیت دارد.

CUDA چیست؟

CUDA (Compute Unified Device Architecture) سکوی محاسبات موازی از NVIDIA است که امکان استفاده از GPU برای محاسبات عمومی را فراهم می کند. CPU معمولا وظایف را پشت سر هم اجرا می کند، در حالی که GPU هزاران عملیات کوچک را به طور همزمان پردازش می کند. CUDA همان فناوری است که به چارچوب های AI اجازه می دهد از این شتاب بهره بگیرند.

{'placeholder': '[[IMAGE_13]]', 'alt': 'توضیح CUDA و مقایسه CPU و GPU'}

آموزش مدل ACT شامل محاسبات ریاضی سنگین است که روی GPU مجهز به CUDA بسیار سریع تر انجام می شود. چون لپ تاپ Windows قبلی GPU انویدیا نداشت، آموزش روی آن عملی نبود و بنابراین به Jetson Orin NX منتقل شد.

انواع مدل ها در یادگیری ربات

با توجه به نوع وظیفه، مدل های مختلفی قابل استفاده هستند:

  • ACT (Action Chunking with Transformers): مدل استفاده شده در این پروژه. از نمایش های انسانی یاد می گیرد و توالی اعمال ربات را پیش بینی می کند. با دیتاست های کوچک هم کارا است.
  • Diffusion Policy: اعمال را گام به گام تولید می کند، برای حرکات دقیق و پیچیده مناسب است اما توان محاسباتی بیشتری می خواهد.
  • VLM (Vision-Language Model): تصویر و متن را توامان می فهمد و زمانی مفید است که ربات باید دستورهای زبانی را دنبال کند.
  • VLA (Vision-Language-Action Model): بینایی، زبان و عمل را یکپارچه می کند. این مدل ها بزرگ تر هستند و دیتای بیشتری می خواهند.

در این پروژه ACT به دلیل تناسب با یادگیری تقلیدی مبتنی بر نمایش انسانی و تمرکز وظیفه Pick-and-Place انتخاب شد.

راه اندازی اولیه روی Jetson Orin NX

ابتدا Jetson Orin NX را با JetPack 6.1 یا بالاتر فلش کنید تا سازگاری نرم افزاری و کارایی مناسب تضمین شود. سپس تنظیمات پایه مانند Windows انجام می شود:

  • تنظیم ID موتورها
  • کالیبراسیون
  • تله اپراتوری
  • تست ضبط و بازپخش

این مراحل مطابق مستندات Seeed Studio قابل انجام هستند. بعد از راه اندازی پایه، به جمع آوری داده برای وظیفه مرتب سازی سبزیجات می پردازیم.

جمع آوری دیتاست و آموزش برای مرتب سازی سبزیجات

برای آن که بازو مرتب سازی را یاد بگیرد، باید نمایش های انسانی را به صورت اپیزود ضبط کنیم.

اپیزود چیست؟
هر اجرای کامل وظیفه یک اپیزود محسوب می شود.

  • برداشتن یک گوجه و قرار دادن در کاسه چپ = 1 اپیزود
  • برداشتن یک سیب زمینی و قرار دادن در کاسه راست = 1 اپیزود
  • مدل با دیدن نمونه های متعدد یاد می گیرد؛ بنابراین به اپیزودهای زیاد نیاز است.

چرا حدود 120 اپیزود؟
یک نمایش تکی کافی نیست. با اپیزودهای بیشتر، مدل با تنوع های کوچک در حرکت، زمان بندی و درگیری با شی آشنا می شود. در این پروژه حدود 120 اپیزود در سه گروه ضبط شد:

  • فقط گوجه
  • فقط سیب زمینی
  • هر دو شی کنار هم

این چینش کمک می کند مدل هم رفتارهای تک شی و هم مرتب سازی ترکیبی را یاد بگیرد.

ضبط دیتاست مرتب سازی

برای ضبط دیتاست تنها با دوربین مچ دست، از دستور زیر استفاده کنید:

{'placeholder': '[[IMAGE_14]]', 'alt': 'رابط ضبط دیتاست با دوربین مچ ربات'}

conda activate lerobot
lerobot-record \
 --robot.type=so101_follower \
 --robot.port=/dev/ttyACM1 \
 --robot.id=my_follower_arm \
 --robot.cameras="{ wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
 --teleop.type=so101_leader \
 --teleop.port=/dev/ttyACM0 \
 --teleop.id=my_leader_arm \
 --dataset.repo_id=local/tomato_potato_wrist_fixed \
 --dataset.push_to_hub=false \
 --dataset.num_episodes=120 \
 --dataset.single_task="Sort the tomato into the left bowl and the potato into the right bowl" \
 --dataset.episode_time_s=45 \
 --dataset.reset_time_s=15 \
 --display_data=true

اگر می خواهید همه اپیزودها را یکجا ضبط کنید از همین دستور استفاده کنید. در صورتی که ضبط را مرحله ای انجام می دهید، نمونه های زیر را دنبال کنید.

فقط گوجه

conda activate lerobot
lerobot-record \
 --robot.type=so101_follower \
 --robot.port=/dev/ttyACM1 \
 --robot.id=my_follower_arm \
 --robot.cameras="{ wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
 --teleop.type=so101_leader \
 --teleop.port=/dev/ttyACM0 \
 --teleop.id=my_leader_arm \
 --dataset.repo_id=local/tomato_potato_wrist_fixed \
 --dataset.push_to_hub=false \
 --dataset.num_episodes=40 \
 --dataset.single_task="Sort the tomato into the left bowl and the potato into the right bowl" \
 --dataset.episode_time_s=45 \
 --dataset.reset_time_s=15 \
 --display_data=true

{'placeholder': '[[IMAGE_15]]', 'alt': 'نمونه ضبط اپیزودهای فقط گوجه برای آموزش'}

فقط سیب زمینی

lerobot-record \
 --robot.type=so101_follower \
 --robot.port=/dev/ttyACM1 \
 --robot.id=my_follower_arm \
 --robot.cameras="{ wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
 --teleop.type=so101_leader \
 --teleop.port=/dev/ttyACM0 \
 --teleop.id=my_leader_arm \
 --dataset.repo_id=local/tomato_potato_wrist_fixed \
 --dataset.push_to_hub=false \
 --dataset.num_episodes=40 \
 --dataset.single_task="Sort the tomato into the left bowl and the potato into the right bowl" \
 --dataset.episode_time_s=45 \
 --dataset.reset_time_s=15 \
 --display_data=true \
 --resume=true

{'placeholder': '[[IMAGE_16]]', 'alt': 'نمونه ضبط اپیزودهای فقط سیب زمینی'}

هر دو شی به صورت همزمان

lerobot-record \
 --robot.type=so101_follower \
 --robot.port=/dev/ttyACM1 \
 --robot.id=my_follower_arm \
 --robot.cameras="{ wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
 --teleop.type=so101_leader \
 --teleop.port=/dev/ttyACM0 \
 --teleop.id=my_leader_arm \
 --dataset.repo_id=local/tomato_potato_wrist_fixed \
 --dataset.push_to_hub=false \
 --dataset.num_episodes=40 \
 --dataset.single_task="Sort the tomato into the left bowl and the potato into the right bowl" \
 --dataset.episode_time_s=45 \
 --dataset.reset_time_s=15 \
 --display_data=true \
 --resume=true

{'placeholder': '[[IMAGE_17]]', 'alt': 'نمونه ضبط همزمان گوجه و سیب زمینی'}

آموزش سیاست ACT با LeRobot

پس از جمع آوری دیتاست، مدل ACT را با دستور زیر آموزش دهید:

conda activate lerobot
lerobot-train \
 --dataset.repo_id=local/tomato_potato_wrist_fixed \
 --policy.type=act \
 --policy.repo_id=local/tomato_potato_wrist_fixed_act \
 --output_dir=outputs/train/tomato_potato_wrist_fixed_act \
 --job_name=tomato_potato_wrist_fixed_act \
 --policy.device=cuda \
 --batch_size=4 \
 --steps=100000 \
 --eval_freq=5000 \
 --save_freq=10000 \
 --log_freq=100 \
 --wandb.enable=false

{'placeholder': '[[IMAGE_18]]', 'alt': 'گراف آموزش مدل ACT در LeRobot'}

دلیل انتخاب این تنظیمات:

  • –policy.type=act → انتخاب مدل ACT
  • –policy.device=cuda → استفاده از GPU
  • –steps=100000 → تعداد گام های آموزش
  • –save_freq=10000 → ذخیره منظم چک پوینت ها

در صورت توقف فرایند، می توانید از آخرین چک پوینت ادامه دهید:

conda activate lerobot
lerobot-train \
config_path=outputs/train/tomato_potato_wrist_fixed_act/checkpoints/last/pretrained_model/train_config.json \
 --resume=true

آزمون بازوی رباتیک Physical AI

پس از آموزش، مدل را روی ربات واقعی تست کنید:

conda activate lerobot
lerobot-record \
 --robot.type=so101_follower \
 --robot.port=/dev/ttyACM1 \
 --robot.id=my_follower_arm \
 --robot.cameras="{ wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
 --dataset.repo_id=local/eval_wrist_fixed \
 --dataset.push_to_hub=false \
 --dataset.num_episodes=1 \
 --dataset.single_task="Sort the tomato into the left bowl and the potato into the right bowl" \
 --dataset.episode_time_s=600 \
 --dataset.reset_time_s=15 \
 --display_data=true \
 --policy.path=outputs/train/tomato_potato_wrist_fixed_act/checkpoints/last/pretrained_model

در این گام، دیگر لیدر کنترلی انجام نمی دهد. سیاست آموزش دیده بر اساس ورودی دوربین و رفتار آموخته شده، حرکات فالوئر را هدایت می کند. می توانید با قرار دادن گوجه و سیب زمینی عملکرد مدل را بررسی کنید.

{'placeholder': '[[IMAGE_19]]', 'alt': 'ارزیابی مدل روی ربات و مرتب سازی اشیا'}

خطاها و راه حل های متداول SO-ARM101 و LeRobot

جدول زیر رایج ترین مشکلات حین راه اندازی، کارکرد یا آموزش را به همراه علت های محتمل و راهکارهای پیشنهادی جمع بندی می کند.

ردیف مشکل علت راه حل
1. خطای وجود دیتاست هنگام شروع ارزیابی LeRobot به طور پیش فرض روی پوشه دیتاست موجود overwrite نمی کند و پوشه ارزیابی قبلی با همان نام موجود بوده است. پوشه دیتاست قبلی را با rm -rf حذف و دستور ارزیابی را مجددا اجرا کنید.
2. قطع شدن دوربین ها در حین ارزیابی مشکل پهنای باند USB یا اتصال ناپایدار باعث از دست رفتن دسترسی به دوربین ها شده است. اتصال دوربین ها را مجددا برقرار کنید، ایندکس ها را با lerobot-find-cameras opencv بررسی و ارزیابی را از نو شروع کنید.
3. توقف فرایند آموزش پیش از اتمام طولانی بودن آموزش و وقفه سیستمی باعث توقف در میانه چک پوینت ها شده است. به جای شروع از ابتدا، با گزینه –resume=true از آخرین چک پوینت ادامه دهید.
4. بازگشت نکردن بازو به وضعیت خانه پس از ارزیابی در ارزیابی سیاست بدون لیدر، در فاز reset ورودی کنترلی فعالی وجود ندارد و بازو در موقعیت نهایی باقی می ماند. پیش از هر اپیزود جدید، بازو را به صورت دستی به وضعیت شروع بازگردانید.
5. خطای دامنه/بازه در کالیبراسیون مفصل در کل بازه اش حرکت داده نشده یا حرکت خیلی کم/زیاد بوده است. کالیبراسیون را با حرکت آهسته هر مفصل از حداقل تا حداکثر طبق راهنما تکرار کنید.
6. عدم موفقیت در ست کردن ID موتور/خطای ارتباط هنگام اختصاص ID، موتورها هنوز در حالت زنجیره ای باس به هم متصل بوده اند. اتصال زنجیره ای را جدا و هر بار یک موتور را متصل، ID را تنظیم و سپس مجددا متصل کنید.

بهبودهای آتی

سیستم فعلی یادگیری تقلیدی را برای مرتب سازی گوجه و سیب زمینی با تکیه بر یک دوربین مچ ثابت نشان می دهد. افزودن یک دوربین بیرونی از بالا یا کنار می تواند درک بصری را بهبود دهد و قابلیت اطمینان ربات را در چیدمان های مکانی متنوع افزایش دهد. این پایپ لاین را می توان از محیط آزمایشگاهی به کاربردهای عملی مانند مرتب سازی انبار، آموزش های رباتیک و وظایف Pick-and-Place ساده صنعتی نیز تعمیم داد. با گسترش دیتاست و آموزش روی اشیای متنوع تر (میوه های مختلف، بلوک های رنگی و غیره) دامنه کاربرد افزایش می یابد.

افزودن حسگر نیرو یا لمسی به گریپر، پایداری گرفتن را مخصوصا برای اشیای نرم یا نامنظم ارتقا می دهد. در گام های بلندمدت، سوار کردن بازو روی یک پلتفرم متحرک می تواند امکان انجام مرتب سازی در موقعیت های مختلف را فراهم کند و سیستم را منعطف تر و به شرایط واقعی نزدیک تر کند.

جمع بندی

یک بازوی رباتیک اقتصادی را می توان با نمایش های انسانی برای یک وظیفه واقعی آموزش داد. با تکیه بر SO-101 و LeRobot، کل مسیر از راه اندازی سخت افزار و تله اپراتوری تا ضبط داده، آموزش مدل و آزمون نهایی طی شد و ربات برای جداسازی گوجه و سیب زمینی در کاسه های مجزا آموزش دید. کار هم روی Windows و هم Jetson Orin NX انجام شد تا مشخص شود کدام مراحل با لپ تاپ معمولی ساده تر است و کجا به توان محاسباتی بیشتر نیاز داریم.

در عمل با چالش هایی مثل قطع دوربین، توقف های آموزش و افت عملکرد در حالت حضور همزمان اشیا مواجه شدیم که با رفع مرحله به مرحله آن ها، سامانه پایدارتر و کاربردی تر شد. این پروژه نمونه روشنی از به کارگیری یادگیری تقلیدی با سخت افزار مقرون به صرفه است و قابلیت توسعه برای وظایف پیچیده تر را دارد.

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *