Skip to content

InternRobotics/REAL

Repository files navigation

REAL logo

REAL: Exploratory, Communicative, and Deployable Embodied Agents

Dataset and Checkpoint Paper Project Page Code MIT License


📰 News

  • [2026.06.18] 🎉 Our paper has been accepted to ECCV 2026! 🥳
  • [2026.06.01] 🚀 Training code released.
  • [2026.03.31] Procedural task generation and trajectory annotation utilities released.
  • [2026.03.24] Simulation environment and MCP server released.

Introduction

REAL is a sim-to-real-consistent framework for interactive open-world mobile manipulation. Agents explore from raw RGB observations, use deployable navigation and manipulation tools, and communicate with a simulated user to resolve ambiguous instructions without privileged simulator information.

Contributions

  • REAL framework: Non-privileged visual exploration with interactive intent alignment and an MCP-based tool interface.
  • Training and benchmark: A hierarchical SFT and online RL pipeline evaluated on REAL-Bench, which contains 241 tasks across four task families.
  • Sim-to-real deployment: 56.9% success on interactive tasks and 78.3% success over 60 real-world robot episodes.

Repository layout

Path Purpose
mcp_server/ MCP tools, server, perception utilities, and simulation environment setup
configs/ Portable demo task configuration
proc_datagen/ Procedural task generation, annotation, and physics verification
training/qwen3vl_sft/ Public Qwen3-VL SFT launch and dataset templates
scripts/ Demo and batch-processing entrypoints

Available MCP Tools

Tool Description
list_receptacles List all receptacles by room
navigate_to Navigate to a furniture receptacle
explore_receptacle Survey all objects on the current receptacle
focus_on Focus camera on a specific object by marker ID
find_objects Find and highlight objects of a given category in view
highlight_receptacles Highlight all visible receptacle surfaces
pick Pick up an object by marker ID
place Place held object onto a receptacle surface
open / close Operate articulated doors

Each tool call returns an RGB observation image and structured text feedback from the simulation.


Quick Start

1. Clone with submodules

git clone --recurse-submodules https://github.com/InternRobotics/REAL.git
cd REAL

2. Install InternUtopia

Please refer to the InternUtopia documentation.

3. Install other dependencies

pip install -r requirements.txt

Optional Qwen3-VL training dependencies are managed by the upstream Qwen3-VL fine-tuning environment rather than this runtime requirements file.

4. Download and unpack assets

Download assets.tar.gz from Google Drive and extract it into the repository root.

After extraction, the assets/ directory should contain the scenes, models, objects, materials, and metadata required by the demo.

Copy .env.example to .env only when you need an OpenAI-compatible perception endpoint. Never commit the populated .env file.

5. Run the demo MCP server

./scripts/demo/run_mcp_server_demo.sh

The server binds to 127.0.0.1:8080 by default. Override it with HOST=<host> and PORT=<port>, then connect an MCP-compatible agent to http://127.0.0.1:8080/sse.

Task Generation Pipeline

The procedural task generation pipeline lives in proc_datagen/. It produces pick-and-place task configs for training and evaluation, in two stages:

flowchart LR
    A["task_generator.py\n(task gen + static filter)"]
    -->|"YAML per\nscene/type"| B["verify_proc.py\n(physics simulation)"]
    B -->|pass| C["physics_passed.yaml"]
    B -->|fail| D["physics_failed.yaml"]
    A -->|"--to-json"| E["JSON files\n(backward compat)"]
    A -->|"--polish"| A
Loading

Task types

Type Description
basic Simple pick-and-place with same-type furniture distractors
distractor Same-category object distractors; uses detailed_caption for grounding
articulation Store / retrieve involving articulated furniture (open/close door)
interactive Same-purpose different-category distractors + fuzzy description (requires user interaction to disambiguate)
gather Multi-source gather: collect N objects to one destination

Asset setup — MesaTask USD files

The task generator relies on object USD files from the MesaTask dataset. After downloading, set MESATASK_USD_ROOT to the directory containing the .usd files before running any pipeline script:

export MESATASK_USD_ROOT=/path/to/mesatask_download/object_usds

The metadata file assets/metadata/consolidated_asset_library_with_size.json stores only filenames (e.g. abc123.usd); the code resolves them against MESATASK_USD_ROOT at runtime.

Stage 1 — Task generation & static filtering

