Paparazzi UAS  v5.0.5_stable-7-g4b8bbb7
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
pprz_geodetic_int.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2008-2011 The Paparazzi Team
3  *
4  * This file is part of paparazzi.
5  *
6  * paparazzi is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * paparazzi is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with paparazzi; see the file COPYING. If not, see
18  * <http://www.gnu.org/licenses/>.
19  *
20  */
21 
30 #ifndef PPRZ_GEODETIC_INT_H
31 #define PPRZ_GEODETIC_INT_H
32 
33 #include "pprz_geodetic.h"
34 
35 #include "std.h"
36 #include "pprz_algebra_int.h"
37 
38 
45 struct EcefCoor_i {
49 };
50 
54 struct LlaCoor_i {
58 };
59 
63 struct NedCoor_i {
67 };
68 
72 struct EnuCoor_i {
76 };
77 
81 struct UtmCoor_i {
86 };
87 
93 struct LtpDef_i {
94  struct EcefCoor_i ecef;
95  struct LlaCoor_i lla;
98 };
99 
100 extern void ltp_def_from_ecef_i(struct LtpDef_i* def, struct EcefCoor_i* ecef);
101 extern void ltp_def_from_lla_i(struct LtpDef_i* def, struct LlaCoor_i* lla);
102 extern void lla_of_ecef_i(struct LlaCoor_i* out, struct EcefCoor_i* in);
103 extern void ecef_of_lla_i(struct EcefCoor_i* out, struct LlaCoor_i* in);
104 extern void enu_of_ecef_point_i(struct EnuCoor_i* enu, struct LtpDef_i* def, struct EcefCoor_i* ecef);
105 extern void ned_of_ecef_point_i(struct NedCoor_i* ned, struct LtpDef_i* def, struct EcefCoor_i* ecef);
106 extern void enu_of_ecef_pos_i(struct EnuCoor_i* enu, struct LtpDef_i* def, struct EcefCoor_i* ecef);
107 extern void ned_of_ecef_pos_i(struct NedCoor_i* ned, struct LtpDef_i* def, struct EcefCoor_i* ecef);
108 extern void enu_of_ecef_vect_i(struct EnuCoor_i* enu, struct LtpDef_i* def, struct EcefCoor_i* ecef);
109 extern void ned_of_ecef_vect_i(struct NedCoor_i* ned, struct LtpDef_i* def, struct EcefCoor_i* ecef);
110 extern void enu_of_lla_point_i(struct EnuCoor_i* enu, struct LtpDef_i* def, struct LlaCoor_i* lla);
111 extern void ned_of_lla_point_i(struct NedCoor_i* ned, struct LtpDef_i* def, struct LlaCoor_i* lla);
112 extern void enu_of_lla_vect_i(struct EnuCoor_i* enu, struct LtpDef_i* def, struct LlaCoor_i* lla);
113 extern void ned_of_lla_vect_i(struct NedCoor_i* ned, struct LtpDef_i* def, struct LlaCoor_i* lla);
114 extern void ecef_of_enu_point_i(struct EcefCoor_i* ecef, struct LtpDef_i* def, struct EnuCoor_i* enu);
115 extern void ecef_of_ned_point_i(struct EcefCoor_i* ecef, struct LtpDef_i* def, struct NedCoor_i* ned);
116 extern void ecef_of_enu_pos_i(struct EcefCoor_i* ecef, struct LtpDef_i* def, struct EnuCoor_i* enu);
117 extern void ecef_of_ned_pos_i(struct EcefCoor_i* ecef, struct LtpDef_i* def, struct NedCoor_i* ned);
118 extern void ecef_of_enu_vect_i(struct EcefCoor_i* ecef, struct LtpDef_i* def, struct EnuCoor_i* enu);
119 extern void ecef_of_ned_vect_i(struct EcefCoor_i* ecef, struct LtpDef_i* def, struct NedCoor_i* ned);
120 
121 #define CM_OF_M(_m) ((_m)*1e2)
122 #define M_OF_CM(_cm) ((_cm)/1e2)
123 #define MM_OF_M(_m) ((_m)*1e3)
124 #define M_OF_MM(_mm) ((_mm)/1e3)
125 #define EM7RAD_OF_RAD(_r) ((_r)*1e7)
126 #define RAD_OF_EM7RAD(_r) ((_r)/1e7)
127 
128 #define VECT3_ENU_OF_NED(_o, _i) { \
129  (_o).x = (_i).y; \
130  (_o).y = (_i).x; \
131  (_o).z = -(_i).z; \
132  }
133 
134 #define VECT3_NED_OF_ENU(_o, _i) VECT3_ENU_OF_NED(_o,_i)
135 #define INT32_VECT3_NED_OF_ENU(_o, _i) VECT3_ENU_OF_NED(_o,_i)
136 #define INT32_VECT3_ENU_OF_NED(_o, _i) VECT3_ENU_OF_NED(_o,_i)
137 
138 #define ECEF_BFP_OF_REAL(_o, _i) { \
139  (_o).x = (int32_t)CM_OF_M((_i).x); \
140  (_o).y = (int32_t)CM_OF_M((_i).y); \
141  (_o).z = (int32_t)CM_OF_M((_i).z); \
142  }
143 
144 #define ECEF_FLOAT_OF_BFP(_o, _i) { \
145  (_o).x = (float)M_OF_CM((_i).x); \
146  (_o).y = (float)M_OF_CM((_i).y); \
147  (_o).z = (float)M_OF_CM((_i).z); \
148  }
149 
150 #define LLA_BFP_OF_REAL(_o, _i) { \
151  (_o).lat = (int32_t)EM7RAD_OF_RAD((_i).lat); \
152  (_o).lon = (int32_t)EM7RAD_OF_RAD((_i).lon); \
153  (_o).alt = (int32_t)MM_OF_M((_i).alt); \
154  }
155 
156 #define LLA_FLOAT_OF_BFP(_o, _i) { \
157  (_o).lat = (float)RAD_OF_EM7RAD((_i).lat); \
158  (_o).lon = (float)RAD_OF_EM7RAD((_i).lon); \
159  (_o).alt = (float)M_OF_MM((_i).alt); \
160  }
161 
162 #define NED_BFP_OF_REAL(_o, _i) { \
163  (_o).x = POS_BFP_OF_REAL((_i).x); \
164  (_o).y = POS_BFP_OF_REAL((_i).y); \
165  (_o).z = POS_BFP_OF_REAL((_i).z); \
166  }
167 
168 #define ENU_BFP_OF_REAL(_o, _i) NED_BFP_OF_REAL(_o, _i)
169 
170 #define NED_FLOAT_OF_BFP(_o, _i) { \
171  (_o).x = POS_FLOAT_OF_BFP((_i).x); \
172  (_o).y = POS_FLOAT_OF_BFP((_i).y); \
173  (_o).z = POS_FLOAT_OF_BFP((_i).z); \
174  }
175 
176 #define ENU_FLOAT_OF_BFP(_o, _i) NED_FLOAT_OF_BFP(_o, _i)
177 
178 #define INT32_VECT2_ENU_OF_NED(_o, _i) { \
179  (_o).x = (_i).y; \
180  (_o).y = (_i).x; \
181  }
182 
183 #define INT32_VECT2_NED_OF_ENU(_o, _i) INT32_VECT2_ENU_OF_NED(_o,_i)
184 
185 #endif /* PPRZ_GEODETIC_INT_H */
int32_t y
in centimeters
int32_t lat
in radians*1e7
void enu_of_ecef_point_i(struct EnuCoor_i *enu, struct LtpDef_i *def, struct EcefCoor_i *ecef)
struct Int32Mat33 ltp_of_ecef
Rotation matrix.
vector in EarthCenteredEarthFixed coordinates
uint8_t zone
UTM zone number.
void ecef_of_ned_pos_i(struct EcefCoor_i *ecef, struct LtpDef_i *def, struct NedCoor_i *ned)
Convert a local NED position to ECEF.
void enu_of_ecef_vect_i(struct EnuCoor_i *enu, struct LtpDef_i *def, struct EcefCoor_i *ecef)
void ned_of_ecef_point_i(struct NedCoor_i *ned, struct LtpDef_i *def, struct EcefCoor_i *ecef)
int32_t x
North.
struct LlaCoor_i lla
Reference point in lla.
vector in Latitude, Longitude and Altitude
void lla_of_ecef_i(struct LlaCoor_i *out, struct EcefCoor_i *in)
int32_t z
in centimeters
void ltp_def_from_ecef_i(struct LtpDef_i *def, struct EcefCoor_i *ecef)
void enu_of_lla_vect_i(struct EnuCoor_i *enu, struct LtpDef_i *def, struct LlaCoor_i *lla)
int32_t alt
in millimeters above WGS84 reference ellipsoid
int32_t z
Up.
vector in North East Down coordinates
void ecef_of_lla_i(struct EcefCoor_i *out, struct LlaCoor_i *in)
int32_t z
Down.
definition of the local (flat earth) coordinate system
void ecef_of_ned_vect_i(struct EcefCoor_i *ecef, struct LtpDef_i *def, struct NedCoor_i *ned)
void ned_of_lla_point_i(struct NedCoor_i *ned, struct LtpDef_i *def, struct LlaCoor_i *lla)
void ecef_of_enu_vect_i(struct EcefCoor_i *ecef, struct LtpDef_i *def, struct EnuCoor_i *enu)
void enu_of_ecef_pos_i(struct EnuCoor_i *enu, struct LtpDef_i *def, struct EcefCoor_i *ecef)
Convert a ECEF position to local ENU.
int32_t alt
in millimeters above WGS84 reference ellipsoid
int32_t y
East.
void ned_of_lla_vect_i(struct NedCoor_i *ned, struct LtpDef_i *def, struct LlaCoor_i *lla)
int32_t north
in centimeters
int32_t x
in centimeters
position in UTM coordinates
signed long int32_t
Definition: types.h:19
int32_t east
in centimeters
unsigned char uint8_t
Definition: types.h:14
int32_t lon
in radians*1e7
int32_t hmsl
Height above mean sea level in mm.
void ecef_of_enu_pos_i(struct EcefCoor_i *ecef, struct LtpDef_i *def, struct EnuCoor_i *enu)
Convert a local ENU position to ECEF.
struct EcefCoor_i ecef
Reference point in ecef.
void ecef_of_enu_point_i(struct EcefCoor_i *ecef, struct LtpDef_i *def, struct EnuCoor_i *enu)
Convert a point in local ENU to ECEF.
void ned_of_ecef_pos_i(struct NedCoor_i *ned, struct LtpDef_i *def, struct EcefCoor_i *ecef)
Convert a ECEF position to local NED.
void ecef_of_ned_point_i(struct EcefCoor_i *ecef, struct LtpDef_i *def, struct NedCoor_i *ned)
Convert a point in local NED to ECEF.
void ned_of_ecef_vect_i(struct NedCoor_i *ned, struct LtpDef_i *def, struct EcefCoor_i *ecef)
void ltp_def_from_lla_i(struct LtpDef_i *def, struct LlaCoor_i *lla)
int32_t y
North.
void enu_of_lla_point_i(struct EnuCoor_i *enu, struct LtpDef_i *def, struct LlaCoor_i *lla)
vector in East North Up coordinates
int32_t x
East.
Paparazzi fixed point algebra.