LeRobot documentation
YAM
YAM
YAM adalah lengan 6-DOF dari I2RT Robotics untuk pembelajaran imitasi dan AI berwujud. Di LeRobot, yam_follower menggerakkan satu lengan YAM v1 standar dengan gripper linear DM4310, dan bi_yam_follower menggerakkan dua lengan. Gunakan bersama lerobot-calibrate, lerobot-rollout, dan lerobot-replay. LeRobot belum memiliki lengan YAM leader, sehingga YAM digerakkan oleh kebijakan atau dengan memutar ulang dataset.
Rakit dan sambungkan lengan sesuai panduan I2RT; halaman ini membahas sisi LeRobot.
| Panduan | Yang dicakup |
|---|---|
| Seri Arm YAM | Membuka kemasan, pemasangan, pengkabelan, motor dan penjepit |
| Pengaturan perangkat lunak | Adaptor CAN, bitrate, dan nama antarmuka tetap |
| YAM Cell | Stasiun bimanual dengan dua pengikut dan pemimpin |

YAM follower (kiri) dan stasiun bimanual YAM Cell (kanan). LeRobot menggerakkan follower. Gambar dengan izin dari I2RT Robotics.
Perangkat keras dan keselamatan
Setiap lengan memiliki tujuh motor dengan ID 1 hingga 7: DM4340 untuk sendi 1 hingga 3, dan DM4310 untuk sendi 4 hingga 6 serta gripper. YAM Pro, Ultra, BIG YAM, dan gripper lainnya belum didukung.
Anda membutuhkan:
- Linux, and one USB-to-CAN adapter per arm (SocketCAN, classic CAN at 1 Mbit/s).
- Setiap timeout CAN motor diatur maksimal 400 ms (
8000tick, nilai I2RT), misalnya denganset_timeout.py --timeoutdari I2RT SDK. Timeout adalah pengaman terakhir jika LeRobot berhenti mengirim perintah, sehingga LeRobot tidak akan mengaktifkan torsi tanpanya. - Akses internet saat pertama kali terhubung: kompensasi gravitasi mengunduh model YAM dari bucket
lerobot/robot-urdfsdan menyimpannya di cache di bawahHF_LEROBOT_HOME/robot-urdfs/yam/v1.
Bautkan lengan ke permukaan yang stabil dan pastikan area kerjanya bebas dari halangan. Memutus koneksi akan menonaktifkan torsi, dan lengan akan jatuh karena gravitasi: dukung lengan terlebih dahulu. Jika daya atau adapter CAN terputus saat lengan beroperasi, hentikan program, dukung lengan, lalu hubungkan kembali.
Install LeRobot 🤗
Ikuti Panduan Instalasi, lalu instal dukungan YAM:
pip install -e ".[yam]"Ini menginstal motorbridge dan python-can untuk lengan, serta placo untuk kompensasi gravitasi.
Hubungkan perangkat keras
Setiap lengan membutuhkan antarmuka CAN-nya sendiri, karena kedua lengan menggunakan ID motor yang sama.
lerobot-setup-can --mode=setup --interfaces=can0 --use_fd=falseGunakan --interfaces=can0,can1 untuk dua lengan. Perintah ini mengonfigurasi antarmuka Linux dengan sudo ip link dan tidak mengirimkan perintah motor. Dengan dua lengan, can0 dan can1 dapat bertukar setelah reboot: periksa lengan mana yang dikendalikan oleh masing-masing antarmuka, atau berikan nama tetap seperti can_follower_l dengan pengaturan perangkat lunak I2RT, dan gunakan nama-nama tersebut sebagai port.
Jenis perangkat
| Tipe | Perangkat |
|---|---|
yam_follower | Satu pengikut |
bi_yam_follower | Pengikut bimodal |
Dengan dua lengan, atur opsi masing-masing lengan dengan --robot.left_arm_config.<option> dan --robot.right_arm_config.<option>.
Kalibrasi
Kalibrasi hanya mengukur batas gripper, yaitu posisi tertutup penuh dan terbuka penuh: sendi tetap mempertahankan nol pabriknya. Lipat lengan terlebih dahulu, seperti yang ditunjukkan di bawah. Torsi dimatikan saat Anda mengukur: dukung lengan, gerakkan hanya gripper secara manual, dan tekan Enter di setiap prompt. Jika kalibrasi sudah ada, koneksi memulai kontrol: tekan Enter untuk menggunakannya kembali, atau ketik c untuk mengukur ulang, dan LeRobot akan meminta Anda untuk mendukung lengan sebelum mematikan torsi.