# Generate all 5 task types, with inline static placement check
# Output: proc_datagen/configs/{scene_id}/{task_type}.yaml
python proc_datagen/task_generator.py \
    --tasks all \
    --output-dir proc_datagen/configs \
    --verify-placement \
    --occ-map-root assets/metadata \
    --seed 42

# Generate only specific types
python proc_datagen/task_generator.py \
    --tasks interactive gather \
    --output-dir proc_datagen/configs

# Polish task descriptions with an LLM after generation
# (requires OPENAI_API_KEY and openai package)
python proc_datagen/task_generator.py \
    --tasks all \
    --output-dir proc_datagen/configs \
    --verify-placement \
    --polish

# Also export flat JSON files (backward compat)
python proc_datagen/task_generator.py \
    --tasks all \
    --output-dir proc_datagen/configs \
    --verify-placement \
    --to-json

Output: proc_datagen/configs/{scene_id}/{task_type}.yaml — per-scene per-type YAML files containing objects (with positions) and episodes (with placements).

Stage 2 — Physics verification

Run physics simulation to filter out tasks where objects fall or leave the surface:

The provided batch script processes articulation, interactive, distractor, and gather. The basic task type can be checked manually with verify_proc.py using the same environment variables shown below.

# Verify all scenes and merge results (default)
./scripts/filter/batch_filter_proc.sh

# Only run physics (skip merge)
./scripts/filter/batch_filter_proc.sh --stage physics

# Only merge already-finished results
./scripts/filter/batch_filter_proc.sh --stage merge

Results per task type:

proc_datagen/verify_results/{task_type}/
    physics_valid.yaml                     # merged passing episodes across all scenes
    {scene_id}/physics_passed.yaml         # per-scene passing episodes
    {scene_id}/physics_failed.yaml         # per-scene failed episodes

To run a single scene manually (e.g. for debugging):

TASK_SOURCE_PATH=proc_datagen/configs/MVUCSQAKTKJ5EAABAAAAABQ8/interactive.yaml \
OUTPUT_PATH=proc_datagen/verify_results/interactive/MVUCSQAKTKJ5EAABAAAAABQ8 \
python proc_datagen/verify_proc.py --max-tasks 20

Trajectory Annotation

proc_datagen/trajectory_annotation/ converts existing replay PKL files and their metadata into step-level JSON annotations using an OpenAI-compatible multimodal endpoint. It annotates previously recorded trajectories; it does not record trajectories itself.

Provide OPENAI_API_KEY and, when needed, OPENAI_BASE_URL and OPENAI_MODEL. Create a job configuration based on proc_datagen/trajectory_annotation/config_example.json, then run:

python proc_datagen/trajectory_annotation/annotate_trajectory.py \
    --config /path/to/trajectory_annotation_config.json

Do not commit credentials, private replay data, or machine-specific paths.


Qwen3-VL SFT Training

REAL provides public launch templates and dataset configuration examples for supervised fine-tuning on top of the official Qwen3-VL fine-tuning workflow. Reproduction requires cloning the official Qwen3-VL repository and setting up its official fine-tuning environment first.

See training/qwen3vl_sft/README.md for the full training guide, launch script, data config example, DeepSpeed config, and minimal dataset example.

The template entrypoint is:

git clone https://github.com/QwenLM/Qwen3-VL.git
export QWEN3VL_FINETUNE_ROOT=/path/to/Qwen3-VL/qwen-vl-finetune
hf download Qwen/Qwen3-VL-8B-Instruct \
    --local-dir models/Qwen3-VL-8B-Instruct
export MODEL_NAME_OR_PATH=models/Qwen3-VL-8B-Instruct
export DATASETS=real_basic_pnp

bash training/qwen3vl_sft/train_qwen3vl_sft.sh

This repository does not publish private cluster scripts, internal data paths, service credentials, model weights, or RL training code.


📑 Citation

The paper citation will be added after publication. Until then, please cite this repository URL and the paper title:

Exploratory, Communicative, and Deployable: Vision-Driven Embodied Agents for Open-World Mobile Manipulation.


Resources

Dataset & Checkpoint

The dataset and model checkpoint links will be added here after release.

Paper

The paper link will be added here after publication.

Project Page

REAL project page


Acknowledgement

REAL is built on top of InternUtopia.

We thank the teams behind Model Context Protocol and NVIDIA Isaac Sim for their foundational work.


License

This project is licensed under the MIT License.

About

Official open-source repository for REAL

Resources

License

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors