LeRobot documentation

Motorlar

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Motorlar

SerialMotorsBus, seri bir bus üzerindeki Feetech veya Dynamixel servo zincirine yönelik düşük seviye arayüzdür. Robotlar, konumları okumak ve hedef konumları yazmak için bunu kullanır; donanım eklemiyorsanız doğrudan elle tutmanız nadiren gerekir. Her motorun modeli, aileler arasındaki farklılıkları ve kontrol tablolarını barındıran ve ayrıca seri portu yöneten rustypot içinde aranır. FeetechMotorsBus ve DynamixelMotorsBus, bir sürüm boyunca korunmak üzere bırakılmış, bunun terk edilmiş takma adlarıdır.

SDK tabanlı otobüslerden geçiş

Takma adlar, eski SDK öznitellerini ve model tablolarını değil, sınıf adlarını korur:

  • bus.model_resolution_table[model] artık bus.resolution(model) olur; diğer model tabloları (model_ctrl_table, model_number_table, …) ise artık rustypot servo tanımlarıdır.
  • Çalışma modları, Operating_Mode kaydına bir OperatingMode değeri yazmak yerine, adla seçilir: bus.set_operating_mode("position").
  • SDK portu ve paket işleyicileri artık dışa açılmıyor: rustypot seri portun sahibidir.
  • protocol_version yok sayılır: her motorun modeli kendi protokolünü belirtir.

Yeni bir bus eklemek için Kendi Donanımınızı Getirin başlıklı bölümü, cihaza özel notlar için ise Feetech Yazılımını Güncelleme ve Damiao Motorları ve CAN Bus başlıklı bölümleri inceleyin.

SerialMotorsBus

sınıf lerobot.motors.SerialMotorsBus

< >

( port: strmotors: dict[str, Motor]calibration: dict[str, MotorCalibration] | None = None )

Tek bir seri porta daisy-chain (sıralı) olarak bağlanmış Feetech veya Dynamixel servo zincirini okuyun ve yazın.

rustypot, her modelin metadata’sını (kontrol tablosu, çözünürlük, baud hızları, çalışma modları) ve seri I/O’yu yönetir; LeRobot ise normalizasyonu, kalibrasyonu ve önerilen ayarları ele alır. STS ve SCS veya XL430 ve XL330 gibi bazı modellerin motorları portu paylaşır.

Portu bulmak için şunu çalıştırın:

lerobot-find-port
>>> Finding all available ports for the MotorsBus.
>>> ["/dev/tty.usbmodem575E0032081", "/dev/tty.usbmodem575E0031751"]
>>> Remove the usb cable from your MotorsBus and press Enter when done.
>>> The port of this MotorsBus is /dev/tty.usbmodem575E0031751.
>>> Reconnect the usb cable.

Bus üzerindeki tek bir Feetech sts3215 için örnek:

from lerobot.motors import Motor, MotorNormMode, SerialMotorsBus

bus = SerialMotorsBus(
    port="/dev/tty.usbmodem575E0031751",
    motors={"my_motor": Motor(1, "sts3215", MotorNormMode.RANGE_M100_100)},
)
bus.connect()

position = bus.read("Present_Position", "my_motor", normalize=False)

# Move a few motor steps as an example
bus.write("Goal_Position", "my_motor", position + 30, normalize=False)

bus.disconnect()

configure_motors

< >

( return_delay_time: int = 0maximum_acceleration: int = 254acceleration: int = 254 )

Parametreler

  • return_delay_time (int, isteğe bağlı, varsayılan 0) — Bir motorun yanıt vermeden önceki gecikme süresi, 2 µs birimlerinde; motorlar fabrikadan 250 (500 µs) değerinde çıkar.
  • maximum_acceleration (int, isteğe bağlı, varsayılan 254) — Hızlanma sınırı, hızlanma sınırına sahip servo motorlarda (Feetech STS), hızlanma ve yavaşlamayı hızlandırmak için yüksek değerler kullanılır.
  • acceleration (int, isteğe bağlı, varsayılan 254) — Bunu destekleyen servo motorlarda (Feetech) ivmelenme.

