Skip to main content
Version: 2.3.4

Output

SENSR Output​

To listen to SENSR output, you have to connect to the Master Node. The algo nodes only communicate with the Master Node.

Secure Output

SENSR supports secure output mode. In this mode, all outgoing/incoming packets are secured by SSL. By default, the secure mode is turned off. To enable this, we have to set up 2 things before running SENSR.

  • Generate certificate files. You can make it by running generate_certificate.sh with your ip address of the publishing packets. (E.g. $./generate_certificate.sh 192.168.0.100) The certificate file will be located under $HOME/seoulrobotics/keys Change security.enable_ssl to true in bin/data/app_config/app_settings.toml.

SENSR encodes data processing results with Protobuf and sends it through TCP using Websocket. With SENSR SDK, you can easily receive SENSR output in your C++ client. SENSR SDK code is here

We also provide JavaScript and Python interfaces inside the SDK to easily work with SENSR output in those languages. For more information on how to use JavaScript and Python, please refer to the relevant readme in the SDK repository.

Communication Specification​

Communication ProtocolTCP (Websocket)
Data EncodingProtobuf 3
Output Port5050
Protobuf MessageOutputMessage
Communication ProtocolTCP (Websocket)
Data EncodingProtobuf 3
Output Port5051
Protobuf MessagePointResult

WS and WSS​

SENSR can secure the output channel. To enable secure websocket, please follow steps in section SENSR output.

Output Data Specification​

The Protobuf data specification for all output messages can be found and downloaded from these links:

  1. output.proto
  2. point_cloud.proto

Streaming Data (TCP and Websocket)​

This is a live data stream that can be parsed and processed by external applications.

Output Message​

This is a main message which includes all the output results during runtime of SENSR product. But SENSR does not always fill all the fields because of bandwidth issues. SENSR has update rates internally and each field of this message will be filled according to these rates.

Type: Continuous Stream (every frame)

FieldField sizeData type
timestamp1TimeStamp
stream0-1Stream message
event0-1Event message
custom0-1Custom message

Stream Message​

This message includes output results of SENSR. Each field will be filled according to the update rates of each field. objects : every frame zones : every 10 sec. system : every 1 sec.

Type: Continuous Stream

FieldField sizeData type
objects0-*Object
zones0-*ZoneConfig
health0-1SystemHealth
first_cloud_arrival_timestamp1TimeStamp
Object​

This is the new standard object tracking output. points and histories are optional fields. You can receive these optional fields by setting a specific configuration(β€œcommon.output.publish_point_cloud”).

Type: Continuous Stream (every frame)

FieldSizeData typeNote
id1int32
label1Enumeration0 = None 1 = Car 2 = Pedestrian 3 = Cyclist, 4 = Misc
confidence1float0.0 - 1.0
bbox1BoundingBox
velocity1Vector3 (float)m/s + direction
tracking_status1Enumeration0 = NONE 1 = VALIDATING 2 = INVALIDATING 3 = TRACKING 4 = DRIFTING 5 = EXPIRED
(VALIDATING : Checking validity in the early stage of tracking
INVALIDATING : Short term prediction when tracking is lost in VALIDATING status
TRACKING : Stable tracking (RECOMMENDED VALUE TO USE FOR TRACKING, IGNORE THE REST)
DRIFTING: Short term prediction when tracking is lost in TRACKING status
EXPIRED: Expired tracking)
points0-*byteObject shape (optional)
history0-1HistoryObject tracking history (optional)
prediction0-1PredictionObject position prediction (Not Available)
zone_ids0-*int32List of Zone ids this object currently occupies.
Zone Config​

This is a low frequency message to communicate the zone shapes and locations for you who do not want to use the REST API.

Type: Continuous Stream (low frequency, 1 per 10 seconds or slower)

FieldSizeData typeNote
id1int32Zone id
name1stringZone name
pbox1PolygonBoxArray of X,Y,Z
type1Enumeration0 = None 1 = Event 2 = Exclusion

Event Message​

This message will be filled whenever SENSR detects events. There are 3 types of events. zone, losing, system. Before parsing each field, you need to check the size of each field. The size 0 means no event related to that field.

Type: Trigger on event

FieldField sizeData typeNote
zone0-*ZoneEventZone id
losing0-*LosingEventZone name
system0-1SystemHealthArray of X,Y,Z
Zone Event​

This is an event triggered message. This message gets sent when an object interacts with a zone. Four interactions are: Enter Zone, Exit Zone, Loitering(more than X seconds in a zone) and Velocity(speed above X m/s in a zone).

