Radar Sensors#

An ovrtx radar scene needs an OmniRadar sensor prim and a RenderProduct whose PointCloud RenderVar requests the detection channels the application will read. The same USDA pattern is used by C and Python.

Configure the Radar Prim#

    def OmniRadar "Radar" (
        prepend apiSchemas = ["OmniSensorGenericRadarWpmDmatAPI"]
    )
    {
        token omni:sensor:WpmDmat:elementsCoordsType = "CARTESIAN"
        double2 omni:sensor:frameRate = (10, 1)

        double3 xformOp:translate = (0, 0, 1)
        float3 xformOp:rotateXYZ = (90, 0, -90)
        uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ"]
    }
    def OmniRadar "Radar" (
        prepend apiSchemas = ["OmniSensorGenericRadarWpmDmatAPI"]
    )
    {
        token omni:sensor:WpmDmat:elementsCoordsType = "CARTESIAN"
        double2 omni:sensor:frameRate = (10, 1)

        double3 xformOp:translate = (0, 0, 1)
        float3 xformOp:rotateXYZ = (90, 0, -90)
        uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ"]
    }

Use OmniSensorGenericRadarWpmDmatAPI for the generic WPM DMAT radar model. The default scan is s001. Apply additional scan configuration API schemas only when authoring multiple scan patterns.

Important Output Attributes#

Attribute

Values

Use

omni:sensor:WpmDmat:auxOutputType

NONE, BASIC, EXTRA, FULL

Controls auxiliary data in GenericModelOutput. It does not add PointCloud channels.

omni:sensor:WpmDmat:elementsCoordsType

CARTESIAN or SPHERICAL

Coordinate representation for detections.

omni:sensor:WpmDmat:outputFrameOfReference

SENSOR, WORLD, or CUSTOM

Frame of reference for all outputs.

omni:sensor:WpmDmat:customFrameOfReferenceTrafo

[x, y, z, roll, pitch, yaw]

Custom transform used when the output frame is CUSTOM.

Configure PointCloud Output#

    def "Render"
    {
        def "Products"
        {
            def RenderProduct "RadarProduct"
            {
                rel camera = </World/Radar>
                rel orderedVars = [<../../Vars/PointCloud>]
            }
        }

        def "Vars"
        {
            def RenderVar "PointCloud"
            {
                uniform string sourceName = "PointCloud"
                string[] channels = [
                    "Coordinates",
                    "Counts",
                    "RadialVelocityMs"
                ]
            }
        }
    }
    def "Render"
    {
        def "Products"
        {
            def RenderProduct "RadarProduct"
            {
                rel camera = </World/Radar>
                rel orderedVars = [<../../Vars/PointCloud>]
            }
        }

        def "Vars"
        {
            def RenderVar "PointCloud"
            {
                uniform string sourceName = "PointCloud"
                string[] channels = [
                    "Coordinates",
                    "Counts",
                    "RCS",
                    "RadialVelocityMs"
                ]
            }
        }
    }

Request only the channels the consumer needs. Counts and Flags are auto-enabled and delivered like ordinary channel tensors.

Radar Channels#

Channel

Meaning

Counts

Number of delivered detections. Use it to bound every per-detection tensor.

Coordinates

Detection coordinates in the configured coordinate representation and frame.

RCS

Radar cross section in dBsm.

RadialVelocityMs

Signed Doppler radial velocity in meters per second.

TimeOffsetNs

Per-detection time offset relative to scan start.

Flags

Per-detection status bits. The VALID bit is 0x40.

Interpreting Radar Output#

Within the first Counts[0] entries, a detection is valid when Flags[i] & 0x40 is non-zero. RadialVelocityMs is signed; approaching detections can be negative, so use absolute value when checking only for motion.

For map/read code, see Reading Sensor PointClouds. For material behavior that affects radar returns, see Non-Visual Materials.