LeRobot'un önerdiği ayarları her motora yazın.

bağlan

< >

( handshake: bool = True )

Parametreler

  • handshake (bool, isteğe bağlı, varsayılan True) — Her motorun kendi model numarasıyla yanıt verdiğini ve bir tanım içindeki Feetech motorlarının aynı yazılımı çalıştırdığını kontrol edip etmeyeceğini belirtir.

Yükseltilen

DeviceAlreadyConnectedError veya ConnectionError veya RuntimeError

  • DeviceAlreadyConnectedError — Port zaten açıksa.
  • ConnectionError — Port açılamadıysa.
  • RuntimeError — El sıkışma başarısız olursa; port tekrar kapatılır.

Seri portu açın ve motorları kontrol edin.

disable_torque

< >

( motors: NameOrID | Sequence[NameOrID] | None = Nonenum_retry: int = 0 )

Parametreler

  • motors (str | int | Sequence[str | int], isteğe bağlı) — Ad veya kimlik numarasına göre serbest bırakılacak motorlar. None tüm motorları seçer.
  • num_retry (int, isteğe bağlı, varsayılan 0) — Bir iletişim hatası sonrasında her motor için ek denemeler.

Yükseltilen

ConnectionError

  • ConnectionError — Bazı motorlara ulaşılamadıysa; mesaj bunları adlandırır.

Seçilen motorların torkunu devre dışı bırakın.

Tork kapalıyken, bir motorun EEPROM'una yazılabilir ve Feetech motorunun kilidi açılabilir. Her seçili motor için işlem denenir; hatalar raporlanır ve yanıt vermeyen motorlar tork etkin olarak kalabilir.

bağlantıyı kes

< >

( disable_torque: bool = True )

Parametreler

  • disable_torque (bool, isteğe bağlı, varsayılan True) — Port kapatılmadan önce her motorun torkunu devre dışı bırakıp bırakılmayacağı; böylece hiçbir motor dirençli kalmaz.

Serial portu kapatın, varsayılan olarak tüm motorların torku kapalıdır.

Zaten bağlantısı kesilmiş bir otobüste çağrılması güvenlidir ve torkun devre dışı bırakılması başarısız olsa bile port serbest bırakılır.

enable_torque

< >

( motors: NameOrID | Sequence[NameOrID] | None = Nonenum_retry: int = 0 )

Parametreler

  • motors (str | int | Sequence[str | int], isteğe bağlı) — İsim veya kimlik numarasına göre tutulacak motorlar. None tüm motorları seçer.
  • num_retry (int, isteğe bağlı, varsayılan 0) — Bir iletişim hatası sonrasında her motor için ek denemeler.

Yükseltilen

ConnectionError

  • ConnectionError — Bazı motorlara ulaşılamadıysa; mesaj bunları adlandırır.

Seçilen motorların torkunu etkinleştirin ve Feetech motorlarının kilidini kapatın.

ping

< >

( motor: NameOrIDnum_retry: int = 0 ) → int | None

Parametreler

  • motor (str | int) — Motor, isim veya kimlik numarasıyla, otobüsün motorlarından biri.
  • num_retry (int, isteğe bağlı, varsayılan 0) — İletişim hatası sonrası ek denemeler.

Dönüş değeri

int | None

Motor yanıt vermediğinde veya okumayı reddettiğinde model numarası, None olur.

Bir motorun yanıt olarak verdiği model numarası.

Ping göndermek yerine Model_Number okur: varlık ve kimlik bilgisi artık iki yerine bir gidiş-dönüş maliyetine mal olur.

okuma

< >

( data_name: strmotor: strnormalize: bool = Truenum_retry: int = 0 ) → int | float

Parametreler

  • data_name (str) — Kayıt adı, örn. "Present_Position"; büyük/küçük harf fark etmez.
  • motor (str) — Motor adı.
  • normalize (bool, isteğe bağlı, varsayılan True) — Bir konumun, kalibrasyon ve norm modunun tanımladığı aralığa ölçeklenip ölçeklenmeyeceğini belirtir.
  • num_retry (int, isteğe bağlı, varsayılan 0) — İletişim hatası sonrası ek denemeler.

