# LeKiwi

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

Pada langkah-langkah di bawah, kami menjelaskan cara merakit robot mobile LeKiwi.

## Sumberkan komponen

Ikuti [README](https://github.com/SIGRobotics-UIUC/LeKiwi) ini. Dokumen ini berisi daftar bahan, dengan tautan untuk memesan komponen, serta instruksi untuk mencetak komponen secara 3D. Dokumen ini juga mencakup saran jika ini adalah pertama kalinya Anda mencetak atau jika Anda tidak memiliki printer 3D.

### Versi kabel

Jika Anda memiliki versi LeKiwi **wired**, Anda dapat melewati instalasi Raspberry Pi dan pengaturan SSH. Anda juga dapat menjalankan semua perintah langsung di PC Anda, baik untuk skrip LeKiwi maupun skrip lengan leader untuk teleoperasi.

## Instal perangkat lunak di Pi

Sekarang kita harus menyiapkan PC jarak jauh yang akan berjalan di LeKiwi Robot. Biasanya ini adalah Raspberry Pi, tetapi bisa berupa PC apa pun yang dapat berjalan pada 5V dan memiliki cukup port usb (2 atau lebih) untuk kamera dan papan kontrol motor.

### Instal OS

Untuk mengatur Raspberry Pi dan kartu SD-nya, lihat: [Setup PI](https://www.raspberrypi.com/documentation/computers/getting-started.html). Di sini dijelaskan cara mengunduh [Imager](https://www.raspberrypi.com/software/) untuk menginstal Raspberry Pi OS atau Ubuntu.

### Setup SSH

Setelah mengatur Pi Anda, Anda harus mengaktifkan dan menyiapkan [SSH](https://www.raspberrypi.com/news/coding-on-raspberry-pi-remotely-with-visual-studio-code/) (Secure Shell Protocol) agar dapat masuk ke Pi dari laptop tanpa memerlukan layar, keyboard, dan mouse di Pi. Tutorial yang bagus tentang cara melakukannya dapat ditemukan [di sini](https://www.raspberrypi.com/documentation/computers/remote-access.html#ssh). Masuk ke Pi Anda dapat dilakukan melalui Command Prompt (cmd) atau, jika Anda menggunakan VSCode, Anda dapat menggunakan ekstensi [ini](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh).

### Install LeRobot di Pi 🤗

Pada Raspberry Pi Anda, instal LeRobot menggunakan [Panduan Instalasi](./installation) kami

Selain instruksi ini, Anda perlu menginstal dukungan motor Feetech & ZeroMQ di Pi Anda:

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

## Install LeRobot secara lokal

Jika Anda sudah menginstal LeRobot di laptop/pc Anda, Anda dapat melewati langkah ini; selain itu, silakan ikuti langkah-langkah yang sama seperti yang kami lakukan di Pi.

Ikuti [Panduan Instalasi](./installation) kami

Selain instruksi ini, Anda perlu menginstal dukungan motor Feetech & ZeroMQ di laptop/pc Anda:

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

Bagus 🤗! Anda telah selesai menginstal LeRobot, dan kita dapat mulai merakit lengan SO100/SO101 serta basis mobile 🤖. Setiap kali Anda ingin menggunakan LeRobot, Anda dapat masuk ke folder `~/lerobot` tempat LeRobot diinstal dan menjalankan salah satu perintah.

# Instruksi Perakitan Langkah demi Langkah

Pertama, kita akan merakit dua lengan SO100/SO101. Satu untuk dipasang pada basis mobile dan satu lagi untuk teleoperation. Kemudian kita akan merakit basis mobile. Petunjuk perakitan dapat ditemukan di dua halaman ini:

- [Rakit SO101](./so101#step-by-step-assembly-instructions)
- [Rakit LeKiwi](https://github.com/SIGRobotics-UIUC/LeKiwi/blob/main/Assembly.md)

### Cari port USB yang terkait dengan papan motor

Untuk menemukan port untuk setiap bus servo adapter, jalankan skrip ini:

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

Contoh keluaran:

```
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.
```

Port yang ditemukan adalah: `/dev/tty.usbmodem575E0032081` yang sesuai dengan papan Anda.

Pada Linux, Anda mungkin perlu memberikan akses ke port USB dengan menjalankan:

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

Contoh keluaran:

```
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.
```

Port yang ditemukan adalah: `/dev/ttyACM0` yang sesuai dengan papan Anda.

### Konfigurasi motor

Instruksi untuk mengonfigurasi motor dapat ditemukan di [dokumentasi](./so101#configure-the-motors) SO101. Selain id untuk motor lengan, kita juga perlu mengatur id motor untuk basis mobile. Id-id ini harus dalam urutan tertentu agar berfungsi. Di bawah ini adalah gambar id motor dan posisi pemasangan motor untuk basis mobile. Perhatikan bahwa kita hanya menggunakan satu papan Motor Control di LeKiwi. Ini berarti id motor untuk roda adalah 7, 8, dan 9.

Anda dapat menjalankan perintah ini untuk mengatur motor pada LeKiwi. Perintah ini akan terlebih dahulu mengatur motor untuk lengan (id 6..1) dan kemudian mengatur motor untuk roda (9,8,7)

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

### Menggagali masalah komunikasi

Jika Anda mengalami kesulitan terhubung ke LeKiwi, ikuti langkah-langkah berikut untuk mendiagnosis dan menyelesaikan masalahnya.

#### 1. Verifikasi Konfigurasi Alamat IP

Pastikan bahwa IP yang benar untuk Pi digunakan dalam perintah atau kode Anda. Untuk memeriksa alamat IP Raspberry Pi, jalankan (di baris perintah Pi):

```bash
hostname -I
```

#### 2. Periksa apakah Pi dapat dijangkau dari laptop/pc

Coba ping Raspberry Pi dari laptop Anda:

```bash
ping <your_pi_ip_address>
```

Jika ping gagal:

- Pastikan Pi menyala dan terhubung ke jaringan yang sama.
- Periksa apakah SSH diaktifkan pada Pi.

#### 3. Coba koneksi SSH

Jika Anda tidak dapat SSH ke Pi, kemungkinan perangkat tersebut tidak terhubung dengan benar. Gunakan:

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

Jika Anda mendapatkan error koneksi:

- Pastikan SSH diaktifkan pada Pi dengan menjalankan:
  ```bash
  sudo raspi-config
  ```
  Lalu navigasikan ke: **Interfacing Options -> SSH** dan aktifkan.

### Kalibrasi

Sekarang kita harus mengkalibrasi lengan pemimpin dan lengan pengikut. Motor roda tidak perlu dikalibrasi. Proses kalibrasi sangat penting karena memungkinkan jaringan saraf yang dilatih pada satu robot untuk bekerja pada robot lain.

### Kalibrasi lengan pengikut (di basis mobile)

Pastikan lengan terhubung ke Raspberry Pi dan jalankan skrip atau contoh API ini (di Raspberry Pi melalui SSH) untuk memulai kalibrasi lengan pengikut:

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

Kami telah menyatukan metode kalibrasi untuk sebagian besar robot, sehingga langkah-langkah kalibrasi untuk lengan LeKiwi sama dengan langkah-langkah untuk Koch dan SO101. Pertama, kita harus memindahkan robot ke posisi di mana setiap sendi berada di tengah rentangnya, lalu kita menekan `Enter`. Kedua, kita menggerakkan semua sendi melalui rentang gerak penuh mereka. Video dari proses yang sama untuk SO101 sebagai referensi dapat ditemukan [di sini](https://huggingface.co/docs/lerobot/en/so101#calibration-video).

### Versi kabel

Jika Anda memiliki versi LeKiwi **wired**, silakan jalankan semua perintah di laptop Anda.

### Kalibrasi lengan pemimpin

Kemudian, untuk mengkalibrasi lengan pemimpin (yang terpasang pada laptop/pc). Jalankan perintah contoh API berikut di laptop Anda:

```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()
```

## Teleoperasi LeKiwi

> [!TIP]
> Jika Anda menggunakan Mac, Anda mungkin perlu memberikan izin kepada Terminal untuk mengakses keyboard Anda demi teleoperation. Buka System Preferences > Security & Privacy > Input Monitoring dan centang kotak untuk Terminal.

Untuk melakukan teleoperasi, SSH ke Raspberry Pi Anda, lalu jalankan `conda activate lerobot` dan perintah ini:

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

Host berhenti setelah `--host.connection_time_s` detik (30 secara default). Untuk sesi yang lebih panjang, seperti merekam dataset, tingkatkan nilainya, misalnya `--host.connection_time_s=600`.

Lalu di laptop Anda, jalankan juga `conda activate lerobot` dan jalankan contoh API, pastikan Anda mengatur `remote_ip` dan `port` yang benar di `examples/lekiwi/teleoperate.py`.

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

Sekarang Anda dapat menggerakkan lengan pemimpin dan menggunakan keyboard (w,a,s,d) untuk maju, kiri, mundur, kanan. Dan gunakan (z,x) untuk belok kiri atau belok kanan. Anda dapat menggunakan (r,f) untuk meningkatkan dan menurunkan kecepatan robot mobile. Ada tiga mode kecepatan, lihat tabel di bawah:

| Mode Kecepatan | Kecepatan Linear (m/s) | Kecepatan Rotasi (derajat/detik) |
| ---------- | ------------------ | ---------------------- |
| Cepat       | 0.3                | 90                     |
| Sedang     | 0.2                | 60                     |
| Lambat       | 0.1                | 30                     |

| Kunci | Aksi         |
| --- | -------------- |
| W   | Lanjut   |
| A   | Geser ke kiri      |
| S   | Gerak mundur  |
| D   | Geser ke kanan     |
| Z   | Belok kiri      |
| X   | Belok kanan     |
| R   | Meningkatkan kecepatan |
| F   | Kurangi kecepatan |

> [!TIP]
> Jika Anda menggunakan keyboard yang berbeda, Anda dapat mengubah tombol untuk setiap perintah di [`LeKiwiClientConfig`](https://github.com/huggingface/lerobot/blob/main/src/lerobot/robots/lekiwi/config_lekiwi.py).

### Versi kabel

Jika Anda memiliki versi LeKiwi **wired**, silakan jalankan semua perintah di laptop Anda.

## Rekam dataset

Setelah Anda terbiasa dengan teleoperation, Anda dapat merekam dataset pertama Anda.

Kami menggunakan fitur Hugging Face hub untuk mengunggah dataset Anda. Jika Anda belum pernah menggunakan Hub sebelumnya, pastikan Anda dapat login via cli menggunakan token dengan akses tulis; token ini dapat dibuat dari [pengaturan Hugging Face](https://huggingface.co/settings/tokens).

Tambahkan token Anda ke CLI dengan menjalankan perintah ini:

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

Lalu simpan nama repositori Hugging Face Anda dalam sebuah variabel:

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

Sekarang Anda dapat merekam dataset. Untuk merekam episode dan mengunggah dataset Anda ke hub, jalankan contoh API ini yang disesuaikan untuk LeKiwi. Pastikan untuk terlebih dahulu menyesuaikan `remote_ip`, `HF_REPO_ID`, `port` lengan leader, dan `TASK_DESCRIPTION` di dalam skrip. Untuk merekam lebih banyak atau episode yang lebih panjang, ubah `NUM_EPISODES`, `EPISODE_TIME_SEC`, dan `RESET_TIME_SEC`, lalu mulai host dengan `--host.connection_time_s` yang mencakup seluruh sesi.

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

#### Unggah dataset

Secara lokal, dataset Anda disimpan di folder ini: `~/.cache/huggingface/lerobot/{repo-id}`. Pada akhir perekaman data, dataset Anda akan diunggah ke halaman Hugging Face Anda di bawah `HF_REPO_ID` yang Anda atur dalam skrip (misalnya `https://huggingface.co/datasets/${HF_USER}/lekiwi_test`), yang dapat Anda peroleh dengan menjalankan:

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

Dataset Anda akan secara otomatis diberi tag `LeRobot` agar mudah ditemukan oleh komunitas, dan Anda juga dapat menambahkan tag kustom (misalnya `tutorial` dalam kasus ini).

Anda dapat mencari dataset LeRobot lainnya di hub dengan mencari [tag](https://huggingface.co/datasets?other=LeRobot) `LeRobot`.

#### Tips untuk mengumpulkan data

Setelah Anda terbiasa dengan perekaman data, Anda dapat membuat dataset yang lebih besar untuk pelatihan. Tugas awal yang baik adalah menggenggam objek di berbagai lokasi dan meletakkannya ke dalam wadah. Kami menyarankan untuk merekam setidaknya 50 episode, dengan 10 episode per lokasi. Jaga agar kamera tetap diam dan pertahankan perilaku penggengaman yang konsisten selama perekaman. Pastikan juga objek yang Anda manipulasi terlihat oleh kamera. Aturan praktis yang baik adalah Anda harus mampu melakukan tugas tersebut sendiri hanya dengan melihat gambar dari kamera.

Pada bagian-bagian berikut, Anda akan melatih jaringan saraf Anda. Setelah mencapai kinerja pegangan yang andal, Anda dapat mulai memperkenalkan lebih banyak variasi selama pengumpulan data, seperti lokasi pegangan tambahan, teknik pegangan yang berbeda, dan mengubah posisi kamera.

Hindari menambahkan terlalu banyak variasi terlalu cepat, karena hal itu dapat menghambat hasil Anda.

Jika Anda ingin mendalami topik penting ini, Anda dapat membaca [artikel blog](https://huggingface.co/blog/lerobot-datasets#what-makes-a-good-dataset) yang kami tulis tentang apa yang membuat dataset menjadi baik.

#### Pemecahan masalah:

- Pada Linux, tombol alur kontrol perekaman (tombol panah, Escape) berfungsi di X11, Wayland, dan sesi headless/SSH selama Anda menjalankan perekaman dari terminal interaktif (jaga agar tetap fokus) — tidak perlu pengaturan `$DISPLAY`; ekuivalen huruf `n` / `r` / `q` juga berfungsi. Perhatikan bahwa **teleoperasi keyboard untuk basis LeKiwi** berbeda: hal ini bergantung pada backend kunci global dan karenanya hanya berfungsi di sesi X11, desktop Windows, atau macOS dengan izin Accessibility/Input Monitoring — tidak di Wayland atau mesin headless. Lihat [batasan pynput](https://pynput.readthedocs.io/en/latest/limitations.html#linux).

## Putar ulang episode

Untuk memutar ulang episode, jalankan contoh API di bawah ini, pastikan untuk mengubah `remote_ip`, `port`, LeRobotDatasetId, dan indeks episode.

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

Selamat 🎉, robot Anda sudah siap untuk belajar tugas secara mandiri. Mulai melatihnya melalui bagian pelatihan dari tutorial ini: [Mulai dengan robot dunia nyata](./il_robots)

## Evaluasi kebijakan Anda

Untuk mengevaluasi kebijakan Anda, jalankan contoh API `evaluate.py`, pastikan untuk mengubah `remote_ip`, `port`, model..

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

> [!TIP]
> Jika Anda memiliki pertanyaan atau membutuhkan bantuan, silakan hubungi kami di [Discord](https://discord.com/invite/s3KuuzsPFb).

