Exemplo n.º 1
0
struct relative3D_32 dcm_absolute_to_relative_32(struct waypoint3D absolute)
{
	struct relative3D_32 rel;

	rel.z = absolute.z;
	rel.y = (absolute.y - lat_origin.WW) / 90; // in meters
	rel.x = long_scale((absolute.x - lon_origin.WW) / 90, cos_lat);
	return rel;
}
Exemplo n.º 2
0
static void location_plane(int32_t* location)
{
    location[1] = ((lat_gps.WW - lat_origin.WW)/90); // in meters, range is about 20 miles
    location[0] = long_scale((lon_gps.WW - lon_origin.WW)/90, cos_lat);
#if (USE_BAROMETER_ALTITUDE == 1 )
#warning "using pressure altitude instead of GPS altitude"
    // division by 100 implies alt_origin is in centimeters; not documented elsewhere
    // longword result = (longword/10 - longword)/100 : range
    location[2] = ((get_barometer_altitude()/10) - alt_origin.WW)/100; // height in meters
#else
    location[2] = (alt_sl_gps.WW - alt_origin.WW)/100; // height in meters
#endif // USE_BAROMETER_ALTITUDE

}
Exemplo n.º 3
0
static void location_plane(int16_t* location)
{
	union longbbbb accum_nav;

	accum_nav.WW = ((lat_gps.WW - lat_origin.WW)/90); // in meters, range is about 20 miles
	location[1] = accum_nav._.W0;
	accum_nav.WW = long_scale((lon_gps.WW - lon_origin.WW)/90, cos_lat);
	location[0] = accum_nav._.W0;
#ifdef USE_PRESSURE_ALT
#warning "using pressure altitude instead of GPS altitude"
	// division by 100 implies alt_origin is in centimeters; not documented elsewhere
	// longword result = (longword/10 - longword)/100 : range
	accum_nav.WW = ((get_barometer_altitude()/10) - alt_origin.WW)/100; // height in meters
#else
	accum_nav.WW = (alt_sl_gps.WW - alt_origin.WW)/100; // height in meters
#endif // USE_PRESSURE_ALT
	location[2] = accum_nav._.W0;
}
Exemplo n.º 4
0
static void location_plane(int32_t* location)
{
	location[1] = ((lat_gps.WW - lat_origin.WW)/90); // in meters, range is about 20 miles
	location[0] = long_scale((lon_gps.WW - lon_origin.WW)/90, cos_lat);
	location[2] = (alt_sl_gps.WW - alt_origin.WW)/100; // height in meters
}