Dönüş değeri

int | float

Ham değer veya normalize edilmiş değer.

Yükseltilen

ConnectionError veya RuntimeError

  • ConnectionError — Motor yanıt vermezse.
  • RuntimeError — Motor okumayı reddederse. Durumundaki bir alarm, aşırı yük gibi, bir hata yükseltmez.

Bir motorun kaydını okuyun.

read_calibration

< >

( ) → dict[str, MotorCalibration]

Dönüş değeri

dict[str, MotorCalibration]

Her motorun, adına göre kalibrasyonu.

Her motorun kalibrasyonunu okuyun.

Homing offset kaydı olmayan bir motor (Feetech SCS) 0 raporlar, Drive_Mode kaydı olmayan bir motor (Feetech) ise sürüş modu 0 raporlar.

record_calibration

< >

( mode: strfull_turn_motors: Sequence[str]inverted_motors: Sequence[str] = ()motors: Sequence[str] | None = None ) → dict[str, MotorCalibration]

Parametreler

  • mode (str) — Motorların çalışma modu, örn. "position".
  • full_turn_motors (Sequence[str]) — Hareket ettirildikleri aralık yerine tüm kodlayıcı aralığı verilen motorlar.
  • inverted_motors (Sequence[str], isteğe bağlı, varsayılan ()) — Ters yönde dönen motorlar.
  • motors (Sequence[str], isteğe bağlı) — Kalibre edilecek motorlar. None tüm motorları kalibre eder.

Dönüş değeri

dict[str, MotorCalibration]

Her motorun, otobüs sırasına göre kalibrasyonu.

Yükseltilen

ValueError

  • ValueError — Bir motor otobüste değilse veya tam tur atan ya da ters çevrilmiş bir motor kalibre edilecek motorlardan biri değilse; o zaman hiçbir motorla etkileşime girilmez.

Elle hareket ettirilen motorları kalibre edin.

Seçilen motorlar serbest bırakılır, çalışma moduna alınır ve yönleri belirlenir: Drive_Mode kaydedecine sahip bir motora, ters çevrilmiş veya çevrilmemiş haliyle yazma işlemi yapılırken, Feetech servo olarak sınıflandırılan diğerlerinde normalleştirme sırasında yazılım düzeyinde bir ters çevirme uygulanır. Kullanıcı ardından eklemeleri hareket aralıklarının ortasında tutar; bu durum her motor için yarım dönüşe karşılık gelir ve her eklemin tüm aralığı boyunca hareket ettirilmesi, ENTER tuşuna basılana kadar kaydedilir. Tam dönüş yapan bir motor kaydedilmez: bu motor, modelinin tüm kodlayıcısını kapsar.

Motorlar çalışma modu ve bir homing ofseti gerektirir, ancak Feetech SCS0009’da bunların hiçbiri yoktur. Homing ofsetleri ve konum sınırları yeniden yazılır, önbelleğe alınan calibration temizlenir ve torkları kapalı bırakılır. Dönen kalibrasyon, konum sınırlarına yazılmaz ve kaydedilmez: ~SerialMotorsBus.write_calibration bunu yazar ve cihaz onu kaydeder.

record_ranges_of_motion

< >

( motors: NameOrID | Sequence[NameOrID] | None = Nonedisplay_values: bool = True ) → tuple[dict[str, int | float], dict[str, int | float]]

Parametreler

  • motors (str | int | Sequence[str | int], isteğe bağlı) — İsim veya kimlik numarasına göre kaydedilecek motorlar. None tüm motorları seçer.
  • display_values (bool, isteğe bağlı, varsayılan True) — Canlı tablonun yazdırılıp yazdırılmayacağı.

Dönüş değeri

tuple[dict[str, int | float], dict[str, int | float]]

Her motorun adıyla, en düşük ve en yüksek ham konumu.

Yükseltilen

ValueError

  • ValueError — Bir motor hareket etmediyse: en düşük ve en yüksek konumları eşittir.

ENTER'a basılana kadar, her seçilen motorun elle hareket ettirildiği aralığı kaydedin.

