Connecting to Output
Terminology
The following section describes the Ouster Gemini Detect JSON data streams exposed via MQTT Publishers and TCP Relay Servers (see JSON Data Streams w/Down-sampling, Batching & Field Mapping). These definitions represent a single message, but since batching is inherent to the MQTT Publishers and TCP Servers, messges are wrapped in a JSON array with the data stream name as the field name. This wrapping is enabled by default, but can be overridden by setting “return_as_array” = false for the specific MQTT Publisher/TCP Relay Server configuration. Please note that a malformed JSON message will be received if “return_as_array” is disabled and batching returns more than one message.
Available JSON Streams
object_list
occupations
clusters
diagnostics
aggregation_realtime
aggregation_timeseries
Introduction of Terms
lidar frame: The point cloud data for one revolution for a single lidar sensor.
frame: The output from multiple unique lidar frames (i.e., one lidar frame from Lidar A, one lidar frame from Lidar B). The perception system calculates the object list and occupations on a single frame.
object: A moving entity in the scene which Gemini Detect is tracking over time. An object consists of a position, orientation, velocity, dimensions, and classification but also contains historic data such as how long we’ve been tracking it or what the initial position was when we saw it. An object is associated over time by it’s object id or UUID. More details about what’s contained in an object is listed in Object List Data.
event zone: A user-defined area where object information is desired.
occupation: An object within an event zone at a specific instant in time.
diagnostics: Time-based snapshots of the internal state of perception.
alerts: Error conditions where Gemini Detect is operating outside the desired state.
aggregation: Real-time and time-based aggregates of zone occupations by object classification.
Object List Data
The object list data contains information about all the moving objects in the scene.
Example Batching of one or more Frame(s) in a single Message
{
"object_list": [
{...},
{...},
{...}
]
}
Example Frame
{
"frame_count": 226599,
"timestamp": 1663175920089867
"objects": [
{
"classification": "PERSON",
"classification_confidence": 0,
"classification_ts": 1663175901389312,
"creation_ts": 1663175901389312,
"dimensions": {
"height": 0.6693140268325806,
"length": 0.44045835733413696,
"width": 0.24217760562896729
},
"distance_to_primary_sensor": 1.8241156339645386,
"frame_count": 188,
"heading": 17.792495727539062,
"id": 1094,
"initial_position": {
"x": 0.866864025592804,
"y": -1.3293535709381104,
"z": 1.1521248817443848
},
"num_failed_returns": 0,
"num_points": 1052,
"num_points_from_primary_sensor": 706,
"orientation": {
"qw": 0.9879699945449829,
"qx": 0,
"qy": 0,
"qz": 0.15464559197425842
},
"position": {
"x": 0.9670451879501343,
"y": -1.5673401355743408,
"z": 1.0692270994186401
},
"position_uncertainty": {
"x": 0.00872983346207417,
"y": 0.00872983346207417,
"z": 0.03328978381826185
},
"primary_sensor": "992251000353",
"sub_classification": "",
"sub_classification_confidence": 0,
"sub_classification_ts": 0,
"update_ts": 1663175920076580,
"uuid": "74b4e42e-1989-40d0-91d6-ae498b173001",
"velocity": {
"x": -0.03508763682949244,
"y": 0.01674633024355329,
"z": 0.029468615562023993
},
"velocity_uncertainty": {
"x": 0.7745966692414834,
"y": 0.7745966692414834,
"z": 0.8143665760550121
}
},
{
"classification": "UNKNOWN",
"classification_confidence": 0,
"creation_ts": 1663175902884161,
"dimensions": {
"height": 0.5432571172714233,
"length": 0.48804545402526855,
"width": 0.20569449663162231
},
"distance_to_primary_sensor": 1.8241156339645386,
"frame_count": 171,
"heading": -89.16230010986328,
"id": 1096,
"initial_position": {
"x": 0.9158645868301392,
"y": -1.8394945859909058,
"z": 0.7948745489120483
},
"num_points": 539,
"num_points_from_primary_sensor": 706,
"orientation": {
"qw": 0.7122570276260376,
"qx": 0,
"qy": 0,
"qz": -0.7019187808036804
},
"position": {
"x": 0.7764403223991394,
"y": -1.7604234218597412,
"z": 0.9274996519088745
},
"position_uncertainty": {
"x": 0.00872983346207417,
"y": 0.00872983346207417,
"z": 0.03328978381826185
},
"primary_sensor": "992251000353",
"update_ts": 1663175920076580,
"uuid": "b3caf8eb-8e23-47fe-a839-999f354ae4a0",
"velocity": {
"x": -0.10920844900324483,
"y": 0.31853616628659553,
"z": 0.10758132742665225
},
"velocity_uncertainty": {
"x": 0.7745966692414834,
"y": 0.7745966692414834,
"z": 0.8143665760550121
}
}
]
}
JSON Field Definitions
Field |
Format |
Definition |
---|---|---|
frame_count |
int |
Number of frames since perception started outputting data. This count should always be sequential. |
timestamp |
int |
Timestamp of when the last point cloud arrived which contributed to the object list. Units in microseconds since Jan. 1, 1970. |
objects |
array |
Array of object (s) visible to perception for the current frame |
object
An object visible to perception for the current frame.
Field |
Format |
Definition |
---|---|---|
id |
int |
Unique number identifying object in current running instance of perception. If perception restarts, this count will reset. |
uuid |
string |
Unique UUID for objects over all running instances. If perception restarts, objects in the new running instance will have unique UUID’s relative to all other running instances. |
primary_sensor |
string |
Serial number of the primary lidar sensor with the most points on object. |
distance_to_primary_sensor |
float |
Distance in meters from the primary lidar sensor. |
num_points_from_primary_sensor |
int |
Number of points on object from the primary lidar sensor. |
num_points |
int |
Number of points belonging to the object. |
num_failed_returns |
int |
Number of failed returns in the point cloud for the object. |
classification |
string |
Classification of the object 1 of 6 classes: PERSON, BICYCLE, VEHICLE, LARGEVEHICLE, UNKNOWN, or PROSPECT. |
classification_confidence |
float |
Number between 0 and 1 representing the system’s confidence in the assigned classification. 0 represents no confidence. 1 represents fully confident. |
classification_ts |
int |
Timestamp of the current object classification. Units in microseconds since Jan. 1, 1970. |
sub_classification |
string |
Sub-Classification of the object (only available from DL models). 1 of 6 classes: pedestrian, car, truck, bicycle, bus or trailer. |
sub_classification_confidence |
float |
Number between 0 and 1 representing the system’s confidence in the assigned sub-classification. 0 represents no confidence. 1 represents fully confident. |
sub_classification_ts |
int |
Timestamp of the current object sub-classification. Units in microseconds since Jan. 1, 1970. |
initial_position |
Initial XYZ location of the object in the first frame it was visible in the field of view of the lidars. This position is either in respect to the world reference frame (measured in meters), or are geo-coordinates when a World has been defined and “convert_to_geo_coordinates” = true. |
|
position |
Current XYZ location of the object in the world reference frame (measured in meters), or the geo-coordinates when a World has been defined and “convert_to_geo_coordinates” = true. |
|
position_uncertainty |
Estimated variance of the position measurement. Units in meters^2. |
|
velocity |
Current rate of change in the XYZ position of the object. Velocity is in the world reference frame. Units are in m/s. |
|
velocity_uncertainty |
Estimated variance of the velocity measurement. Units in (m/s)^2. |
|
orientation |
Quaternion representing the orientation of the object with respect to the world reference frame. |
|
heading |
float |
Positive rotation about the z-axis (right-hand rule), or the degrees from True North when a World has been defined and “convert_to_geo_coordinates” = true. Measured off of the positive x-axis. |
dimension |
Length, width, height of the bounding box enclosing all points on the object. Length is the extents along the x-axis, width the extents along the y-axis, height along the z-axis. Axis referenced are the axis of the object with x pointing in the direction of motion, y pointing perpendicular to the left, and z pointing up (right-hand rule). |
|
frame_count |
int |
Number of frames an object has been visible for. This number and the creation_ts number both represent the duration the object has been in the sytem’s field of view. |
creation_ts |
int |
Timestamp when the object was first visible in the system’s field of view. This point in time will be before the object was tracked and classified. This number and frame_count both represent the duration the object has been in the sytem’s field of view. Units in microseconds since Jan. 1, 1970. |
update_ts |
int |
Timestamp the object was last updated. For objects the system has measured in the current frame, this timestamp will be the same as the timestamp at the root level. For objects the system has not measured in the current frame, this timestamp will stay at the timestamp when the object was last measured and lag behind the timestamp at the root level. An object will be considered measured when the lidars have captured a minimum number of points on the target. Units in microseconds since Jan. 1, 1970. |
vector
The initial_position, position, position_uncertainty, velocity, velocity_uncertainty values are all objects with XYZ points and formated as follows.
Field |
Format |
Definition |
---|---|---|
x |
float |
Value relative to the x-axis, or the longitude when a World has been defined and “convert_to_geo_coordinates” = true (geo-coordinates apply to position and position_uncertainty ONLY). |
y |
float |
Value relative to the y-axis, or the latitude when a World has been defined and “convert_to_geo_coordinates” = true (geo-coordinates apply to position and position_uncertainty ONLY). |
z |
float |
Value relative to the z-axis |
orientation
The orientation is in unit quaternion and formated as follows.
Field |
Format |
Definition |
---|---|---|
qw |
float |
Angle of rotation around the axis. |
qx |
float |
Quaternion X Value |
qy |
float |
Quaternion Y Value |
qz |
float |
Quaternion Z Value |
dimensions
The dimensions are in unit meters and formatted as follows.
Field |
Format |
Definition |
---|---|---|
length |
float |
Object length along the x-axis in meters |
width |
float |
Object width along the y-axis in meters |
height |
float |
Object height along the z-axis in meters |
Occupation Data
The occupation data contains information about all objects which intersect an Event Zone.
Example Batching of one or more Frame(s) in a single Message
{
"occupations": [
{...},
{...},
{...}
]
}
Example Frame
{
"timestamp": 1663176519190541,
"occupations": [
{
"id": 1658947733821,
"name": "Desk",
"num_objects": 1,
"num_points": 100,
"objects": [
{
"classification": "PERSON",
"classification_confidence": 0,
"classification_ts": 1663175901389312,
"creation_ts": 1663175901389312,
"dimensions": {
"height": 1.0555479526519775,
"length": 0.713068962097168,
"width": 0.6797903776168823
},
"distance_to_primary_sensor": 1.8241156339645386,
"frame_count": 6169,
"heading": 239.63951110839844,
"id": 1094,
"initial_position": {
"x": 0.866864025592804,
"y": -1.3293535709381104,
"z": 1.1521248817443848
},
"num_failed_returns": 0,
"num_points": 2353,
"num_points_from_primary_sensor": 706,
"orientation": {
"qw": -0.4972730875015259,
"qx": 0,
"qy": 0,
"qz": 0.8675940632820129
},
"position": {
"x": 1.423563003540039,
"y": -1.1258434057235718,
"z": 1.4065864086151123
},
"position_uncertainty": {
"x": 0.0087298334620742,
"y": 0.0087298334620742,
"z": 0.03328978381826278
},
"primary_sensor": "992251000353",
"sub_classification": "",
"sub_classification_confidence": 0,
"sub_classification_ts": 0,
"update_ts": 1663176519190541,
"uuid": "74b4e42e-1989-40d0-91d6-ae498b173001",
"velocity": {
"x": -0.07373628162375315,
"y": 0.17994346251739213,
"z": 0.05531235350852935
},
"velocity_uncertainty": {
"x": 0.7745966692415875,
"y": 0.7745966692415875,
"z": 0.8143665760552492
}
}
]
},
{
"id": 1659039089180,
"name": "Coffee Station",
"num_objects": 0,
"num_points": 0,
"objects": []
},
{
"id": 1659467677889,
"name": "Office",
"num_objects": 2,
"num_points": -1,
"objects": [
{
"classification": "PERSON",
"classification_confidence": 0,
"creation_ts": 1663175901389312,
"dimensions": {
"height": 1.0555479526519775,
"length": 0.713068962097168,
"width": 0.6797903776168823
},
"distance_to_primary_sensor": 1.8241156339645386,
"frame_count": 6169,
"heading": 239.63951110839844,
"id": 1094,
"initial_position": {
"x": 0.866864025592804,
"y": -1.3293535709381104,
"z": 1.1521248817443848
},
"num_points": 2353,
"num_points_from_primary_sensor": 706,
"orientation": {
"qw": -0.4972730875015259,
"qx": 0,
"qy": 0,
"qz": 0.8675940632820129
},
"position": {
"x": 1.423563003540039,
"y": -1.1258434057235718,
"z": 1.4065864086151123
},
"position_uncertainty": {
"x": 0.0087298334620742,
"y": 0.0087298334620742,
"z": 0.03328978381826278
},
"primary_sensor": "992251000353",
"update_ts": 1663176519190541,
"uuid": "74b4e42e-1989-40d0-91d6-ae498b173001",
"velocity": {
"x": -0.07373628162375315,
"y": 0.17994346251739213,
"z": 0.05531235350852935
},
"velocity_uncertainty": {
"x": 0.7745966692415875,
"y": 0.7745966692415875,
"z": 0.8143665760552492
}
},
{
"classification": "UNKNOWN",
"classification_confidence": 0,
"creation_ts": 1663176266987224,
"dimensions": {
"height": 0.4143267869949341,
"length": 0.47537946701049805,
"width": 0.21244263648986816
},
"distance_to_primary_sensor": 1.8241156339645386,
"frame_count": 2515,
"heading": -27.986698150634766,
"id": 1097,
"initial_position": {
"x": 1.0187989473342896,
"y": -2.223712205886841,
"z": 0.8246035575866699
},
"num_points": 427,
"num_points_from_primary_sensor": 706,
"orientation": {
"qw": 0.9703238010406494,
"qx": 0,
"qy": 0,
"qz": -0.24180926382541656
},
"position": {
"x": 0.9871895909309387,
"y": -2.073474645614624,
"z": 0.806154191493988
},
"position_uncertainty": {
"x": 0.0087298334620742,
"y": 0.0087298334620742,
"z": 0.03328978381826278
},
"primary_sensor": "992251000353",
"update_ts": 1663176519186659,
"uuid": "9d0c0960-41db-4aec-91f0-9ab961435418",
"velocity": {
"x": 0.023203769245295436,
"y": 0.08712463675627366,
"z": 0.0022661226717978836
},
"velocity_uncertainty": {
"x": 0.7745966692415875,
"y": 0.7745966692415875,
"z": 0.8143665760552492
}
}
]
}
],
}
JSON Field Definitions
Field |
Format |
Definition |
---|---|---|
timestamp |
int |
Timestamp of when the last point cloud arrived which contributed to the object list. Units in microseconds since Jan. 1, 1970. |
occupations |
array |
Array of Event Zones occupations (s) for the current frame |
occupations
Occupations for a given Event Zone for the current frame.
Field |
Format |
Definition |
---|---|---|
id |
int |
Event Zone unique identifier |
name |
string |
Event Zone human-readable name |
num_objects |
int |
Number of objects occupying the Event Zone for the current frame |
num_points |
int |
Number of points occupying the Event Zone for the current frame. A value of -1 indicates point count is disabled for the given Event Zone. |
objects |
array |
Object List Data for the objects occupying the Event Zone for the current frame |
Clusters
Clusters contains summary information about each moving cluster in the scene.
Example Batching of one or more Frame(s) in a single Message
{
"clusters": [
{...},
{...},
{...}
]
}
Example Frame
{
"timestamp": 1711227039549025,
"clusters": [
{
"primary_sensor": "992144000616",
"distance_to_primary_sensor": 4.379119873046875,
"num_points_from_primary_sensor": 23,
"num_points": 30,
"position": {
"x": 0.9018294811248779,
"y": -4.280246257781982,
"z": 1.217104196548462
},
"orientation": {
"qw": 0.9920055270195007,
"qx": 0,
"qy": 0,
"qz": 0.1261943131685257
},
"heading": 14.499475752803729,
"dimensions": {
"length": 0.3176957368850708,
"width": 0.18461894989013672,
"height": 0.3064082860946655
},
"creation_ts": 1711227039549025
},
{
"primary_sensor": "992144000616",
"distance_to_primary_sensor": 1.542967677116394,
"num_points_from_primary_sensor": 377,
"num_points": 429,
"position": {
"x": 0.8063753843307495,
"y": -1.3227678537368774,
"z": 1.1185648441314697
},
"orientation": {
"qw": 0.9989724159240723,
"qx": 0,
"qy": 0,
"qz": -0.04532269760966301
},
"heading": -5.195334386220284,
"dimensions": {
"length": 0.40606147050857544,
"width": 0.1962677240371704,
"height": 0.5081561803817749
},
"creation_ts": 1711227039549025
}
]
}
JSON Field Definitions
Field |
Format |
Definition |
---|---|---|
timestamp |
int |
Timestamp of when the last point cloud arrived which contributed to the cluster list. Units in microseconds since Jan. 1, 1970. |
clusters |
array |
Array of cluster (s) visible to perception for the current frame |
cluster
A cluster visible to perception for the current frame.
Field |
Format |
Definition |
---|---|---|
primary_sensor |
string |
Serial number of the primary lidar sensor with the most points on cluster. |
distance_to_primary_sensor |
float |
Distance in meters from the primary lidar sensor. |
num_points_from_primary_sensor |
int |
Number of points on cluster from the primary lidar sensor. |
num_points |
int |
Number of points belonging to the cluster. |
position |
Current XYZ location of the cluster in the world reference frame, or the geo-coordinates when a World has been defined and “convert_to_geo_coordinates” = true. |
|
orientation |
Quaternion representing the orientation of the cluster with respect to the world reference frame. |
|
heading |
float |
Positive rotation about the z-axis (right-hand rule), or the degrees from True North when a World has been defined and “convert_to_geo_coordinates” = true. Measured off of the positive x-axis. |
dimension |
Length, width, height of the bounding box enclosing all points on the cluster. Length is the extents along the x-axis, width the extents along the y-axis, height along the z-axis. Axis referenced are the axis of the cluster with x pointing in the direction of motion, y pointing perpendicular to the left, and z pointing up (right-hand rule). |
|
creation_ts |
int |
Timestamp when the object was first visible in the system’s field of view. This point in time will be before the object was tracked and classified. This number and frame_count both represent the duration the object has been in the sytem’s field of view. Units in microseconds since Jan. 1, 1970. |
Processed Output
Diagnostics Attributes
Compute device, lidar sensor and software Attributes will be published to the Gemini Portal when any value changes. The current attribute and telemetry diagnostics values can also be requested at any time via the Lidar Hub’s /diagnostics REST API resource.
Example Batching of one or more Frame(s) in a single Message
{
"diagnostics": [
{...},
{...},
{...}
]
}
Example Frame
{
"hardware_id": "*1234567890",
"customer_id": "73bbb8a6-ffd7-4898-a8dd-8003441ec724",
"label": "Site A",
"latitude": 37.76466741329934,
"longitude": -122.4136976526134,
"azimuth": 57.6,
"compute": {
"host_name": "CATALYST-PRO-01",
"mac_address": "FF:FF:FF:FF:FF:FF",
"architecture": "x86_64",
"is_arm": false,
"has_gpu": false,
"os_version": "",
"last_upgrade": "",
"last_upgrade_timestamp": 0,
"total_cpu_cores": 16,
"total_memory": 33354051584,
"total_disk_space": 982141468672,
"boot_timestamp": 1702226939,
"health": "ONLINE"
},
"lidars": [
{
"model": "OS1",
"serial_number": "992144000616",
"hostname": "os-992144000616.local.",
"ip_address": 255.255.255.255,
"node_id": "",
"beam_configuration": "128",
"firmware": {
"version": "v2.3.1",
"image": "ousteros-image-prod-aries-v2.5.3+20240111055903"
},
"position": {
"x": -122.4136976526134,
"y": 37.76466741329934,
"z": 3.42
},
"connection_status": "connected",
"status": "RUNNING",
"is_ml": false,
"host_health": "ONLINE",
"health": "ONLINE"
}
],
"nodes": [
{
"hostname": "NODE-A,
"id": "ABCD1234EFGH5678",
"license": "none",
"position": {
"x": 12.37,
"y": -8.97,
"z": 0.01
},
"perception_client": "connected",
"port": 1234,
"raw_frame_client": "connected",
"rest_client": "connected",
"host_health": "ONLINE",
"health": "ONLINE"
}
],
"solutions_agent": {
"software_version": "2.2.0",
"package_version": "2.2.0-1,
"is_running": true,
"is_software_repository_available": true,
"software_repository_version": ""
},
"perception_server": {
"software_version": "2.2.0",
"settings_version": 5,
"is_ml": false,
"is_aggreagtor": false,
"is_running": true,
"is_paused": false,
"license": "none",
"num_inclusion_zones": 0,
"num_exclusion_zones": 0,
"configuration": {
},
"extrinsics": {
}
},
"event_zone_server": {
"software_version": "2.2.0",
"settings_version": "1.0.0",
"is_running": true,
"license": "none",
"num_event_zones": 0,
"configuration": {
},
"event_zones": {
}
},
"lidar_hub": {
"software_version": "2.2.0",
"settings_version": "2.2.0.1",
"license": "none",
"is_running": true,
"diagnostics_enabled": true,
"aggregation_enabled": false,
"mqtt_publishers": 0,
"tcp_relay_servers": 2,
"datarecorders": [
],
"configuration": {
},
"is_scout": false
},
"health": "ONLINE",
"is_scout": false,
"diagnostics_version": 2.2.0
}
JSON Field Definitions
Field |
Format |
Description |
---|---|---|
|
|
identifying ID of Edge Device (MAC Address or Agent Locking Code) |
|
|
Your Gemini Portal Customer ID (provided by Ouster) |
|
|
User-defined label displayed in the Gemini Portal and used as an MQTT Publisher configuration variable |
|
|
Lidar Hub world latitude |
|
|
Lidar Hub world longitude |
|
|
Lidar Hub world azimuth |
|
|
Compute Device details |
|
|
Host name of the compute device |
|
|
MAC Address of the compute device |
|
|
Compute device CPU architecture (x86_64, aarch64) |
|
|
Indicator if the compute device CPU architecture is identified as ARM |
|
|
Indicator if at least one compute device GPU has been detected |
|
|
Operating system of the compute device |
|
|
Description of last OS upgrade performed on the compute device |
|
|
Timestamp of last OS upgrade performed on the compute device (microseconds since Jan. 1, 1970) |
|
|
Number of CPU cores on the compute device |
|
|
Total memory installed in compute device (bytes) |
|
|
Total storage installed in compute device (bytes) |
|
|
System boot time (seconds since Jan. 1, 1970) |
|
|
Determined health of the compute device (ONLINE / WARNING / OFFLINE) |
|
|
Array of active Lidar sensors |
|
|
Lidar sensor model |
|
|
Lidar sensor serial number |
|
|
Lidar sensor host name |
|
|
Lidar sensor IP Address |
|
|
Lidar sensor beam configuration as reported by the firmware |
|
|
Lidar Firmware details |
|
|
Lidar sensor firmware version as reported by the firmware |
|
|
Lidar sensor firmware image as reported by the firmware |
|
|
Lidar sensor position (geo-coordinates if Lidar Hub world is set, otherwise cartesian coordinates in the world reference frame) |
|
|
x cartesian coordinates or longitude |
|
|
x cartesian coordinates or latitude |
|
|
height in meters |
|
|
Lidar sensor connection status |
|
|
Lidar sensor status as reported by the firmware |
|
|
Indicator if sensor is being used for ML Perception |
|
|
Health of the lidar sensor’s host |
|
|
Determined health of the lidar sensor (ONLINE / WARNING / OFFLINE) |
|
|
Array of active Leaf Nodes for Aggregator when Distributed Perception in use |
|
|
Host name of the Leaf Node compute device |
|
|
Leaf Node ID when sensor is running as part a Distributed Perception Aggregator |
|
|
Leaf Node license details |
|
|
Leaf Node position (geo-coordinates if Lidar Hub world is set, otherwise cartesian coordinates in the world reference frame) |
|
|
x cartesian coordinates or longitude |
|
|
x cartesian coordinates or latitude |
|
|
height in meters |
|
|
Indicator of connectivity w/Perception Aggregator |
|
|
Perception Aggregator listening port |
|
|
Perception Aggregator’s web socket connection status to the Leaf Node |
|
|
Perception Aggregator’s REST API connection status to the Leaf Node |
|
|
Health of the Perception Aggregator |
|
|
Determined health of the Leaf Node (ONLINE / WARNING / OFFLINE) |
|
|
Ouster Solutions Agent details |
|
|
Ouster Solutions Agent software version |
|
|
Ouster Solutions Agent package version (DEB/RPM/etc.) |
|
|
Indication if the Ouster Solutions Agent is running |
|
|
Indicator if registry.ouster.com is available |
|
|
Latest package version available in registry.ouster.com |
|
|
Perception Server details |
|
|
Perception Server software version |
|
|
Perception Server settings version |
|
|
Indication if the Perception Server is running ML Perception |
|
|
Indication if the Perception Server is running as a Distributed Perception Aggregator |
|
|
Indication if the Perception Server is running |
|
|
Indication if the Perception Server is paused on a replay |
|
|
Perception Server license details |
|
|
Number of Perception Server inclusion zones |
|
|
Number of Perception Server exclusion zones |
|
|
Perception Server configuration |
|
|
Perception Server extrinsics |
|
|
Event Zone Server details |
|
|
Event Zone Server software version |
|
|
Event Zone Server settings version |
|
|
Indication if the Event Zone Server is running |
|
|
Event Zone Server license details |
|
|
Number of Event Zone Server event zones |
|
|
Event Zone Server configuration |
|
|
Event Zone Server Event Zones |
|
|
Lidar Hub details |
|
|
Lidar Hub software version |
|
|
Lidar Hub settings version |
|
|
Lidar Hub license details |
|
|
Indication if the Lidar Hub is running |
|
|
Indication if Diagnostics are enabled |
|
|
Indication if Aggregation is enabled |
|
|
Number of configured MQTT publishers |
|
|
Number of configured TCP Relay Servers |
|
|
List of configured Data Recorders |
|
|
Lidar Hub configuration |
|
|
Indication if Lidar Hub is running as a Scout (standalone w/out a Perception Server) |
|
|
Determined health of the Perception System (ONLINE / WARNING / OFFLINE) |
|
|
Indication if Lidar Hub is running as a Scout (standalone w/out a Perception Server) |
|
|
Version of this message |
Diagnostics Telemetry
Compute device, lidar sensor and software Telemetry will be generated at the diagnostics_interval_secs and published to the Gemini Portal and an internal memory-based broker for consumption by MQTT Publishers, TCP Relay Servers and Data Recorders. The current attribute and telemetry diagnostics values can also be requested at any time via the Lidar Hub’s /diagnostics REST API resource.
Example Batching of one or more Frame(s) in a single Message
{
"diagnostics": [
{...},
{...},
{...}
]
}
Example Frame
{
"hardware_id": "*1234567890",
"latitude": 37.76466741329934,
"longitude": -122.4136976526134,
"azimuth": 57.6,
"compute": {
"cpu_utilization": 19.6,
"cpu_core_utilization": [
18.9,
18.7,
21.9,
16.8,
19.3,
16.9,
27.6,
16.9
],
"cpu_temperature_deg_c": 73,
"cpu_core_temperature_deg_c": [
73,
72,
69,
70
],
"gpu_utilization": 0,
"gpu_temperature_deg_c": 0,
"available_memory": 18890395648,
"available_disk_space": 762672287744
},
"lidars": [
{
"model": "OS1",
"serial_number": "992144000616",
"firmware": {
"input_current_ma": 704,
"input_voltage_mv": 24044,
"internal_temperature_deg_c": 0,
"phase_lock_status": "DISABLED",
"timestamp_ns": 1727503038782740
},
"position": {
"x": -122.4136976526134,
"y": 37.76466741329934,
"z": 3.42
},
"num_background_points": 83010,
"num_foreground_points": 416,
"num_failed_points": 865,
"num_no_return_points": 46781,
"num_zone_filtered_points": 4,
"num_ground_points": 0,
"num_clusters": 6,
"num_filtered_clusters": 0,
"percentage_incomplete_frames": 0,
"tilt_since_reset": 0.08322851640914329
}
],
"nodes": [
],
"solutions_agent": { },
"perception_server": {
"up_time": 0,
"num_objects": 0,
"num_websocket_clients": 3,
"num_tcp_clients": 3,
"largest_arrival_delta": 134,
"lowest_frame_rate": 5.979538020892506,
"mean_frame_rate": 10.872046880266147,
"benchmarks": [
],
"timestamp": 1660673730063520
},
"event_zone_server": {
"up_time": 0,
"num_occupations": 0,
"num_websocket_clients": 2,
"num_tcp_clients": 2,
"timestamp": 1660673730110978
},
"lidar_hub": {
"up_time": 338111.726481,
"cloud_ingress_mbps": 0.0000176,
"cloud_ingress_bytes": 132,
"cloud_ingress_entries": 1,
"cloud_egress_mbps": 0.0030373333333333333,
"cloud_egress_bytes": 22780,
"cloud_egress_entries": 6,
"mqtt_publishers_connected": 4,
"mqtt_publishers_mbps": 0.0028957333333333333,
"mqtt_publishers_bytes": 21718,
"mqtt_publishers_entries": 4,
"tcp_relay_server_connections": 0,
"tcp_relay_server_mbps": 0,
"tcp_relay_server_bytes": 0,
"tcp_relay_server_entries": 0,
"datarecorders_disk_bytes": 10573,
"datarecorders_disk_entries": 3,
"timestamp": 1710781920008258
},
"timestamp": 1660698930000000,
"is_scout": false,
"diagnostics_version": "2.0.0"
}
JSON Field Definitions
Field |
Format |
Description |
---|---|---|
|
|
MAC Address of the compute device (MAC Address or Agent Locking Code) |
|
|
Lidar Hub world latitude |
|
|
Lidar Hub world longitude |
|
|
Lidar Hub world azimuth |
|
|
Compute Device details |
|
|
Total CPU utilization across all cores |
|
|
CPU utilization by core |
|
|
Average CPU temperature across all cores |
|
|
CPU temperature by core |
|
|
Total GPU utilization across all cores |
|
|
Average GPU temperature across all cores |
|
|
Available memory on the compute device (bytes) |
|
|
Available storage on the compute device (bytes) |
|
|
Array of active Lidar sensors |
|
|
Lidar sensor model |
|
|
Lidar senor serial number |
|
|
Lidar Firmware details |
|
|
Lidar sensor input current as reported by the firmware (milliamps) |
|
|
Lidar sensor input voltage as reported by the firmware (millivolts) |
|
|
Lidar sensor internal temperature as reported by the firmware (degrees celsius) |
|
|
Lidar sensor phase lock status as reported by the firmware |
|
|
Timestamp of these values as reported by the firmware (nanoseconds since Jan. 1, 1970) |
|
|
Lidar sensor position (geo-coordinates if Lidar Hub world is set, otherwise cartesian coordinates in the world reference frame) |
|
|
x cartesian coordinates or longitude |
|
|
x cartesian coordinates or latitude |
|
|
height in meters |
|
|
Number of background points for the last frame |
|
|
Number of foreground points for the last frame |
|
|
Number of failed points for the last frame |
|
|
Number of points not returned for the last frame |
|
|
Number of points filted by inclusion and exclusion zones for the last frame |
|
|
Number of points filtered as ground points for the last frame |
|
|
Number of clusters detected for the last frame |
|
|
Number of clusters remaining after filtering and merging for the last frame |
|
|
Percentage of incomplete frames |
|
|
Change in sensor tilt since last reset |
|
|
Array of active Leaf Nodes for Aggregator when Distributed Perception in use |
|
|
Ouster Solutions Agent details |
|
|
Perception Server details |
|
|
Perception Server run time since last started |
|
|
Number of objects currently being tracked by the Perception Server |
|
|
Number of web socket clients connected to the Perception Server |
|
|
Number of TCP clients connected to the Perception Server |
|
|
Difference between all the arrival times of all the sensors |
|
|
The longest time to process a frame in the last 10 seconds |
|
|
The average time to process a frame |
|
|
Perception Server benchmark statistics |
|
|
Timestamp of these values (microseconds since Jan. 1, 1970) |
|
|
Event Zone Server details |
|
|
Event Zone Server run time since last started |
|
|
Number of objects currently being positioned inside event zone(s) |
|
|
Number of web socket clients connected to the Event Zone Server |
|
|
Number of TCP clients connected to the Event Zone Server |
|
|
Timestamp of these values (microseconds since Jan. 1, 1970) |
|
|
Lidar Hub details |
|
|
Lidar Hub run time since last started |
|
|
Cloud inbound Megabits/Second of last timeseries |
|
|
Cloud inbound total Bytes of last timeseries |
|
|
Cloud inbound total Entries of last timeseries |
|
|
Cloud outbound Megabits/Second of last timeseries |
|
|
Cloud outbound total Bytes of last timeseries |
|
|
Cloud outbound total Entries of last timeseries |
|
|
Number of configured MQTT publishers connected to their endpoint |
|
|
MQTT Megabits/Second of last timeseries |
|
|
MQTT total Bytes of last timeseries |
|
|
MQTT total Entries of last timeseries |
|
|
Number of TCP clients connected to Lidar Hub TCP Relay Servers |
|
|
TCP Megabits/Second of last timeseries |
|
|
TCP total Bytes of last timeseries |
|
|
TCP total Entries of last timeseries |
|
|
Data Recorder total Bytes of last timeseries |
|
|
Data Recorder total Entries of last timeseries |
|
|
Timestamp of these values (microseconds since Jan. 1, 1970) |
|
|
Timestamp of this message (microseconds since Jan. 1, 1970) |
|
|
Indication if Lidar Hub is running as a Scout (standalone w/out a Perception Server) |
|
|
Version of this message |
Dignostics Alerts
Lidar sensor and software Alerts will be published when first detected and when any update is reported to the internal memory-based broker for consumption by MQTT Publishers, TCP Relay Servers and Data Recorders.
Example
{
"alerts": [
{
"active": true,
"category": "SHOT_LIMITING",
"cursor": 2833,
"alert_code": "0x0100000f",
"level": "WARNING",
"source_info": "OS1-992144000616",
"id": 13962805723535194000,
"msg": "Shot limiting mode is active. Laser power is partially attenuated;
please see user guide for heat sinking requirements.",
"msg_verbose": "Shot limiting has started.",
"first_occurred": 0,
"last_occurred": 0,
"active_count": 0
},
{
"active": true,
"category": "UDP_TRANSMISSION",
"cursor": 2822,
"alert_code": "0x01000016",
"level": "WARNING",
"source_info": "OS1-992144000616",
"id": 11061546793406626000,
"msg": "Could not send lidar data UDP packet to host; check that network is up.",
"msg_verbose": "Failed to send lidar UDP data to destination host 10.0.0.39:34642",
"first_occurred": 0,
"last_occurred": 0,
"active_count": 0
}
]
}
JSON Field Definitions
Field |
Format |
Description |
---|---|---|
|
|
Array of active alerts |
|
|
Indication if the alert is still active |
|
|
Alert category (application specific) |
|
|
Alert cursor (lidar only) |
|
|
Alert code (application specific - hex) |
|
|
Alert level (application specific) |
|
|
Alert source information (application specific) |
|
|
Unique alert ID (application specific) |
|
|
Alert message |
|
|
Additional alert details (if any) |
|
|
First occurrence of the alert code (micro/nano seconds since Jan. 1, 1970) |
|
|
Last occurrence of the alert code (micro/nano seconds since Jan. 1, 1970) |
|
|
Total occurrences of the alert code |
Aggregation RealTime Events
Event Zone real-time occupancy events will be generated in real-time and published at transmit_realtime_hertz to the internal memory-based broker for consumption by the Gemini Portal, MQTT Publishers, TCP Relay Servers and Data Recorders.
Example Batching of one or more Frame(s) in a single Message
{
"aggregation_realtime": [
{...},
{...},
{...}
]
}
Example Frame
{
"timestamp": 1711227039549025,
"aggregation_realtime": [
{
"id": 1659467677889,
"name": "Office",
"timestamp": 1660664443771926,
"current_point_count": 350,
"classification_metrics": [
{
"description": "ALL",
"active_occupants": 115,
"total_visitors": 1200,
"total_visits": 1275,
"last_update": 1660664443771926,
"sub_classification_metrics": []
},
{
"description": "PERSON",
"active_occupants": 105,
"total_visitors": 1160,
"total_visits": 1235,
"last_update": 1660664443771926,
"sub_classification_metrics": [
{
"description": "pedestrian",
"active_occupants": 105,
"total_visitors": 1160,
"total_visits": 1235,
"last_update": 1660664443771926
}
]
}
]
},
{
"id": 1658947733821,
"name": "Desk",
"timestamp": 1660664443771926,
"current_point_count": -1,
"classification_metrics": [
{
"description": "ALL",
"active_occupants": 1,
"total_visitors": 1,
"total_visits": 2,
"last_update": 1660664443771926,
"sub_classification_metrics": []
},
{
"description": "PERSON",
"active_occupants": 1,
"total_visitors": 1,
"total_visits": 2,
"last_update": 1660664443771926,
"sub_classification_metrics": [
{
"description": "pedestrian",
"active_occupants": 1,
"total_visitors": 1,
"total_visits": 2,
"last_update": 1660664443771926
}
]
},
{
"description": "UNKNOWN",
"active_occupants": 1,
"total_visitors": 1,
"total_visits": 1,
"last_update": 1660664443771926,
"sub_classification_metrics": []
}
]
}
]
}
JSON Field Definitions
Field |
Format |
Definition |
---|---|---|
|
|
Timestamp of when the update was generated. Units in microseconds since Jan. 1, 1970. |
|
|
Array of Event Zone real-time occupancy updates |
realtime update
Real-time occupancy for a given Event Zone.
Field |
Format |
Description |
---|---|---|
|
|
Event Zone ID |
|
|
Event Zone name |
|
|
Timestamp of the real-time event (microseconds since Jan. 1, 1970) |
|
|
Number of points currently occupying the zone (-1 indicates this feature is disabled) |
|
|
Array of object classifications occupying the zone |
|
|
Object classification name (“ALL” indicates an aggregate of all classifications) |
|
|
Number of objects currently occupying the zone |
|
|
Total unique visitors that visited the zone at least once. Uniqueness is defined by each object’s uuid. |
|
|
Total visits to the zone. |
|
|
Last zone update (microseconds since Jan. 1, 1970) |
|
|
Optional array of object sub-classifications occupying the zone. ML Perception required. |
|
|
Object sub-classification name |
|
|
Number of objects currently occupying the zone |
|
|
Total unique visitors that visited the zone at least once. Uniqueness is defined by each object’s uuid. |
|
|
Total visits to the zone. |
|
|
Last zone update (microseconds since Jan. 1, 1970) |
Aggregation TimeSeries Aggregates
Zone timeseries aggregates will be generated every timeseries_secs and published at transmit_timeseries_hertz to the internal memory-based broker for consumption by the Gemini Portal, MQTT Publishers, TCP Relay Servers and Data Recorders.
Example Batching of one or more Frame(s) in a single Message
{
"aggregation_timeseries": [
{...},
{...},
{...}
]
}
Example Frame
{
"timestamp": 1711227039549025,
"aggregation_timeseries": [
{
"id": 1659467677889,
"name": "Office",
"timestamp": 1660664440000000,
"current_point_count": 350,
"current_max_point_count": 870,
"current_avg_point_count": 125,
"overall_max_point_count": 1190,
"overall_avg_point_count": 85,
"classification_metrics": [
{
"description": "ALL",
"active_occupants": 1,
"max_active_occupants": 1,
"avg_active_occupants": 1,
"total_visitors": 5,
"total_visits": 5,
"new_visitors": 1,
"new_visits": 1,
"departed_visitors": 0,
"current_max_speed": 0.227,
"current_avg_speed": 0.122,
"overall_max_speed": 0.22669327197460112,
"overall_avg_speed": 0.122,
"current_avg_dwell": 0,
"overall_avg_dwell": 0,
"last_update": 1660664449970829,
"sub_classification_metrics": []
},
{
"description": "PERSON",
"active_occupants": 1,
"max_active_occupants": 1,
"avg_active_occupants": 1,
"total_visitors": 5,
"total_visits": 5,
"new_visitors": 1,
"new_visits": 1,
"departed_visitors": 0,
"current_max_speed": 0.227,
"current_avg_speed": 0.122,
"overall_max_speed": 0.22669327197460112,
"overall_avg_speed": 0.122,
"current_avg_dwell": 0,
"overall_avg_dwell": 0,
"last_update": 1660664449970829,
"sub_classification_metrics": [
{
"description": "pedestrian",
"active_occupants": 1,
"max_active_occupants": 1,
"avg_active_occupants": 1,
"total_visitors": 5,
"total_visits": 5,
"new_visitors": 1,
"new_visits": 1,
"departed_visitors": 0,
"current_max_speed": 0.227,
"current_avg_speed": 0.122,
"overall_max_speed": 0.22669327197460112,
"overall_avg_speed": 0.122,
"current_avg_dwell": 0,
"overall_avg_dwell": 0,
"last_update": 1660664449970829
}
]
}
]
},
{
"id": 1658947733821,
"name": "Desk",
"timestamp": 1660664440000000,
"current_point_count": -1,
"current_max_point_count": -1,
"current_avg_point_count": 0,
"overall_max_point_count": -1,
"overall_avg_point_count": 0,
"classification_metrics": [
{
"description": "ALL",
"active_occupants": 1,
"max_active_occupants": 1,
"avg_active_occupants": 1,
"total_visitors": 5,
"total_visits": 5,
"new_visitors": 1,
"new_visits": 1,
"departed_visitors": 0,
"current_max_speed": 0.227,
"current_avg_speed": 0.122,
"overall_max_speed": 0.22669327197460112,
"overall_avg_speed": 0.122,
"current_avg_dwell": 0,
"overall_avg_dwell": 0,
"last_update": 1660664449970829,
"sub_classification_metrics": []
},
{
"description": "PERSON",
"active_occupants": 1,
"max_active_occupants": 1,
"avg_active_occupants": 1,
"total_visitors": 5,
"total_visits": 5,
"new_visitors": 1,
"new_visits": 1,
"departed_visitors": 0,
"current_max_speed": 0.227,
"current_avg_speed": 0.122,
"overall_max_speed": 0.22669327197460112,
"overall_avg_speed": 0.122,
"current_avg_dwell": 0,
"overall_avg_dwell": 0,
"last_update": 1660664449970829,
"sub_classification_metrics": [
{
"description": "pedestrian",
"active_occupants": 1,
"max_active_occupants": 1,
"avg_active_occupants": 1,
"total_visitors": 5,
"total_visits": 5,
"new_visitors": 1,
"new_visits": 1,
"departed_visitors": 0,
"current_max_speed": 0.227,
"current_avg_speed": 0.122,
"overall_max_speed": 0.22669327197460112,
"overall_avg_speed": 0.122,
"current_avg_dwell": 0,
"overall_avg_dwell": 0,
"last_update": 1660664449970829,
}
]
}
]
},
{
"id": 0,
"name": "Edge-FF:FF:FF:FF:FF:FF",
"timestamp": 1660664440000000,
"classification_metrics": [
{
"description": "ALL",
"active_occupants": 1,
"max_active_occupants": 1,
"avg_active_occupants": 1,
"total_visitors": 5,
"total_visits": 5,
"new_visitors": 1,
"new_visits": 1,
"departed_visitors": 0,
"current_max_speed": 0.227,
"current_avg_speed": 0.124,
"overall_max_speed": 0.22669327197460112,
"overall_avg_speed": 0.124,
"current_avg_dwell": 0,
"overall_avg_dwell": 0,
"last_update": 1660664449970829,
"sub_classification_metrics": []
},
{
"description": "PERSON",
"active_occupants": 1,
"max_active_occupants": 1,
"avg_active_occupants": 1,
"total_visitors": 1,
"total_visits": 1,
"new_visitors": 1,
"new_visits": 1,
"departed_visitors": 0,
"current_max_speed": 0.227,
"current_avg_speed": 0.124,
"overall_max_speed": 0.22669327197460112,
"overall_avg_speed": 0.124,
"current_avg_dwell": 0,
"overall_avg_dwell": 0,
"last_update": 1660664449970829,
"sub_classification_metrics": [
{
"description": "pedestrian",
"active_occupants": 1,
"max_active_occupants": 1,
"avg_active_occupants": 1,
"total_visitors": 1,
"total_visits": 1,
"new_visitors": 1,
"new_visits": 1,
"departed_visitors": 0,
"current_max_speed": 0.227,
"current_avg_speed": 0.124,
"overall_max_speed": 0.22669327197460112,
"overall_avg_speed": 0.124,
"current_avg_dwell": 0,
"overall_avg_dwell": 0,
"last_update": 1660664449970829
}
]
}
]
}
]
}
JSON Field Definitions
Field |
Format |
Definition |
---|---|---|
timestamp |
int |
Timestamp of when the update was generated. Units in microseconds since Jan. 1, 1970. |
aggregation_timeseries |
array |
Array of Event Zone timeseries aggregates |
timeseries aggregates
Timeseries aggregates for a given Event Zone.
Field |
Format |
Description |
---|---|---|
|
|
Event Zone ID |
|
|
Event Zone name |
|
|
Number of points currently occupying the zone (-1 indicates this feature is disabled) |
|
|
Maximum number of points occupying the zone in this timeseries (-1 indicates this feature is disabled) |
|
|
Average number of points occupying the zone in this timeseries |
|
|
Maximum number of points occupying the zone (-1 indicates this feature is disabled) |
|
|
Average number of points occupying the zone |
|
|
Timestamp of the timeseries aggregate (microseconds since Jan. 1, 1970) |
|
|
Array of object classifications occupying the zone |
|
|
Object classification name (“ALL” is an aggregate of all classifications) |
|
|
Number of objects currently occupying the zone |
|
|
Maximum number of objects occupying the zone in this timeseries |
|
|
Average number of objects occupying the zone in this timeseries |
|
|
Total unique visitors to the zone. Uniqueness is defined by each object’s uuid. |
|
|
Total visits to the zone |
|
|
New unique visitors to the zone in this timeseries. Uniqueness is defined by each object’s uuid. |
|
|
New visits to the zone in this timeseries |
|
|
Total unique visitors that left the zone in this timeseries. Uniqueness is defined by each object’s uuid. |
|
|
Maximum speed observed in the zone in this timeseries |
|
|
Average speed observed in the zone in this timeseries |
|
|
Maximum speed observed in the zone |
|
|
Average speed observed in the zone |
|
|
Average dwell observed in the zone in this timeseries |
|
|
Average dwell observed in the zone |
|
|
Last zone update (microseconds since Jan. 1, 1970) |
|
|
Optional array of object sub-classifications occupying the zone. ML Perception required. |
|
|
Object sub-classification name |
|
|
Number of objects currently occupying the zone |
|
|
Maximum number of objects occupying the zone in this timeseries |
|
|
Average number of objects occupying the zone in this timeseries |
|
|
Total unique visitors to the zone. Uniqueness is defined by each object’s uuid. |
|
|
Total visits to the zone |
|
|
New unique visitors to the zone in this timeseries. Uniqueness is defined by each object’s uuid. |
|
|
New visits to the zone in this timeseries |
|
|
Total unique visitors that left the zone in this timeseries. Uniqueness is defined by each object’s uuid. |
|
|
Maximum speed observed in the zone in this timeseries |
|
|
Average speed observed in the zone in this timeseries |
|
|
Maximum speed observed in the zone |
|
|
Average speed observed in the zone |
|
|
Average dwell observed in the zone in this timeseries |
|
|
Average dwell observed in the zone |
|
|
Last zone update (microseconds since Jan. 1, 1970) |
Aggregation Alerts
The Aggregation module will generate real-time alerts whenever the occupancy of a zone exceeds a pre-defined Zone Alert condition set in a zone’s metadata. These alerts can be polled at any time via the Lidar Hub’s /event_zones/alerts REST API resource.
Example
"alert": [
{
"id": 1234567890,
"name": "Warning Zone",
"severity": "WARNING",
"occupancy": 3,
"message": "Zone is not empty"
},
{
"id": 0987654321,
"name": "Crosswalk Zone",
"severity": "MAJOR",
"occupancy": 1,
"message": "Vehicle detected in crosswalk!"
}
]
JSON Field Definitions
Field |
Format |
Definition |
---|---|---|
|
|
Array of real-time occupancy alerts |
|
|
Event Zone ID |
|
|
Event Zone name |
|
|
Severity of the event |
|
|
Current occupancy of the Event Zone |
|
|
Message associated with the alert |