Omniverse Ultrasonic Extension#
Introduction#
In Omniverse the Ultrasonic Sensor (USS) extension consists of the WPM-based simulation plugin and a sample material plugin.
Plugins#
WpmUltrasonicPlugin#
Introduction
This is a generic USS simulation using WPM. Configuration options are available in the sensor group config file (JSON format).
Plugin Name
omni.sensors.nv.ultrasonic.wpm_ultrasonic.plugin
Parameters & Attributes
Attributes are specified through a sensor group config JSON file, which can be found in “data/sensors/ultrasonic” in “omni.sensors/common” extension. The desired sensor profile is set via the USDA attribute “custom token rtxsensor:modelConfig” (see Example in USDA).
Available Parameterizations
USS Model |
Params File name |
---|---|
Example |
Example.json |
Users can create custom parameterization files but they have to be placed in the common extension under (omni.sensors.nv.common/data/) the parameterization name is then the file name. This JSON file can be read with the ProfileReader utility plugin. The parameterization file should be in JSON format and have the following structure:
{
"class": "sensor",
"type": "ultrasonic",
"name": Sensor name (e.g. "Example"),
"driveWorksId": Sensor ID in DriveWorks (currently unused),
"profile":
{
"AzSpanDeg": width of the field in which rays are shot,
"ElSpanDeg": height of the field in which rays are shot,
"RaysPerDeg": ray density per degree,
"TraceTreeDepth": how many times the rays are reflected,
"MembraneDiameter": membrane diameter in meters,
"CenterFrequency": signal center frequency in Hz,
"Bandwidth": signal bandwidth in Hz,
"PulseDuration": duration of pulse in seconds,
"PulsePower": dimensionless pulse power (spread out across rays),
"SampleDuration": time sampling of the waveform in seconds,
"CloseRange": distance at which additonal amplification is applied,
"CloseRangeDecay": distance beyond which the close range amplification starts decaying,
"CloseIndirectAmplBase": base amplification for indirect signal ways in close range,
"CloseDirectAmplBase": base amplification for direct signal ways in close range,
"CloseIndirectAmpl": scaling of the gain function for indirect signal ways in close range,
"CloseDirectAmpl": scaling of the gain function for direct signal ways in close range,
"NoiseMin": dimensionless minimum amplitude of noise,
"NoiseMax": dimensionless maximum amplitude of noise,
"SensorMounts":[
[[ x1, y1, z1], [ roll1, pitch1 (negative up), yaw1]],
[[ x2, y2, z2], [ roll2, pitch2 (negative up), yaw2]],
[[ x3, y3, z3], [ roll3, pitch3 (negative up), yaw3]],
....
],
"RxGroups":[
[0,1],
[0,1,2],
...
],
"FiringSequnce": [
[
[ time_offset1, TxSensor1, RxGroup1, channel1], [ time_offset2, TxSensor2, RxGroup2, channel2], ...
],
[
[ time_offset1, TxSensor1, RxGroup1, channel1], [ time_offset2, TxSensor2, RxGroup2, channel2], ...
],
...
],
"SignalMode": "Chirp or AM",
"GainCoeffs": [
polynomial gain function coefficients
],
"DirectivityCoeffs": [
polynomial directivity function coefficients
]
the latter can be replaced with a directivity table
"DirectivityTable": {
"sensor_id": {
"horizontal": [
[angle1, gain1],
[angle2, gain2],
...
],
"vertical": [
[angle1, gain1],
[angle2, gain2],
...
]
},
...
}
}
Example in USDA
def Camera "Ultrasonic_group"
{
custom token action:camera:name = "Ultrasonic_group"
custom token cameraSensorType = "radar"
custom token rtxsensor:sensorModelConfig = "Example"
custom string sensorModelPluginName = "omni.sensors.nv.ultrasonic.wpm_ultrasonic.plugin"
token visibility = "invisible"
double3 xformOp:rotateYXZ = (85.65653228759767, -3.7055966501766535e-11, 177.71578979492222)
double3 xformOp:scale = (1.0000000000000007, 1.0000000000000004, 1)
double3 xformOp:translate = (-305.4795491922145, -212.8579889951991, 1.7645552181863593)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]
}
Data Structure
USS outputs data organized in signal ways. A signal way is a sequence of samples that are sent from the transmitting sensor to the receiving sensor on a specific channel. Each frame contains a certain amount of signal ways (specific to a model and a firing sequence).
USS can write output as a Generic Model Output (GMO) or in a vendor-specific format. USS outputs a Generic Model Output in the same format as the other sensors. The output is a binary buffer containing the USS data. Each ‘frame’ corresponds to the cumulative result of the whole sensor firing sequence.
The auxiliary data of the GMO (USSAuxiliaryData) structure is as follows:
Field Name |
Type |
Description |
---|---|---|
numSgws |
uint32_t |
Number of signal ways |
numSamplesPerSgw |
uint32_t |
Number of samples in each signal way |
The BasicElements structure of the GMO with USS data should be interpreted as follows:
Field Name |
Type |
Description |
---|---|---|
timeOffsetNs |
int32_t |
Time offset of the signal way in the firing sequence (step 1) |
x |
float |
Transmitting sensor ID (step 1) |
y |
float |
Receiving sensor ID (step 1) |
z |
float |
Channel ID (step 1) |
scalar |
float |
Value in sample |
A sample parser of such generic dump format can be found in: source/extensions/omni.drivesim.sensors.nv.ultrasonic/python/generic_uss_parser.py
USS Data Converter Plugin#
Introduction
This is a data converter plugin implementing the conversion of the binary model output into an ultrasonic output object.
Plugin Name
omni.sensors.nv.ultrasonic.data_converter.plugin
Usage
Using this plugin is quite straighforward and can be illustrated via the following code snippet:
void* modelOutputBinaryBuffer = getBufferSomehow();
ProviderCycle convertedBuffer = carb::getCachedInterface<omni::sensors::ultrasonic::IUltrasonicCycleConverter>()->
convertBuffer(modelOutputBinaryBuffer);
Omnigraph Nodes#
Curently there is only one node in the USS extension. A transcoder which encodes the USS data into a desired format and writes it into file.
TranscoderUltrasonic#
Introduction
The Transcoder node encodes the US data stream into a specified format and writes it into a file.
Omnigraph Node Name
omni.sensors.nv.ultrasonic.TranscoderUltrasonic
Parameters & Attributes
Parameter Name |
Description |
Value Type |
Value Range |
Default Value |
Example |
---|---|---|---|---|---|
signalScaler |
Scaling factor aplied to signals (amplification) |
float |
1.0 |
||
timestampMode |
Mode for the sent timestamp |
string |
VENDOR |
||
dumpPackets |
Dump packets into a file |
bool |
false |
||
vendor |
Vendor of the sensor model |
token |
“generic”, |
“generic” |
|
fileFormat |
File format to dump |
string |
“bin”, “pcap” |
“bin” |
|
fileName |
Name of the file to write binary dumps into |
string |
“” |
||
format |
Packet format |
string |
“” |
USS Encoder Plugin#
Introduction
This plugin contains packet encoders for USS data (generic and vendor-specific).