Eklem, tork kapalıyken elle hareket ettirilirken canlı bir tablo konumları gösterir.

reset_calibration

< >

( motors: NameOrID | Sequence[NameOrID] | None = None )

Parametreler

  • motors (str | int | Sequence[str | int], isteğe bağlı) — İsim veya kimlik numarasına göre sıfırlanacak motorlar. None tüm motorları seçer.

Seçilen motorların fabrika kalibrasyonunu geri yükleyin.

Homing offset, varsa, motorlarda 0 olarak ayarlanır ve konum sınırları tüm kodlayıcıyı kapsar. Önbelleğe alınan calibration temizlenir.

çözünürlük

< >

( model: str ) → int

Parametreler

  • model (str) — Model of one of the bus’ motors, e.g. "sts3215".

Dönüş değeri

int

Tur başına adım sayısı, örneğin 12 bitlik bir kodlayıcıda 4096.

Yükseltilen

ValueError

  • ValueError — Model, kodlayıcı adımlarını saymıyorsa.

Bir motor modelinin tur başına kodlayıcı adımı.

set_baudrate

< >

( baudrate: int )

Parametreler

  • baudrate (int) — Saniyedeki bit cinsinden baud hızı.

Açık portun baud hızını değiştirin.

Port, her bağlantıda default_baudrate hızında açılır.

set_half_turn_homings

< >

( motors: NameOrID | Sequence[NameOrID] | None = None ) → dict[str, int]

Parametreler

  • motors (str | int | Sequence[str | int], isteğe bağlı) — İsme veya kimliğe göre eve döndürülecek motorlar. None tüm motorları seçer.

Dönüş değeri

dict[str, int]

İsimlerine göre her motora yazılan homing ofseti.

Yükseltilen

ValueError

  • ValueError — Seçilen motorun Feetech SCS gibi bir homing offset değeri yoksa.

Seçilen her motorun mevcut konumunu yarım tur yapın.

Motorların kalibrasyonu sıfırlanır, ardından her birine mevcut konumunu kodlayıcısının yarısına getiren ev konumu ofseti atanır, örneğin 12 bitlik bir kodlayıcıda 2047. Seçilen her motorun bir ev konumu ofsetine sahip olması gerekir ve bu, herhangi bir kayda yazım yapılmadan önce kontrol edilir.

set_operating_mode

< >

( mode: strmotors: NameOrID | Sequence[NameOrID] | None = None )

Parametreler

  • mode (str) — Çalışma modunun adı, örn. "position".
  • motors (str | int | Sequence[str | int], isteğe bağlı) — İsim veya kimlik numarasına göre ayarlanacak motorlar. None tüm motorları seçer.

Yükseltilen

ValueError

  • ValueError — Seçilen motorun böyle bir modu yoksa; o zaman hiçbir motorun modu değiştirilmez.

Seçilen motorları, adla belirtilen bir çalışma moduna koyun.

Modlar, her motorun tanımından gelir; bu nedenle yalnızca aileye değil, modele de bağlıdır: Feetech SCS0009'un hiçbir modu yoktur. Mod, seçilen her motor için mevcut olmalıdır ve bu, herhangi bir motorun modunu değiştirmesinden önce kontrol edilir. Bunu tork kapalıyken yazın.

  • position: bir tur içindeki hedef konumu ve konum sınırlarını tutar.
  • velocity: bir tekerlek gibi, hedef hızda sonsuza kadar döner.
  • pwm: motor voltajını doğrudan sürer, açık döngü.
  • step (Feetech): hedef konum olarak yazılan adım sayısı kadar hareket eder.
  • current (Dynamixel): konumdan bağımsız olarak bir tork olan hedef akımı tutar.
  • extended_position (Dynamixel): hedef konumu birkaç tur boyunca korur. Bu modda Min_Position_Limit ve Max_Position_Limit kayıtları yok sayılır.
  • current_based_position (Dynamixel): hedef akımın üst sınırıyla akımı sınırlayarak, tuttuğu nesneyi ezmemesi gereken bir kavrama (gripper) gibi, hedef konumu birkaç tur boyunca korur.

