> For the complete documentation index, see [llms.txt](https://docs.ceruleansonar.com/c/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ceruleansonar.com/c/omniscan3d/technical-details/api/attitude_report.md).

# ATTITUDE\_REPORT

#### ID: 504

#### Payload Definition

<table><thead><tr><th width="188">Data Type</th><th width="164">Name</th><th>Description</th></tr></thead><tbody><tr><td>vec3</td><td>up_vec</td><td>world up vector (x,y,z) in the device coordinate system (x forward, y port, z up).</td></tr><tr><td>vec3</td><td>reserved</td><td>reserved for future magnetic field vector</td></tr><tr><td>u64</td><td>utc_msec</td><td>utc msec (1970 epoc). Will be 0 if not available.</td></tr><tr><td>u32</td><td>pwr_up_msec</td><td>msec since power up</td></tr><tr><td>u8</td><td>channel_number</td><td>assigned sequentially from 0. typically 0 for a single channel system and 0 or 1 for port/stb setup.</td></tr></tbody></table>

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.
