LeRobot documentation
LeIsaac × LeRobot EnvHub
LeIsaac × LeRobot EnvHub
LeRobot EnvHub kini mendukung belajar imitasi dalam simulasi dengan LeIsaac. Jalankan tugas manipulasi sehari-hari, operasikan robot secara teleoperasi, kumpulkan demo, unggah ke Hub, dan latih kebijakan di LeRobot — semuanya dalam satu alur.
LeIsaac terintegrasi dengan IsaacLab dan setup Leader/Follower SO101 untuk menyediakan:
- 🕹️ Alur kerja yang mengutamakan teleoperasi untuk pengumpulan data
- 📦 Konversi data bawaan siap untuk pelatihan LeRobot
- 🤖 Keterampilan sehari-hari seperti memetik jeruk, mengangkat kubus, membersihkan meja, dan melipat kain
- ☁️ Upgrade yang sedang berlangsung dari LightWheel: simulasi cloud, dukungan EnvHub, tooling Sim2Real, dan lainnya
Di bawah ini Anda akan menemukan tugas-tugas LeIsaac yang saat ini didukung melalui LeRobot EnvHub.
Lingkungan yang Tersedia
Tabel berikut mencantumkan semua tugas dan lingkungan yang tersedia di LeIsaac x LeRobot EnvHub. Anda juga dapat memperoleh daftar lingkungan terbaru dengan menjalankan perintah berikut:
python scripts/environments/list_envs.py
| Tugas | ID Lingkungan | Deskripsi Tugas | Robot Terkait |
|---|---|---|---|
| LeIsaac-SO101-PickOrange-v0 LeIsaac-SO101-PickOrange-Direct-v0 | Pilih tiga jeruk dan letakkan ke dalam piring, kemudian atur ulang lengan ke keadaan istirahat. | Single-Arm SO101 Follower | |
| LeIsaac-SO101-LiftCube-v0 LeIsaac-SO101-LiftCube-Direct-v0 | Angkat kubus merah ke atas. | Single-Arm SO101 Follower | |
| LeIsaac-SO101-CleanToyTable-v0 LeIsaac-SO101-CleanToyTable-BiArm-v0 LeIsaac-SO101-CleanToyTable-BiArm-Direct-v0 | Pilih dua objek huruf e ke dalam kotak, dan atur ulang lengan ke keadaan istirahat. | Single-Arm SO101 Follower Bi-Arm SO101 Follower | |
| LeIsaac-SO101-FoldCloth-BiArm-v0 LeIsaac-SO101-FoldCloth-BiArm-Direct-v0 | Lipat kain, lalu atur ulang lengan ke keadaan istirahat. Catatan: Hanya DirectEnv yang mendukung check_success dalam tugas ini. | Bi-Arm SO101 Follower |
Muat LeIsaac langsung di LeRobot dengan satu baris kode
EnvHub: Bagikan lingkungan LeIsaac melalui HuggingFace
EnvHub adalah hub lingkungan yang dapat direproduksi. Jalankan simulasi yang sudah dikemas dalam satu baris, langsung bereksperimen, dan terbitkan tugas Anda sendiri untuk komunitas.
LeIsaac menawarkan dukungan EnvHub sehingga Anda dapat mengonsumsi atau membagikan tugas hanya dengan beberapa perintah.
Cara memulai, Pengaturan lingkungan
Jalankan perintah berikut untuk menyiapkan lingkungan kode Anda:
# Refer to Getting Started/Installation to install leisaac firstly
conda create -n leisaac_envhub python=3.11
conda activate leisaac_envhub
conda install -c "nvidia/label/cuda-12.8.1" cuda-toolkit
pip install -U torch==2.7.0 torchvision==0.22.0 --index-url https://download.pytorch.org/whl/cu128
pip install 'leisaac[isaaclab] @ git+https://github.com/LightwheelAI/leisaac.git#subdirectory=source/leisaac' --extra-index-url https://pypi.nvidia.com
# Install lerobot
pip install lerobot==0.4.1
# Fix numpy version
pip install numpy==1.26.0Contoh Penggunaan
EnvHub mengekspos setiap tugas yang didukung LeIsaac dalam antarmuka yang seragam. Contoh di bawah ini memuat so101_pick_orange dan mendemonstrasikan rollout aksi acak serta teleoperasi interaktif.
Aksi Acak
Click to expand code example
# envhub_random_action.py
import torch
from lerobot.envs import make_env
# Load from the hub
envs_dict = make_env("LightwheelAI/leisaac_env:envs/so101_pick_orange.py", n_envs=1, trust_remote_code=True)
# Access the environment
suite_name = next(iter(envs_dict))
sync_vector_env = envs_dict[suite_name][0]
# retrieve the isaac environment from the sync vector env
env = sync_vector_env.envs[0].unwrapped
# Use it like any gym environment
obs, info = env.reset()
while True:
action = torch.tensor(env.action_space.sample())
obs, reward, terminated, truncated, info = env.step(action)
if terminated or truncated:
obs, info = env.reset()
env.close()python envhub_random_action.py
Anda seharusnya melihat lengan SO101 bergerak dengan perintah yang sepenuhnya acak.
Teleoperasi
Stack teleoperation LeRobot dapat menggerakkan lengan yang disimulasikan.
Hubungkan pengendali SO101 Leader, jalankan perintah kalibrasi di bawah ini.
lerobot-calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM0 \
--teleop.id=leaderLalu, jalankan skrip teleop.
Click to expand code example
# envhub_teleop_example.py
import logging
import time
import gymnasium as gym
from dataclasses import asdict, dataclass
from pprint import pformat
from lerobot.teleoperators import ( # noqa: F401
Teleoperator,
TeleoperatorConfig,
make_teleoperator_from_config,
so_leader,
bi_so_leader,
)
from lerobot.utils.robot_utils import precise_sleep
from lerobot.utils.utils import init_logging
from lerobot.envs import make_env
@dataclass
class TeleoperateConfig:
teleop: TeleoperatorConfig
env_name: str = "so101_pick_orange"
fps: int = 60
@dataclass
class EnvWrap:
env: gym.Env
def make_env_from_leisaac(env_name: str = "so101_pick_orange"):
envs_dict = make_env(
f'LightwheelAI/leisaac_env:envs/{env_name}.py',
n_envs=1,
trust_remote_code=True
)
suite_name = next(iter(envs_dict))
sync_vector_env = envs_dict[suite_name][0]
env = sync_vector_env.envs[0].unwrapped
return env
def teleop_loop(teleop: Teleoperator, env: gym.Env, fps: int):
from leisaac.devices.action_process import preprocess_device_action
from leisaac.assets.robots.lerobot import SO101_FOLLOWER_MOTOR_LIMITS
from leisaac.utils.env_utils import dynamic_reset_gripper_effort_limit_sim
env_wrap = EnvWrap(env=env)
obs, info = env.reset()
while True:
loop_start = time.perf_counter()
if env.cfg.dynamic_reset_gripper_effort_limit:
dynamic_reset_gripper_effort_limit_sim(env, 'so101leader')
raw_action = teleop.get_action()
processed_action = preprocess_device_action(
dict(
so101_leader=True,
joint_state={
k.removesuffix(".pos"): v for k, v in raw_action.items()},
motor_limits=SO101_FOLLOWER_MOTOR_LIMITS),
env_wrap
)
obs, reward, terminated, truncated, info = env.step(processed_action)
if terminated or truncated:
obs, info = env.reset()
dt_s = time.perf_counter() - loop_start
precise_sleep(max(1 / fps - dt_s, 0.0))
loop_s = time.perf_counter() - loop_start
print(f"\ntime: {loop_s * 1e3:.2f}ms ({1 / loop_s:.0f} Hz)")
def teleoperate(cfg: TeleoperateConfig):
init_logging()
logging.info(pformat(asdict(cfg)))
teleop = make_teleoperator_from_config(cfg.teleop)
env = make_env_from_leisaac(cfg.env_name)
teleop.connect()
if hasattr(env, 'initialize'):
env.initialize()
try:
teleop_loop(teleop=teleop, env=env, fps=cfg.fps)
except KeyboardInterrupt:
pass
finally:
teleop.disconnect()
env.close()
def main():
teleoperate(TeleoperateConfig(
teleop=so_leader.SO101LeaderConfig(
port="/dev/ttyACM0",
id='leader',
use_degrees=False,
),
env_name="so101_pick_orange",
fps=60,
))
if __name__ == "__main__":
main()
python envhub_teleop_example.py
Menjalankan skrip memungkinkan Anda mengoperasikan lengan simulasi menggunakan perangkat Leader fisik.
☁️ Simulasi Cloud (Tidak Membutuhkan GPU)
Tidak memiliki GPU lokal atau driver yang tepat? Tidak masalah! Anda dapat menjalankan LeIsaac sepenuhnya di cloud tanpa perlu konfigurasi apa pun. LeIsaac berfungsi langsung di NVIDIA Brev, memberikan Anda lingkungan yang sudah dikonfigurasi sepenuhnya langsung di browser Anda.
👉 Mulai di sini: https://lightwheelai.github.io/leisaac/docs/cloud_simulation/nvidia_brev
Setelah instans Anda di-deploy, cukup buka tautan untuk port 80 (HTTP) untuk meluncurkan Visual Studio Code Server (kata sandi default: password). Dari sana, Anda dapat menjalankan simulasi, mengedit kode, dan memvisualisasikan lingkungan IsaacLab — semuanya dari peramban web Anda.
Tanpa GPU, tanpa driver, tanpa instalasi lokal. Cukup klik dan jalankan.
Catatan Tambahan
Kami menjaga cakupan EnvHub agar selaras dengan tugas LeIsaac. Saat ini didukung:
so101_pick_orangeso101_lift_cubeso101_clean_toytablebi_so101_fold_cloth
Ganti tugas dengan menargetkan skrip yang berbeda saat memanggil make_env, misalnya:
envs_dict_pick_orange = make_env("LightwheelAI/leisaac_env:envs/so101_pick_orange.py", n_envs=1, trust_remote_code=True)
envs_dict_lift_cube = make_env("LightwheelAI/leisaac_env:envs/so101_lift_cube.py", n_envs=1, trust_remote_code=True)
envs_dict_clean_toytable = make_env("LightwheelAI/leisaac_env:envs/so101_clean_toytable.py", n_envs=1, trust_remote_code=True)
envs_dict_fold_cloth = make_env("LightwheelAI/leisaac_env:envs/bi_so101_fold_cloth.py", n_envs=1, trust_remote_code=True)Catatan: saat bekerja dengan bi_so101_fold_cloth, panggil initialize() segera setelah mengambil env sebelum melakukan operasi lain:
Click to expand code example
import torch
from lerobot.envs import make_env
# Load from the hub
envs_dict = make_env("LightwheelAI/leisaac_env:envs/bi_so101_fold_cloth.py", n_envs=1, trust_remote_code=True)
# Access the environment
suite_name = next(iter(envs_dict))
sync_vector_env = envs_dict[suite_name][0]
# retrieve the isaac environment from the sync vector env
env = sync_vector_env.envs[0].unwrapped
# NOTE: initialize() first
env.initialize()
# other operation with env...