setup_motor

< >

( motor: strinitial_baudrate: int | None = Noneinitial_id: int | None = None )

Parametreler

  • motor (str) — Motorun adı.
  • initial_baudrate (int, isteğe bağlı) — Motorun şu anda yanıt verdiği baud hızı.
  • initial_id (int, isteğe bağlı) — Motorun şu anda yanıt verdiği kimlik, initial_baudrate ile kullanılır.

Yükseltilen

RuntimeError veya ConnectionError

  • RuntimeError — Motor bulunamadığında, modeline ait olmadığında veya yapılandırıldıktan sonra yapılandırıldığı gibi yanıt vermediğinde.
  • ConnectionError — Motorla iletişim başarısız olursa.

Tek bir motorun kimliğini ve otobüsün varsayılan baud hızını verin.

Motor, büsteki tek motor olmalıdır. Hem initial_baudrate hem de initial_id verilmedikçe, motor önce bulunur: yalnızca initial_baudrate verilmişse bu hızda, aksi halde modelinin baud hızları arasında aranır; yalnız başına verilen bir initial_id, bulunan id ile değiştirilir. rustypot ardından torkunu kapatır, EEPROM'unu açar ve id ile baud hızını yazar.

setup_motors

< >

( motors: Sequence[str] | None = None )

Parametreler

  • motors (Sequence[str], isteğe bağlı) — Kurulum sırasına göre motorlar. None, son motordan ilke, kolda gripper'dan aşağı doğru gider.

Motorları tek tek yapılandırın ve her birinin otobüste yalnız başına olmasını isteyin.

sync_read

< >

( data_name: strmotors: NameOrID | Sequence[NameOrID] | None = Nonenormalize: bool = Truenum_retry: int = 0 ) → dict[str, int | float]

Parametreler

  • data_name (str) — Kayıt adı, örn. "Present_Position"; büyük/küçük harf fark etmez.
  • motors (str | int | Sequence[str | int], isteğe bağlı) — Ad veya kimlik numarasına göre okunacak motorlar. None tüm motorları okur.
  • normalize (bool, isteğe bağlı, varsayılan True) — Konumların, kalibrasyon ve norm modunun tanımladığı aralığa ölçeklenip ölçeklenmeyeceğini belirtir.
  • num_retry (int, isteğe bağlı, varsayılan 0) — Bir iletişim hatası sonrasında yapılacak ek denemeler. Bir yeniden deneme, başarılı olanlar dahil olmak üzere tüm grupları tekrar gönderir; bilinmeyen bir motor veya kayıt asla yeniden denenmez.

Dönüş değeri

dict[str, int | float]

Her motorun, adına göre değeri.

Yükseltilen

ConnectionError veya RuntimeError

  • ConnectionError — Bir motor yanıt vermezse.
  • RuntimeError — Bir motor okumayı reddederse. Aşırı yük gibi bir durum alarmı, hata fırlatmaz.

Birkaç motorun kaydını okuyun.

rustypot, bir protokolü, kaydın adresini ve boyutunu paylaşan motor grupları için grup başına birer Sync Read gönderir ve Feetech SCS gibi servo motorlarını Sync Read olmadan, birbiri ardına okur. Bu nedenle değerler, eşzamanlı bir anlık görüntü değildir.

sync_write

< >

( data_name: strvalues: Value | dict[str, Value]normalize: bool = Truenum_retry: int = 0 )

Parametreler

  • data_name (str) — Kayıt adı, örn. "Goal_Position"; büyük/küçük harf fark etmez.
  • values (int | float | dict[str, int | float]) — Her motor için tek bir değer veya motor adı başına bir değer.
  • normalize (bool, isteğe bağlı, varsayılan True) — Konumların, kalibrasyon ve norm modlarının tanımladığı aralıkta verilip verilmediğini belirtir.
  • num_retry (int, isteğe bağlı, varsayılan 0) — Portun başarısız olması durumunda ek denemeler. Bir yeniden deneme, her grubu tekrar gönderir.

Yükseltilen

ConnectionError

  • ConnectionError — Port başarısız olursa.

