# LeKiwi

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/1740517739083.jpeg"
  alt="LeKiwi"
  width="70%"
/>

Aşağıdaki adımlarda, LeKiwi mobil robotunun nasıl monte edileceğini açıklıyoruz.

## Parçaları temin edin

Bu [README](https://github.com/SIGRobotics-UIUC/LeKiwi) dosyasını takip edin. Parçaların temin edileceği bağlantıyı içeren malzeme listesini ve parçaların 3D baskı talimatlarını içerir. Ayrıca, ilk kez baskı yapıyorsanız veya bir 3D yazıcınız yoksa size öneriler sunar.

### Kablolu sürüm

**wired** LeKiwi sürümüne sahipseniz, Raspberry Pi kurulumunu ve SSH yapılandırmasını atlayabilirsiniz. Hem teleoperasyon için LeKiwi betikleri hem de lider kol betikleri için tüm komutları doğrudan bilgisayarınızda çalıştırabilirsiniz.

## Pi üzerinde yazılım kurma

Şimdi LeKiwi Robot üzerinde çalışacak uzak PC'yi yapılandırmamız gerekiyor. Bu genellikle bir Raspberry Pi'dir, ancak kameralar ve motor kontrol kartı için yeterli sayıda USB portuna (2 veya daha fazla) sahip ve 5V ile çalışabilen herhangi bir PC olabilir.

### İşletim sistemini yükle

Raspberry Pi ve SD kartının kurulumu için bkz: [Setup PI](https://www.raspberrypi.com/documentation/computers/getting-started.html). Burada, Raspberry Pi OS veya Ubuntu kurmak için [Imager](https://www.raspberrypi.com/software/)'ın nasıl indirileceği açıklanmaktadır.

### SSH Kurulumu

Pi'nizi kurduktan sonra, Pi'de ekran, klavye ve fare gerektirmeden laptopunuzdan Pi'ye giriş yapabilmek için [SSH](https://www.raspberrypi.com/news/coding-on-raspberry-pi-remotely-with-visual-studio-code/) (Secure Shell Protocol) özelliğini etkinleştirmeli ve yapılandırmalısınız. Bunu nasıl yapacağınızı gösteren harika bir eğitim [burada](https://www.raspberrypi.com/documentation/computers/remote-access.html#ssh) bulunabilir. Pi'nize giriş yapmak için Komut İstemi'ni (cmd) kullanabilir veya VSCode kullanıyorsanız [bu](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh) eklentisini kullanabilirsiniz.

### Pi üzerinde LeRobot'ı kurun 🤗

Raspberry Pi'nizde [Yükleme Kılavuzu](./installation)'muzu kullanarak LeRobot'u yükleyin

Bu talimatların yanı sıra, Pi'nizde Feetech motor desteği & ZeroMQ'yi de kurmanız gerekir:

```bash
pip install -e ".[lekiwi]"
```

## LeRobot'u yerel olarak kurun

Laptop/PC'nizde LeRobot zaten yüklüyse bu adımı atlayabilirsiniz; aksi takdirde, Pi üzerinde yaptığımız adımları takip edin.

[Kurulum Kılavuzumuz](./installation)u izleyin

Bu talimatların yanı sıra, dizüstü bilgisayarınızda/masaüstü bilgisayarınızda Feetech motor desteği & ZeroMQ'yi de yüklemeniz gerekir:

```bash
pip install -e ".[lekiwi]"
```

Harika 🤗! LeRobot kurulumu tamamlandı ve SO100/SO101 kolları ile mobil tabanı birleştirmeye başlayabiliriz 🤖. Bundan sonra LeRobot'u kullanmak istediğinizde, LeRobot'u kurduğumuz `~/lerobot` klasörüne gidip komutlardan birini çalıştırabilirsiniz.

# Adım Adım Montaj Talimatları

Öncelikle iki SO100/SO101 kolunu monte edeceğiz. Biri mobil tabana bağlanacak, diğeri teleoperasyon için kullanılacak. Ardından mobil tabanı monte edeceğiz. Montaj talimatları şu iki sayfada bulunabilir:

- [SO101'i Birleştirin](./so101#step-by-step-assembly-instructions)
- [LeKiwi'yi Birleştirin](https://github.com/SIGRobotics-UIUC/LeKiwi/blob/main/Assembly.md)

### Motor kartıyla ilişkili USB portlarını bulun

Her bus servo adaptörü için portu bulmak için bu betiği çalıştırın:

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

Örnek çıktı:

```
Finding all available ports for the MotorBus.
['/dev/tty.usbmodem575E0032081']
Remove the USB cable from your MotorsBus and press Enter when done.

[...Disconnect corresponding leader or follower arm and press Enter...]

The port of this MotorsBus is /dev/tty.usbmodem575E0032081
Reconnect the USB cable.
```

Bulunan port: `/dev/tty.usbmodem575E0032081`, bu port sizin kartınıza karşılık gelmektedir.

Linux'ta, USB portlarına erişim vermek için şunu çalıştırmanız gerekebilir:

```bash
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1
```

Örnek çıktı:

```
Finding all available ports for the MotorBus.
['/dev/ttyACM0']
Remove the usb cable from your MotorsBus and press Enter when done.

[...Disconnect corresponding leader or follower arm and press Enter...]

The port of this MotorsBus is /dev/ttyACM0
Reconnect the USB cable.
```

Bulunan port: `/dev/ttyACM0`, bu da kartınıza karşılık gelmektedir.

### Motorları yapılandır

Motorların yapılandırılmasına ilişkin talimatlar SO101 [belgelerinde](./so101#configure-the-motors) bulunabilir. Kol motorlarının kimlik numaralarının yanı sıra, mobil taban için motor kimlik numaralarını da ayarlamamız gerekir. Çalışabilmeleri için bunların belirli bir sırayda olması gerekir. Aşağıda mobil taban için motor kimlik numaraları ve motor montaj konumlarının bir görseli yer almaktadır. LeKiwi'de yalnızca bir Motor Kontrol kartı kullandığımızı unutmayın. Bu, tekerlekler için motor kimlik numaralarının 7, 8 ve 9 olduğu anlamına gelir.

LeKiwi için motorları yapılandırmak için bu komutu çalıştırabilirsiniz. Komut, önce kol motorlarını (id 6..1), ardından tekerlek motorlarını (9,8,7) yapılandırır.

```bash
lerobot-setup-motors \
    --robot.type=lekiwi \
    --robot.port=/dev/tty.usbmodem58760431551 # <- paste here the port found at previous step
```

### İletişim sorunlarını giderme

LeKiwi'ye bağlanırken sorun yaşıyorsanız, sorunu teşhis etmek ve çözmek için bu adımları izleyin.

#### 1. IP Adresi Yapılandırmasını Doğrulayın

Komutlarda veya kodunuzda Pi için doğru IP'nin kullanıldığından emin olun. Raspberry Pi'nin IP adresini kontrol etmek için (Pi komut satırında) şunu çalıştırın:

```bash
hostname -I
```

#### 2. Pi'nin laptop/pc'den erişilebilir olup olmadığını kontrol edin

Laptopunuzdan Raspberry Pi'ye ping göndermeyi deneyin:

```bash
ping <your_pi_ip_address>
```

Ping başarısız olursa:

- Pi'nin açıldığından ve aynı ağa bağlı olduğundan emin olun.
- Pi üzerinde SSH'nin etkin olup olmadığını kontrol edin.

#### 3. SSH bağlantısını deneyin

Pi'ye SSH ile bağlanamıyorsanız, doğru şekilde bağlı olmayabilir. Şunu kullanın:

```bash
ssh <your_pi_user_name>@<your_pi_ip_address>
```

Bağlantı hatası alırsanız:

- Pi üzerinde SSH'nin etkin olduğundan emin olmak için şunu çalıştırın:
  ```bash
  sudo raspi-config
  ```
  Ardından şu adrese gidin: **Interfacing Options -> SSH** ve etkinleştirin.

### Kalibrasyon

Şimdi lider kolu ve takipçi kolu kalibre etmemiz gerekiyor. Tekerlek motorlarının kalibre edilmesine gerek yok. Kalibrasyon süreci çok önemlidir çünkü bir robot üzerinde eğitilen bir sinir ağının başka bir robot üzerinde çalışmasını sağlar.

### Takipçi kolu kalibre edin (mobil taban üzerinde)

Kolu Raspberry Pi'ye bağlı olduğundan emin olun ve takipçi kolun kalibrasyonunu başlatmak için bu betiği veya API örneğini (Raspberry Pi üzerinden SSH ile) çalıştırın:

```bash
lerobot-calibrate \
    --robot.type=lekiwi \
    --robot.id=my_awesome_kiwi # <- Give the robot a unique name
```

Çoğu robot için kalibrasyon yöntemini birleştirdik; bu nedenle LeKiwi kolunun kalibrasyon adımları, Koch ve SO101'in adımlarıyla aynıdır. Öncelikle robotu, her eklem aralığının ortasında olacak şekilde konumlandırmalı ve ardından `Enter` tuşuna basmalıyız. İkinci olarak, tüm eklemleri tam hareket aralıkları boyunca hareket ettirmeliyiz. Bu aynı sürecin SO101 için referans olarak çekilmiş videosuna [buradan](https://huggingface.co/docs/lerobot/en/so101#calibration-video) ulaşabilirsiniz.

### Kablolu sürüm

**wired** LeKiwi sürümüne sahipseniz, lütfen tüm komutları dizüstü bilgisayarınızda çalıştırın.

### Lider kolu kalibre et

Ardından, lider kolu (laptop/pc'ye bağlı olan) kalibre etmek için laptopunuzda API örneğindeki aşağıdaki komutu çalıştırın:

```bash
# Use the port of your leader arm, and give the arm a unique name with --teleop.id
lerobot-calibrate \
    --teleop.type=so100_leader \
    --teleop.port=/dev/tty.usbmodem58760431551 \
    --teleop.id=my_awesome_leader_arm
```

```python
from lerobot.teleoperators.so_leader import SO100LeaderConfig, SO100Leader

config = SO100LeaderConfig(
    port="/dev/tty.usbmodem58760431551",
    id="my_awesome_leader_arm",
)

leader = SO100Leader(config)
leader.connect(calibrate=False)
leader.calibrate()
leader.disconnect()
```

## LeKiwi'yi teleoperate edin

> [!TIP]
> Mac kullanıyorsanız, teleoperation için Terminal'in klavyenize erişmesine izin vermeniz gerekebilir. Sistem Tercihleri > Güvenlik ve Gizlilik > Girdi İzleme bölümüne gidin ve Terminal için kutuyu işaretleyin.

Teleoperasyon yapmak için Raspberry Pi'nize SSH ile bağlanın ve `conda activate lerobot` ile bu komutu çalıştırın:

```bash
python -m lerobot.robots.lekiwi.lekiwi_host --robot.id=my_awesome_kiwi
```

Host, `--host.connection_time_s` saniyesinden (varsayılan olarak 30) sonra durur. Bir veri seti kaydetme gibi daha uzun oturumlar için bu değeri artırın, örneğin `--host.connection_time_s=600`.

Ardından dizüstü bilgisayarınızda da `conda activate lerobot` komutunu çalıştırın ve API örneğini çalıştırın; `examples/lekiwi/teleoperate.py` dosyasında doğru `remote_ip` ve `port` değerlerini ayarladığınızdan emin olun.

```bash
python examples/lekiwi/teleoperate.py
```

Şimdi lider kolu hareket ettirebilir ve klavyeyi (w,a,s,d) kullanarak ileri, sola, geri ve sağa gidebilirsiniz. (z,x) tuşlarını kullanarak sola veya sağa dönebilirsiniz. Mobil robotun hızını artırmak ve azaltmak için (r,f) tuşlarını kullanabilirsiniz. Üç hız modu vardır, aşağıdaki tabloya bakın:

| Hız Modu | Doğrusal Hız (m/s) | Dönme Hızı (deg/s) |
| ---------- | ------------------ | ---------------------- |
| Hızlı       | 0.3                | 90                     |
| Orta     | 0.2                | 60                     |
| Yavaş       | 0.1                | 30                     |

| Anahtar | Eylem         |
| --- | -------------- |
| W   | İleri git   |
| A   | Sola taşı      |
| S   | Geriye git  |
| D   | Sağa taşı     |
| Z   | Sola dön      |
| X   | Sağa dön     |
| R   | Hız artışı |
| F   | Hızı azalt |

> [!TIP]
> Farklı bir klavye kullanıyorsanız, her komut için tuşları [`LeKiwiClientConfig`](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/lekiwi/config_lekiwi.py) içinde değiştirebilirsiniz.

### Kablolu sürüm

**wired** LeKiwi sürümüne sahipseniz, lütfen tüm komutları dizüstü bilgisayarınızda çalıştırın.

## Bir veri seti kaydet

Teleoperasyona alıştığınızda, ilk veri setinizi kaydedebilirsiniz.

Veri setinizi yüklemek için Hugging Face hub özelliklerini kullanıyoruz. Daha önce Hub kullanmadıysanız, yazma erişimine sahip bir token ile cli üzerinden giriş yapabildiğinizden emin olun; bu token [Hugging Face ayarlarından](https://huggingface.co/settings/tokens) oluşturulabilir.

Bu komutu çalıştırarak token'ınızı CLI'ye ekleyin:

```bash
hf auth login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential
```

Ardından Hugging Face deposu adınızı bir değişkene kaydedin:

```bash
HF_USER=$(hf auth whoami --quiet)
echo $HF_USER
```

Şimdi bir veri seti kaydedebilirsiniz. Epizotları kaydetmek ve veri setinizi hub'a yüklemek için, LeKiwi için uyarlanmış bu API örneğini çalıştırın. Önce betikte `remote_ip`, `HF_REPO_ID`, lider kol `port` ve `TASK_DESCRIPTION` değerlerini uyarlamayı unutmayın. Daha fazla veya daha uzun epizot kaydetmek için `NUM_EPISODES`, `EPISODE_TIME_SEC` ve `RESET_TIME_SEC` değerlerini değiştirin ve host'u, tüm oturumu kapsayan bir `--host.connection_time_s` değeriyle başlatın.

```bash
python examples/lekiwi/record.py
```

#### Veri seti yükleme

Yerel olarak veri setiniz bu klasörde saklanır: `~/.cache/huggingface/lerobot/{repo-id}`. Veri kaydının sonunda, veri setiniz betikte belirlediğiniz `HF_REPO_ID` altında Hugging Face sayfanıza yüklenecektir (ör. `https://huggingface.co/datasets/${HF_USER}/lekiwi_test`). Bunu şu komutu çalıştırarak elde edebilirsiniz:

```bash
echo https://huggingface.co/datasets/${HF_USER}/lekiwi_test
```

Veri setiniz, topluluğun kolayca bulabilmesi için otomatik olarak `LeRobot` etiketiyle işaretlenir; ayrıca özel etiketler de ekleyebilirsiniz (örneğin bu durumda `tutorial`).

Hub'da `LeRobot` [etiketlerini](https://huggingface.co/datasets?other=LeRobot) aratarak diğer LeRobot veri setlerini bulabilirsiniz.

#### Veri toplama ipuçları

Veri kaydı konusunda rahat hissettiğinizde, eğitim için daha büyük bir veri seti oluşturabilirsiniz. İyi bir başlangıç görevi, bir nesneyi farklı konumlardan kavrayıp bir kutuya yerleştirmektir. En az 50 bölüm kaydetmenizi, her konum için 10 bölüm olacak şekilde öneriyoruz. Kameraları sabit tutun ve kayıtlar boyunca tutarlı bir kavrama davranışı sergileyin. Ayrıca manipüle ettiğiniz nesnenin kameralarda görünür olduğundan emin olun. İyi bir kural, yalnızca kamera görüntülerine bakarak görevi kendinizin yapabileceği düzeyde olmasıdır.

Aşağıdaki bölümlerde sinir ağınızı eğiteceksiniz. Güvenilir kavrama performansına ulaştıktan sonra, veri toplama sırasında daha fazla çeşitlilik eklemeye başlayabilirsiniz; örneğin ek kavrama konumları, farklı kavrama teknikleri ve kamera konumlarını değiştirme.

Sonuçlarınızı olumsuz etkileyebileceğinden, çok fazla çeşitliliği çok hızlı eklemekten kaçının.

Bu önemli konuya daha derinlemesine inmek isterseniz, iyi bir veri setini neyin oluşturduğuna dair yazdığımız [blog yazısını](https://huggingface.co/blog/lerobot-datasets#what-makes-a-good-dataset) inceleyebilirsiniz.

#### Sorun Giderme:

- Linux'ta, kayıt akış kontrol tuşları (ok tuşları, Escape), kaydı etkileşimli bir terminalden (odaklı tutarak) çalıştırdığınız sürece X11, Wayland ve headless/SSH oturumlarında çalışır; `$DISPLAY` yapılandırmasına gerek yoktur; harf karşılıkları olan `n` / `r` / `q` da çalışır. **LeKiwi tabanının klavye ile teleoperasyonu**nun farklı olduğunu unutmayın: küresel bir tuş arka ucuna (key backend) dayanır ve bu nedenle yalnızca X11 oturumunda, Windows masaüstünde veya Erişilebilirlik/Giriş İzleme yetkileri verilmiş macOS'ta çalışır — Wayland veya headless makinelerde çalışmaz. [pynput kısıtlamaları](https://pynput.readthedocs.io/en/latest/limitations.html#linux)na bakın.

## Bir bölümü yeniden oynat

Bir bölümü yeniden oynatmak için aşağıdaki API örneğini çalıştırın; `remote_ip`, `port`, LeRobotDatasetId ve bölüm dizinini değiştirdiğinizden emin olun.

```bash
python examples/lekiwi/replay.py
```

Tebrikler 🎉, robotunuz kendi başına bir görev öğrenmeye hazır. Bu öğreticinin eğitim bölümünden eğitimini başlatın: [Gerçek dünya robotlarıyla başlangıç](./il_robots)

## Politikanızı değerlendirin

Politikanızı değerlendirmek için `evaluate.py` API örneğini çalıştırın; `remote_ip`, `port`, model.. değerlerini değiştirdiğinizden emin olun.

```bash
python examples/lekiwi/evaluate.py
```

> [!TIP]
> Herhangi bir sorunuz varsa veya yardıma ihtiyacınız varsa, lütfen [Discord](https://discord.com/invite/s3KuuzsPFb) üzerinden bize ulaşın.