Posisi terlipat, dengan setiap sendi pada nol (kiri), dan gripper linear DM4310 (kanan). Gambar dengan izin dari I2RT Robotics.
lerobot-calibrate --robot.type=yam_follower --robot.port=can0 --robot.id=yam
Gripper kiri diukur terlebih dahulu, kemudian gripper kanan, ke dalam file <id>_left dan <id>_right.
lerobot-calibrate --robot.type=bi_yam_follower --robot.id=bimanual_yam \ --robot.left_arm_config.port=can0 --robot.right_arm_config.port=can1
Gunakan --robot.id yang sama di perintah berikutnya, sehingga LeRobot memuat file yang disimpan.
Observasi dan tindakan
Satu lengan memiliki joint_1.pos hingga joint_6.pos, kemudian gripper.pos, untuk kedua observasi dan aksi. Sendi adalah sudut absolut dalam derajat, dan gripper berkisar dari 0 (tertutup) hingga 100 (terbuka). use_degrees=false beralih ke radian dan 0 hingga 1, seperti yang digunakan oleh data I2RT dan MolmoAct2. use_velocity_and_torque=true menambahkan observasi .vel dan .torque. Aksi adalah target sendi absolut, yang dipangkas ke batas sendi.
Dua lengan menggunakan nama yang sama dengan awalan left_ dan right_. Kamera yang dipasang pada lengan juga diberi awalan, sedangkan --robot.cameras tingkat atas tetap mempertahankan nama aslinya.
Jalankan kebijakan
Letakkan lengan pada posisi terlipat, dengan setiap sendi pada nol, sebelum menghubungkan: LeRobot memeriksa bahwa setiap sendi berada dalam 11,5° dari posisi tersebut, lalu memulai kontrol dari posisi yang diukur. Tidak ada yang bergerak sampai kebijakan mengirim aksi.
lerobot-rollout \
--robot.type=yam_follower --robot.port=can0 --robot.id=yam \
--robot.cameras='{"wrist": {"type": "opencv", "index_or_path": 0, "width": 640, "height": 480, "fps": 30}}' \
--policy.path=<user>/<policy> \
--task="Pick up the cube"Untuk dua lengan, gunakan --robot.type=bi_yam_follower --robot.id=bimanual_yam --robot.left_arm_config.port=can0 --robot.right_arm_config.port=can1. Tambahkan --dataset.repo_id=<user>/rollout_<name> untuk merekam rollout; lihat Jalankan inferensi dan evaluasi kebijakan Anda. lerobot-replay memutar ulang episode yang direkam dengan opsi --robot.* yang sama.
Sebelum aksi pertama, dan ketika tidak ada aksi yang tiba selama command_timeout_s (1 s), lengan mempertahankan posisinya. Dengan idle_mode=float, sendi-sendi justru dikompensasi gravitasi dan diredam secara ringan sehingga Anda dapat menggerakkan lengan secara manual, sementara gripper mempertahankan bukaan; pelacakan dilanjutkan dari posisi di mana Anda menggerakkannya.
Keamanan
- Kegagalan motor atau umpan balik yang hilang menghentikan semua perintah. Dengan dua lengan, kegagalan pada salah satunya menghentikan keduanya. Lepaskan dan sambungkan kembali untuk melanjutkan.
- Model gravitasi mencakup lengan standar tanpa kamera atau muatan. Setelah menambahkan salah satunya, periksa apakah lengan tidak hanyut dalam mode float, dan sesuaikan
gravity_factorsjika terjadi.
Opsi konfigurasi
| Opsi | Default | Deskripsi |
|---|---|---|
port | wajib | Antarmuka SocketCAN, misalnya can0 |
use_degrees | true | Derajat dan gripper 0–100; false memberikan radian dan 0–1 |
use_velocity_and_torque | false | Tambahkan observasi .vel dan .torque |
idle_mode | hold | hold posisi atau float ketika tidak ada aksi yang tiba |
command_timeout_s | 1.0 | Detik tanpa aksi sebelum mode idle |
initial_position_deg | semua nol | Posisi awal yang diperlukan; None melewati pemeriksaan |
initial_tolerance_deg | 11.5 | Jarak yang diizinkan dari posisi awal |
gripper_force_limit_n | 50.0 | Gaya jari saat gripper terblokir pada suatu objek |
gravity_factors | [1.0, 1.1, 1.1, 1.2, 1.0, 1.0] | Pengali per sendi dari kompensasi gravitasi |
cameras | {} | Kamera yang dipasang pada lengan |
Contoh: MolmoAct2
lerobot/MolmoAct2-BimanualYAM-LeRobot adalah allenai/MolmoAct2-BimanualYAM dalam format LeRobot, lengkap dengan statistik normalisasi yang dirilis. Model ini dilatih pada dua lengan YAM dengan radian dan gripper 0–1, serta tiga kamera dengan urutan atas, kiri, kanan; lihat MolmoAct2.
pip install -e ".[yam,molmoact2,dataset]"
lerobot-rollout \
--robot.type=bi_yam_follower --robot.id=bimanual_yam \
--robot.left_arm_config.port=can0 --robot.right_arm_config.port=can1 \
--robot.left_arm_config.use_degrees=false --robot.right_arm_config.use_degrees=false \
--robot.cameras='{
"top": {"type": "opencv", "index_or_path": "/dev/v4l/by-id/TOP_CAMERA", "width": 640, "height": 480, "fps": 30},
"left": {"type": "opencv", "index_or_path": "/dev/v4l/by-id/LEFT_CAMERA", "width": 640, "height": 480, "fps": 30, "fourcc": "MJPG"},
"right": {"type": "opencv", "index_or_path": "/dev/v4l/by-id/RIGHT_CAMERA", "width": 640, "height": 480, "fps": 30, "fourcc": "MJPG"}
}' \
--policy.path=lerobot/MolmoAct2-BimanualYAM-LeRobot \
--inference.type=rtc --inference.rtc.execution_horizon=20 --inference.queue_threshold=20 \
--device=cuda --interpolation_multiplier=2 \
--interactive=true --play_sounds=false \
--task="Pick up the red block and place it in the green bin"Ketik /start untuk menjalankan kebijakan, /subtask <text> untuk mengubah instruksi, /reset untuk kembali ke posisi awal, dan /stop untuk keluar. Proses kembali berlangsung selama waktu tetap dan batas kecepatan YAM tetap berlaku, sehingga lengan yang jauh dari posisi awalnya mungkin berhenti sebelum mencapai tujuan.
Mode Float memungkinkan Anda memulai kebijakan dari posisi mana pun: tambahkan --robot.left_arm_config.idle_mode=float --robot.right_arm_config.idle_mode=float. Sebelum /start pertama, dan 1 detik setelah /reset selesai, gerakkan lengan ke posisi yang diinginkan secara manual, lalu ketik /start untuk menjalankan kebijakan dari posisi tersebut. Jangan gunakan /stop untuk ini: perintah tersebut mengakhiri sesi dan menonaktifkan torsi.
Pemecahan Masalah
| Masalah | Periksa |
|---|---|
| Antarmuka CAN tidak ada atau tidak aktif | Periksa daya dan kabel USB adapter, serta ip link show. Jalankan lerobot-setup-can lagi. |
missing or stale motor feedback | Periksa daya 24 V, kabel dan terminasi CAN, ID motor 1 hingga 7, serta pastikan port adalah antarmuka lengan ini. |
| Lengan yang salah bergerak | Periksa lengan mana yang dikendalikan oleh setiap antarmuka, atau berikan nama tetap pada antarmuka. |
unsafe motor CAN timeout | Setel timeout CAN setiap motor menjadi maksimal 400 ms dengan SDK I2RT. |
not within initial_tolerance_deg | Lipat lengan, dengan setiap sendi pada nol, sebelum menghubungkan. |
| Menghubungkan meminta Anda untuk melakukan kalibrasi lagi | Gunakan --robot.id yang sama seperti saat kalibrasi. |
| Lengan bergerak dalam mode mengambang | Sesuaikan gravity_factors untuk kamera atau muatan pada lengan. |
| MolmoAct2 menggerakkan lengan ke posisi yang salah | Setel use_degrees=false pada kedua lengan: model menggunakan radian dan gripper 0–1. |
Referensi
- Seri Arm YAM: perangkat keras, motor, dan gripper
- Pengaturan perangkat lunak: bitrate CAN dan nama antarmuka tetap
- YAM Cell: stasiun bimanus
- I2RT SDK: alat motor, model URDF dan MuJoCo
- Halaman produk YAM
- MolmoAct2: pemuatan kebijakan di LeRobot