Camera Sensors#

The deprecated isaacsim.sensors.camera extension is replaced by isaacsim.sensors.experimental.rtx. The replacement keeps the same camera concepts (single camera, batched camera views, single-view depth sensor) but reshapes the Python API to mirror isaacsim.sensors.experimental.physics — array-form transforms, no command-based creation, and a split between authoring (RtxCamera) and runtime (CameraSensor, TiledCameraSensor, SingleViewDepthCameraSensor) classes.

Concept mapping#

isaacsim.sensors.camera (deprecated)

isaacsim.sensors.experimental.rtx

Camera(prim_path, name, frequency, dt, resolution, position, orientation, translation, render_product_path, annotator_device)

CameraSensor(RtxCamera(path, ...), resolution=(W, H), annotators=[...]). The frequency / dt knobs map to RtxCamera(tick_rate=...) (Hz). annotator_device maps to the CPU vs CUDA selection CameraSensor performs in attach_annotators.

Singular position= / orientation= / translation= constructor args

Plural positions=[[...]] / orientations=[[...]] / translations=[[...]] arrays on RtxCamera. Shape (N, 3) / (N, 4); only N=1 is supported per camera.

name= constructor parameter

Removed (was unused).

Camera.add_*_to_frame() / Camera.get_current_frame() (legacy frame-dict APIs)

CameraSensor(annotators=[...]) plus CameraSensor.get_data("annotator-name"). Each annotator is requested explicitly; data is returned per annotator instead of as a frame dict.

Camera fisheyePolynomial distortion APIs

RtxCamera(schemas=["OmniLensDistortionOpenCvFisheyeAPI"], attributes={...}) (or the OpenCV pinhole equivalent). See Calibration and Camera Lens Distortion Models for the supported schemas and the deprecation note on the legacy distortion attributes.

CameraView(prim_paths_expr, name, camera_resolution, output_annotators, positions, translations, orientations, scales, visibilities, reset_xform_properties)

TiledCameraSensor(paths=[...], resolution=(W, H), annotators=[...]). The prim_paths_expr regex selection becomes an explicit list of camera prim paths (or an isaacsim.core.experimental.objects.Camera instance). output_annotators maps directly to annotators=.

SingleViewDepthSensor(prim_path, asset_path, position, translation, orientation)

SingleViewDepthCameraSensor(RtxCamera.create(path, usd_path=asset_path, translations=[[...]], orientations=[[...]]), resolution=(W, H), annotators=["depth_sensor_distance", "depth_sensor_imager", "depth_sensor_point_cloud_color", "depth_sensor_point_cloud_position"]). Post-processing setters (set_sensor_baseline, set_sensor_disparity_confidence, etc.) keep the same names.

Code examples#

Camera — create and read RGB

Old (isaacsim.sensors.camera):

from isaacsim.sensors.camera import Camera

camera = Camera(
    prim_path="/World/Camera",
    resolution=(640, 480),
    frequency=30,
    position=[0.0, 0.0, 1.0],
)
camera.initialize()
camera.add_rgb_to_frame()
frame = camera.get_current_frame()

New (isaacsim.sensors.experimental.rtx):

from isaacsim.sensors.experimental.rtx import CameraSensor, RtxCamera

sensor = CameraSensor(
    RtxCamera(
        "/World/Camera",
        tick_rate=30.0,
        translations=[[0.0, 0.0, 1.0]],
    ),
    resolution=(640, 480),
    annotators=["rgb"],
)
data, info = sensor.get_data("rgb")

CameraView → TiledCameraSensor — batched read

Old (isaacsim.sensors.camera):

from isaacsim.sensors.camera import Camera, CameraView

# CameraView wraps existing camera prims, so author them first.
Camera(prim_path="/World/env_0/Camera", position=[0.0, 0.0, 5.0])
Camera(prim_path="/World/env_1/Camera", position=[2.0, 0.0, 5.0])

view = CameraView(
    prim_paths_expr="/World/env_*/Camera",
    camera_resolution=(256, 256),
    output_annotators=["rgb"],
)

New (isaacsim.sensors.experimental.rtx — explicit path list, or pass a Camera object):

import numpy as np
from isaacsim.core.experimental.objects import Cube
from isaacsim.sensors.experimental.rtx import RtxCamera, TiledCameraSensor

# Author two camera prims (the explicit-list replacement for `prim_paths_expr="..."`).
RtxCamera("/World/env_0/Camera", positions=np.array([[0.0, 0.0, 5.0]]))
RtxCamera("/World/env_1/Camera", positions=np.array([[2.0, 0.0, 5.0]]))

# Optional reference geometry so the cameras have something to render.
Cube("/World/env_0/cube", positions=np.array([[0.0, 0.0, 0.0]]))
Cube("/World/env_1/cube", positions=np.array([[2.0, 0.0, 0.0]]))

tiled = TiledCameraSensor(
    paths=["/World/env_0/Camera", "/World/env_1/Camera"],
    resolution=(256, 256),
    annotators=["rgb"],
)
data, info = tiled.get_data("rgb", tiled=True)

For the per-class API surface, see the Overview and How to Collect Data from a Camera sections in Camera Sensors. For the broader RTX-sensor migration (isaacsim.sensors.rtxisaacsim.sensors.experimental.rtx for Lidar / Radar / Acoustic), see RTX Sensors.