# OS3D\_POINT\_SET

#### ID: 3104

#### Payload Definition

<table><thead><tr><th width="188">Data Type</th><th width="203">Name</th><th>Description</th></tr></thead><tbody><tr><td>u32</td><td>ping_number</td><td>assigned sequentially from power on</td></tr><tr><td>float</td><td>sos_mps</td><td>speed of sound (meters per second) used in angle calculations</td></tr><tr><td>u16</td><td>num_points</td><td>number of points reported in the points field</td></tr><tr><td>u16</td><td>unused</td><td>0</td></tr><tr><td>u32</td><td>unused</td><td>0</td></tr><tr><td>u64</td><td>utc_msec</td><td>time at start of ping, UTC milliseconds (1970 epoch). Will be 0 if not available.</td></tr><tr><td>u32</td><td>pwr up msec</td><td>time at start of ping from power on</td></tr><tr><td>u8</td><td>version</td><td>1. There was a previous version (0), see note below</td></tr><tr><td>u8</td><td>device number</td><td>must be &#x3C; number of devices (so it will be 0 for a single device)</td></tr><tr><td>u8</td><td>unused</td><td>0</td></tr><tr><td>u8</td><td>reserved</td><td>0</td></tr><tr><td>float</td><td>pwr_threshold_high</td><td>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.</td></tr><tr><td>float</td><td>pwr_threshold_med</td><td>This is a reasonable cutoff level for most applications.</td></tr><tr><td>float</td><td>pwr_threshold_low</td><td>This is a more liberal power level. If point_data is filtered with this threshold </td></tr><tr><td>u32</td><td>reserved[9]</td><td>reserved for future (9 words)</td></tr><tr><td>atof_t</td><td>point_data[num_points]</td><td>see below for atof_t definition</td></tr></tbody></table>

#### Notes

**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.&#x20;

**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.&#x20;

**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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ceruleansonar.com/c/omniscan3d/application-programming-interface/os3d_point_set.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
