Skip to content

navila

NaVILA (Cheng et al., RSS 2025, "NaVILA: Legged Robot Vision-Language-Action Model for Navigation", arXiv 2412.04453) behind the arena_planners bridge, with the VLN-CE checkpoint a8cheng/navila-llama3-8b-8f. A Llama-3 8B VILA model reads the instruction and eight RGB frames (seven sampled from the episode history plus the current one) and answers in text, such as "The next action is move forward 75 cm." or "The next action is turn left 30 degree.". The planner parses the answer into discrete moves as NaVILA's VLN-CE evaluation does. Decoding is greedy.

arena feature planners add navila
arena launch sim:=gazebo robot:=jackal[camera=vln_navila] robot.planner:=navila robot.mobile.goal:=instruction

robot.planner:=navila selects robot.mobile:=vla. The planner accepts the instruction only (goal_inputs: [instruction]), so robot.mobile.goal:=instruction is also the default. It needs a CUDA GPU with about 17 GB free in float16 (15.8 GB of weights, 16.3 GB peak), a query takes about 0.25 s on an RTX PRO 6000 Blackwell.

Inputs

Datasource Topic (jackal camera=vln_navila) Model input
rgb (image sensor) vln_camera/image 512x512 RGB from the bridge, resized to 384x384 (PIL bicubic), scaled to [-1, 1]
instruction from the goal inserted verbatim in double quotes into NaVILA's VLN-CE prompt

The vln_navila camera matches NaVILA's VLN-CE sensor: 512x512, 90 degrees HFOV, 1.25 m above the floor. Each frame becomes 196 tokens (SigLIP so400m, second to last layer, 2x2 token merge). Episodes shorter than eight frames are padded with black frames at the front. Longer ones sample seven history frames evenly over all frames seen so far.

Primitives

The planner returns discrete commands (action_type: discrete) and the bridge executes each as a motion primitive:

Answer Command Execution (units)
... is move forward N cm forward N // 25 steps of 0.25 m, N snapped to 25/50/75 unless a multiple of 25
... is turn left N degree left N // 15 steps of 15 degrees, N snapped to 15/30/45 unless a multiple of 15
... is turn right N degree right as left, clockwise
any answer containing stop none ends the episode for the planner

A missing number means 25 cm or 15 degrees, and every answer runs at least one step. The planner queues the remaining steps and returns them one per observation without querying the model, recording the camera frame of every step, which reproduces VLN-CE's one frame per executed action. An answer that matches no pattern moves forward one step and logs a warning once.

On stop the planner latches: it drops the queue, stops calling the model and, for a goto phase with signal: arrived, keeps sending arrived until the next reset. Without an expected signal it stands still. Before an instruction arrives (a reset without a goal) or with a blank instruction, the planner stands still without running the model.

Instructions come from the scenario, per goto phase:

robots:
  - start: [1.0, 1.0, 0.0]
    phases:
      - goto: [8.0, 8.0, 0.0]
        instruction: walk past the sofa and stop at the door to the kitchen
        signal: arrived

The goal pose decides success but never reaches the planner.

Config

Set in planner.yaml > config, override per launch with robot.mobile.config.<key>:=<value>.

Key Default Effect
device auto Torch device, auto picks CUDA when available.
dtype float16 float16 (NaVILA's evaluation precision), bfloat16 (its training precision) or float32.
execution units units runs one 0.25 m or 15 degree primitive per observation, as in VLN-CE. amount sends each answer as one move sized by its distance or angle, so the history holds one frame per answer.

Tests

pytest in this directory runs the prompt, tokenizer, frame sampling, projector, parser and queue tests on CPU with a randomly initialized tiny model. They need only the tokenizer files under model/llm/ and skip without them. tests/test_episode.py runs the real checkpoint over 24 frames of a Matterport walkthrough with its RxR instruction and skips without the weights, without a CUDA GPU with 30 GB free, or without NAVILA_EPISODE_GIF pointing to VLN_CE/data/res/rxr_teaser.gif of https://github.com/jzhzhang/NaVid-VLN-CE. NAVILA_DTYPE picks its precision.

Weights and license

arena feature planners add navila fetches the checkpoint (about 16 GB: llm/, vision_tower/, mm_projector/) at a pinned revision into model/, every file checked against its sha256. The model card carries no license. Its base, Llama-3-VILA1.5-8B, is CC BY-NC 4.0 on top of Meta Llama 3, and the navigation data derives from Matterport3D: use the weights for non-commercial research only. The code is Apache 2.0, see LICENSE and ATTRIBUTION.md. Cite Cheng et al. 2025 when using this planner:

@inproceedings{cheng2025navila,
        title={Navila: Legged robot vision-language-action model for navigation},
        author={Cheng, An-Chieh and Ji, Yandong and Yang, Zhaojing and Gongye, Zaitian and Zou, Xueyan and Kautz, Jan and B{\i}y{\i}k, Erdem and Yin, Hongxu and Liu, Sifei and Wang, Xiaolong},
        booktitle={RSS},
        year={2025}
}