-
Notifications
You must be signed in to change notification settings - Fork 13
/
PnP__AHRS_8c_source.html
277 lines (275 loc) · 43.9 KB
/
PnP__AHRS_8c_source.html
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
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Paparazzi UAS: sw/airborne/modules/computer_vision/lib/vision/PnP_AHRS.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="penguin_icon.png"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Paparazzi UAS
 <span id="projectnumber">v6.1.0_stable</span>
</div>
<div id="projectbrief">Paparazzi is a free software Unmanned Aircraft System.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('PnP__AHRS_8c_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="headertitle">
<div class="title">PnP_AHRS.c</div> </div>
</div><!--header-->
<div class="contents">
<a href="PnP__AHRS_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Copyright (C) Guido de Croon, 2018</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * This file is part of Paparazzi.</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Paparazzi is free software; you can redistribute it and/or modify</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * the Free Software Foundation; either version 2, or (at your option)</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * any later version.</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * Paparazzi is distributed in the hope that it will be useful,</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * GNU General Public License for more details.</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * along with Paparazzi; see the file COPYING. If not, see</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * <http://www.gnu.org/licenses/>.</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> */</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">// Own Header</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="PnP__AHRS_8h.html">PnP_AHRS.h</a>"</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="state_8h.html">state.h</a>"</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include <stdio.h></span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="comment">// #define DEBUG_PNP</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  </div>
<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="PnP__AHRS_8h.html#a30f92e7ee757f2657644e0df845ff43a"> 54</a></span> <span class="keyword">struct </span><a class="code" href="group__math__algebra__float.html#structFloatVect3">FloatVect3</a> <a class="code" href="PnP__AHRS_8c.html#a30f92e7ee757f2657644e0df845ff43a">get_world_position_from_image_points</a>(int *x_corners, <span class="keywordtype">int</span> *y_corners, <span class="keyword">struct </span><a class="code" href="group__math__algebra__float.html#structFloatVect3">FloatVect3</a> *<a class="code" href="detect__gate_8c.html#a5abe2d7a4b0bc945745785222ef0d59a">world_corners</a>,</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordtype">int</span> <a class="code" href="detect__gate_8c.html#afbc2c3a79a0312bcc3173018a91dccca">n_corners</a>, <span class="keyword">struct </span><a class="code" href="video__device_8h.html#structcamera__intrinsics__t">camera_intrinsics_t</a> cam_intrinsics, struct <a class="code" href="group__math__algebra__float.html#structFloatEulers">FloatEulers</a> <a class="code" href="detect__gate_8c.html#a6614f0e4c0cc22a362eb20dcc5e6c3ae">cam_body</a>)</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="comment">// legend:</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="comment">// E = Earth</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="comment">// B = body</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="comment">// C = camera</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">struct </span><a class="code" href="group__math__algebra__float.html#structFloatVect3">FloatVect3</a> pos_drone_E_vec;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="group__math__algebra__float.html#ga41de102be6b28101c9568380f729a88d">FLOAT_VECT3_ZERO</a>(pos_drone_E_vec);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="comment">// Make an identity matrix:</span></div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="group__math__algebra__float.html#structFloatRMat">FloatRMat</a> I_mat;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="group__math__algebra__float.html#gaba2b8407506025f0fa8257d7fa2a6e0c">FLOAT_MAT33_DIAG</a>(I_mat, 1., 1., 1.);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">static</span> <span class="keyword">struct </span><a class="code" href="group__math__algebra__float.html#structFloatRMat">FloatRMat</a> Q_mat;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="code" href="group__math__algebra__float.html#gaf7d71c6424c5d2fa1e77992fc214d7c0">FLOAT_MAT33_ZERO</a>(Q_mat);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="comment">//camera to body rotation</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">struct </span><a class="code" href="group__math__algebra__float.html#structFloatRMat">FloatRMat</a> R_E_B, R_B_E, R_C_B;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="group__math__algebra__float.html#ga00bc75df1116d9ecef980b2e9f0699f0">float_rmat_of_eulers_321</a>(&R_C_B, &<a class="code" href="detect__gate_8c.html#a6614f0e4c0cc22a362eb20dcc5e6c3ae">cam_body</a>);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="comment">// Use the AHRS roll and pitch from the filter to get the attitude in a rotation matrix R_E_B:</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">struct </span><a class="code" href="group__math__algebra__float.html#structFloatEulers">FloatEulers</a> <a class="code" href="cc2500__compat_8h.html#a55fc1fd496f0c72a42ac4489aed3d862">attitude</a>;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="cc2500__compat_8h.html#a55fc1fd496f0c72a42ac4489aed3d862">attitude</a>.phi = <a class="code" href="group__state__attitude.html#ga9a5e6bac6e7d78e1b33430e73344615b">stateGetNedToBodyEulers_f</a>()-><a class="code" href="group__math__algebra__float.html#a4b2c73d59e89d78354658b20058720e0">phi</a>;<span class="comment">//positive ccw</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <a class="code" href="cc2500__compat_8h.html#a55fc1fd496f0c72a42ac4489aed3d862">attitude</a>.theta = <a class="code" href="group__state__attitude.html#ga9a5e6bac6e7d78e1b33430e73344615b">stateGetNedToBodyEulers_f</a>()-><a class="code" href="group__math__algebra__float.html#a98f8790d7dbb4d3ef03e99cdf27f844e">theta</a>;<span class="comment">//negative downward</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="comment">// local_psi typically assumed 0.0f (meaning you are straight in front of the object):</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="comment">// If you want to use the estimate of psi, stateGetNedToBodyEulers_f()->psi, then you still need to take the psi of the gate into account.</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordtype">float</span> local_psi = 0.0f; <span class="comment">// stateGetNedToBodyEulers_f()->psi; // 0.0f;</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <a class="code" href="cc2500__compat_8h.html#a55fc1fd496f0c72a42ac4489aed3d862">attitude</a>.psi = local_psi;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="group__math__algebra__float.html#ga00bc75df1116d9ecef980b2e9f0699f0">float_rmat_of_eulers_321</a>(&R_E_B, &<a class="code" href="cc2500__compat_8h.html#a55fc1fd496f0c72a42ac4489aed3d862">attitude</a>);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="group__math__algebra__generic.html#ga894ab25bef695601ea448d04a9fd8aca">MAT33_TRANS</a>(R_B_E, R_E_B);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="comment">// Camera calibration matrix:</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordtype">float</span> <a class="code" href="undistort__image_8c.html#a29a532ec52354ee7571487245359a066">K</a>[9] = {cam_intrinsics.focal_x, 0.0f, cam_intrinsics.center_x,</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  0.0f, cam_intrinsics.focal_y, cam_intrinsics.center_y,</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  0.0f, 0.0f, 1.0f</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  };</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  </div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="comment">// vectors in world coordinates, that will be "attached" to the world coordinates for the PnP:</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">struct </span><a class="code" href="group__math__algebra__float.html#structFloatVect3">FloatVect3</a> gate_vectors[4], vec_B, vec_E, p_vec, temp_vec;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <a class="code" href="group__math__algebra__float.html#ga41de102be6b28101c9568380f729a88d">FLOAT_VECT3_ZERO</a>(p_vec);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// Solution from: http://cal.cs.illinois.edu/~johannes/research/LS_line_intersect.pdf</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="comment">// Equivalent MATLAB code:</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="comment">// for i = 1:4</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="comment">// Q = Q + (eye(3,3)-n(:,i)*n(:,i)');</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// p = p + (eye(3,3)-n(:,i)*n(:,i)')*a(:,i);</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="comment">//</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="comment">// where n is the normalized vector, and a is the world coordinate</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keyword">struct </span><a class="code" href="group__math__algebra__float.html#structFloatRMat">FloatRMat</a> temp_mat, temp_mat_2;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <a class="code" href="group__math__algebra__float.html#gaf7d71c6424c5d2fa1e77992fc214d7c0">FLOAT_MAT33_ZERO</a>(temp_mat);</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  </div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="comment">// Construct the matrix for linear least squares:</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="detect__gate_8c.html#afbc2c3a79a0312bcc3173018a91dccca">n_corners</a>; i++) {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="comment">// undistort the image coordinate and put it in a world vector:</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordtype">float</span> x_n, y_n;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordtype">bool</span> success = <a class="code" href="undistortion_8c.html#a2c56172dffbf789b4b5c164c08395740">distorted_pixels_to_normalized_coords</a>((<span class="keywordtype">float</span>) x_corners[i], (<span class="keywordtype">float</span>) y_corners[i], &x_n, &y_n, cam_intrinsics.Dhane_k, <a class="code" href="undistort__image_8c.html#a29a532ec52354ee7571487245359a066">K</a>);</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">if</span>(!success) {</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  printf(<span class="stringliteral">"Undistortion not possible in PnPAHRS.c... why?\n"</span>);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">return</span> pos_drone_E_vec;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  gate_vectors[i].<a class="code" href="group__math__algebra__float.html#aa44c74404cf8ef0b143066e970352adb">x</a> = 1.0; <span class="comment">// positive to the front</span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  gate_vectors[i].<a class="code" href="group__math__algebra__float.html#ac5e44e02fe71768bf56eb39a14f3cc5b">y</a> = y_n; <span class="comment">// positive to the right</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  gate_vectors[i].<a class="code" href="group__math__algebra__float.html#adeaa53529844ee1fa7df48e61c3994f7">z</a> = -x_n; <span class="comment">// positive down</span></div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  </div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="comment">// transform the vector to the gate corner to earth coordinates:</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="group__math__algebra__generic.html#ga3ffba7234aaa9c01d2e4ba865d0c9296">MAT33_VECT3_MUL</a>(vec_B, R_C_B, gate_vectors[i]);</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordtype">double</span> vec_norm = sqrt(<a class="code" href="group__math__algebra__generic.html#ga847e317427e2ab13ecd86b347c917e7c">VECT3_NORM2</a>(vec_B));</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="group__math__algebra__generic.html#ga3323b7f041582a4ecda3ab19df845f23">VECT3_SDIV</a>(vec_B, vec_B, vec_norm);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="group__math__algebra__generic.html#ga3ffba7234aaa9c01d2e4ba865d0c9296">MAT33_VECT3_MUL</a>(vec_E, R_B_E, vec_B);</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  </div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor">#ifdef DEBUG_PNP</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  printf(<span class="stringliteral">"Determine world vector for corner %d\n"</span>, i);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  printf(<span class="stringliteral">"Distorted coordinates: (x,y) = (%d, %d)\n"</span>, x_corners[i], y_corners[i]);</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  printf(<span class="stringliteral">"Normalized coordinates: (x_n, y_n) = (%f, %f)\n"</span>, x_n, y_n);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  printf(<span class="stringliteral">"Gate vector: (%f,%f,%f)\n"</span>, gate_vectors[i].x, gate_vectors[i].y, gate_vectors[i].z);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  printf(<span class="stringliteral">"Gate vector to Body: (%f,%f,%f)\n"</span>, vec_B.<a class="code" href="group__math__algebra__float.html#aa44c74404cf8ef0b143066e970352adb">x</a>, vec_B.<a class="code" href="group__math__algebra__float.html#ac5e44e02fe71768bf56eb39a14f3cc5b">y</a>, vec_B.<a class="code" href="group__math__algebra__float.html#adeaa53529844ee1fa7df48e61c3994f7">z</a>);</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  printf(<span class="stringliteral">"Gate vector to World: (%f,%f,%f)\n"</span>, vec_E.<a class="code" href="group__math__algebra__float.html#aa44c74404cf8ef0b143066e970352adb">x</a>, vec_E.<a class="code" href="group__math__algebra__float.html#ac5e44e02fe71768bf56eb39a14f3cc5b">y</a>, vec_E.<a class="code" href="group__math__algebra__float.html#adeaa53529844ee1fa7df48e61c3994f7">z</a>);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  printf(<span class="stringliteral">"Euler angles body: (pitch, roll, yaw) = (%f, %f, %f)\n"</span>, <a class="code" href="cc2500__compat_8h.html#a55fc1fd496f0c72a42ac4489aed3d862">attitude</a>.theta, <a class="code" href="cc2500__compat_8h.html#a55fc1fd496f0c72a42ac4489aed3d862">attitude</a>.phi, <a class="code" href="cc2500__compat_8h.html#a55fc1fd496f0c72a42ac4489aed3d862">attitude</a>.psi);</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  printf(<span class="stringliteral">"World corner %d: (%f, %f, %f)\n"</span>, i, <a class="code" href="detect__gate_8c.html#a5abe2d7a4b0bc945745785222ef0d59a">world_corners</a>[i].x, <a class="code" href="detect__gate_8c.html#a5abe2d7a4b0bc945745785222ef0d59a">world_corners</a>[i].y, <a class="code" href="detect__gate_8c.html#a5abe2d7a4b0bc945745785222ef0d59a">world_corners</a>[i].z);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  </div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="group__math__algebra__generic.html#ga28a287262a3234964931c956808df60c">VECT3_VECT3_TRANS_MUL</a>(temp_mat, vec_E, vec_E); <span class="comment">// n(:,i)*n(:,i)'</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="group__math__algebra__generic.html#gada68445323d25e7f0a6f00b73caffff8">MAT33_MAT33_DIFF</a>(temp_mat, I_mat, temp_mat); <span class="comment">// (eye(3,3)-n(:,i)*n(:,i)')</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="group__math__algebra__generic.html#gac095e0b930b26c145db5d1cd94fc957e">MAT33_COPY</a>(temp_mat_2, Q_mat);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <a class="code" href="group__math__algebra__generic.html#ga6973c7a1f371b114260f96389cbe25bf">MAT33_MAT33_SUM</a>(Q_mat, temp_mat_2, temp_mat); <span class="comment">// Q + (eye(3,3)-n(:,i)*n(:,i)')</span></div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="group__math__algebra__generic.html#ga3ffba7234aaa9c01d2e4ba865d0c9296">MAT33_VECT3_MUL</a>(temp_vec, temp_mat, <a class="code" href="detect__gate_8c.html#a5abe2d7a4b0bc945745785222ef0d59a">world_corners</a>[i]); <span class="comment">// (eye(3,3)-n(:,i)*n(:,i)')*a(:,i)</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <a class="code" href="group__math__algebra__generic.html#ga00f24936416fef3008ef361e50a9e0c4">VECT3_SUM</a>(p_vec, p_vec, temp_vec); <span class="comment">// p + (eye(3,3)-n(:,i)*n(:,i)')*a(:,i);</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  </div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="comment">// Solve the linear system:</span></div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <a class="code" href="group__math__algebra__generic.html#ga8470f9f331a883ac9bf5a10f95eaf8fd">MAT33_INV</a>(temp_mat, Q_mat);</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <a class="code" href="group__math__algebra__generic.html#ga3ffba7234aaa9c01d2e4ba865d0c9296">MAT33_VECT3_MUL</a>(pos_drone_E_vec, temp_mat, p_vec); <span class="comment">// position = inv(Q) * p</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  </div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor">#if CAMERA_ROTATED_90DEG_RIGHT</span></div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="comment">// transformation of coordinates</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordtype">float</span> temp = pos_drone_E_vec.<a class="code" href="group__math__algebra__float.html#ac5e44e02fe71768bf56eb39a14f3cc5b">y</a>;</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  pos_drone_E_vec.<a class="code" href="group__math__algebra__float.html#ac5e44e02fe71768bf56eb39a14f3cc5b">y</a> = -pos_drone_E_vec.<a class="code" href="group__math__algebra__float.html#adeaa53529844ee1fa7df48e61c3994f7">z</a>;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  pos_drone_E_vec.<a class="code" href="group__math__algebra__float.html#adeaa53529844ee1fa7df48e61c3994f7">z</a> = -temp;</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  </div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="comment">//bound y to remove outliers</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordtype">float</span> y_threshold = 4;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">if</span> (pos_drone_E_vec.<a class="code" href="group__math__algebra__float.html#ac5e44e02fe71768bf56eb39a14f3cc5b">y</a> > y_threshold) { pos_drone_E_vec.<a class="code" href="group__math__algebra__float.html#ac5e44e02fe71768bf56eb39a14f3cc5b">y</a> = y_threshold; }</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pos_drone_E_vec.<a class="code" href="group__math__algebra__float.html#ac5e44e02fe71768bf56eb39a14f3cc5b">y</a> < -y_threshold) { pos_drone_E_vec.<a class="code" href="group__math__algebra__float.html#ac5e44e02fe71768bf56eb39a14f3cc5b">y</a> = -y_threshold; }</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  </div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">return</span> pos_drone_E_vec;</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<div class="ttc" id="aPnP__AHRS_8c_html_a30f92e7ee757f2657644e0df845ff43a"><div class="ttname"><a href="PnP__AHRS_8c.html#a30f92e7ee757f2657644e0df845ff43a">get_world_position_from_image_points</a></div><div class="ttdeci">struct FloatVect3 get_world_position_from_image_points(int *x_corners, int *y_corners, struct FloatVect3 *world_corners, int n_corners, struct camera_intrinsics_t cam_intrinsics, struct FloatEulers cam_body)</div><div class="ttdoc">Get the world position of the camera, given image coordinates and corresponding world coordinates.</div><div class="ttdef"><b>Definition:</b> <a href="PnP__AHRS_8c_source.html#l00054">PnP_AHRS.c:54</a></div></div>
<div class="ttc" id="agroup__math__algebra__generic_html_gada68445323d25e7f0a6f00b73caffff8"><div class="ttname"><a href="group__math__algebra__generic.html#gada68445323d25e7f0a6f00b73caffff8">MAT33_MAT33_DIFF</a></div><div class="ttdeci">#define MAT33_MAT33_DIFF(_mat1, _mat2, _mat3)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra_8h_source.html#l00534">pprz_algebra.h:534</a></div></div>
<div class="ttc" id="agroup__math__algebra__generic_html_ga00f24936416fef3008ef361e50a9e0c4"><div class="ttname"><a href="group__math__algebra__generic.html#ga00f24936416fef3008ef361e50a9e0c4">VECT3_SUM</a></div><div class="ttdeci">#define VECT3_SUM(_c, _a, _b)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra_8h_source.html#l00161">pprz_algebra.h:161</a></div></div>
<div class="ttc" id="agroup__state__attitude_html_ga9a5e6bac6e7d78e1b33430e73344615b"><div class="ttname"><a href="group__state__attitude.html#ga9a5e6bac6e7d78e1b33430e73344615b">stateGetNedToBodyEulers_f</a></div><div class="ttdeci">static struct FloatEulers * stateGetNedToBodyEulers_f(void)</div><div class="ttdoc">Get vehicle body attitude euler angles (float).</div><div class="ttdef"><b>Definition:</b> <a href="state_8h_source.html#l01143">state.h:1143</a></div></div>
<div class="ttc" id="agroup__math__algebra__generic_html_ga3323b7f041582a4ecda3ab19df845f23"><div class="ttname"><a href="group__math__algebra__generic.html#ga3323b7f041582a4ecda3ab19df845f23">VECT3_SDIV</a></div><div class="ttdeci">#define VECT3_SDIV(_vo, _vi, _s)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra_8h_source.html#l00196">pprz_algebra.h:196</a></div></div>
<div class="ttc" id="adetect__gate_8c_html_a6614f0e4c0cc22a362eb20dcc5e6c3ae"><div class="ttname"><a href="detect__gate_8c.html#a6614f0e4c0cc22a362eb20dcc5e6c3ae">cam_body</a></div><div class="ttdeci">struct FloatEulers cam_body</div><div class="ttdef"><b>Definition:</b> <a href="detect__gate_8c_source.html#l00112">detect_gate.c:112</a></div></div>
<div class="ttc" id="agroup__math__algebra__generic_html_ga847e317427e2ab13ecd86b347c917e7c"><div class="ttname"><a href="group__math__algebra__generic.html#ga847e317427e2ab13ecd86b347c917e7c">VECT3_NORM2</a></div><div class="ttdeci">#define VECT3_NORM2(_v)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra_8h_source.html#l00252">pprz_algebra.h:252</a></div></div>
<div class="ttc" id="agroup__math__algebra__float_html_gaba2b8407506025f0fa8257d7fa2a6e0c"><div class="ttname"><a href="group__math__algebra__float.html#gaba2b8407506025f0fa8257d7fa2a6e0c">FLOAT_MAT33_DIAG</a></div><div class="ttdeci">#define FLOAT_MAT33_DIAG(_m, _d00, _d11, _d22)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra__float_8h_source.html#l00234">pprz_algebra_float.h:234</a></div></div>
<div class="ttc" id="acc2500__compat_8h_html_a55fc1fd496f0c72a42ac4489aed3d862"><div class="ttname"><a href="cc2500__compat_8h.html#a55fc1fd496f0c72a42ac4489aed3d862">attitude</a></div><div class="ttdeci">#define attitude</div><div class="ttdef"><b>Definition:</b> <a href="cc2500__compat_8h_source.html#l00079">cc2500_compat.h:79</a></div></div>
<div class="ttc" id="agroup__math__algebra__float_html_a98f8790d7dbb4d3ef03e99cdf27f844e"><div class="ttname"><a href="group__math__algebra__float.html#a98f8790d7dbb4d3ef03e99cdf27f844e">FloatEulers::theta</a></div><div class="ttdeci">float theta</div><div class="ttdoc">in radians</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra__float_8h_source.html#l00086">pprz_algebra_float.h:86</a></div></div>
<div class="ttc" id="agroup__math__algebra__float_html_structFloatVect3"><div class="ttname"><a href="group__math__algebra__float.html#structFloatVect3">FloatVect3</a></div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra__float_8h_source.html#l00054">pprz_algebra_float.h:54</a></div></div>
<div class="ttc" id="agroup__math__algebra__float_html_a4b2c73d59e89d78354658b20058720e0"><div class="ttname"><a href="group__math__algebra__float.html#a4b2c73d59e89d78354658b20058720e0">FloatEulers::phi</a></div><div class="ttdeci">float phi</div><div class="ttdoc">in radians</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra__float_8h_source.html#l00085">pprz_algebra_float.h:85</a></div></div>
<div class="ttc" id="agroup__math__algebra__float_html_ga41de102be6b28101c9568380f729a88d"><div class="ttname"><a href="group__math__algebra__float.html#ga41de102be6b28101c9568380f729a88d">FLOAT_VECT3_ZERO</a></div><div class="ttdeci">#define FLOAT_VECT3_ZERO(_v)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra__float_8h_source.html#l00161">pprz_algebra_float.h:161</a></div></div>
<div class="ttc" id="adetect__gate_8c_html_afbc2c3a79a0312bcc3173018a91dccca"><div class="ttname"><a href="detect__gate_8c.html#afbc2c3a79a0312bcc3173018a91dccca">n_corners</a></div><div class="ttdeci">int n_corners</div><div class="ttdef"><b>Definition:</b> <a href="detect__gate_8c_source.html#l00109">detect_gate.c:109</a></div></div>
<div class="ttc" id="agroup__math__algebra__generic_html_gac095e0b930b26c145db5d1cd94fc957e"><div class="ttname"><a href="group__math__algebra__generic.html#gac095e0b930b26c145db5d1cd94fc957e">MAT33_COPY</a></div><div class="ttdeci">#define MAT33_COPY(_mat1, _mat2)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra_8h_source.html#l00438">pprz_algebra.h:438</a></div></div>
<div class="ttc" id="agroup__math__algebra__float_html_ac5e44e02fe71768bf56eb39a14f3cc5b"><div class="ttname"><a href="group__math__algebra__float.html#ac5e44e02fe71768bf56eb39a14f3cc5b">FloatVect3::y</a></div><div class="ttdeci">float y</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra__float_8h_source.html#l00056">pprz_algebra_float.h:56</a></div></div>
<div class="ttc" id="agroup__math__algebra__generic_html_ga8470f9f331a883ac9bf5a10f95eaf8fd"><div class="ttname"><a href="group__math__algebra__generic.html#ga8470f9f331a883ac9bf5a10f95eaf8fd">MAT33_INV</a></div><div class="ttdeci">#define MAT33_INV(_minv, _m)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra_8h_source.html#l00489">pprz_algebra.h:489</a></div></div>
<div class="ttc" id="agroup__math__algebra__float_html_ga00bc75df1116d9ecef980b2e9f0699f0"><div class="ttname"><a href="group__math__algebra__float.html#ga00bc75df1116d9ecef980b2e9f0699f0">float_rmat_of_eulers_321</a></div><div class="ttdeci">void float_rmat_of_eulers_321(struct FloatRMat *rm, struct FloatEulers *e)</div><div class="ttdoc">Rotation matrix from 321 Euler angles (float).</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra__float_8c_source.html#l00194">pprz_algebra_float.c:194</a></div></div>
<div class="ttc" id="aPnP__AHRS_8h_html"><div class="ttname"><a href="PnP__AHRS_8h.html">PnP_AHRS.h</a></div><div class="ttdoc">Functions for solving a perspective-n-point problem, using the AHRS to get the relevant angles.</div></div>
<div class="ttc" id="agroup__math__algebra__generic_html_ga3ffba7234aaa9c01d2e4ba865d0c9296"><div class="ttname"><a href="group__math__algebra__generic.html#ga3ffba7234aaa9c01d2e4ba865d0c9296">MAT33_VECT3_MUL</a></div><div class="ttdeci">#define MAT33_VECT3_MUL(_vout, _mat, _vin)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra_8h_source.html#l00463">pprz_algebra.h:463</a></div></div>
<div class="ttc" id="agroup__math__algebra__float_html_aa44c74404cf8ef0b143066e970352adb"><div class="ttname"><a href="group__math__algebra__float.html#aa44c74404cf8ef0b143066e970352adb">FloatVect3::x</a></div><div class="ttdeci">float x</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra__float_8h_source.html#l00055">pprz_algebra_float.h:55</a></div></div>
<div class="ttc" id="agroup__math__algebra__float_html_gaf7d71c6424c5d2fa1e77992fc214d7c0"><div class="ttname"><a href="group__math__algebra__float.html#gaf7d71c6424c5d2fa1e77992fc214d7c0">FLOAT_MAT33_ZERO</a></div><div class="ttdeci">#define FLOAT_MAT33_ZERO(_m)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra__float_8h_source.html#l00222">pprz_algebra_float.h:222</a></div></div>
<div class="ttc" id="aundistort__image_8c_html_a29a532ec52354ee7571487245359a066"><div class="ttname"><a href="undistort__image_8c.html#a29a532ec52354ee7571487245359a066">K</a></div><div class="ttdeci">static float K[9]</div><div class="ttdef"><b>Definition:</b> <a href="undistort__image_8c_source.html#l00041">undistort_image.c:41</a></div></div>
<div class="ttc" id="agroup__math__algebra__generic_html_ga28a287262a3234964931c956808df60c"><div class="ttname"><a href="group__math__algebra__generic.html#ga28a287262a3234964931c956808df60c">VECT3_VECT3_TRANS_MUL</a></div><div class="ttdeci">#define VECT3_VECT3_TRANS_MUL(_mat, _v_a, _v_b)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra_8h_source.html#l00521">pprz_algebra.h:521</a></div></div>
<div class="ttc" id="agroup__math__algebra__float_html_structFloatRMat"><div class="ttname"><a href="group__math__algebra__float.html#structFloatRMat">FloatRMat</a></div><div class="ttdoc">rotation matrix</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra__float_8h_source.html#l00077">pprz_algebra_float.h:77</a></div></div>
<div class="ttc" id="agroup__math__algebra__float_html_adeaa53529844ee1fa7df48e61c3994f7"><div class="ttname"><a href="group__math__algebra__float.html#adeaa53529844ee1fa7df48e61c3994f7">FloatVect3::z</a></div><div class="ttdeci">float z</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra__float_8h_source.html#l00057">pprz_algebra_float.h:57</a></div></div>
<div class="ttc" id="agroup__math__algebra__float_html_structFloatEulers"><div class="ttname"><a href="group__math__algebra__float.html#structFloatEulers">FloatEulers</a></div><div class="ttdoc">euler angles</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra__float_8h_source.html#l00084">pprz_algebra_float.h:84</a></div></div>
<div class="ttc" id="agroup__math__algebra__generic_html_ga894ab25bef695601ea448d04a9fd8aca"><div class="ttname"><a href="group__math__algebra__generic.html#ga894ab25bef695601ea448d04a9fd8aca">MAT33_TRANS</a></div><div class="ttdeci">#define MAT33_TRANS(_mat1, _mat2)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra_8h_source.html#l00560">pprz_algebra.h:560</a></div></div>
<div class="ttc" id="agroup__math__algebra__generic_html_ga6973c7a1f371b114260f96389cbe25bf"><div class="ttname"><a href="group__math__algebra__generic.html#ga6973c7a1f371b114260f96389cbe25bf">MAT33_MAT33_SUM</a></div><div class="ttdeci">#define MAT33_MAT33_SUM(_mat1, _mat2, _mat3)</div><div class="ttdef"><b>Definition:</b> <a href="pprz__algebra_8h_source.html#l00547">pprz_algebra.h:547</a></div></div>
<div class="ttc" id="astate_8h_html"><div class="ttname"><a href="state_8h.html">state.h</a></div></div>
<div class="ttc" id="aundistortion_8c_html_a2c56172dffbf789b4b5c164c08395740"><div class="ttname"><a href="undistortion_8c.html#a2c56172dffbf789b4b5c164c08395740">distorted_pixels_to_normalized_coords</a></div><div class="ttdeci">bool distorted_pixels_to_normalized_coords(float x_pd, float y_pd, float *x_n, float *y_n, float k, const float *K)</div><div class="ttdoc">Transform distorted pixel coordinates to normalized coordinates.</div><div class="ttdef"><b>Definition:</b> <a href="undistortion_8c_source.html#l00128">undistortion.c:128</a></div></div>
<div class="ttc" id="adetect__gate_8c_html_a5abe2d7a4b0bc945745785222ef0d59a"><div class="ttname"><a href="detect__gate_8c.html#a5abe2d7a4b0bc945745785222ef0d59a">world_corners</a></div><div class="ttdeci">struct FloatVect3 world_corners[4]</div><div class="ttdef"><b>Definition:</b> <a href="detect__gate_8c_source.html#l00106">detect_gate.c:106</a></div></div>
<div class="ttc" id="avideo__device_8h_html_structcamera__intrinsics__t"><div class="ttname"><a href="video__device_8h.html#structcamera__intrinsics__t">camera_intrinsics_t</a></div><div class="ttdef"><b>Definition:</b> <a href="video__device_8h_source.html#l00046">video_device.h:46</a></div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_01fcd3835fb4e7d9331b722d86291b65.html">sw</a></li><li class="navelem"><a class="el" href="dir_5e9153041680afc3c016fd52fa730b56.html">airborne</a></li><li class="navelem"><a class="el" href="dir_c2abcdd6ccb39c3582929c0e3f5651c2.html">modules</a></li><li class="navelem"><a class="el" href="dir_304e79c9f5d09ea65a2f55aafb6a6b9d.html">computer_vision</a></li><li class="navelem"><a class="el" href="dir_9adc125244b74c64b95124778e5b932a.html">lib</a></li><li class="navelem"><a class="el" href="dir_02b33bf6f772461f444923131a9a8dda.html">vision</a></li><li class="navelem"><a class="el" href="PnP__AHRS_8c.html">PnP_AHRS.c</a></li>
<li class="footer">Generated on Tue Feb 1 2022 13:08:44 for Paparazzi UAS by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
</ul>
</div>
</body>
</html>