Streaming a camera view in a visualizer
Display ground-truth camera frames from many environments in one live visualizer panel. 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
Code for run_tiled_camera_visualizer.py
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.
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.
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 Camera sensor 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 Camera sensor 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