Type: Trigger on event

FieldsizeData typeNote
timestamp1TimeStampEvent trigger time.
id1int32Zone id
type1Enumeration0 = None, 1 = Entry, 2 = Exit, 3 = Loitering, 4 = Exceed speed
object1ZoneEvent_ObjectObject information
Object in ZoneEvent​

ZoneEvent saves an object of this type.

FieldsizeData typeNote
id1int32
position1Vector3 (float)Object location at time of trigger
heading1FloatYaw (0.0-2.0Pi)
velocity1Vector3 (float)m/s + direction (optional) Filled in case of overspeed events.
Losing Event​

SENSR will send this message when an object is no longer detected.

Type: Trigger on event

FieldsizeData typeNote
timestamp1TimeStamp
id1int32Object id
position1Vector3 (float)Last known location of object
heading1floatYaw (0.0-2.0Pi)
Custom Message​

This message includes additional information of SENSR.

Type: Continuous Stream

FieldsizeData typeNote
field_of_regard0-*PolygonBox
bg_learning_progress1floatBackground learning progress (0.0 - 1.0)
replay1ReplayInfoInformation on current running replay data.
record1RecordingInfoInformation of recording state
profiling1ProfilingResultSetProfiling result of current frame

Point Result​

This is an optional message. If a user wants to get raw point clouds, the user can use this. To get this, the user needs to enable a specific configuration(β€œcommon.output.publish_point_cloud” = 2) in advance. This message increases lots of burden in transfer bandwidth.

Type: Continuous Stream (low frequency, 1 per 10 seconds or slower)

FieldsizeData typeNote
points0-*PointCloud
uid1stringdeprecated
PointCloud​
FieldsizeData typeNote
type1Enumeration0 = None 1 = Ground 2 = Background 3 = Raw
id1stringIdentifier of sensor Format: In Calibration mode(algo uid + β€œ#” + lidar topic) In Runtime mode(meaningless)
points*byte

System Health​

This is part of the Health Monitoring System. This is both a continuous low frequency stream (acting as a heartbeat) and an event trigger stream.

Type: Continuous Stream + Trigger on event

FieldsizeData typeNote
master1Enumeration0 = None 1 = OK 2 = Storage Shortage 3 = SlowDown Error 4 = Internal Error
nodes1-*map<string, NodeHealth>Each algo node health
points*byte
Node Health​

This is part of the System Health message.

FieldsizeData typeNote
status1Enumeration0 = None 1 = OK 2 = ROS Error 3 = Lost Connection 4 = Invalid GPU Configuration
sensors1-*map<string, Enumeration>0 = sensor dead
1 = sensor alive
2 = sensor erroneous(Sensor is obstructed.)
3 = sensor tilted
4 = sensor suspended(Sensor points are not transmitted temporarily.)

Shared Data Types​

Bounding Box​

This is part of the Object message.

FieldsizeData typeNote
position1Vector3 (float)In meters ( 1.0f = 1m )
size1Vector3 (float)X: Relative to Yaw (longitudinal) Y: Relative to Yaw (lateral) Z: Height
yaw1FloatHeading (0.0-2.0Pi)
Polygon box​

This is part of the Zone Config message.

FieldsizeData typeNote
points3-*Vector2 (float)Shape of zone in 2D
min_z1floatBase point in z axis
max_z1floatHeight of zone
History​

This is part of the Object message.

FieldsizeData typeNote
states0-*History.StateList of history state
History.State​

This is part of the Object message.

FieldsizeData typeNote
positions1Vector3 (float)object’s tracked XYZ position.
timestamp1Timestamptimestamp of the tracked XYZ position.
Prediction​

This is part of the Object message.

FieldsizeData typeNote
positions0-*Vector3 (float)List of predicted positions of an object
ReplayInfo​

Replay detail information.

FieldsizeData typeNote
current_index1int32Current playing frame index in replay
RecordingInfo​

Recording detail information.

FieldsizeData typeNote
saving_progress1floatProgress of saving file(0.0 - 1.0)
ProfilingResult​

This indicates the profiling status of the latest frame.

FieldsizeData typeNote
processing_times1map<string, uint64>Map of processing time(Unit: ns) Valid key is below. FrameOverall UIRuntimeState-OnUpdate
mem_usage1map<string, uint64>Map of memory usage(Unit: bytes) Valid key is below. Current-RSS Peak-RSS VM-Usage
characteristics1map<string, Characteristics>List of special characteristics data Valid key is below. Num-Points Network-packet-size Packet-roundtrip-time
Logo
If you need access, please contact