Workflows
Run Inference (Simulation)
Once you have a checkpoint, run the policy against the simulation. The same smolvla container runs inference on your local GPU or offloads to a remote GPU — you only flip one env var (SMOLVLA_SERVER_URL).
Step 1 — Start the simulation
This launches Gazebo (which publishes the /scene_camera/image and /wrist_camera/image feeds plus /joint_states) and the controllers the policy drives.
To preview what the policy sees, run rqt_image_view on your host (ros2 run rqt_image_view rqt_image_view) and use the topic dropdown at the top — you can easily toggle between /scene_camera/image and /wrist_camera/image.
Step 2 — Run the inference node (new terminal)
That single command is the whole thing. On startup the node:
- Locates the checkpoint — auto-discovers the newest
pretrained_modelunderCHECKPOINT_SEARCH_ROOT(default/data/checkpoints). SetSMOLVLA_CHECKPOINTto pin a specific step instead. - Subscribes to the cameras — defaults to scene + wrist (what the moveit-trained model uses). The server checks the images it receives against the checkpoint's expected cameras and errors clearly if one is missing. For a wrist-only model, set
SMOLVLA_CAMERAS(see below). - Sends the task —
TASKdefaults to the prompt the model was trained on; override it to steer the robot.
Options
| Variable | Default | Description |
|---|---|---|
SMOLVLA_CHECKPOINT | (empty → auto-discovers latest) | Full path to pin a checkpoint, e.g. /data/checkpoints/smolvla_ar4_moveit/checkpoints/050000/pretrained_model |
CHECKPOINT_SEARCH_ROOT | /data/checkpoints | Where to search for the latest checkpoint when SMOLVLA_CHECKPOINT is empty |
TASK | (the model's training prompt) | Natural-language instruction sent to the model |
SMOLVLA_SERVER_URL | (empty → run locally) | Set to a remote server (e.g. http://localhost:8000) to offload to a remote GPU — see Remote GPU |
DEVICE | cuda | cpu / mps for local inference without an NVIDIA GPU |
SMOLVLA_CAMERAS | (empty → scene + wrist) | Camera→topic map, e.g. wrist_camera:/wrist_camera/image for a wrist-only model, or scene_camera:/scene_camera/image,wrist_camera:/wrist_camera/image |
HZ | 15.0 | Control frequency in Hz |
USE_SIM_TIME | true | true for sim, false for real hardware |
SPEED_SCALE | 1.0 | Scale all joint motions (lower = more cautious) |