# الروبوتات

تُنفّذ كل روبوت في LeRobot واجهة `Robot`: الاتصال، قراءة الملاحظة، إرسال الإجراء، والانفصال. كتابة سياسة أو سكربت تسجيل ضد هذه الواجهة تعني أنها تعمل مع أي ذراع مدعومة دون أي تغيير.

هذه الصفحة هي المرجع المولَّد. لتعليمات التوصيل والمعايرة والتشغيل الأول، ابدأ بأدلة الأجهزة — [SO-101](../so101)، [LeKiwi](../lekiwi)، [Hope Jr](../hope_jr)، [Reachy 2](../reachy2)، [OpenArm](../openarm) — أو [Imitation Learning for Robots](../il_robots) للعملية الشاملة من البداية إلى النهاية. أما للروبوتات التي يحافظ عليها المجتمع خارج المجموعة الأساسية، فراجع [Third-Party Robots & Teleoperators](../third_party_robots). ولإضافة روبوت خاص بك، راجع [Bring Your Own Hardware](../integrate_hardware).

## روبوت[[lerobot.robots.Robot]]

الفئة الأساسية المجردة. تنفّذ الفئات الفرعية كل طريقة مذكورة أدناه؛ والعقد الموصوف هنا هو ما يمكن لسياسة أو حلقة تسجيل الاعتماد عليه.

#### lerobot.robots.Robot[[lerobot.robots.Robot]]

```python
lerobot.robots.Robot(config: RobotConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/robot.py#L33)

**المعاملات:**

config_class (RobotConfig) : فئة التهيئة المتوقعة لهذا الروبوت.

name (str) : اسم الروبوت الفريد المستخدم لتحديد نوع هذا الروبوت.

الفئة التجريدية الأساسية لجميع الروبوتات المتوافقة مع LeRobot.

توفر هذه الفئة واجهة موحدة للتفاعل مع الروبوتات المادية. يجب على الفئات الفرعية تنفيذ جميع الطرق والخصائص المجردة لتكون قابلة للاستخدام.

#### اتصال[[lerobot.robots.Robot.connect]]

```python
connect(calibrate: bool = True)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/robot.py#L136)

**المعاملات:**

calibrate (bool) : إذا كانت القيمة True، يتم معايرة الروبوت تلقائيًا بعد الاتصال إذا لم تكن معايرة أو إذا كانت بحاجة إلى معايرة (يعتمد ذلك على العتاد).

قم بإرساء الاتصال مع الروبوت.

#### قطع الاتصال[[lerobot.robots.Robot.disconnect]]

```python
disconnect()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/robot.py#L237)

افصل الاتصال عن الروبوت وأدِّ أي تنظيف ضروري.

#### إعداد[[lerobot.robots.Robot.configure]]

```python
configure()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/robot.py#L202)

قم بتطبيق أي إعدادات لمرة واحدة أو أثناء التشغيل على الروبوت. قد يتضمن ذلك ضبط معاملات المحركات، أو أوضاع التحكم، أو الحالة الأولية.

#### معايرة[[lerobot.robots.Robot.calibrate]]

```python
calibrate()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/robot.py#L153)

قم بضبط الروبوت إذا كان ذلك ممكنًا. وإلا، يجب أن يكون هذا الإجراء بلا تأثير.

يجب أن تجمع هذه الطريقة أي بيانات ضرورية (مثل إزاحات المحركات) وتحديث قاموس :pyattr:`calibration` وفقاً لذلك.

#### get_observation[[lerobot.robots.Robot.get_observation]]

```python
get_observation()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/robot.py#L210)

**يعيد:** `RobotObservation`

قاموس مسطّح يمثل الحالة الحسية الحالية للروبوت. يجب أن يتطابق هيكله مع :pymeth:`observation_features`.

استرجع الملاحظة الحالية من الروبوت.

#### send_action[[lerobot.robots.Robot.send_action]]

```python
send_action(action: dict)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/robot.py#L222)

**المعاملات:**

action (RobotAction) : قاموس يمثل الإجراء المطلوب. يجب أن يتطابق هيكله مع :pymeth:`action_features`.

**يعيد:** `RobotAction`

الإجراء الذي يُرسل فعليًا إلى المحركات، وقد يكون مقصوصًا أو معدّلًا، على سبيل المثال بواسطة حدود الأمان على السرعة.

أرسل أمر إجراء إلى الروبوت.

#### observation_features[[lerobot.robots.Robot.observation_features]]

```python
observation_features()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/robot.py#L100)

قاموس يصف بنية وملاحظات الروبوت وأنواعها. يجب أن تتطابق بنيته (المفاتيح) مع بنية ما يُعاد بواسطة :pymeth:`get_observation`. يجب أن تكون قيم القاموس إما:
- نوع القيمة إذا كانت قيمة بسيطة، مثل `float` لقيمة حسية ذاتية مفردة (موضع/سرعة مفصل)
- مجموعة (tuple) تمثل الشكل إذا كانت القيمة من نوع المصفوفة، مثل `(height, width, channel)` للصور