Birkaç motorun kaydını, yanıtı beklemeden yazın.

~SerialMotorsBus.write'nin aksine, senkron yazmaya hiçbir motor yanıt vermez: daha hızlıdır, kontrol döngüleri için uygundur, ancak kaybolan bir paket fark edilmez. rustypot, bir protokolü ve kaydın adresini ve boyutunu paylaşan motor gruplarının her biri için bir Senkron Yazma gönderir.

torque_disabled

< >

( motors: NameOrID | Sequence[NameOrID] | None = None )

Parametreler

  • motors (str | int | Sequence[str | int], isteğe bağlı) — Ad veya kimlik numarasına göre serbest bırakılacak motorlar. None tüm motorları seçer.

Bir with bloğunun süresince seçilen motorların torkunu devre dışı bırakın.

Torque, blok bir hata fırlatsa bile çıkışta yeniden etkinleştirilir; bu durum motor yapılandırması için uygundur.

Örnek:

>>> with bus.torque_disabled():
...     bus.set_operating_mode("position")

yaz

< >

( data_name: strmotor: strvalue: Valuenormalize: bool = Truenum_retry: int = 0 )

Parametreler

  • data_name (str) — Kayıt adı, örn. "Goal_Position"; büyük/küçük harf fark etmez.
  • motor (str) — Motor adı.
  • value (int | float) — Value to write, normalised or raw as normalize says.
  • normalize (bool, isteğe bağlı, varsayılan True) — Bir konumun, kalibrasyon ve norm modunun tanımladığı aralıkta verilip verilmediğini belirtir.
  • num_retry (int, isteğe bağlı, varsayılan 0) — İletişim hatası sonrası ek denemeler.

Yükseltilen

ConnectionError veya RuntimeError

  • ConnectionError — Motor yanıt vermezse.
  • RuntimeError — Motor yazmayı reddederse. Durumundaki bir alarm, aşırı yük gibi, bir hata yükseltmez.

Bir motorun kaydını yazın ve yanıtını bekleyin.

~SerialMotorsBus.sync_write'nin aksine, motor yazmayı onaylar, bu nedenle bir hata raporlanır: daha yavaştır, ancak motor yapılandırması için uygundur.

write_calibration

< >

( calibration_dict: dict[str, MotorCalibration]cache: bool = True )

Parametreler

  • calibration_dict (dict[str, MotorCalibration]) — ~SerialMotorsBus.read_calibration'in döndürdüğü biçimde, her motorun adıyla eşleşen kalibrasyonu.
  • cache (bool, isteğe bağlı, varsayılan True) — Kalibrasyonun, konumları normalize eden otobüsün calibration olarak tutulup tutulmayacağı.

Motorlara bir kalibrasyon yazın ve varsayılan olarak bunu önbelleğe alın.

Konum sınırları tüm motorlara, homing ofseti ise buna sahip olan motorlara yazılır. Ne id ne de sürücü modu yazılır: Feetech'in sürücü modu, normalleştirme sırasında yazılımla uygulanır ve Dynamixel'in Drive_Mode kaydı kendi başına ayarlanır.

Motor

sınıf lerobot.motors.Motor

< >

( id: intmodel: strnorm_mode: MotorNormModemotor_type_str: str | None = Nonerecv_id: int | None = None )

MotorCalibration

sınıf lerobot.motors.MotorCalibration

< >

( id: intdrive_mode: inthoming_offset: intrange_min: intrange_max: int )

MotorNormMode

sınıf lerobot.motors.MotorNormMode

< >

( *values )

DriveMode

DriveMode iki üyeye sahiptir: NON_INVERTED = 0 ve INVERTED = 1. Tamsayının beklenildiği yerlerde, bir Drive_Mode kaydede veya MotorCalibration.drive_mode içinde .value kullanın:

bus.write("Drive_Mode", "elbow_flex", DriveMode.INVERTED.value)

sınıf lerobot.motors.DriveMode

< >

( *values )

Dynamixel Drive_Mode kaydının ve MotorCalibration.drive_mode'in değeri.

Update on GitHub