LeRobot documentation
LeIsaac × LeRobot EnvHub
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_orangeso101_lift_cubeso101_clean_toytablebi_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...