S2E is a robot learning framework for building visual navigation models โ pretrain on web videos with imitation learning, then finetune with reinforcement learning in URBAN-SIM. We provide a 3DGS-based navigation benchmark, a pretraining pipeline, an RL finetuning pipeline, and a model zoo with unified inference interfaces.
To ensure the best experience with URBAN-SIM, please review the following hardware guidelines:
- Recommended Hardware:
- OS: Ubuntu 22.04; 24.04.
- GPU: Nvidia GPU with at least 16GB RAM and 12GB VRAM.
- Tested GPUs: Nvidia RTX-4080, RTX-5080, RTX-5090, L40S.
- Storage: Minimum of 50GB free space.
# Clone the repository (includes third_party submodules)
git clone -b main --recurse-submodules https://github.com/VAIL-UCLA/S2E.git ~/S2E
cd ~/S2E
# If you already cloned without --recurse-submodules:
# git submodule update --init --recursive
# Install Isaacsim 5.x from github repo: https://github.com/isaac-sim/IsaacSim
suppose that you install it in:
# ${HOME}/IsaacSim/
and the builded software in:
# _build/linux-x86_64/release
Then try:
cd ~/S2E
ln -s ${HOME}/IsaacSim/_build/linux-x86_64/release ./_isaac_sim
# Isaac Sim root directory
export ISAACSIM_PATH="${HOME}/IsaacSim/_build/linux-x86_64/release"
# Isaac Sim python executable
export ISAACSIM_PYTHON_EXE="${ISAACSIM_PATH}/python.sh"
# note: you can pass the argument "--help" to see all arguments possible.
${ISAACSIM_PATH}/isaac-sim.sh# Bundled at third_party/isaaclab-extension
cd third_party/isaaclab-extension
# install the isaaclab following the doc# Bundled at third_party/gsplat
pip install ninja numpy jaxtyping rich
cd third_party/gsplat
pip install -e . --no-build-isolation -v
# For the Vid2Sim rasterizer, use third_party/vid2sim-rasterizer-gsplat instead4. Download 3D-GS scenarios from UCLA-VAIL/NavBenchGS
pip install -e NavbenchGS
python NavbenchGS/scripts/download_scenarios.py --output-dir data/NavBenchGSAfter download, data/NavBenchGS/ is laid out as:
data/NavBenchGS/
โโโ vid2sim_raw/ # Raw per-scene captures
โ โโโ 0000/, 0001/, 0003/, ..., 0044/ # 4-digit scene IDs (non-contiguous)
โ โโโ old-ped/ # Legacy pedestrian captures
โ โโโ invalid_list.txt # Scene IDs to skip
โ โโโ upload.sh
โโโ vid2sim_torch/ # PyTorch-formatted per-scene data
โ โโโ 0000/, 0001/, 0003/, ... # same scene IDs as vid2sim_raw
โโโ vid2sim_starting_ending_position.json # Start/goal positions per scene
โโโ gs.gif # Preview animation
โโโ README.md
Note: the dataset is gated โ accept the terms on HuggingFace and log in (huggingface-cli login or pass --token) before downloading.
Unified waypoint-to-action debug for both robots โ pure-pursuit drives COCO (Ackermann) or Go2 (JIT locomotion policy):
# COCO โ Ackermann car on a circle
${ISAACSIM_PYTHON_EXE} NavbenchGS/scripts/run_waypoint_to_action.py --enable_cameras \
--robot coco --trajectory circle --num_steps 3000
# Go2 โ JIT policy; defaults to robots/go2/unitree_go2_actor.pt
${ISAACSIM_PYTHON_EXE} NavbenchGS/scripts/run_waypoint_to_action.py --enable_cameras \
--robot unitree_go2 --trajectory circle --forward_speed 0.6Robot articulation configs and action terms live in NavbenchGS/navbench_gs/robots/ (coco.py, unitree_go2.py). USDs + Go2 policy ship under robots/.
The web-pretrained S2E navigation model is released in the UCLA-VAIL/Navigation-Model-Zoo-Public model zoo โ exported to ONNX behind a unified inference interface (shared with GNM, ViNT, NoMaD, CityWalker, MBRA, and MIMIC).
โ ๏ธ Pretrained (BC) weights only. The released checkpoint is the behavior-cloning, web-pretrained model (the IL pretraining output), not the RL-finetuned policy from the paper. Use it as a navigation prior / BC baseline; RL-finetuned weights will be released separately.
1. Download the pretrained model
pip install -U "huggingface_hub[cli]"
hf download UCLA-VAIL/Navigation-Model-Zoo-Public --include "S2E/*" --local-dir ./nav_model_zoo2. Run inference โ requires onnxruntime-gpu (or onnxruntime), numpy, torch, opencv-python, pyyaml:
import numpy as np
from S2E.inference import S2ENavigator # run from ./nav_model_zoo
nav = S2ENavigator(device="cuda") # device="cpu" if no GPU
# obs: the robot's last 11 RGB frames, (1, 11, 3, H, W) float32 in [0, 1]
obs = np.random.rand(1, 11, 3, 256, 256).astype(np.float32)
# point-goal in the standard frame (x = forward, y = left, meters)
traj, scores = nav.inference_trajectory(obs, goal_xy=np.array([5.0, 0.0])) # (1, 1, 10, 2) m
vw, best = nav.inference_vw(obs, goal_xy=np.array([5.0, 0.0])) # (1, 2) = [v, ฯ]
nav.reset() # clear PD smoothing between episodes3. Drive a robot on NavBench-GS. S2ENavigator outputs local waypoints / (v, ฯ) in the same standard frame that NavBench-GS's waypointโaction layer consumes (pure-pursuit โ Ackermann for COCO, or the Go2 locomotion policy), so the pretrained model plugs straight into the benchmark's control stack. Closed-loop, model-driven NavBench-GS rollouts are being released โ see the Release Timeline below.
- NavBench-GS
- 3D-GS Scenarios
- Benchmark engine
- Benchmark detail settings
- Pretraining framework and model zoo
- Finetuning framework and trained weights
The project can not be built without the following open-sourced projects:
-
Omniverse: https://www.nvidia.com/en-us/omniverse/
-
IsaacSim: https://developer.nvidia.com/isaac/sim
-
IsaacLab: https://github.com/isaac-sim/IsaacLab
-
URBAN-SIM: https://github.com/metadriverse/urban-sim
-
Vid2Sim: https://github.com/Vid2Sim/Vid2Sim
-
CityWalker: https://github.com/ai4ce/CityWalker
-
VisualNav-Transformer: https://github.com/robodhruv/visualnav-transformer
If you find S2E helpful for your research, please cite the following BibTeX entry.
@inproceedings{he2025seeing,
title={From Seeing to Experiencing: Scaling Navigation Foundation Models with Reinforcement Learning},
author={Honglin He and Yukai Ma and Brad Squicciarini and Wayne Wu and Bolei Zhou},
booktitle={International Conference on Learning Representations},
year={2026}
}