27 float wrapped_angle_deg = angle_deg;
29 if ( (wrapped_angle_deg < -360.0
f) || (wrapped_angle_deg > 360.0
f) )
31 wrapped_angle_deg = fmodf(wrapped_angle_deg, 360.0
f);
34 if (wrapped_angle_deg < 0.0
f)
36 wrapped_angle_deg = 360.0f + wrapped_angle_deg;
39 return wrapped_angle_deg;
56 if ((month_index == 4) || (month_index == 6) || (month_index == 9) || (month_index == 11))
60 else if ((month_index == 2))
79 return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
84 constexpr int32_t DEFAULT_UTC_OFFSET = 18;
90 utcOffset = (gps_tow/1000)%60 - sec;
94 utcOffset = 60 + utcOffset;
99 utcOffset = DEFAULT_UTC_OFFSET;
109 switch (sbg_gps_type)
112 nmeaQuality = NmeaGGAQuality::INVALID;
118 nmeaQuality = NmeaGGAQuality::SINGLE;
124 nmeaQuality = NmeaGGAQuality::DGPS;
129 nmeaQuality = NmeaGGAQuality::PPS;
133 nmeaQuality = NmeaGGAQuality::RTK_FIXED;
137 nmeaQuality = NmeaGGAQuality::RTK_FLOAT;
150 static constexpr
double EQUATORIAL_RADIUS = 6378137.0;
151 static constexpr
double POLAR_RADIUS = 6356752.314245;
155 double compute_cte = pow(POLAR_RADIUS, 2) / pow(EQUATORIAL_RADIUS, 2);
156 double eccentricity = 1.0 - compute_cte;
157 double prime_vertical_radius = EQUATORIAL_RADIUS / sqrt(1.0 - (pow(eccentricity, 2) * pow(sin(latitude_rad), 2)));
159 sbg::SbgVector3d ecef_vector((prime_vertical_radius + altitude) * cos(latitude_rad) * cos(longitude_rad),
160 (prime_vertical_radius + altitude) * cos(latitude_rad) * sin(longitude_rad),
161 fma(compute_cte, prime_vertical_radius, altitude) * sin(latitude_rad));