LeRobot documentation

YAM

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

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.

PanduanYang dicakup
Seri Arm YAMMembuka kemasan, pemasangan, pengkabelan, motor dan penjepit
Pengaturan perangkat lunakAdaptor CAN, bitrate, dan nama antarmuka tetap
YAM CellStasiun bimanual dengan dua pengikut dan pemimpin
YAM follower arm with the linear gripper YAM Cell bimanual station

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 (8000 tick, nilai I2RT), misalnya dengan set_timeout.py --timeout dari 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-urdfs dan menyimpannya di cache di bawah HF_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=false

Gunakan --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

TipePerangkat
yam_followerSatu pengikut
bi_yam_followerPengikut 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.

YAM arm in its folded position Linear DM4310 gripper

Posisi terlipat, dengan setiap sendi pada nol (kiri), dan gripper linear DM4310 (kanan). Gambar dengan izin dari I2RT Robotics.

Lengan tunggal
Dua lengan
lerobot-calibrate --robot.type=yam_follower --robot.port=can0 --robot.id=yam

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_factors jika terjadi.

Opsi konfigurasi

OpsiDefaultDeskripsi
portwajibAntarmuka SocketCAN, misalnya can0
use_degreestrueDerajat dan gripper 0–100; false memberikan radian dan 0–1
use_velocity_and_torquefalseTambahkan observasi .vel dan .torque
idle_modeholdhold posisi atau float ketika tidak ada aksi yang tiba
command_timeout_s1.0Detik tanpa aksi sebelum mode idle
initial_position_degsemua nolPosisi awal yang diperlukan; None melewati pemeriksaan
initial_tolerance_deg11.5Jarak yang diizinkan dari posisi awal
gripper_force_limit_n50.0Gaya 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

MasalahPeriksa
Antarmuka CAN tidak ada atau tidak aktifPeriksa daya dan kabel USB adapter, serta ip link show. Jalankan lerobot-setup-can lagi.
missing or stale motor feedbackPeriksa daya 24 V, kabel dan terminasi CAN, ID motor 1 hingga 7, serta pastikan port adalah antarmuka lengan ini.
Lengan yang salah bergerakPeriksa lengan mana yang dikendalikan oleh setiap antarmuka, atau berikan nama tetap pada antarmuka.
unsafe motor CAN timeoutSetel timeout CAN setiap motor menjadi maksimal 400 ms dengan SDK I2RT.
not within initial_tolerance_degLipat lengan, dengan setiap sendi pada nol, sebelum menghubungkan.
Menghubungkan meminta Anda untuk melakukan kalibrasi lagiGunakan --robot.id yang sama seperti saat kalibrasi.
Lengan bergerak dalam mode mengambangSesuaikan gravity_factors untuk kamera atau muatan pada lengan.
MolmoAct2 menggerakkan lengan ke posisi yang salahSetel use_degrees=false pada kedua lengan: model menggunakan radian dan gripper 0–1.

Referensi

Update on GitHub