# ورقة الغش

جميع أوامر LeRobot في مكان واحد. إذا نسيت كيفية استخدام أمر معين أو أردت التعرف على أمر جديد، يمكنك القيام بذلك هنا.

> [!WARNING]
> تذكّر بتغيير المنافذ/الأسماء/المعرّفات إلى قيمك الخاصة في جميع الأوامر المدرجة أدناه!

> [!TIP]
> طريقة رائعة أخرى للاطلاع على جميع الأوامر وإعدادها لتناسب إعدادك المحدد هي استخدام هذا [Jupyter Notebook](https://github.com/huggingface/lerobot/blob/main/examples/notebooks/quickstart.ipynb).

### الإعداد والتثبيت

للتنصيب، يرجى الاطلاع على [LeRobot Installation](./installation).

### أدوات مفيدة

###### العثور على المنفذ

استخدم هذا لتحديد المنافذ التسلسلية التي تتصل بها روبوتاتك. اتبع التعليمات في الطرفية: سيُطلب منك فصل كابل USB ثم الضغط على Enter. بعد ذلك، سيقوم السكربت باكتشاف منفذ التسلسل الصحيح لذلك الروبوت وطباعته.

```bash
lerobot-find-port
```

###### البحث عن الكاميرات

اعثر بسرعة على فهارس الكاميرات وتحقق من مخرجاتها. يطبع هذا الأمر معلومات الكاميرات في الطرفية ويحفظ إطارات اختبار من كل كاميرا مكتشفة في `outputs/captured_images`

```bash
lerobot-find-cameras
```

### المعايرة

في معظم الحالات، ستحتاج إلى إجراء المعايرة مرة واحدة فقط لكل روبوت وجهاز تشغيل عن بُعد. قبل إجراء المعايرة، تأكد من أن جميع المفاصل في وضع متوسط تقريبي.

```bash
lerobot-calibrate \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_follower_arm
```

تأكد من استخدام نفس المعرّفات المستخدمة أثناء المعايرة لاحقًا في السكربتات الأخرى. بهذه الطريقة يجد LeRobot ملفات المعايرة.

### التشغيل عن بُعد

التشغيل عن بُعد باستخدام كاميرتين وعرض البيانات باستخدام Rerun.

```bash
lerobot-teleoperate \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_follower_arm \
    --robot.cameras="{ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/ttyACM1 \
    --teleop.id=my_leader_arm \
    --display_data=true
```

### تسجيل مجموعة بيانات

يتم رفع مجموعة البيانات تلقائيًا إلى Hugging Face Hub تحت `repo_id`. تأكد من تسجيل الدخول إلى حسابك في HF باستخدام CLI (يمكنك الحصول على رمز من [https://huggingface.co/settings/tokens](https://huggingface.co/settings/tokens))، واحفظ اسم المستخدم الخاص بك في `HF_USER`، حيث تستخدم الأوامر أدناه هذا المتغير:

```bash
lerobot-record \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_follower_arm \
    --robot.cameras="{ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/ttyACM1 \
    --teleop.id=my_leader_arm \
    --dataset.repo_id=${HF_USER}/so101_dataset_test \
    --dataset.num_episodes=30 \
    --dataset.single_task="put the red brick in a bowl" \
    --dataset.streaming_encoding=true \
    --display_data=true
```

أثناء جمع مجموعة البيانات، يمكنك التحكم في العملية باستخدام لوحة المفاتيح:

- اضغط **السهم الأيمن (`→`)** أو **`n`**: لحفظ الحلقة والانتقال إلى التالية.
- اضغط على **السهم الأيسر (`←`)** أو **`r`**: لحذف الحلقة الحالية وإعادة المحاولة.
- اضغط **Escape (`ESC`)** أو **`q`**: إيقاف، ترميز مقاطع الفيديو، ورفعها.

> [!WARNING]
> `lerobot-record` يضيف تاريخ ووقت الجلسة إلى نهاية `--dataset.repo_id`، لذا يُحفظ `${HF_USER}/so101_dataset_test` باسم `${HF_USER}/so101_dataset_test_YYYYMMDD_HHMMSS`. يمكنك العثور على الاسم الكامل في ملفك الشخصي على Hugging Face أو باستخدام `ls ~/.cache/huggingface/lerobot/${HF_USER}`، ثم استخدمه في أوامر التدريب أدناه. أضف `--dataset.no_stamp=true` للإبقاء على الاسم الدقيق.

### عمق التسجيل

تُسجّل كاميرات Intel RealSense (`type: intelrealsense`) تدفق عمق عند ضبط `use_depth: true`. يتم تكميم العمق إلى رموز 12-بت وتخزينه كفيديو مستقل.

```bash
lerobot-record \
    ... \
    --robot.cameras="{ head: {type: intelrealsense, serial_number_or_name: \"0123456789\", width: 640, height: 480, fps: 30, use_depth: true} }" \
    --dataset.repo_id=${HF_USER}/so101_depth_test \
    --dataset.single_task="put the red brick in a bowl" \
    --dataset.depth_encoder.depth_min=0.01 \
    --dataset.depth_encoder.depth_max=10.0 \
    --dataset.depth_encoder.shift=0.0 \
    --dataset.depth_encoder.use_log=true
```

### معلمات ترميز الفيديو

تُرمَّز تدفقات RGB والعمق بشكل مستقل عبر المفاتيح `--dataset.rgb_encoder.*` و`--dataset.depth_encoder.*`.

```bash
lerobot-record \
    ... \
    --dataset.rgb_encoder.vcodec=h264 \
    --dataset.rgb_encoder.pix_fmt=yuv420p \
    --dataset.rgb_encoder.crf=23 \
    --dataset.depth_encoder.vcodec=hevc \
    --dataset.depth_encoder.extra_options='{"x265-params": "lossless=1"}'
```

### التدريب

يعتمد الأمر على عتادك، فقد يستغرق تدريب السياسة بضع ساعات. هذه هي الطريقة التي تتدرب بها على سياسة `ACT` بسيطة:

```bash
lerobot-train \
    --dataset.repo_id=${HF_USER}/so101_dataset_test_YYYYMMDD_HHMMSS \
    --policy.type=act \
    --output_dir=outputs/train/act_so101_test \
    --job_name=act_so101_test \
    --policy.device=cuda \
    --trackio.enable=true \
    --policy.repo_id=${HF_USER}/policy_test \
    --steps=20000
```

- أنواع السياسات الشائعة: `act`، `diffusion`، `multi_task_dit`، `smolvla`، `pi0`، `pi05`، `pi0_fast`، `groot`، `xvla`. لكل سياسة صفحة خاصة بها تحت **السياسات** في الشريط الجانبي، ويوضح [دليل الحساب والأجهزة](./hardware_guide) أيها يناسب وحدة معالجة الرسوميات لديك.
- الأجهزة: `cuda` (NVIDIA)، `mps` (Apple Silicon)، `cpu`

`--policy.type` ينشئ سياسة جديدة من ذلك النوع ويدربها من الصفر على مجموعة البيانات الخاصة بك (بعض السياسات لا تزال تبدأ من هياكل رؤية أو لغة مُسبقة التدريب، كما هو مُحدد في إعداداتها). ولتدريب نموذج قائم بدلاً من ذلك، مرّر `--policy.path` مع نقطة فحص محلية أو معرف مستودع على Hub: حيث تُقرأ نوع السياسة وإعداداتها منه، لذا لا حاجة إلى `--policy.type`.

```bash
lerobot-train \
    --dataset.repo_id=${HF_USER}/so101_dataset_test_YYYYMMDD_HHMMSS \
    --policy.path=username/the_policy_to_finetune \
    --policy.device=cuda \
    --policy.repo_id=${HF_USER}/policy_finetuned_test \
    --output_dir=outputs/train/finetuned_so101_test \
    --steps=20000
```

لا تملك وحدة معالجة رسومية محلية؟ أضف `--job.target=<flavor>` (مثل `a10g-small`) إلى أيٍّ من الأمرين، وسينفّذ `lerobot-train` المهمة على [Hugging Face Jobs](https://huggingface.co/docs/hub/jobs) بدلاً من ذلك — حيث يقوم برفع مجموعة بيانات محلية فقط نيابةً عنك ودفع النموذج المُدرَّب. لعرض قائمة الأنواع المتاحة، استخدم `hf jobs hardware`. لتتبع مقاييس المهمة، أضف `--trackio.enable=true --trackio.space_id=<user>/<space>`: فمستودع Trackio المحلي الخاص بالمكوّن لا يبقى بعد انتهاء المهمة.

للاستئناف، وجّه `--config_path` إلى نقطة تحقق (checkpoint) وأضف `--resume=true`. يقبل مسارًا محليًا أو معرف مستودع على Hub (حيث يتم جلب أحدث نقطة تحقق)، ويعمل محليًا أو على مهمة (job) عن طريق إضافة `--job.target=<flavor>`:

```bash
lerobot-train --config_path=${HF_USER}/policy_test --resume=true --job.target=a10g-small
```

### الاستدلال

تعني الاستدلال تشغيل السياسة/النموذج المُدرَّب على الروبوت. لهذا الغرض نستخدم `lerobot-rollout`. ستحتاج إلى تقديم مسار إلى سياستك. يمكن أن يكون مسارًا محليًا أو معرف مستودع على Hugging Face، على سبيل المثال `${HF_USER}/policy_test` من أمر التدريب أعلاه. استخدم نفس المنفذ، و`--robot.id`، وإعداد الكاميرا، ووصف المهمة كما عند جمع مجموعة البيانات. يُقاس `--duration` بالثواني؛ وإذا لم يُحدد، تستمر السياسة في العمل حتى توقفها.

> [!TIP]
> في الإصدار v0.5.x وما قبله، لا يوجد `lerobot-rollout` ويحتاج إلى استخدام `lerobot-record` بدلاً منه. مزيد من المعلومات [هنا](https://huggingface.co/docs/lerobot/v0.5.1/en/il_robots#run-inference-and-evaluate-your-policy).

```bash
lerobot-rollout \
    --strategy.type=base \
    --policy.path=${HF_USER}/policy_test \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_follower_arm \
    --robot.cameras="{ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
    --task="put the red brick in a bowl" \
    --duration=60
```

