LeRobot documentation
الروبوتات
الروبوتات
تُنفّذ كل روبوت في LeRobot واجهة Robot: الاتصال، قراءة الملاحظة، إرسال الإجراء،
والانفصال. كتابة سياسة أو سكربت تسجيل ضد تلك الواجهة تعني أنها تعمل مع أي ذراع مدعومة دون أي تغيير.
هذه الصفحة هي المرجع المولّد. لتعليمات التوصيل، المعايرة، والتشغيل الأول، ابدأ بأدلة الأجهزة — SO-101، LeKiwi، Hope Jr، Reachy 2، OpenArm — أو Imitation Learning for Robots للعملية الشاملة من البداية إلى النهاية. وللروبوتات التي يحافظ عليها المجتمع خارج المجموعة الأساسية، راجع Third-Party Robots & Teleoperators. لإضافة روبوت خاص بك، راجع Bring Your Own Hardware.
روبوت
الفئة الأساسية المجردة. تنفّذ الفئات الفرعية كل طريقة مذكورة أدناه؛ والعقد الموصوف هنا هو ما يمكن لسياسة أو حلقة تسجيل الاعتماد عليه.
فئة lerobot.robots.Robot
< source >( config: RobotConfig )
الفئة التجريدية الأساسية لجميع الروبوتات المتوافقة مع LeRobot.
توفر هذه الفئة واجهة موحدة للتفاعل مع الروبوتات المادية. يجب على الفئات الفرعية تنفيذ جميع الطرق والخصائص المجردة لتكون قابلة للاستخدام.
اتصال
< source >( calibrate: bool = True )
قم بإرساء الاتصال مع الروبوت.
افصل الاتصال عن الروبوت وأدِّ أي تنظيف ضروري.
تطبيق أي تكوين لمرة واحدة أو وقت تشغيل على الروبوت. قد يتضمن ذلك ضبط معاملات المحركات، أو أوضاع التحكم، أو الحالة الأولية.
قم بضبط الروبوت إذا كان ذلك ممكنًا. وإلا، يجب أن يكون هذا الإجراء بلا تأثير.
يجب أن تجمع هذه الطريقة أي بيانات ضرورية (مثل إزاحات المحركات) وتحديث قاموس
:pyattr:calibration وفقاً لذلك.
get_observation
< source >( ) → RobotObservation
يعيد
RobotObservation
قاموس مسطّح يمثل الحالة الحسية الحالية للروبوت. يجب أن يتطابق هيكله مع :pymeth:observation_features.
استرجع الملاحظة الحالية من الروبوت.
send_action
< source >( action: dict ) → RobotAction
أرسل أمر إجراء إلى الروبوت.
قاموس يصف بنية وملاحظات الروبوت وأنواعها.
يجب أن تتطابق بنيته (المفاتيح) مع بنية ما يُعاد بواسطة :pymeth:get_observation.
يجب أن تكون قيم القاموس إما:
- نوع القيمة إذا كانت قيمة بسيطة، مثل
floatلقيمة حسية ذاتية مفردة (موضع/سرعة مفصل) - مجموعة (tuple) تمثل الشكل إذا كانت القيمة من نوع المصفوفة، مثل
(height, width, channel)للصور
ملاحظة: يجب أن يكون من الممكن استدعاء هذه الخاصية بغض النظر عما إذا كان الروبوت متصلاً أم لا.
قاموس يصف بنية وأنواع الإجراءات المتوقعة من الروبوت. يجب أن تتطابق بنيته (المفاتيح) مع بنية ما يُمرَّر إلى :pymeth:send_action. يجب أن تكون قيم القاموس هي نوع القيمة إذا كانت قيمة بسيطة، مثل float لقيمة إدراكية ذاتية مفردة (موضع/سرعة الهدف لمفصل)
ملاحظة: يجب أن يكون من الممكن استدعاء هذه الخاصية بغض النظر عما إذا كان الروبوت متصلاً أم لا.
ما إذا كان الروبوت متصلاً حاليًا أم لا. إذا كان False، فيجب أن يثير استدعاء :pymeth:get_observation أو
:pymeth:send_action خطأً.
ما إذا كان الروبوت مُعايَراً حاليًا أم لا. يجب أن يكون دائمًا True إذا لم ينطبق
RobotConfig
فئة lerobot.robots.RobotConfig
< source >( id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
make_robot_from_config
متابعو SO-100 وSO-101
SO100Follower وSO101Follower هما مستعاران لنفس فئة SOFollower؛ حيث تختلف الذراعان في تكوينهما وليس في كود التحكم بهما. وبالمثل، SO100FollowerConfig وSO101FollowerConfig مستعاران لفئة SOFollowerRobotConfig.
قاعدة متتبعة عامة لـ SO تنفّذ الوظائف المشتركة لـ SO-100/101/10X.
صُمّمت لتكون فئة فرعية مع config_class وname لكل نموذج من نماذج العتاد.
نفترض أنه عند وقت الاتصال، يكون الذراع في وضع السكون، ويمكن تعطيل العزم بأمان لإجراء المعايرة.
send_action
< source >( action: dict ) → RobotAction
يعيد
RobotAction
الإجراء المُرسَل إلى المحركات، وقد يكون مقصوصًا.
يرفع
RobotDeviceNotConnectedError
RobotDeviceNotConnectedError— إذا لم يكن الروبوت متصلاً.
أمر الذراع بالانتقال إلى تكوين مفصلي مستهدف.
قد يتم اقتطاع مقدار الإجراء النسبي اعتمادًا على معامل الإعداد max_relative_target. في هذه الحالة، يختلف الإجراء المُرسَل عن الإجراء الأصلي.
لذلك، تُرجع هذه الدالة دائمًا الإجراء المُرسَل فعليًا.
فئة lerobot.robots.so_follower.SOFollowerRobotConfig
< source >( port: strdisable_torque_on_disconnect: bool = Truemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>use_degrees: bool = Trueposition_p_coefficient: int = 16position_i_coefficient: int = 0position_d_coefficient: int = 32num_read_retries: int = 2id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
BiSOFollower
متابعان لـ SO يعملان كروبوت ثنائي اليد واحد.
ذراعان متتبعان ثنائيتا اليد من تصميم TheRobotStudio
فئة lerobot.robots.bi_so_follower.BiSOFollowerConfig
< source >( left_arm_config: SOFollowerConfigright_arm_config: SOFollowerConfigcameras: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
فئة التهيئة لروبوتات Bi SO Follower.
KochFollower
- Koch v1.0، مع توسيع من المعصم إلى المرفق وبدونه، طوّره ألكسندر كوخ من Tau Robotics
- Koch v1.1 الذي طوّره جيس موس
نفترض أنه عند وقت الاتصال، يكون الذراع في وضع السكون، ويمكن تعطيل العزم بأمان لإجراء المعايرة.
send_action
< source >( action: dict ) → RobotAction
أمر الذراع بالانتقال إلى تكوين مفصلي مستهدف.
قد يتم اقتطاع مقدار الإجراء النسبي اعتمادًا على معامل الإعداد max_relative_target. في هذه الحالة، يختلف الإجراء المُرسَل عن الإجراء الأصلي.
لذلك، تُرجع هذه الدالة دائمًا الإجراء المُرسَل فعليًا.
فئة lerobot.robots.koch_follower.KochFollowerConfig
< source >( port: strdisable_torque_on_disconnect: bool = Truemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>use_degrees: bool = Falseid: str | None = Nonecalibration_dir: pathlib.Path | None = None )
LeKiwi
يعمل LeKiwi على الروبوت نفسه. أما LeKiwiClient فهو وكيل على جانب المضيف يتواصل معه عبر الشبكة
ويعرض نفس واجهة Robot.
يتضمن الروبوت قاعدة متحركة بثلاث عجلات أومني وذراع متتبعة عن بُعد. تُوصَل الذراع القائدة محليًا (على الحاسوب المحمول) وتُسجَّل مواضع مفاصلها ثم تُرسل إلى الذراع المتتبعة عن بُعد (بعد تطبيق قيد أمان). بالتوازي، يُستخدم التشغيل عن بُعد عبر لوحة المفاتيح لتوليد أوامر سرعة خام للعجلات.
send_action
< source >( action: dict ) → RobotAction
يعيد
RobotAction
الإجراء المُرسَل إلى المحركات، وقد يكون مقصوصًا.
يرفع
RobotDeviceNotConnectedError
RobotDeviceNotConnectedError— إذا لم يكن الروبوت متصلاً.
أمر lekiwi بالانتقال إلى تكوين مفصلي مستهدف.
قد يتم اقتطاع مقدار الإجراء النسبي اعتمادًا على معامل الإعداد max_relative_target. في هذه الحالة، يختلف الإجراء المُرسَل عن الإجراء الأصلي.
لذلك، تُرجع هذه الدالة دائمًا الإجراء المُرسَل فعليًا.
فئة lerobot.robots.lekiwi.LeKiwiConfig
< source >( port: str = '/dev/ttyACM0'disable_torque_on_disconnect: bool = Truemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>use_degrees: bool = Truenum_read_retries: int = 2id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
ينشئ مقابس ZMQ مع الروبوت المحمول عن بُعد
تنظيف اتصالات ZMQ
التقاط الملاحظات من الروبوت عن بُعد: مواضع ذراع المتتبّع الحالية، سرعات العجلات الحالية (المحوّلة إلى سرعات إطار الجسم: x، y، theta)، وإطار الكاميرا. يستقبل عبر ZMQ، ويحوّل إلى سرعات
send_action
< source >( action: dict ) → np.ndarray
أمر lekiwi بالانتقال إلى تكوين مفصلي مستهدف. يترجم إلى فضاء المحركات + يرسل عبر ZMQ
فئة lerobot.robots.lekiwi.LeKiwiClientConfig
< source >( remote_ip: strport_zmq_cmd: int = 5555port_zmq_observations: int = 5556teleop_keys: dict = <factory>cameras: dict = <factory>polling_timeout_ms: int = 15connect_timeout_s: int = 5id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
OpenArmFollower
روبوت OpenArms Follower الذي يستخدم اتصال حافلة CAN للتحكم في ذراع بـ 7 درجات حرية مزودة بمقبض. تستخدم الذراع محركات Damiao في وضع التحكم MIT.
قم بإجراء عملية المعايرة لروبوت OpenArms.
إجراء المعايرة:
- تعطيل العزم
- اطلب من المستخدم وضع الذراعين في وضع التعليق مع إغلاق الممسكات
- اضبط هذا كموضع الصفر
- تسجيل مدى الحركة لكل مفصل
- حفظ المعايرة
قم بإعداد المحركات بالإعدادات المناسبة.
اتصل بالروبوت وقم بالمعايرة اختيارياً.
نفترض أنه عند وقت الاتصال، تكون الأذرع في وضع راحة آمن، ويمكن تعطيل العزم بأمان لتشغيل المعايرة إذا لزم الأمر.
فصل الاتصال عن الروبوت.
احصل على الملاحظة الحالية من الروبوت بما في ذلك الموضع والسرعة والعزم.
يقوم بقراءة جميع حالات المحركات (الموضع/السرعة/العزم) في دورة تحديث CAN واحدة بدلاً من ثلاث قراءات منفصلة.
send_action
< source >( action: dictcustom_kp: dict[str, float] | None = Nonecustom_kd: dict[str, float] | None = None )
إرسال أمر إجراء إلى الروبوت.
قد يتم اقتطاع حجم الإجراء بناءً على حدود الأمان.
فئة lerobot.robots.openarm_follower.OpenArmFollowerConfig
< source >( port: strside: str | None = Nonecan_interface: str = 'socketcan'use_can_fd: bool = Truecan_bitrate: int = 1000000can_data_bitrate: int = 5000000disable_torque_on_disconnect: bool = Trueuse_velocity_and_torque: bool = Falsemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>motor_config: dict = <factory>position_kp: list = <factory>position_kd: list = <factory>joint_limits: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
BiOpenArmFollower
فئة lerobot.robots.bi_openarm_follower.BiOpenArmFollower
< source >( config: BiOpenArmFollowerConfig )
ذراع المتابعة ليدوي OpenArm
فئة lerobot.robots.bi_openarm_follower.BiOpenArmFollowerConfig
< source >( id: str | None = 'bi_openarm_follower'calibration_dir: pathlib.Path | None = Noneleft_arm_config: OpenArmFollowerConfigBaseright_arm_config: OpenArmFollowerConfigBasecameras: dict = <factory> )
فئة التهيئة لروبوتات Bi OpenArm Follower.
OmxFollower
بالنسبة لروبوتات OMX التي تأتي مُعايرة مسبقًا:
- إذا لم تتطابق المعايرة الافتراضية من الحزمة مع المحركات، اقرأ من المحركات واحفظ
- يتيح ذلك استخدام روبوتات مُعايرة مسبقًا دون الحاجة إلى معايرة يدوية
- إذا لم يوجد ملف معايرة، استخدم القيم الافتراضية من المصنع (homing_offset=0, range_min=0, range_max=4095)
send_action
< source >( action: dict ) → RobotAction
أمر الذراع بالانتقال إلى تكوين مفصلي مستهدف.
قد يتم اقتطاع مقدار الإجراء النسبي اعتمادًا على معامل الإعداد max_relative_target. في هذه الحالة، يختلف الإجراء المُرسَل عن الإجراء الأصلي.
لذلك، تُرجع هذه الدالة دائمًا الإجراء المُرسَل فعليًا.
فئة lerobot.robots.omx_follower.OmxFollowerConfig
< source >( port: strdisable_torque_on_disconnect: bool = Truemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>use_degrees: bool = Falseid: str | None = Nonecalibration_dir: pathlib.Path | None = None )
Reachy2Robot
Reachy 2 من Pollen Robotics.
فئة lerobot.robots.reachy2.Reachy2RobotConfig
< source >( max_relative_target: float | None = Noneip_address: str | None = 'localhost'port: int = 50065disable_torque_on_disconnect: bool = Falseuse_external_commands: bool = Falsewith_mobile_base: bool = Truewith_l_arm: bool = Truewith_r_arm: bool = Truewith_neck: bool = Truewith_antennas: bool = Truewith_left_teleop_camera: bool = Falsewith_right_teleop_camera: bool = Falsewith_torso_camera: bool = Falsecamera_width: int = 640camera_height: int = 480cameras: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
UnitreeG1
فئة lerobot.robots.unitree_g1.UnitreeG1Config
< source >( kp: list[float] | None = Nonekd: list[float] | None = Nonedefault_positions: list = <factory>control_dt: float = 0.004is_simulation: bool = Trueend_effector: G1EndEffector = <G1EndEffector.DEX1: 'dex1'>sim_publish_images: bool = Truesim_camera_port: int = 5555sim_onscreen: bool | None = Nonerobot_ip: str = '192.168.123.164'cameras: dict = <factory>gravity_compensation: bool = Falsecontroller: str | None = Noneembodiment: str = 'g1_29'id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
Hope Jr
يُعرض الروبوت humanoid Hope Jr كروبوتين مستقلين، هما ذراع ويد.
نفترض أنه عند وقت الاتصال، يكون الذراع في وضع السكون، ويمكن تعطيل العزم بأمان لإجراء المعايرة.
فئة lerobot.robots.hope_jr.HopeJrArmConfig
< source >( port: strdisable_torque_on_disconnect: bool = Truemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
فئة lerobot.robots.hope_jr.HopeJrHandConfig
< source >( port: strside: strdisable_torque_on_disconnect: bool = Truecameras: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
RebotB601Follower
class lerobot.robots.rebot_b601_follower.RebotB601Follower
< source >( config: RebotB601FollowerRobotConfig )
ذراع المتتبع reBot B601 من Seeed Studio (6 درجات حرية + ملقط، محركات CAN).
يتم التعامل مع اتصال المحركات بواسطة حزمة motorbridge عبر ناقل CAN،
والذي يمكن الوصول إليه إما عبر جسر Damiao التسلسلي أو عبر نقل CAN الأصلي الخاص بـ MotorBridge.
اضبط وضع التحكم لكل محرك قبل تفعيل العزم.
تعطيل عزم المحرك حتى يمكن تحريك الذراع يدويًا (تصحيح أخطاء للقراءة فقط).
افصل المحركات والكاميرات عن الروبوت.
أمر الذراع بالانتقال إلى تكوين مفصلي مستهدف.
تُعبَّر المواضع بالدرجات. قد يتم اقتطاع مقدار الإجراء النسبي اعتمادًا على max_relative_target، لذا يُعاد دائمًا الإجراء المُرسَل فعليًا.
فئة lerobot.robots.rebot_b601_follower.RebotB601FollowerRobotConfig
< source >( port: strmotor_family: MotorFamily = <MotorFamily.DM: 'dm'>can_adapter: str | None = Nonedm_serial_baud: int = 921600disable_torque_on_disconnect: bool = Truemax_relative_target: float | dict[str, float] | None = Nonecameras: dict = <factory>motor_can_ids: dict[str, tuple[int, int]] | None = Nonecontrol_mode: ArmControlMode = <ArmControlMode.MIT: 'mit'>gripper_control_mode: lerobot.robots.rebot_b601_follower.motor_family.GripperControlMode | None = Nonemit_kp: float | dict[str, float] | None = Nonemit_kd: float | dict[str, float] | None = Nonepos_vel_velocity: float | dict[str, float] | None = Nonegripper_torque_ratio: float | None = Nonegripper_torque_limit: float | None = Nonegripper_hold_torque_limit: float | None = Nonejoint_limits: dict[str, tuple[float, float]] | None = Noneid: str | None = Nonecalibration_dir: pathlib.Path | None = None )
إعداد مسجّل لروبوت المتبوع reBot B601.
BiRebotB601Follower
class lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower
< source >( config: BiRebotB601FollowerConfig )
متتبع ثنائي اليد من Seeed Studio، نموذج reBot B601.
يجمع بين مثيلين من RebotB601Follower لكل ذراع على حدة. وتُضاف بادئة left_ / right_ إلى مفاتيح الملاحظة والإجراء الخاصة بكل ذراع.
فئة lerobot.robots.bi_rebot_b601_follower.BiRebotB601FollowerConfig
< source >( left_arm_config: RebotB601FollowerConfigright_arm_config: RebotB601FollowerConfigcameras: dict = <factory>id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
فئة التهيئة للروبوت المتبوع ثنائي اليد bimanual reBot B601.
EarthRoverMiniPlus
class lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus
< source >( config: EarthRoverMiniPlusConfig )
روبوت EarthRover Mini Plus يتم التحكم فيه عبر واجهة برمجة التطبيقات HTTP الخاصة بـ Frodobots SDK.
يستخدم هذا الروبوت التحكم السحابي عبر Frodobots SDK بدلاً من الاتصال المباشر بالأجهزة. تُبث الكاميرات عبر WebRTC من خلال سحابة Agora، وتُرسل أوامر التحكم عبر طلبات HTTP POST.
يدعم الروبوت:
- كاميرتان (أمامية وخلفية) يتم الوصول إليهما عبر نقاط نهاية HTTP في SDK
- التحكم في السرعة الخطية والزاوية
- تقنيات قياس البطارية والاتجاه
لا حاجة إلى المعايرة للروبوت القائم على SDK.
Configuration of the robot (no-op for SDK-based robot).
اتصال
< source >( calibrate: bool = True )
الاتصال بالروبوت عبر Frodobots SDK.
قطع الاتصال
< source >( )
يرفع
DeviceNotConnectedError
DeviceNotConnectedError— إذا لم يكن الروبوت متصلاً
فصل الاتصال عن الروبوت.
يوقف الروبوت ويغلق الاتصال بـ SDK.
get_observation
< source >( ) → RobotObservation
يعيد
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. تُسترجع بيانات التلغرافيا (Telemetry) للروبوت من نقطة النهاية /data. تُطبَّع جميع قيم SDK إلى النطاقات المناسبة لتسجيل مجموعة البيانات.
send_action
< source >( action: dict ) → RobotAction
المعاملات
- action — قائمة (dict) للإجراء تحتوي على المفاتيح التالية:
- 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
< source >( sdk_url: str = 'http://localhost:8000'id: str | None = Nonecalibration_dir: pathlib.Path | None = None )
إعدادات روبوت EarthRover Mini Plus باستخدام Frodobots SDK.
يستخدم هذا الروبوت التحكم عبر السحابة من خلال واجهة برمجة التطبيقات HTTP الخاصة بـ Frodobots SDK. يتم الوصول إلى إطارات الكاميرا مباشرةً من خلال نقاط النهاية HTTP الخاصة بـ SDK.