ملاحظة: يجب أن يكون من الممكن استدعاء هذه الخاصية بغض النظر عما إذا كان الروبوت متصلاً أم لا.

#### action_features[[lerobot.robots.Robot.action_features]]

```python
action_features()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/robot.py#L114)

قاموس يصف بنية وأنواع الإجراءات المتوقعة من الروبوت. يجب أن تتطابق بنيته (المفاتيح) مع بنية ما يُمرر إلى :pymeth:`send_action`. يجب أن تكون قيم القاموس هي نوع القيمة إذا كانت قيمة بسيطة، مثل `float` لقيمة حسية ذاتية مفردة (موضع/سرعة الهدف لمفصل)

ملاحظة: يجب أن يكون من الممكن استدعاء هذه الخاصية بغض النظر عما إذا كان الروبوت متصلاً أم لا.

#### is_connected[[lerobot.robots.Robot.is_connected]]

```python
is_connected()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/robot.py#L127)

ما إذا كان الروبوت متصلاً حاليًا أم لا. إذا كان `False`، فيجب أن يثير استدعاء :pymeth:`get_observation` أو :pymeth:`send_action` خطأً.

#### is_calibrated[[lerobot.robots.Robot.is_calibrated]]

```python
is_calibrated()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/robot.py#L147)

ما إذا كان الروبوت مُعايَراً حاليًا أم لا. يجب أن يكون دائمًا `True` إذا لم ينطبق

## RobotConfig[[lerobot.robots.RobotConfig]]

#### lerobot.robots.RobotConfig[[lerobot.robots.RobotConfig]]

```python
lerobot.robots.RobotConfig(id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/config.py#L23)

## make_robot_from_config[[lerobot.robots.make_robot_from_config]]

#### lerobot.robots.make_robot_from_config[[lerobot.robots.make_robot_from_config]]

```python
lerobot.robots.make_robot_from_config(config: RobotConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/utils.py#L28)

## متابعو SO-100 وSO-101[[lerobot.robots.so_follower.SOFollower]]

`SO100Follower` و`SO101Follower` هما مستعاران لنفس فئة `SOFollower`؛ فالذراعان يختلفان في تكوينهما لا في كود التحكم بهما. وبالمثل، `SO100FollowerConfig` و`SO101FollowerConfig` مستعاران لفئة `SOFollowerRobotConfig`.

#### lerobot.robots.so_follower.SOFollower[[lerobot.robots.so_follower.SOFollower]]

```python
lerobot.robots.so_follower.SOFollower(config: SOFollowerRobotConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/so_follower/so_follower.py#L54)

قاعدة متتبعة عامة لـ SO تنفّذ الوظائف المشتركة لـ SO-100/101/10X. صُممت لتكون فئة فرعية مع `config_class` و`name` لكل نموذج من نماذج العتاد.

#### اتصال[[lerobot.robots.so_follower.SOFollower.connect]]

```python
connect(calibrate: bool = True)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/so_follower/so_follower.py#L110)

نفترض أنه عند وقت الاتصال، يكون الذراع في وضع السكون، ويمكن تعطيل العزم بأمان لإجراء المعايرة.

#### send_action[[lerobot.robots.so_follower.SOFollower.send_action]]

```python
send_action(action: dict)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/so_follower/so_follower.py#L187)

**يعيد:** `RobotAction`

الإجراء المُرسَل إلى المحركات، وقد يكون مقصوصًا.

**يرفع:** ``RobotDeviceNotConnectedError``

- ``RobotDeviceNotConnectedError`` -- إذا لم يكن الروبوت متصلاً.

أمر الذراع بالانتقال إلى تكوين مفصلي مستهدف.

قد يتم اقتطاع مقدار الإجراء النسبي اعتمادًا على معامل الإعداد `max_relative_target`. في هذه الحالة، يختلف الإجراء المُرسَل عن الإجراء الأصلي. وبالتالي، تُرجع هذه الدالة دائمًا الإجراء المُرسَل فعليًا.

#### lerobot.robots.so_follower.SOFollowerRobotConfig[[lerobot.robots.so_follower.SOFollowerRobotConfig]]

```python
lerobot.robots.so_follower.SOFollowerRobotConfig(port: str, disable_torque_on_disconnect: bool = True, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, use_degrees: bool = True, position_p_coefficient: int = 16, position_i_coefficient: int = 0, position_d_coefficient: int = 32, num_read_retries: int = 2, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/so_follower/config_so_follower.py#L59)

## BiSOFollower[[lerobot.robots.bi_so_follower.BiSOFollower]]

متابعان لـ SO يعملان كروبوت ثنائي اليد واحد.

#### lerobot.robots.bi_so_follower.BiSOFollower[[lerobot.robots.bi_so_follower.BiSOFollower]]

```python
lerobot.robots.bi_so_follower.BiSOFollower(config: BiSOFollowerConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/bi_so_follower/bi_so_follower.py#L31)

[ذراعان متتبعان ثنائيتا اليد](https://github.com/TheRobotStudio/SO-ARM100) من تصميم TheRobotStudio

#### lerobot.robots.bi_so_follower.BiSOFollowerConfig[[lerobot.robots.bi_so_follower.BiSOFollowerConfig]]

```python
lerobot.robots.bi_so_follower.BiSOFollowerConfig(left_arm_config: SOFollowerConfig, right_arm_config: SOFollowerConfig, cameras: dict = <factory>, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/bi_so_follower/config_bi_so_follower.py#L27)

فئة التهيئة لروبوتات Bi SO Follower.

## KochFollower[[lerobot.robots.koch_follower.KochFollower]]

#### lerobot.robots.koch_follower.KochFollower[[lerobot.robots.koch_follower.KochFollower]]

```python
lerobot.robots.koch_follower.KochFollower(config: KochFollowerConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/koch_follower/koch_follower.py#L33)

- [Koch v1.0](https://github.com/AlexanderKoch-Koch/low_cost_robot)، مع توسيع من المعصم إلى المرفق وبدونه، طوّره ألكسندر كوخ من [Tau Robotics](https://tau-robotics.com)
- [Koch v1.1](https://github.com/jess-moss/koch-v1-1) الذي طوّره جيس موس

#### اتصال[[lerobot.robots.koch_follower.KochFollower.connect]]

```python
connect(calibrate: bool = True)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/koch_follower/koch_follower.py#L89)

نفترض أنه عند وقت الاتصال، يكون الذراع في وضع السكون، ويمكن تعطيل العزم بأمان لإجراء المعايرة.

#### send_action[[lerobot.robots.koch_follower.KochFollower.send_action]]

```python
send_action(action: dict)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/koch_follower/koch_follower.py#L176)

**المعاملات:**

action (RobotAction) : مواضع الهدف للمحركات.

**يعيد:** `RobotAction`

الإجراء المُرسَل إلى المحركات، وقد يكون مقصوصًا.

أمر الذراع بالانتقال إلى تكوين مفصلي مستهدف.

قد يتم اقتطاع مقدار الإجراء النسبي اعتمادًا على معامل الإعداد `max_relative_target`. في هذه الحالة، يختلف الإجراء المُرسَل عن الإجراء الأصلي. وبالتالي، تُرجع هذه الدالة دائمًا الإجراء المُرسَل فعليًا.

#### lerobot.robots.koch_follower.KochFollowerConfig[[lerobot.robots.koch_follower.KochFollowerConfig]]

```python
lerobot.robots.koch_follower.KochFollowerConfig(port: str, disable_torque_on_disconnect: bool = True, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, use_degrees: bool = False, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/koch_follower/config_koch_follower.py#L24)

## LeKiwi[[lerobot.robots.lekiwi.LeKiwi]]

يعمل `LeKiwi` على الروبوت نفسه. أما `LeKiwiClient` فهو وكيل على جانب المضيف يتواصل معه عبر الشبكة ويعرض نفس واجهة `Robot`.

#### lerobot.robots.lekiwi.LeKiwi[[lerobot.robots.lekiwi.LeKiwi]]

```python
lerobot.robots.lekiwi.LeKiwi(config: LeKiwiConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/lekiwi/lekiwi.py#L36)

يتضمن الروبوت قاعدة متحركة بثلاث عجلات أومني (omniwheel) وذراع متتبعة عن بُعد. يتم توصيل الذراع القائدة محليًا (على الحاسوب المحمول) وتُسجَّل مواضع مفاصلها ثم تُحوَّل إلى الذراع المتتبعة عن بُعد (بعد تطبيق قيد أمان). بالتوازي مع ذلك، يُستخدم التشغيل عن بُعد عبر لوحة المفاتيح لتوليد أوامر سرعة خام للعجلات.

#### send_action[[lerobot.robots.lekiwi.LeKiwi.send_action]]

```python
send_action(action: dict)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/lekiwi/lekiwi.py#L339)

**يعيد:** `RobotAction`

الإجراء المُرسَل إلى المحركات، وقد يكون مقصوصًا.

**يرفع:** ``RobotDeviceNotConnectedError``

- ``RobotDeviceNotConnectedError`` -- إذا لم يكن الروبوت متصلاً.

أمر lekiwi بالانتقال إلى تكوين مفصلي مستهدف.

قد يتم اقتطاع مقدار الإجراء النسبي اعتمادًا على معامل الإعداد `max_relative_target`. في هذه الحالة، يختلف الإجراء المُرسَل عن الإجراء الأصلي. وبالتالي، تُرجع هذه الدالة دائمًا الإجراء المُرسَل فعليًا.

#### lerobot.robots.lekiwi.LeKiwiConfig[[lerobot.robots.lekiwi.LeKiwiConfig]]

```python
lerobot.robots.lekiwi.LeKiwiConfig(port: str = '/dev/ttyACM0', disable_torque_on_disconnect: bool = True, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, use_degrees: bool = True, num_read_retries: int = 2, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/lekiwi/config_lekiwi.py#L47)

#### lerobot.robots.lekiwi.LeKiwiClient[[lerobot.robots.lekiwi.LeKiwiClient]]

```python
lerobot.robots.lekiwi.LeKiwiClient(config: LeKiwiClientConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/lekiwi/lekiwi_client.py#L40)

#### اتصال[[lerobot.robots.lekiwi.LeKiwiClient.connect]]

```python
connect()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/lekiwi/lekiwi_client.py#L129)

ينشئ مقابس ZMQ مع الروبوت المحمول عن بُعد

#### قطع الاتصال[[lerobot.robots.lekiwi.LeKiwiClient.disconnect]]

```python
disconnect()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/lekiwi/lekiwi_client.py#L351)

تنظيف اتصالات ZMQ

#### get_observation[[lerobot.robots.lekiwi.LeKiwiClient.get_observation]]

```python
get_observation()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/lekiwi/lekiwi_client.py#L269)

التقاط الملاحظات من الروبوت عن بُعد: مواضع ذراع المتتبّع الحالية، سرعات العجلات الحالية (المحوّلة إلى سرعات في إطار الجسم: x، y، theta)، وإطار الكاميرا. يستقبل عبر ZMQ، ويحوّل إلى سرعات في إطار الج

#### send_action[[lerobot.robots.lekiwi.LeKiwiClient.send_action]]

```python
send_action(action: dict)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/lekiwi/lekiwi_client.py#L323)

**المعاملات:**

action (RobotAction) : مصفوفة تحتوي على المواقع المستهدفة للمحركات.

**يعيد:** `np.ndarray`

الإجراء المُرسَل إلى المحركات، وقد يكون مقصوصًا.

**يرفع:** ``RobotDeviceNotConnectedError``

- ``RobotDeviceNotConnectedError`` -- إذا لم يكن الروبوت متصلاً.

أمر lekiwi بالانتقال إلى تكوين مفصلي مستهدف. يترجم إلى فضاء المحركات + يرسل عبر ZMQ

#### lerobot.robots.lekiwi.LeKiwiClientConfig[[lerobot.robots.lekiwi.LeKiwiClientConfig]]

```python
lerobot.robots.lekiwi.LeKiwiClientConfig(remote_ip: str, port_zmq_cmd: int = 5555, port_zmq_observations: int = 5556, teleop_keys: dict = <factory>, cameras: dict = <factory>, polling_timeout_ms: int = 15, connect_timeout_s: int = 5, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/lekiwi/config_lekiwi.py#L87)

## OpenArmFollower[[lerobot.robots.openarm_follower.OpenArmFollower]]

#### lerobot.robots.openarm_follower.OpenArmFollower[[lerobot.robots.openarm_follower.OpenArmFollower]]

```python
lerobot.robots.openarm_follower.OpenArmFollower(config: OpenArmFollowerConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/openarm_follower/openarm_follower.py#L40)

روبوت OpenArms Follower الذي يستخدم اتصال حافلة CAN للتحكم في ذراع بـ 7 درجات حرية مزودة بمقبض. تستخدم الذراع محركات Damiao في وضع التحكم MIT.

#### معايرة[[lerobot.robots.openarm_follower.OpenArmFollower.calibrate]]

```python
calibrate()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/openarm_follower/openarm_follower.py#L164)

قم بإجراء عملية المعايرة لروبوت OpenArms.

إجراء المعايرة:
1. تعطيل العزم
2. اطلب من المستخدم وضع الذراعين في وضع التعليق مع إغلاق الممسكات
3. اضبط هذا كموضع الصفر
4. تسجيل مدى الحركة لكل مفصل
5. حفظ المعايرة

#### إعداد[[lerobot.robots.openarm_follower.OpenArmFollower.configure]]

```python
configure()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/openarm_follower/openarm_follower.py#L215)

قم بإعداد المحركات بالإعدادات المناسبة.

#### اتصال[[lerobot.robots.openarm_follower.OpenArmFollower.connect]]

```python
connect(calibrate: bool = True)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/openarm_follower/openarm_follower.py#L130)

اتصل بالروبوت وقم بالمعايرة اختيارياً.

نفترض أنه عند وقت الاتصال، تكون الأذرع في وضع راحة آمن، ويمكن تعطيل العزم بأمان لتشغيل المعايرة إذا لزم الأمر.

#### قطع الاتصال[[lerobot.robots.openarm_follower.OpenArmFollower.disconnect]]

```python
disconnect()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/openarm_follower/openarm_follower.py#L345)

فصل الاتصال عن الروبوت.

#### get_observation[[lerobot.robots.openarm_follower.OpenArmFollower.get_observation]]

```python
get_observation()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/openarm_follower/openarm_follower.py#L226)

احصل على الملاحظة الحالية من الروبوت بما في ذلك الموضع والسرعة والعزم.

يقوم بقراءة جميع حالات المحركات (الموضع/السرعة/العزم) في دورة تحديث CAN واحدة بدلاً من ثلاث قراءات منفصلة.

#### send_action[[lerobot.robots.openarm_follower.OpenArmFollower.send_action]]

```python
send_action(action: dict, custom_kp: dict[str, float] | None = None, custom_kd: dict[str, float] | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/openarm_follower/openarm_follower.py#L266)

**المعاملات:**

action : قاموس بمواقع المحركات (مثل "joint_1.pos", "joint_2.pos")

custom_kp : مكاسب kp مخصصة اختيارية لكل محرك (على سبيل المثال، {"joint_1": 120.0, "joint_2": 150.0})

custom_kd : مكاسب kd مخصصة اختيارية لكل محرك (على سبيل المثال، {"joint_1": 1.5, "joint_2": 2.0})

**يعيد:**

الإجراء المُرسَل فعليًا (قد يكون مقصوصًا)

إرسال أمر إجراء إلى الروبوت.

قد يتم اقتطاع حجم الإجراء بناءً على حدود الأمان.

#### lerobot.robots.openarm_follower.OpenArmFollowerConfig[[lerobot.robots.openarm_follower.OpenArmFollowerConfig]]

```python
lerobot.robots.openarm_follower.OpenArmFollowerConfig(port: str, side: str | None = None, can_interface: str = 'socketcan', use_can_fd: bool = True, can_bitrate: int = 1000000, can_data_bitrate: int = 5000000, disable_torque_on_disconnect: bool = True, use_velocity_and_torque: bool = False, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, motor_config: dict = <factory>, position_kp: list = <factory>, position_kd: list = <factory>, joint_limits: dict = <factory>, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/openarm_follower/config_openarm_follower.py#L125)

## BiOpenArmFollower[[lerobot.robots.bi_openarm_follower.BiOpenArmFollower]]

#### lerobot.robots.bi_openarm_follower.BiOpenArmFollower[[lerobot.robots.bi_openarm_follower.BiOpenArmFollower]]

```python
lerobot.robots.bi_openarm_follower.BiOpenArmFollower(config: BiOpenArmFollowerConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/bi_openarm_follower/bi_openarm_follower.py#L31)

ذراع المتابعة ليدوي OpenArm

#### lerobot.robots.bi_openarm_follower.BiOpenArmFollowerConfig[[lerobot.robots.bi_openarm_follower.BiOpenArmFollowerConfig]]

```python
lerobot.robots.bi_openarm_follower.BiOpenArmFollowerConfig(id: str | None = 'bi_openarm_follower', calibration_dir: pathlib.Path | None = None, left_arm_config: OpenArmFollowerConfigBase, right_arm_config: OpenArmFollowerConfigBase, cameras: dict = <factory>)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/bi_openarm_follower/config_bi_openarm_follower.py#L27)

فئة التهيئة لروبوتات Bi OpenArm Follower.

## OmxFollower[[lerobot.robots.omx_follower.OmxFollower]]

#### lerobot.robots.omx_follower.OmxFollower[[lerobot.robots.omx_follower.OmxFollower]]

```python
lerobot.robots.omx_follower.OmxFollower(config: OmxFollowerConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/omx_follower/omx_follower.py#L33)

- [OMX](https://github.com/ROBOTIS-GIT/open_manipulator)، التوسعة، طوّرها Woojin Wie و Junha Cha من [ROBOTIS](https://ai.robotis.com/)

#### اتصال[[lerobot.robots.omx_follower.OmxFollower.connect]]

```python
connect(calibrate: bool = True)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/omx_follower/omx_follower.py#L89)

بالنسبة لروبوتات OMX التي تأتي مُعايرة مسبقًا:
- إذا لم تتطابق المعايرة الافتراضية من الحزمة مع المحركات، اقرأ من المحركات واحفظ
- يتيح ذلك استخدام روبوتات مُعايرة مسبقًا دون الحاجة إلى معايرة يدوية
- إذا لم يوجد ملف معايرة، استخدم القيم الافتراضية من المصنع (homing_offset=0, range_min=0, range_max=4095)

#### send_action[[lerobot.robots.omx_follower.OmxFollower.send_action]]

```python
send_action(action: dict)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/omx_follower/omx_follower.py#L190)

**المعاملات:**

action (RobotAction) : مواضع الهدف للمحركات.

**يعيد:** `RobotAction`

الإجراء المُرسَل إلى المحركات، وقد يكون مقصوصًا.

أمر الذراع بالانتقال إلى تكوين مفصلي مستهدف.

قد يتم اقتطاع مقدار الإجراء النسبي اعتمادًا على معامل الإعداد `max_relative_target`. في هذه الحالة، يختلف الإجراء المُرسَل عن الإجراء الأصلي. وبالتالي، تُرجع هذه الدالة دائمًا الإجراء المُرسَل فعليًا.

#### lerobot.robots.omx_follower.OmxFollowerConfig[[lerobot.robots.omx_follower.OmxFollowerConfig]]

```python
lerobot.robots.omx_follower.OmxFollowerConfig(port: str, disable_torque_on_disconnect: bool = True, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, use_degrees: bool = False, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/omx_follower/config_omx_follower.py#L24)

## Reachy2Robot[[lerobot.robots.reachy2.Reachy2Robot]]

#### lerobot.robots.reachy2.Reachy2Robot[[lerobot.robots.reachy2.Reachy2Robot]]

```python
lerobot.robots.reachy2.Reachy2Robot(config: Reachy2RobotConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/reachy2/robot_reachy2.py#L75)

[Reachy 2](https://www.pollen-robotics.com/reachy/) من Pollen Robotics.

#### lerobot.robots.reachy2.Reachy2RobotConfig[[lerobot.robots.reachy2.Reachy2RobotConfig]]

```python
lerobot.robots.reachy2.Reachy2RobotConfig(max_relative_target: float | None = None, ip_address: str | None = 'localhost', port: int = 50065, disable_torque_on_disconnect: bool = False, use_external_commands: bool = False, with_mobile_base: bool = True, with_l_arm: bool = True, with_r_arm: bool = True, with_neck: bool = True, with_antennas: bool = True, with_left_teleop_camera: bool = False, with_right_teleop_camera: bool = False, with_torso_camera: bool = False, camera_width: int = 640, camera_height: int = 480, cameras: dict = <factory>, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/reachy2/configuration_reachy2.py#L25)

## UnitreeG1[[lerobot.robots.unitree_g1.UnitreeG1]]

#### lerobot.robots.unitree_g1.UnitreeG1[[lerobot.robots.unitree_g1.UnitreeG1]]

```python
lerobot.robots.unitree_g1.UnitreeG1(config: UnitreeG1Config)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/unitree_g1/unitree_g1.py#L155)

#### lerobot.robots.unitree_g1.UnitreeG1Config[[lerobot.robots.unitree_g1.UnitreeG1Config]]

```python
lerobot.robots.unitree_g1.UnitreeG1Config(kp: list[float] | None = None, kd: list[float] | None = None, default_positions: list = <factory>, control_dt: float = 0.004, is_simulation: bool = True, end_effector: G1EndEffector = <G1EndEffector.DEX1: 'dex1'>, sim_publish_images: bool = True, sim_camera_port: int = 5555, sim_onscreen: bool | None = None, robot_ip: str = '192.168.123.164', cameras: dict = <factory>, gravity_compensation: bool = False, controller: str | None = None, embodiment: str = 'g1_29', id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/unitree_g1/config_unitree_g1.py#L30)

## Hope Jr[[lerobot.robots.hope_jr.HopeJrArm]]

يُعرض الروبوت humanoid Hope Jr كروبوتين مستقلين، هما ذراع ويد.

#### lerobot.robots.hope_jr.HopeJrArm[[lerobot.robots.hope_jr.HopeJrArm]]

```python
lerobot.robots.hope_jr.HopeJrArm(config: HopeJrArmConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/hope_jr/hope_jr_arm.py#L34)

#### اتصال[[lerobot.robots.hope_jr.HopeJrArm.connect]]

```python
connect(calibrate: bool = True)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/hope_jr/hope_jr_arm.py#L88)

نفترض أنه عند وقت الاتصال، يكون الذراع في وضع السكون، ويمكن تعطيل العزم بأمان لإجراء المعايرة.

#### lerobot.robots.hope_jr.HopeJrArmConfig[[lerobot.robots.hope_jr.HopeJrArmConfig]]

```python
lerobot.robots.hope_jr.HopeJrArmConfig(port: str, disable_torque_on_disconnect: bool = True, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/hope_jr/config_hope_jr.py#L42)

#### lerobot.robots.hope_jr.HopeJrHand[[lerobot.robots.hope_jr.HopeJrHand]]

```python
lerobot.robots.hope_jr.HopeJrHand(config: HopeJrHandConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/hope_jr/hope_jr_hand.py#L58)

#### lerobot.robots.hope_jr.HopeJrHandConfig[[lerobot.robots.hope_jr.HopeJrHandConfig]]

```python
lerobot.robots.hope_jr.HopeJrHandConfig(port: str, side: str, disable_torque_on_disconnect: bool = True, cameras: dict = <factory>, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/hope_jr/config_hope_jr.py#L26)

## RebotB601Follower[[lerobot.robots.rebot_b601_follower.RebotB601Follower]]

#### lerobot.robots.rebot_b601_follower.RebotB601Follower[[lerobot.robots.rebot_b601_follower.RebotB601Follower]]

```python
lerobot.robots.rebot_b601_follower.RebotB601Follower(config: RebotB601FollowerRobotConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/rebot_b601_follower/rebot_b601_follower.py#L62)

ذراع المتتبع reBot B601 من Seeed Studio (6 درجات حرية + ملقط، محركات CAN).

يتم التعامل مع اتصال المحركات بواسطة حزمة `motorbridge` عبر ناقل CAN، سواء عبر جسر Damiao التسلسلي أو عبر نقل CAN الأصلي الخاص بـ MotorBridge.

#### إعداد[[lerobot.robots.rebot_b601_follower.RebotB601Follower.configure]]

```python
configure()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/rebot_b601_follower/rebot_b601_follower.py#L224)

اضبط وضع التحكم لكل محرك قبل تفعيل العزم.

#### disable_torque[[lerobot.robots.rebot_b601_follower.RebotB601Follower.disable_torque]]

```python
disable_torque()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/rebot_b601_follower/rebot_b601_follower.py#L245)

تعطيل عزم المحرك حتى يمكن تحريك الذراع يدويًا (تصحيح أخطاء للقراءة فقط).

#### قطع الاتصال[[lerobot.robots.rebot_b601_follower.RebotB601Follower.disconnect]]

```python
disconnect()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/rebot_b601_follower/rebot_b601_follower.py#L444)

افصل المحركات والكاميرات عن الروبوت.

#### send_action[[lerobot.robots.rebot_b601_follower.RebotB601Follower.send_action]]

```python
send_action(action: dict)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/rebot_b601_follower/rebot_b601_follower.py#L313)

أمر الذراع بالانتقال إلى تكوين مفصلي مستهدف.

تُعبَّر المواضع بالدرجات. قد يتم اقتطاع مقدار الإجراء النسبي اعتمادًا على `max_relative_target`، لذا يُعاد دائمًا الإجراء المُرسَل فعليًا.

#### lerobot.robots.rebot_b601_follower.RebotB601FollowerRobotConfig[[lerobot.robots.rebot_b601_follower.RebotB601FollowerRobotConfig]]

```python
lerobot.robots.rebot_b601_follower.RebotB601FollowerRobotConfig(port: str, motor_family: MotorFamily = <MotorFamily.DM: 'dm'>, can_adapter: str | None = None, dm_serial_baud: int = 921600, disable_torque_on_disconnect: bool = True, max_relative_target: float | dict[str, float] | None = None, cameras: dict = <factory>, motor_can_ids: dict[str, tuple[int, int]] | None = None, control_mode: ArmControlMode = <ArmControlMode.MIT: 'mit'>, gripper_control_mode: lerobot.robots.rebot_b601_follower.motor_family.GripperControlMode | None = None, mit_kp: float | dict[str, float] | None = None, mit_kd: float | dict[str, float] | None = None, pos_vel_velocity: float | dict[str, float] | None = None, gripper_torque_ratio: float | None = None, gripper_torque_limit: float | None = None, gripper_hold_torque_limit: float | None = None, joint_limits: dict[str, tuple[float, float]] | None = None, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/rebot_b601_follower/config_rebot_b601_follower.py#L119)

إعداد مسجّل لروبوت المتبوع reBot B601.

## BiRebotB601Follower[[lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower]]

#### lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower[[lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower]]

```python
lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower(config: BiRebotB601FollowerConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/bi_rebot_b601_follower/bi_rebot_b601_follower.py#L28)

متتبع ثنائي اليد من Seeed Studio، نموذج reBot B601.

يجمع بين مثيلين من `RebotB601Follower` لكل ذراع على حدة. وتُضاف بادئة `left_` / `right_` إلى مفاتيح الملاحظة والإجراء الخاصة بكل ذراع.

#### lerobot.robots.bi_rebot_b601_follower.BiRebotB601FollowerConfig[[lerobot.robots.bi_rebot_b601_follower.BiRebotB601FollowerConfig]]

```python
lerobot.robots.bi_rebot_b601_follower.BiRebotB601FollowerConfig(left_arm_config: RebotB601FollowerConfig, right_arm_config: RebotB601FollowerConfig, cameras: dict = <factory>, id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/bi_rebot_b601_follower/config_bi_rebot_b601_follower.py#L27)

فئة التهيئة للروبوت المتبوع ثنائي اليد bimanual reBot B601.

## EarthRoverMiniPlus[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus]]

#### lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus]]

```python
lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus(config: EarthRoverMiniPlusConfig)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L73)

**المعاملات:**

config : تكوين الروبوت

sdk_base_url : عنوان URL الأساسي لخادم Frodobots SDK، مأخوذ من `config.sdk_url` (الافتراضي: http://localhost:8000)

روبوت EarthRover Mini Plus يتم التحكم فيه عبر واجهة برمجة التطبيقات HTTP الخاصة بـ Frodobots SDK.

يستخدم هذا الروبوت التحكم السحابي عبر Frodobots SDK بدلاً من الاتصال المباشر بالأجهزة. يتم بث الكاميرات عبر WebRTC من خلال سحابة Agora، وتُرسل أوامر التحكم عبر طلبات HTTP POST.

يدعم الروبوت:
- كاميرتان (أمامية وخلفية) يتم الوصول إليهما عبر نقاط نهاية HTTP في SDK
- التحكم في السرعة الخطية والزاوية
- تقنيات قياس البطارية والاتجاه

#### معايرة[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.calibrate]]

```python
calibrate()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L153)

لا حاجة إلى المعايرة للروبوت القائم على SDK.

#### إعداد[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.configure]]

```python
configure()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L166)

Configuration of the robot (no-op for SDK-based robot).

#### اتصال[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.connect]]

```python
connect(calibrate: bool = True)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L124)

**المعاملات:**

calibrate : غير مستخدم للروبوتات القائمة على SDK (يُحفظ من أجل توافق الواجهة البرمجية)

**يرفع:** ``DeviceAlreadyConnectedError`` أو ``DeviceNotConnectedError``

- ``DeviceAlreadyConnectedError`` -- إذا كان الروبوت متصلاً بالفعل
- ``DeviceNotConnectedError`` -- إذا تعذّر الاتصال بخادم SDK

الاتصال بالروبوت عبر Frodobots SDK.

#### قطع الاتصال[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.disconnect]]

```python
disconnect()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L366)

**يرفع:** ``DeviceNotConnectedError``

- ``DeviceNotConnectedError`` -- إذا لم يكن الروبوت متصلاً

فصل الاتصال عن الروبوت.

يوقف الروبوت ويغلق الاتصال بـ SDK.

#### get_observation[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.get_observation]]

```python
get_observation()
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L248)

**يعيد:** `RobotObservation`

ملاحظة تحتوي على:
- front: صورة الكاميرا الأمامية (480، 640، 3) بتنسيق RGB
- rear: صورة الكاميرا الخلفية (480، 640، 3) بتنسيق RGB
- speed: float - السرعة الحالية (قيمة SDK الخام)
- battery_level: float - مستوى البطارية (0-100)
- orientation: float - اتجاه الروبوت بالدرجات
- gps_latitude: float - إحداثي خط العرض بنظام تحديد المواقع العالمي (GPS)
- gps_longitude: float - إحداثي خط الطول بنظام تحديد المواقع العالمي (GPS)
- gps_signal: float - قوة إشارة GPS (نسبة مئوية)
- signal_level: float - مستوى إشارة الشبكة (0-5)
- vibration: float - قراءة مستشعر الاهتزاز
- lamp: float - حالة المصباح (0=إيقاف، 1=تشغيل)
- accelerometer_x/y/z: float - محاور مقياس التسارع (قيمة SDK الخام)
- gyroscope_x/y/z: float - محاور الجيروسكوب (قيمة SDK الخام)
- magnetometer_filtered_x/y/z: float - محاور مقياس المغناطيسية (قيمة SDK الخام)
- wheel_rpm_0/1/2/3: float - دورات العجلة

**يرفع:** ``DeviceNotConnectedError``

- ``DeviceNotConnectedError`` -- إذا لم يكن الروبوت متصلاً

احصل على ملاحظة الروبوت الحالية من SDK.

تُسترجع إطارات الكاميرا من نقاط نهاية SDK /v2/front و/v2/rear. يتم فك ترميز الإطارات من base64 وتحويلها من تنسيق BGR إلى تنسيق RGB. تُسترجع بيانات التيليمتري للروبوت من نقطة النهاية /data. تحتوي مصفوفات المستشعرات (المقاييس التسارعية، والجيروسكوبات، والمقاييس المغناطيسية، ومعدلات الدوران) كلٌّ منها على إدخالات من الشكل [values..., timestamp]؛ حيث يُستخدم أحدث قراءة من كل مصفوفة.

ملاحظة: يتم استرجاع إطارات الكاميرا من نقاط نهاية SDK /v2/front و/v2/rear. يتم فك ترميز الإطارات من base64 وتحويلها من صيغة BGR إلى صيغة RGB. يتم استرجاع بيانات التيليمتري الخاصة بالروبوت من نقطة النهاية /data. جميع قيم SDK مُعايرة إلى النطاقات المناسبة لتسجيل مجموعة البيانات.

#### send_action[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus.send_action]]

```python
send_action(action: dict)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/earthrover_mini_plus/robot_earthrover_mini_plus.py#L334)

**المعاملات:**

action : قاموس الإجراء بمفاتيح: - linear_velocity: السرعة الخطية المستهدفة (-1 إلى 1) - angular_velocity: السرعة الزاوية المستهدفة (-1 إلى 1)

**يعيد:** `RobotAction`

الإجراء الذي تم إرساله (يطابق مفاتيح action_features)

**يرفع:** ``DeviceNotConnectedError``

- ``DeviceNotConnectedError`` -- إذا لم يكن الروبوت متصلاً

إرسال الإجراء إلى الروبوت عبر SDK.

ملاحظة: تُرسل الإجراءات إلى SDK عبر نقطة النهاية POST /control. يتوقع SDK أوامر ضمن النطاق [-1, 1].

#### lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlusConfig[[lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlusConfig]]

```python
lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlusConfig(sdk_url: str = 'http://localhost:8000', id: str | None = None, calibration_dir: pathlib.Path | None = None)
```

[المصدر](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/earthrover_mini_plus/config_earthrover_mini_plus.py#L25)

**المعاملات:**

sdk_url : عنوان URL لخادم Frodobots SDK (الافتراضي: http://localhost:8000)

إعدادات روبوت EarthRover Mini Plus باستخدام Frodobots SDK.

يستخدم هذا الروبوت التحكم عبر السحابة من خلال واجهة برمجة التطبيقات HTTP الخاصة بـ Frodobots SDK. يتم الوصول إلى إطارات الكاميرا مباشرةً عبر نقاط النهاية HTTP في الـ SDK.

