-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathхабр_текст.txt
213 lines (190 loc) · 22 KB
/
хабр_текст.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
<img src="https://habrastorage.org/webt/wk/8t/dp/wk8tdp67ywmjqthhrqjyigki-ly.png" />
When it's necessary to evaluate the orientation angles of an object you may have the question - which MEMS sensor to choose. Sensors manufacturers provide a great amount of different parameters and it may be hard to understand if the sensor fit your needs.
Brief: this article is the description of the Octave/Matlab script which allows to estimate the orientation angles evaluation errors, derived from MEMS accelerometers and magnetometers measurements. The input data for the script are datasheet parameters for the sensors. Article can be useful for those who start using MEMS sensors in their devices. You can find the project on <a href="https://github.com/DaryaMalafeeva/mems-errors"> GitHub</a>.
<habracut text = "This is how we solved this problem:" />
We are using the following conditions:
<ul> <li> We're going to estimate the attitude of the stationary object. <spoiler title = "Why?">
The orientation of the moving object cannot be calculated reliably by using following formulas and you'll have to use more sophisticated algorithms. </spoiler> </li>
<li> We will use measurements of the MEMS accelerometers and magnetometers to evaluate orientation angles. </li></ul>
<h2>1. A bit of theory </h2><h3> Orientation angles </h3>
<img src = "https://habrastorage.org/webt/0h/za/ze/0hzazeqlyderpj80nirkuuwustg.png" />
Here, orientation angles is the three Euler Angles - Roll, Pitch and Yaw. They connect the body frame coordinate system XYZ and the local coordinate system East-North-Up (ENU). The Roll, Pitch and Yaw angles denote the rotation that the XYZ axes must make in order to move in the ENU axis. Accordingly, zero angles mean that the X axis of the object is oriented to the east, the Y axis of the object is oriented to the north, the Z axis is oriented up. The order of axes rotation is following: first Yaw (around Z axis), then Pitch (around Y axis) and then Roll (around X axis).
<h3> Accelerometer </h3> This sensor measures the projection of proper acceleration onto the sensitivity axis. It's proper acceleration because the accelerometer measures gravity too (readings not zero even if the sensor is stationary). You can imagine the accelerometer as the weight on a spring. Its measured values are proportional to the stretching degree of the spring. If the accelerometer is stationary the spring is stretched only by gravity. If the accelerometer is in a dynamic state then there'll be a sum of forces: caused by inertia of the weight $inline$\left(F=m\overrightarrow{a}\right) $inline$ and gravity $inline$ \left (F_{g}=m\overrightarrow{g}\right) $inline$.
We use the following measurements model for the orthogonal (mutually perpendicular) triad of accelerometers:
$$display$$ a_{XYZ} = m_{a}\cdot A_{XYZ} + b_{a} + n_{a}, $$display$$ where $inline$ a_{XYZ} $inline$ is the measured acceleration vector in body frame coordinates XYZ, $inline$ m_{a} $inline$ is the matrix of axes misalignments and scale factors of the accelerometers triad, $inline$ A_{XYZ} $inline$ is the true acceleration vector in body frame coordinates XYZ, $inline$ b_{a} $inline$ is the accelerometers zero displacement vector (biases), $inline$ n_{a} $inline$ is the measurements noise.
The matrix of the axes misalignment and scale factors is:
$$display$$ m_{a} =\begin{bmatrix} 1 + m_{a, 1,1} & m_{a, 1,2} & m_{a, 1,3} \\
m_{a, 2,1} & 1 + m_{a, 2,2} & m_{a, 2,3} \\
m_{a, 3,1} & m_{a, 3,2} & 1 + m_{a, 3,3}
\end {bmatrix}, $$display$$ where the elements located on the main diagonal ($inline$ 1 + m_{a, 1,1}, 1 + m_{a, 2,2}, 1 + m_{a, 3,3} $inline$) are scale factors and their errors along three axes of the accelerometers and the remaining elements of the matrix are axes misalignments of the accelerometers triad.
<spoiler title = "Selecting accelerometers parameters from the datasheet">
<h3> MPU-9250 accelerometers: </h3>
<ul>
<li> Accelerometer Zero Offset - Zero-G Initial Calibration Tolerance ($inline$ \pm 60 mg $inline$ for $inline$ X, Y $inline$, $inline$ \pm 80 mg $inline$ for $inline$ Z $inline$) - translate into units $inline$ g $inline$ multiplying it by $inline$ 10^{-3}; $inline$</li>
<li> The error of the scale factor - Initial Tolerance ($inline$ \pm3\% $inline$) - is expressed as a percentage. Convert it multiplying by $inline$ 10^{-2};$inline$ </li>
<li> Axis misalignment - Cross Axis Sensitivity ($inline$ \pm2\%$inline$) - convert it multiplying by $inline$ 10^{-2}; $inline$ </li>
<li> Accelerometer noise power spectral density - Noise Power Spectral Density $inline$ \left (300\frac{\mu g} {\sqrt{Hz}}\right) $inline$ - convert the numerator to $inline$ g $inline$ multiplying everything by $inline$10^{- 6};$inline$ </li>
<li> Bandwidth - Low Pass Filter Response $inline$ \left (5-260 Hz\right) $inline$ - shows the range within which bandwidth can be changed. We use the maximum band. Anyway errors won't be determined by noise; </li> </ul>
When you know spectral density of the noise power and the passband of the sensor you can calculate the standard deviation of the output noise:
$$display$$ \sigma _ {noise}=G_{0} \cdot \sqrt{\Pi_{noise}}; $$display$$
<h3> ADIS16488A accelerometers: </h3>
<ul>
<li> Zero offset - Bias Repeatability ($inline$\pm 16mg $inline$) - convert to $inline$ g $inline$ multiplying by $inline$ 10^{- 3}; $inline$ </li>
<li> Scale factor error - (Sensitivity) Repeatability ($inline$ \pm0.5 \% $inline$) - convert from percent; </li>
<li> Axis misalignment - Misalignment Axis to frame ($inline$ \pm1^{\circ} $inline$) - in degrees, convert to times (or radians because the values are small); </li>
<li> Noise power spectral density - Noise Density $inline$ \left (0.063\frac{mg}{\sqrt{Hz}}rms\right) $inline$ - convert the numerator to $inline$ g; $inline$ </ li>
<li> Bandwidth - $inline$ \left (3dB Bandwidth\right) $inline$ - choose the same as the MPU-9250; </li></ul>
</spoiler>
<h3> Magnetometer </h3> The sensor that measures the projection of the magnetic field induction onto the sensitivity axis. The magnetometer is characterized by hard-iron and soft-iron distortions. Hard-iron distortion is an additive effect: a constant component is added to the measurement. For example, the reason may be the influence of a permanent magnet or a zero offset of the sensor. Soft-iron distortion is a multiplier effect: it reflects a change in direction and/ or attenuation of the magnetic induction vector. This effect can be caused by the presence of a metal object in the immediate vicinity of the magnetometer or by the sensor’s own distortions - an error in the scale factor or its axes misalignments.
We use the following measurements model for the triad of magnetometers:
$$display$$ m_{XYZ} = S_{m} \cdot M_{XYZ} + b_{m} + n_{m}, $$display$$ where $inline$ m_{XYZ} $inline$ is the magnetometers measurements in body frame coordinates XYZ, $inline$ S_{m} $inline$ is the diagonal matrix of the axes misalignments and scale factors (which also describes the soft–iron effect), $inline$ M_{XYZ} $inline$ is the true magnetic induction vector in body frame coordinates, $inline$ b_{m} $inline$ is the sensors biases (also describes the hard–iron effect), $inline$ n_{m} $inline$ is the measurement noise.
Matrix of the axis misalignment and scale factors of the magnetometer:
$$display$$ S_{m} = \begin {bmatrix} 1 + S_{m, 1,1} & S_{m, 1,2} & S_{m, 1,3} \\
S_{m, 2,1} & 1 + S_{m, 2,2} & S_{m, 2,3} \\
S_{m, 3,1} & S_{m, 3,2} & 1 + S_{m, 3,3} \end {bmatrix}, $$display$$
elements located on the main diagonal ($inline$ 1 + S_{m, 1,1}, 1 + S_{m, 2,2}, 1 + S_{m, 3,3} $inline$) are the scale factors and their errors along the three axes of the magnetometer, the remaining elements of the matrix are axes misalignments of the magnetometers triad.
<spoiler title = "Selecting magnetometer parameters from a datasheet">
<h3> MPU-9250 magnetometers:</h3>
Datasheet does not contain all required parameters. So we supposed that the magnetometers is calibrated and took the following:
<ul>
<li> Zero offset - $inline$ (1 \mu T); $inline$</li>
<li> Scale factors error - $inline$ (5 \%); $inline$</li>
<li> Axis misalignment - suppose that they are the same as accelerometers - $inline$ (\pm2 \%); $inline$ </li>
<li> Output noise - $inline$ (0.6 \mu T); $inline$</li>
</ul>
<h3> ADIS16488A magnetometers: </h3>
<ul>
<li>Zero offset - Initial Bias Error $inline$ \left (\pm15 mgauss = 1.5\ mu T \right) $inline$ - we assume that we calibrated it to $inline$ (0.5 \mu T) $inline$;</li>
<li>Scale factor error - Initial Sensitivity Tolerance $inline$ \left (2 \% \right); $inline$</li>
<li>Axes misalignment - Misalignment Axis to axis $inline$ \left (0.35^{\circ} \right) $inline$ - is in degrees, so we need to convert to times (or radians because the values are small); </li>
<li>Noise power spectral density - Noise Density $inline$ \left (0.042 \frac {mgauss} {\sqrt {Hz}} \right) $inline$ - convert to $inline$ \left (\frac {Tesla} { \sqrt {Hz}} \right); $inline$</li>
<li>Bandwidth - we use for the model the value $inline$ 260 Hz; $inline$ </li>
</ul>
</spoiler>
<h3>Orientation angles calculation </h3> Due to the the Earth gravity accelerometers "sense" the down direction. Their measurements are used to calculate roll and pitch angles. <a href="https://www.nxp.com/docs/en/application-note/AN3461.pdf"> Here </a> you'll find the formulas to calculate them. The yaw angle (in this case it's the magnetic azimuth) can be determined due to the Earth’s magnetic field. The induction vector of the magnetic field is measured by magnetometers and their measurements are involved in the calculation of the yaw angle.
We should notice that to calculate the magnetic azimuth it's necessary to use the magnetometer measurements translated to the horizontal plane. <a href="https://www.nxp.com/docs/en/application-note/AN4248.pdf"> Here </a> you'll find the formula for calculating the magnetic azimuth.
$$display$$ roll=atan\left(\frac{a_{Y}}{a_{Z}}\right), $$display$$ $$display$$ pitch=atan\left(\frac{-a_{X}}{\sqrt{a_{Y}^{2} + a_{Z}^{2}}}\right), $$display$$ $$display$$ yaw=atan2\left(\frac{m_{E}}{m_{N}}\right), $$display$$ where $inline$ atan2 $inline$ is the full arctangent function, $inline$ a_{X} $inline$, $inline$ a_{Y} $inline$, $inline$ a_{Z} $inline$ - measurements of the accelerometers along three axes in the body frame, $inline$ m_{E} $inline$, $inline$ m_{N} $inline$ - measurements of the magnetometers along the axes X', Y' (measurements of magnetometers are translated to the horizontal plane).
<h2>2. Orientation angles estimation errors </h2> <h3> Algorithm description </h3>
<img src="https://habrastorage.org/webt/yp/uw/yk/ypuwykuhlzrm0i8ii3fvy6gbevi.jpeg" />
<ul>
<li> We create an arrays of random Euler angles roll, pitch, yaw. They specify sets of the true orientation of the object in the model. <Spoiler title = "Why do we use so many angles?"> Errors depend on the values of the orientation angles and if we want to get an idea of the errors magnitude over the entire range then this is the easiest way.</spoiler> </li>
<li>Using created angles we evaluate transformation matrixes from body frame to the local coordinate system: $$display$$ C_{XYZ}^{ENU}=\begin{vmatrix}cy\cdot cp& -cr\cdot sy + sr\cdot cy\cdot sp & sr\cdot sy + cr\cdot cy\cdot sp\\
sy\cdot cp & cr\cdot cy + sr\cdot sy\cdot sp & -sr\cdot cy + cr\cdot sy\cdot sp\\
-sp & sr\cdot cp & cr\cdot cp \end{vmatrix}, $$display$$ where $inline$ cr = \cos(roll)$inline$, $inline$ sr = \sin(roll) $inline$, $inline$ cp = \cos (pitch) $inline$, $inline$ sp = \sin(pitch) $inline$, $inline$ cy = \cos(yaw) $inline$, $inline$ sy = \sin(yaw) $inline$. </li>
<li> Using this matrix we got an expression for true accelerations in body frame coordinate system:
$$display$$ A_ {XYZ}=\left (C_{XYZ}^{ENU}\right)^{T}\cdot \begin {vmatrix}
0 \\
0 \\
1\\
\end {vmatrix}, $$display$$
$inline$ \begin {vmatrix}
0 \\
0 \\
1\\
\end {vmatrix} $inline$ is the vector that determines the direction of gravity expressed in units of g, $inline$ {(C_{XYZ}^{ENU})}^{T} $inline$ is the coordinate transformation matrix from the local coordinate system to the body frame (the inverse of the transformation matrix from the body frame to the local coordinate system).</li>
<li> Accelerometers measurements model: $$display$$ a_{XYZ}=\left (I + m_{a}\right)\cdot A_{XYZ} + b_{a} + n_{a}, $$display$$</li>
<li> Roll and pitch angles estimations calculated using the formulas:
$$display$$ roll'=atan\left(\frac{a_{Y}}{a_{Z}}\right), $$display$$ $$display$$ pitch'=atan\left(\frac {-a_{X}}{\sqrt{a_{Y}^{2} + a_{Z}^{2}}}\right).$$display$$ </li>
<li> It's also necessary to form the conversion matrix to the "horizon" from these angles. We used <b>rpy2mat</b> fuction: $$display$$ C_{XYZ}^{XYZ'}=rpy2mat\left(\begin{bmatrix}
roll '\\
pitch '\\
0
\end{bmatrix}^{T}\right), $$display$$ where the roll and pitch angles are the angles calculated from the accelerometer measurements and the third angle is zero.</li>
<li> Then we took the vector of true magnetic induction in the local coordinate system ENU and translated it to the body frame XYZ: $$display$$ M_{XYZ}={(C_{XYZ}^{ENU})}^{T}\cdot M_{ENU}.$$display$$</li>
<li> Magnetometers measurements model: $$display$$ m_{XYZ}=S_{m}\cdot M_{XYZ} + b_{m} + n_{m}. $$display$$</li>
<li> Then we recalculated the magnetometers measurements from the body frame to the "horizon": $$display$$ m_{XYZ'} = C_{XYZ}^{XYZ'}\cdot m_{XYZ}.$$display$$</li>
<li> Using the "horizontal" measurements of the magnetometers we calculated the magnetic azimuth (estimation): $$display$$ yaw'=atan2\left(\frac{m_{Y'}}{m_{X'}}\right).$$display$$</li>
<li> Orientation angles estimation errors calculated as the difference between the true angles of roll, pitch, yaw and calculated from the sensors measurements - roll', pitch', yaw'. </li>
</ul>
<h2>3. Results </h2> Here is the results for two sensors which we use as an example - ADIS16488A and MPU-9250 (maximum errors).
<table>
<tr>
<td><b>Angle</b></td>
<td> <b>MPU-9250</b></td>
<td><b>ADIS16488A</b></td>
</tr>
<tr>
<td>Roll</td>
<td>$$display$$30^{\circ}$$display$$</td>
<td>$$display$$8^{\circ}$$display$$</td>
</tr>
<tr>
<td>Pitch</td>
<td>$$display$$10^{\circ}$$display$$</td>
<td>$$display$$2^{\circ}$$display$$</td>
</tr>
<tr>
<td>Magnetic azimuth</td>
<td>$$display$$30^{\circ}$$display$$</td>
<td>$$display$$20^{\circ}$$display$$</td>
</tr>
</table>
Note that this results is not a strict verdict. Results depends on supposed calibration errors. Our script should be used to get acquainted with the orientation angles estimation errors magnitude order and dependance on different input parameters.
<h3>Accelerometers and magnetometers errors influence on the orientation angles estimation errors</h3>
<ul>
<li> This is how roll estimation errors depend on the roll and pitch values:
<a target='_blank' href='https://habrastorage.org/webt/8h/zt/i_/8hzti_e87qh5fpi0n33blb1mofg.jpeg'><img src="https://habrastorage.org/webt/8h/zt/i_/8hzti_e87qh5fpi0n33blb1mofg.jpeg" /></a></li>
<li> How pitch estimation errors depend on roll and pitch values:
<a target='_blank' href='https://habrastorage.org/webt/8-/se/jj/8-sejjpgdcnjb6av8i0_84uejxe.jpeg'><img src="https://habrastorage.org/webt/8-/se/jj/8-sejjpgdcnjb6av8i0_84uejxe.jpeg" /></a></li>
<li>How errors of magnetic azimuth estimation depend on roll and pitch angles:
<a target='_blank' href=https://habrastorage.org/webt/sa/gz/mo/sagzmoutcde7rcylwyflszcqrkc.jpeg''><img src="https://habrastorage.org/webt/sa/gz/mo/sagzmoutcde7rcylwyflszcqrkc.jpeg" /></a></li>
<li>How errors of magnetic azimuth estimation depend on roll and magnetic azimuth angles:
<a target='_blank' href='https://habrastorage.org/webt/7z/1z/1l/7z1z1lwzpbjo3gx40g9wv6ghhey.jpeg'><img src="https://habrastorage.org/webt/7z/1z/1l/7z1z1lwzpbjo3gx40g9wv6ghhey.jpeg" /></a></li>
<li>How errors of magnetic azimuth estimation depend on pitch and magnetic azimuth angles:
<a target='_blank' href='https://habrastorage.org/webt/y5/vw/lf/y5vwlfpjztzubfrm73mp_7_mna8.jpeg'><img src="https://habrastorage.org/webt/y5/vw/lf/y5vwlfpjztzubfrm73mp_7_mna8.jpeg" /></a></li>
</ul>
<spoiler title="As you can see the magnitude of the errors increases when approaching the boundary of the angles range. Why?">
Сonsider the figure below:
<img src="https://habrastorage.org/webt/1c/yb/0s/1cyb0sdbvm45nxpgbfnj8polgje.png" />
Suppose that we rotate the sensitivity axis Z $inline$(z1 \rightarrow z2)$inline$ of the accelerometer so that the projection of gravity on this axis becomes smaller. $inline$(g '\rightarrow g ")$inline$ The value of the gravity projection plus the error of the accelerometer will give the range of possible measurement values (pink area). Angle estimation error increases $inline$(\Delta _ {1} \rightarrow \Delta _ {2})$inline$. So when gravity vector projection on the sensitivity axis decreases - constant accelerometer error begins to introduce a larger error into the angle estimate.
</spoiler>
<spoiler title="Now let's play with the input parameters to understand how the errors are defined:">
Influence of the ONLY accelerometers errors on the errors of orientation angles estimation:
<ul>
<li>Influence of accelerometers errors ONLY on roll estimation errors depending on roll and pitch angles
<a target='_blank' href='https://habrastorage.org/webt/y5/vw/lf/y5vwlfpjztzubfrm73mp_7_mna8.jpeg'><img src="https://habrastorage.org/webt/by/kb/ai/bykbainkdyy_wvsxcfvfuq9dzdy.jpeg" /></a></li>
<li>Influence of accelerometers errors ONLY on pitch estimation errors depending on roll and pitch angles
<a target='_blank' href='https://habrastorage.org/webt/wj/tc/_l/wjtc_lxe91pebbeazb2rxwxfs1m.jpeg'><img src="https://habrastorage.org/webt/wj/tc/_l/wjtc_lxe91pebbeazb2rxwxfs1m.jpeg" /></a></li>
<li>Influence of accelerometers errors ONLY on magnetic azimuth estimation errors depending on roll and pitch angles
<a target='_blank' href='https://habrastorage.org/webt/my/gg/td/myggtdgevpkzsraz_rj5s8pefba.jpeg'><img src="https://habrastorage.org/webt/my/gg/td/myggtdgevpkzsraz_rj5s8pefba.jpeg" /></a></li>
<li>Influence of accelerometers errors ONLY on magnetic azimuth estimation errors depending on roll and magnetic azimuth angles
<a target='_blank' href='https://habrastorage.org/webt/ti/_4/ij/ti_4ijkplj_trq3ji5mdvg4ry5m.jpeg'><img src="https://habrastorage.org/webt/ti/_4/ij/ti_4ijkplj_trq3ji5mdvg4ry5m.jpeg" /></a></li>
<li>Influence of accelerometers errors ONLY on magnetic azimuth estimation errors depending on magnetic azimuth and pitch angles
<a target='_blank' href='https://habrastorage.org/webt/ot/mo/dr/otmodr4q7nkky7vta-lli0rym4c.jpeg'><img src="https://habrastorage.org/webt/ot/mo/dr/otmodr4q7nkky7vta-lli0rym4c.jpeg" /></a></li>
</ul>
Influence of the ONLY magnetometers errors on orientation angles estimation errors:
<ul>
<li>Influence of the magnetometers errors ONLY on roll estimation errors depending on roll and pitch angles
<a target='_blank' href='https://habrastorage.org/webt/6t/yl/lp/6tyllphpw0dyad_g2_tladvti98.jpeg'><img src="https://habrastorage.org/webt/6t/yl/lp/6tyllphpw0dyad_g2_tladvti98.jpeg" /></a></li>
<li>Influence of magnetometers errors ONLY on pitch estimation errors depending on roll and pitch angles
<a target='_blank' href='https://habrastorage.org/webt/ao/d_/uw/aod_uwzhu6uviujwjpmbdndrcxy.jpeg'><img src="https://habrastorage.org/webt/ao/d_/uw/aod_uwzhu6uviujwjpmbdndrcxy.jpeg" /></a></li>
<li> Influence of magnetometers errors ONLY on magnetic azimuth estimation errors depending on roll and pitch angles
<a target='_blank' href='https://habrastorage.org/webt/1b/gk/x4/1bgkx44gsrheco43ljsjbl1a1os.jpeg'><img src="https://habrastorage.org/webt/1b/gk/x4/1bgkx44gsrheco43ljsjbl1a1os.jpeg" /></a></li>
<li>Influence of magnetometers errors ONLY on magnetic azimuth estimation errors depending on roll and magnetic azimuth angles
<a target='_blank' href='https://habrastorage.org/webt/uy/-j/kt/uy-jkttvi-otrzcdlnizgr7woti.jpeg'><img src="https://habrastorage.org/webt/uy/-j/kt/uy-jkttvi-otrzcdlnizgr7woti.jpeg" /></a></li>
<li>Influence of magnetometers errors ONLY on magnetic azimuth estimation errors depending on pitch and magnetic azimuth angles
<a target='_blank' href='https://habrastorage.org/webt/sp/87/k1/sp87k1yxi84ueqesuq1zyih6me4.jpeg'><img src="https://habrastorage.org/webt/sp/87/k1/sp87k1yxi84ueqesuq1zyih6me4.jpeg" /></a></li>
</ul>
</spoiler>
<h2>Summary</h2>
<ul><li> We have developed the Octave/MATLAB script that allows to estimate errors in the calculation of orientation angles from measurements of MEMS accelerometers and magnetometers. </li>
<li> Errors in estimating orientation angles are the functions of all orientation angles. In this case the maximum values of errors are observed at the boundaries of the selected ranges of angles. </li> </ul>
<spoiler title = "Spoiler - disclaimer:">
<ul>
<li> We don't recommend buying and using these sensors (they are quite old). </li>
<li> We don't take into account the influence of non-linearity of measurements, the influence of vibration, instability. That's only the first approximation to the angles errors. </li>
</ul> </spoiler>
<h2> Literature </h2>
<ul>
<li> <a href="https://www.nxp.com/docs/en/application-note/AN3461.pdf"> Tilt Sensing Using a Three-Axis Accelerometer, Rev. 6 - Freescale Semiconductor, Inc. </a> </li>
<li> <a href="https://www.nxp.com/docs/en/application-note/AN4248.pdf"> Implementing a Tilt-Compensated eCompass using Accelerometer and Magnetometer Sensors - Freescale Semiconductor
Application Note. </a> </li>
<li> <a href="https://www.invensense.com/wp-content/uploads/2015/02/PS-MPU-9250A-01-v1.1.pdf"> MPU-9250 Product Specification Revision 1.1 - InvenSense Inc. </a> </li>
<li> <a href="https://www.analog.com/media/en/technical-documentation/data-sheets/ADIS16488A.pdf"> ADIS16488A Data Sheet - Analog Devices, Inc. </a> </ li>
<li> Perov A.I., Kharisov V.N. GLONASS. The principles of construction and functioning of M.: Radio Engineering, 2010. - 800 p. </li>
</ul>
</spoiler>
<h2> Authors </h2><ul>
<li>Nagin, Ilya - @Stormgazer</li>
<li>Malafeeva, Darya</li></ul>
Moscow Power Engineering Institute, Dept. of Radio Systems