Streaming a camera view in a visualizer
This guide shows how to show ground-truth camera frames from many environments in one live panel of a visualizer. For how the view works and which visualizers support it, see Streaming Camera View.
Quick Start
Run the run_tiled_camera_visualizer.py script in IsaacLab/scripts/tutorials/07_visualizers:
Linux
Windows
See Examples_ below for the two ways to run the script. For the VisualizerCfg fields that
customize streaming, see Configuration_ and Troubleshooting_.
Examples
Running run_tiled_camera_visualizer.py demonstrates two ways to use the streaming camera
view:
- auto-created cameras pointed at and following moving AnymalD robots, shown in the Kit visualizer
- streaming from existing wrist-mounted robot cameras, shown in the Newton visualizer
Example 1: Following AnymalD Robots
Linux
Windows
The script’s KitVisualizerCfg creates cameras that point at and follow each robot’s base
prim, offset by streaming_cam_eye (here (3.0, 3.0, 3.0); try (0, 0, 5) for a
top-down view). Of the 256 environments, 36 are randomly sampled for the camera view.
Watch the embedded video Watch the embedded video
Example 2: Streaming from Robot-Mounted Cameras
Linux
Windows
The Galbot cube-stacking environment ships with wrist-mounted cameras giving an egocentric
view of the gripper, table, and cubes. The script’s NewtonGLVisualizerCfg streams from the
existing sensor at /World/envs/env_.*/Robot/head_camera_sim_view_frame/head_camera; edit
streaming_sensor_prim_path to show a different camera. Of the 25 environments, 12 camera
feeds are shown by default.
Watch the embedded video Watch the embedded video
Configuration
To customize streaming camera behavior, edit the highlighted VisualizerCfg fields in
run_tiled_camera_visualizer.py:
- For auto-created cameras,
streaming_cam_target_prim_pathchooses the followed prim andstreaming_cam_eyesets the camera offset from that prim. Defaults toNone, which causes the visualizer to adopt the first scene camera it discovers at init; no explicit path is needed when aTiledCamerasensor is already in the scene. - For existing scene cameras,
streaming_sensor_prim_pathmust match an Isaac Lab~isaaclab.sensors.Camerasensor prim path in the selected task. streaming_envscontrols how many environment tiles are shown. Pass anintto randomly sample that many environments, or alist[int]to pin specific environment indices.streaming_gt_typesselects which ground-truth types are shown, e.g.["rgb", "depth", "segmentation", "normals"].streaming_depth_min/streaming_depth_maxset the depth colormap range in metres.
Troubleshooting
- If a generated view fails with a missing prim error, verify that
streaming_cam_target_prim_pathresolves in each selected environment; common template forms are/World/envs/*/...and/World/envs/env_.*/.... In most cases you can leave it asNoneand let the visualizer adopt an existing scene camera automatically. - If an existing-camera view reports that no Isaac Lab camera owns the prim, check that
streaming_sensor_prim_pathmatches a~isaaclab.sensors.Camerasensor in the task. - If the depth panel shows a flat color, adjust
streaming_depth_minandstreaming_depth_maxto bracket the expected depth range in your scene. - If the view is too expensive, reduce
streaming_envs,--num_envs, or the camera resolution.
Newton MJWarp with replicate_physics=True and auto-created cameras
With replicate_physics=True, only env_0 has a USD prim after physics
initialization. Cameras for the remaining environments (env_1 through env_{N-1})
are dropped, causing initialization to fail:
Workaround: set streaming_sensor_prim_path to a scene camera that was declared in
the scene config before physics init (for example, a TiledCamera on a vision-based
task).
See also
- Streaming Camera View: how the streaming view works and which visualizers support it
- https://isaac-sim.github.io/IsaacLab/release/3.0.0/source/concepts/visualization.html: visualizer configuration and UI controls
- /source/how-to/record_video: recording the streaming view to video
- /source/how-to/configure_rendering: customizing RTX rendering settings