LeRobot documentation

LeIsaac × LeRobot EnvHub

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LeIsaac × LeRobot EnvHub

LeRobot EnvHub теперь поддерживает обучение с подражанием в симуляции с LeIsaac. Запускайте повседневные задачи манипуляции, телеуправляйте роботом, собирайте демонстрации, загружайте их в Hub и обучайте политики в LeRobot — всё в одном цикле.

LeIsaac интегрируется с IsaacLab и конфигурацией SO101 Leader/Follower, обеспечивая:

  • 🕹️ Рабочие процессы с приоритетом телеуправления для сбора данных
  • 📦 Встроенная конвертация данных, готовая для обучения LeRobot
  • 🤖 Бытовые навыки, такие как сбор апельсинов, перенос кубиков, уборка столов и складывание ткани
  • ☁️ Постоянные обновления от LightWheel: облачная симуляция, поддержка EnvHub, инструменты Sim2Real и многое другое

Ниже перечислены поддерживаемые в настоящее время задачи LeIsaac, доступные через LeRobot EnvHub.

Доступные среды

В следующей таблице перечислены все доступные задачи и среды в LeIsaac x LeRobot EnvHub. Вы также можете получить актуальный список сред, выполнив следующую команду:

python scripts/environments/list_envs.py
ЗадачаИдентификатор средыОписание задачиСвязанный робот
LeIsaac-SO101-PickOrange-v0

LeIsaac-SO101-PickOrange-Direct-v0
Выберите три апельсина и положите их на тарелку, затем верните манипулятор в исходное положение.Одноплечевой SO101 Follower
LeIsaac-SO101-LiftCube-v0

LeIsaac-SO101-LiftCube-Direct-v0
Поднимите красный куб.Одноплечевой SO101 Follower
LeIsaac-SO101-CleanToyTable-v0

LeIsaac-SO101-CleanToyTable-BiArm-v0

LeIsaac-SO101-CleanToyTable-BiArm-Direct-v0
Выберите два объекта с буквой e и положите их в коробку, затем верните манипулятор в исходное положение.Одноплечий SO101 Follower

Двухплечий SO101 Follower
LeIsaac-SO101-FoldCloth-BiArm-v0

LeIsaac-SO101-FoldCloth-BiArm-Direct-v0
Сложите ткань и верните манипулятор в исходное положение.

Примечание: в этой задаче проверку check_success поддерживает только DirectEnv.
Bi-Arm SO101 Follower

Загрузите LeIsaac непосредственно в LeRobot одной строкой кода

EnvHub: обмен средами LeIsaac через HuggingFace

EnvHub — это наш хаб воспроизводимых сред: запустите упакованную симуляцию одной строкой, сразу приступайте к экспериментам и публикуйте собственные задачи для сообщества.

LeIsaac поддерживает EnvHub, что позволяет использовать или делиться задачами всего несколькими командами.

Как начать работу, настройка окружения

Выполните следующие команды для настройки окружений вашего кода:

# 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.0

Пример использования

EnvHub предоставляет единый интерфейс для всех задач, поддерживаемых LeIsaac. Примеры ниже загружают so101_pick_orange и демонстрируют выполнение случайных действий и интерактивное управление с помощью телеоперации.

Случайное действие

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

Вы должны увидеть, как рука SO101 совершает движения под управлением полностью случайных команд.

Телеуправление

Стек телеуправления LeRobot может управлять симулированной рукой.

Подключите контроллер SO101 Leader и выполните команду калибровки, приведённую ниже.

lerobot-calibrate \
    --teleop.type=so101_leader \
    --teleop.port=/dev/ttyACM0 \
    --teleop.id=leader

Затем запустите скрипт телеуправления.

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

Запуск скрипта позволяет управлять симулированной рукой с помощью физического устройства Leader.

☁️ Облачная симуляция (без GPU)

Нет локального GPU или подходящих драйверов? Ничего страшного! Вы можете запускать LeIsaac полностью в облаке без какой-либо настройки. LeIsaac работает «из коробки» на NVIDIA Brev, предоставляя полностью настроенную среду прямо в вашем браузере.

👉 Начните отсюда: https://lightwheelai.github.io/leisaac/docs/cloud_simulation/nvidia_brev

После развёртывания вашего экземпляра просто откройте ссылку для порта 80 (HTTP), чтобы запустить Visual Studio Code Server (пароль по умолчанию: password). Оттуда вы можете запускать симуляции, редактировать код и визуализировать среды IsaacLab — всё это прямо из веб-браузера.

Без GPU, без драйверов, без локальной установки. Просто нажмите и запустите.

Дополнительные примечания

Мы поддерживаем соответствие покрытия EnvHub задаче LeIsaac. В настоящее время поддерживаются:

  • so101_pick_orange
  • so101_lift_cube
  • so101_clean_toytable
  • bi_so101_fold_cloth

Переключайте задачи, указывая другой скрипт при вызове make_env, например:

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)

Примечание: при работе с bi_so101_fold_cloth вызывайте initialize() сразу после получения env, прежде чем выполнять какие-либо другие операции:

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...
Update on GitHub