Skip to content

Omniscan3d messages

general

10 JSON_WRAPPER

Type Name Description Units
char[] string Length is derived from payload_length in the header.

control

3024 os3d_set_ping_params

Payload Definition

Type Name Description Units
float start_m start range in meters at which echo data is recorded. Ignored in auto range mode. Will be forced to 5% of end range as a minimum. m
float end_m end range in meters over which echo data is recorded. Set to 0 for Omniscan 3D to automatically track the bottom and adjust range dynamically. m
float sos_mps speed of sound, meters per second m/s
i16 gain_index Set to -1 for auto gain (recommended). Valid manual gain ranges are from 0 to 10
i16 msec_per_ping pings per second = 1000 / msec_per_ping. So 100 msec_per_ping means 10 pings per second. Actual ping rate can be limited by range and speed of sound, so the value specified defines an upper limit on ping rate. ms/ping
u16 reserved set to 0
u16 diagnostic injected signal must be set to 0
bool ping_enable true to start/continue pinging, false to stop
bool enable_channel_data Used by SonarView, but not necessary. If enabled log files will be much larger.
bool reserved_for_raw_data Must be set to false
bool reserved set to false
bool enable_atof_data enable angle + time of flight information for each detected point should be true
i32 target_ping_hz set to 450000. Used internally for production testing only.
u16 n_range_steps sets range resolution in number of range steps. Must be between 200 and 1000 (inclusive), 1000 is recommended.
u16 reserved set to 0
float pulse_len_steps Pulse length in number of range steps. Recommended value is 1.5

get

504 attitude_report

Type Name Description Units
vec3 up_vec world up vector (x,y,z) in the device coordinate system (x forward, y port, z up).
vec3 reserved reserved for future magnetic field vector
u64 utc_msec utc msec (1970 epoc). Will be 0 if not available. ms
u32 pwr_up_msec msec since power up ms
u8 channel_number assigned sequentially from 0. typically 0 for a single channel system and 0 or 1 for port/stb setup.

This data pertains to the IMU in the RX16 module. Note the 'dot' on one corner of the face of the RX16 module. The zero pitch and roll orientation is with the transducer face pointing downward with the 'dot' toward the forward/starboard corner. Roll is positive as starboard side rolls downward and port side up. Pitch is positive when the forward axis is rotated downwards.

To compute pitch and roll from the up_vec:

Pitch = asin(-up_vec.x);

Roll = atan2(up_vec.y, up_vec.z);

We may support a calibrated magnetic vector in the future, but currently a heading signal from another source is required.

3104 os3d_point_set

Type Name Description Units
u32 ping_number assigned sequentially from power on
float sos_mps speed of sound (meters per second) used in angle calculations
i16 num_points number of points reported in the points field
u16 unused 0
u32 unused 0
u64 utc_msec ime at start of ping, UTC milliseconds (1970 epoch). Will be 0 if not available. ms
u32 pwr_up_msec time at start of ping from power on ms
u8 version 1. There was a previous version (0), see note below
u8 device number must be < number of devices (so it will be 0 for a single device)
u8 unused 0
u8 reserved 0
float pwr_threshold_high Points with pwr higher than this are quite strong. This was the level used in all version 0 point sets. Seemed to be overly conservative.
float pwr_threshold_med This is a reasonable cutoff level for most applications.
float pwr_threshold_low This is a more liberal power level. If point_data is filtered with this threshold
u32 reserved[9] reserved for future (9 words)
atof_t point_data[num_points] see above for atof_t definition

version: This is Version 1 of this packet format. Earlier there was a Version 0, which was applicable in some earlier beta units. These earlier files can be handled by SonarView and can be converted in SonarView as long as channel data was recorded.

power thresholds: The set of detected points is generously populated in the sense that some of these points are stronger than others and some may not be helpful. Three power thresholds are provided with which the points can be filtered if a more conservative selection of point detections is desired.


struct atof_point_t
{
float angle; // radians;
float tof; // time of flight in seconds
float pwr; // power level of the beam at this point
u8 pt_type; // 0 = unclassified, 1 = bottom_points, 2 = water column points
u8 reserved[3] = {0,0,0};
} PACKED_STRUCT;

pt_type: At the time of this writing, all points emitted by the device will be of type 'unclassified.' In the future, we may implement further classification within the device.

Interpreting Angle

Zero angle is perpendicular to the face of the RX16 receive module. With the 'dot' end of the RX16 facing the forward direction, and the transducer side down, positive angles are to the starboard side.

Note that the angles given in the data were computed with the speed of sound also given in the data. To adjust the angle in post processing for a different speed of sound, use the Snell's Law relation.

sin(angle1) / sos1 = sin(angle2) / sos2

3010 end_ping_info

Payload Definition

Type Name Description Units
u32 reserved deprecated, may be repurposed in future
float range_start_m range where sampling begins m
float range_end_m range where sampling ends m
vec3 up-vec see description in ATTITUDE_REPORT
u32 ping_number assigned sequentially from power on
float water_degC -1000 if no sensor present
float water_bar -1000 if no sensor present
float heave_m 0, not yet implemented
vec3 mag_vec reserved for future implementation
float ping_hz_realized acutal ping hz (may differ from requested)
i32 gain_index gain index used for this ping
u16 pulse_usec length of the pulse used in this ping in usec
u16 n_range_bins number of range bins processed for this ping
u16 samples_per_range_bin number of adc samples in each range bin
u8 device_number must be < number of devices, so 0 for single device
u8 unused 0
u32 pwr_up_msec msec since pwr up at start of ping
u64 utc_msec utc msec at start of ping