Merge branch 'master' into telemetry

to resolve
Conflicts:
	sw/airborne/firmwares/fixedwing/ap_downlink.h
This commit is contained in:
Felix Ruess
2013-10-28 16:07:02 +01:00
12 changed files with 137 additions and 150 deletions
-3
View File
@@ -40,9 +40,6 @@ ROTORCRAFT_INC = -I$(SRC_FIRMWARE) -I$(SRC_BOARD)
ap.ARCHDIR = $(ARCH) ap.ARCHDIR = $(ARCH)
# would be better to auto-generate this
$(TARGET).CFLAGS += -DFIRMWARE=ROTORCRAFT
ap.CFLAGS += $(ROTORCRAFT_INC) ap.CFLAGS += $(ROTORCRAFT_INC)
ap.CFLAGS += -DBOARD_CONFIG=$(BOARD_CFG) -DPERIPHERALS_AUTO_INIT ap.CFLAGS += -DBOARD_CONFIG=$(BOARD_CFG) -DPERIPHERALS_AUTO_INIT
ap.srcs = $(SRC_FIRMWARE)/main.c ap.srcs = $(SRC_FIRMWARE)/main.c
@@ -35,9 +35,6 @@ $(TARGET).CFLAGS += -DBOARD_CONFIG=$(BOARD_CFG)
$(TARGET).CFLAGS += -DPERIPHERALS_AUTO_INIT $(TARGET).CFLAGS += -DPERIPHERALS_AUTO_INIT
$(TARGET).CFLAGS += $(FIXEDWING_INC) $(TARGET).CFLAGS += $(FIXEDWING_INC)
# would be better to auto-generate this
$(TARGET).CFLAGS += -DFIRMWARE=FIXEDWING
$(TARGET).srcs += mcu.c $(TARGET).srcs += mcu.c
$(TARGET).srcs += $(SRC_ARCH)/mcu_arch.c $(TARGET).srcs += $(SRC_ARCH)/mcu_arch.c
+5 -3
View File
@@ -11,10 +11,12 @@
- automatic baudrate detection - automatic baudrate detection
Warning: you still need to tell the driver Warning: you still need to tell the driver
a) which paparazzi uart you use 1. Which paparazzi uart you use
b) inside the ublox gps there are also many ports. the tiny/ppzgps use ublox_internal_port1 but if for instance you use a LS-SAM or I2C device you need to configure: 2. Inside the ublox gps there are also many ports.
The tiny/ppzgps use ublox_internal_port1 (UART1) but if for instance you use a LS-SAM
or I2C device you need to set this by defining GPS_PORT_ID.
</description> </description>
<define name="GPS_PORT_ID" value="GPS_PORT_UART2" description=""/> <define name="GPS_PORT_ID" value="GPS_PORT_UART1" description="Port inside the Ublox GPS (GPS_PORT_DDC, GPS_PORT_UART1, GPS_PORT_UART2, GPS_PORT_USB, GPS_PORT_SPI)"/>
</doc> </doc>
<header> <header>
<file name="gps_ubx_ucenter.h"/> <file name="gps_ubx_ucenter.h"/>
+1 -1
View File
@@ -33,7 +33,7 @@
#include "led.h" #include "led.h"
// ADC for absolute pressure // ADC for absolute pressure
#define BARO_ABS_ADS #ifndef BARO_ABS_ADS
#define BARO_ABS_ADS ads1114_1 #define BARO_ABS_ADS ads1114_1
#endif #endif
@@ -32,7 +32,6 @@
#include <inttypes.h> #include <inttypes.h>
#include "std.h" #include "std.h"
#include "paparazzi.h" #include "paparazzi.h"
#include "mcu_periph/sys_time.h"
#include "generated/airframe.h" #include "generated/airframe.h"
+9 -8
View File
@@ -27,7 +27,6 @@
* *
*/ */
#include "gps_ubx_ucenter.h" #include "gps_ubx_ucenter.h"
////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////
@@ -295,6 +294,9 @@ static inline void gps_ubx_ucenter_config_port(void)
#if GPS_PORT_ID == GPS_PORT_UART1 || GPS_PORT_ID == GPS_PORT_UART2 #if GPS_PORT_ID == GPS_PORT_UART1 || GPS_PORT_ID == GPS_PORT_UART2
UbxSend_CFG_PRT(GPS_PORT_ID, 0x0, 0x0, 0x000008D0, 38400, UBX_PROTO_MASK, UBX_PROTO_MASK, 0x0, 0x0); UbxSend_CFG_PRT(GPS_PORT_ID, 0x0, 0x0, 0x000008D0, 38400, UBX_PROTO_MASK, UBX_PROTO_MASK, 0x0, 0x0);
#endif #endif
#if GPS_PORT_ID == GPS_PORT_USB
UbxSend_CFG_PRT(GPS_PORT_ID, 0x0, 0x0, 0x0, 0, UBX_PROTO_MASK, UBX_PROTO_MASK, 0x0, 0x0);
#endif
} }
#define GPS_SBAS_ENABLED 0x01 #define GPS_SBAS_ENABLED 0x01
@@ -319,6 +321,9 @@ static inline void gps_ubx_ucenter_enable_msg(uint8_t class, uint8_t id, uint8_t
#if GPS_PORT_ID == GPS_PORT_UART2 #if GPS_PORT_ID == GPS_PORT_UART2
UbxSend_CFG_MSG(class, id, 0, 0, rate, 0); UbxSend_CFG_MSG(class, id, 0, 0, rate, 0);
#endif #endif
#if GPS_PORT_ID == GPS_PORT_USB
UbxSend_CFG_MSG(class, id, 0, 0, 0, rate);
#endif
#if GPS_PORT_ID == GPS_PORT_DDC #if GPS_PORT_ID == GPS_PORT_DDC
UbxSend_CFG_MSG(class, id, rate, 0, 0, 0); UbxSend_CFG_MSG(class, id, rate, 0, 0, 0);
#endif #endif
@@ -385,10 +390,10 @@ static bool_t gps_ubx_ucenter_configure(uint8_t nr)
gps_ubx_ucenter_enable_msg(UBX_NAV_ID, UBX_NAV_SVINFO_ID, 4); gps_ubx_ucenter_enable_msg(UBX_NAV_ID, UBX_NAV_SVINFO_ID, 4);
break; break;
case 11: case 11:
#if defined FIRMWARE && FIRMWARE == ROTORCRAFT #if GPS_UBX_UCENTER_SLOW_NAV_SOL
gps_ubx_ucenter_enable_msg(UBX_NAV_ID, UBX_NAV_SOL_ID, 1);
#else
gps_ubx_ucenter_enable_msg(UBX_NAV_ID, UBX_NAV_SOL_ID, 8); gps_ubx_ucenter_enable_msg(UBX_NAV_ID, UBX_NAV_SOL_ID, 8);
#else
gps_ubx_ucenter_enable_msg(UBX_NAV_ID, UBX_NAV_SOL_ID, 1);
#endif #endif
break; break;
case 12: case 12:
@@ -416,7 +421,3 @@ static bool_t gps_ubx_ucenter_configure(uint8_t nr)
} }
return TRUE; // Continue, except for the last case return TRUE; // Continue, except for the last case
} }
+1 -1
View File
@@ -20,7 +20,7 @@
*/ */
/** /**
* @file modules/sensors/baro_mpl3155.c * @file modules/sensors/baro_mpl3115.c
* *
* Module for the baro MPL3115A2 from Freescale (i2c) * Module for the baro MPL3115A2 from Freescale (i2c)
* *
+1 -1
View File
@@ -20,7 +20,7 @@
*/ */
/** /**
* @file modules/sensors/baro_mpl3155.h * @file modules/sensors/baro_mpl3115.h
* *
* Module for the baro MPL3115A2 from Freescale (i2c) * Module for the baro MPL3115A2 from Freescale (i2c)
* *
+14 -27
View File
@@ -3,14 +3,13 @@ Q=@
CC = gcc CC = gcc
CFLAGS = -std=c99 -I.. -I../.. -I../../../include -I../../booz -I../../../booz -Wall CFLAGS = -std=c99 -I.. -I../.. -I../../../include -Wall
LDFLAGS = -lm -lgsl -lgslcblas LDFLAGS = -lm -lgsl -lgslcblas
CFLAGS += CFLAGS +=
# imu wants airframe to fetch its neutrals # imu wants airframe to fetch its neutrals
# ahrs wants airframe to fetch IMU_BODY_TO_IMU_ANGLES # ahrs wants airframe to fetch IMU_BODY_TO_IMU_ANGLES
#CFLAGS += -I../../../../var/BOOZ2_A7
CFLAGS += -I../../../../var/ahrs_test CFLAGS += -I../../../../var/ahrs_test
@@ -51,28 +50,15 @@ AHRS_TYPE = AHRS_TYPE_ICQ
#AHRS_TYPE = AHRS_TYPE_FCR2 #AHRS_TYPE = AHRS_TYPE_FCR2
#AHRS_TYPE = AHRS_TYPE_FCQ #AHRS_TYPE = AHRS_TYPE_FCQ
endif endif
ifndef PROPAGATE_LOW_PASS_RATES
PROPAGATE_LOW_PASS_RATES = 0
endif
ifndef GRAVITY_UPDATE_NORM_HEURISTIC
GRAVITY_UPDATE_NORM_HEURISTIC = 0
endif
ifndef GRAVITY_UPDATE_COORDINATED_TURN
GRAVITY_UPDATE_COORDINATED_TURN = 0
endif
ifndef MAG_UPDATE_YAW_ONLY
MAG_UPDATE_YAW_ONLY = 0
endif
ifndef DISABLE_MAG_UPDATE
DISABLE_MAG_UPDATE = 0
endif
ifndef USE_GPS_HEADING
USE_GPS_HEADING = 0
endif
ifndef FREQUENCY PROPAGATE_LOW_PASS_RATES ?= 0
FREQENCY = 512 GRAVITY_UPDATE_NORM_HEURISTIC ?= 0
endif GRAVITY_UPDATE_COORDINATED_TURN ?= 0
MAG_UPDATE_YAW_ONLY ?= 0
DISABLE_MAG_UPDATE ?= 0
USE_GPS_HEADING ?= 0
FREQENCY ?= 512
AHRS_CFLAGS += -DAHRS_TYPE=$(AHRS_TYPE) AHRS_CFLAGS += -DAHRS_TYPE=$(AHRS_TYPE)
@@ -114,10 +100,6 @@ ifeq ($(AHRS_TYPE), AHRS_TYPE_ICQ)
AHRS_CFLAGS += -DAHRS_TYPE_H=\"subsystems/ahrs/ahrs_int_cmpl_quat.h\" AHRS_CFLAGS += -DAHRS_TYPE_H=\"subsystems/ahrs/ahrs_int_cmpl_quat.h\"
AHRS_SRCS += ../../subsystems/ahrs/ahrs_int_cmpl_quat.c AHRS_SRCS += ../../subsystems/ahrs/ahrs_int_cmpl_quat.c
endif endif
ifeq ($(AHRS_TYPE), AHRS_TYPE_FLQ)
AHRS_CFLAGS += -DAHRS_TYPE_H=\"subsystems/ahrs/ahrs_float_lkf_quat.h\"
AHRS_SRCS += ../../subsystems/ahrs/ahrs_float_lkf_quat.c
endif
ifeq ($(AHRS_TYPE), AHRS_TYPE_FCR) ifeq ($(AHRS_TYPE), AHRS_TYPE_FCR)
AHRS_CFLAGS += -DAHRS_TYPE_H=\"subsystems/ahrs/ahrs_float_dcm.h\" AHRS_CFLAGS += -DAHRS_TYPE_H=\"subsystems/ahrs/ahrs_float_dcm.h\"
AHRS_SRCS += ../../subsystems/ahrs/ahrs_float_dcm.c AHRS_SRCS += ../../subsystems/ahrs/ahrs_float_dcm.c
@@ -135,9 +117,14 @@ endif
RAOS_SRCS = ./ahrs_on_synth.c \ RAOS_SRCS = ./ahrs_on_synth.c \
../../state.c \
../../subsystems/imu.c \ ../../subsystems/imu.c \
../../subsystems/imu/imu_dummy.c \ ../../subsystems/imu/imu_dummy.c \
../../math/pprz_trig_int.c \ ../../math/pprz_trig_int.c \
../../math/pprz_orientation_conversion.c \
../../math/pprz_geodetic_int.c \
../../math/pprz_geodetic_float.c \
../../math/pprz_geodetic_double.c \
../../../simulator/nps/nps_random.c ../../../simulator/nps/nps_random.c
+7 -13
View File
@@ -31,6 +31,7 @@ from array import array
import numpy import numpy
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
def run_simulation(ahrs_type, build_opt, traj_nb): def run_simulation(ahrs_type, build_opt, traj_nb):
print "\nBuilding ahrs" print "\nBuilding ahrs"
args = ["make", "clean", "run_ahrs_on_synth", "AHRS_TYPE=AHRS_TYPE_" + ahrs_type] + build_opt args = ["make", "clean", "run_ahrs_on_synth", "AHRS_TYPE=AHRS_TYPE_" + ahrs_type] + build_opt
@@ -44,7 +45,8 @@ def run_simulation(ahrs_type, build_opt, traj_nb):
print "Running simulation" print "Running simulation"
print " using traj " + str(traj_nb) print " using traj " + str(traj_nb)
p = subprocess.Popen(args=["./run_ahrs_on_synth",str(traj_nb)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False) p = subprocess.Popen(args=["./run_ahrs_on_synth", str(traj_nb)], stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
shell=False)
outputlines = p.stdout.readlines() outputlines = p.stdout.readlines()
p.wait() p.wait()
# for i in outputlines: # for i in outputlines:
@@ -57,13 +59,8 @@ def run_simulation(ahrs_type, build_opt, traj_nb):
('bp_true', 'float32'), ('bq_true', 'float32'), ('br_true', 'float32'), ('bp_true', 'float32'), ('bq_true', 'float32'), ('br_true', 'float32'),
('phi_ahrs', 'float32'), ('theta_ahrs', 'float32'), ('psi_ahrs', 'float32'), ('phi_ahrs', 'float32'), ('theta_ahrs', 'float32'), ('psi_ahrs', 'float32'),
('p_ahrs', 'float32'), ('q_ahrs', 'float32'), ('r_ahrs', 'float32'), ('p_ahrs', 'float32'), ('q_ahrs', 'float32'), ('r_ahrs', 'float32'),
('bp_ahrs', 'float32'), ('bq_ahrs', 'float32'), ('br_ahrs', 'float32') ('bp_ahrs', 'float32'), ('bq_ahrs', 'float32'), ('br_ahrs', 'float32')]
]
pos_data_type = [ ('x0_true', 'float32'), ('y0_true', 'float32'), ('z0_true', 'float32'),
('x1_true', 'float32'), ('y1_true', 'float32'), ('z1_true', 'float32'),
('x2_true', 'float32'), ('y2_true', 'float32'), ('z2_true', 'float32'),
('x3_true', 'float32'), ('y3_true', 'float32'), ('z3_true', 'float32'),
]
mydescr = numpy.dtype(ahrs_data_type) mydescr = numpy.dtype(ahrs_data_type)
data = [[] for dummy in xrange(len(mydescr))] data = [[] for dummy in xrange(len(mydescr))]
# import code; code.interact(local=locals()) # import code; code.interact(local=locals())
@@ -71,7 +68,7 @@ def run_simulation(ahrs_type, build_opt, traj_nb):
if line.startswith("#"): if line.startswith("#"):
print " " + line, print " " + line,
else: else:
fields = line.strip().split(' '); fields = line.strip().split(' ')
# print fields # print fields
for i, number in enumerate(fields): for i, number in enumerate(fields):
data[i].append(number) data[i].append(number)
@@ -83,7 +80,6 @@ def run_simulation(ahrs_type, build_opt, traj_nb):
return numpy.rec.array(data, dtype=mydescr) return numpy.rec.array(data, dtype=mydescr)
def plot_simulation_results(plot_true_state, lsty, type, sim_res): def plot_simulation_results(plot_true_state, lsty, type, sim_res):
print "Plotting Results" print "Plotting Results"
@@ -132,7 +128,6 @@ def plot_simulation_results(plot_true_state, lsty, type, sim_res):
xlabel('time in s') xlabel('time in s')
title('br') title('br')
if plot_true_state: if plot_true_state:
subplot(3, 3, 1) subplot(3, 3, 1)
plt.plot(sim_res.time, sim_res.phi_true, 'r--') plt.plot(sim_res.time, sim_res.phi_true, 'r--')
@@ -154,6 +149,5 @@ def plot_simulation_results(plot_true_state, lsty, type, sim_res):
plot(sim_res.time, sim_res.br_true, 'r--') plot(sim_res.time, sim_res.br_true, 'r--')
def show_plot(): def show_plot():
plt.show(); plt.show()
+38 -38
View File
@@ -24,51 +24,51 @@ import ahrs_utils
def main(): def main():
# traj_nb = 0; # static # traj_nb = 0 # static
# traj_nb = 1; # sine orientation # traj_nb = 1 # sine orientation
# traj_nb = 2; # sine X quad # traj_nb = 2 # sine X quad
# traj_nb = 3; # step_phi # traj_nb = 3 # step_phi
# traj_nb = 4; # step_phi_2nd_order # traj_nb = 4 # step_phi_2nd_order
# traj_nb = 5; # step_bias # traj_nb = 5 # step_bias
# traj_nb = 6; # coordinated circle # traj_nb = 6 # coordinated circle
# traj_nb = 7; # stop stop X quad # traj_nb = 7 # stop stop X quad
traj_nb = 8; # bungee takeoff traj_nb = 8 # bungee takeoff
build_opt1 = []; build_opt1 = []
# build_opt1 = ["Q="]; # build_opt1 = ["Q="]
build_opt1 += ["FREQUENCY=120"]; build_opt1 += ["FREQUENCY=120"]
# build_opt1 += ["PROPAGATE_LOW_PASS_RATES=1"]; # build_opt1 += ["PROPAGATE_LOW_PASS_RATES=1"]
build_opt1 += ["GRAVITY_UPDATE_COORDINATED_TURN=1"]; build_opt1 += ["GRAVITY_UPDATE_COORDINATED_TURN=1"]
build_opt1 += ["GRAVITY_UPDATE_NORM_HEURISTIC=1"]; build_opt1 += ["GRAVITY_UPDATE_NORM_HEURISTIC=1"]
# build_opt1 += ["DISABLE_MAG_UPDATE=1"]; # build_opt1 += ["DISABLE_MAG_UPDATE=1"]
# build_opt1 += ["USE_GPS_HEADING=1"]; # build_opt1 += ["USE_GPS_HEADING=1"]
# build_opt1 += ["MAG_UPDATE_YAW_ONLY=1"]; # build_opt1 += ["MAG_UPDATE_YAW_ONLY=1"]
# ahrs_type1 = "FCQ"; # ahrs_type1 = "FCQ"
# ahrs_type1 = "FCR2"; # ahrs_type1 = "FCR2"
# ahrs_type1 = "FLQ"; # ahrs_type1 = "FLQ"
ahrs_type1 = "ICQ"; ahrs_type1 = "ICQ"
# ahrs_type1 = "FCR"; # ahrs_type1 = "FCR"
sim_res1 = ahrs_utils.run_simulation(ahrs_type1, build_opt1, traj_nb) sim_res1 = ahrs_utils.run_simulation(ahrs_type1, build_opt1, traj_nb)
# import code; code.interact(local=locals()) # import code; code.interact(local=locals())
build_opt2 = []; build_opt2 = []
build_opt2 += ["FREQUENCY=120"]; build_opt2 += ["FREQUENCY=120"]
build_opt2 += ["GRAVITY_UPDATE_COORDINATED_TURN=1"]; build_opt2 += ["GRAVITY_UPDATE_COORDINATED_TURN=1"]
build_opt2 += ["GRAVITY_UPDATE_NORM_HEURISTIC=1"]; build_opt2 += ["GRAVITY_UPDATE_NORM_HEURISTIC=1"]
build_opt2 += ["USE_AHRS_GPS_ACCELERATIONS=1"]; build_opt2 += ["USE_AHRS_GPS_ACCELERATIONS=1"]
# build_opt2 += ["DISABLE_MAG_UPDATE=1"]; # build_opt2 += ["DISABLE_MAG_UPDATE=1"]
# build_opt2 += ["USE_GPS_HEADING=1"]; # build_opt2 += ["USE_GPS_HEADING=1"]
# build_opt2 += ["MAG_UPDATE_YAW_ONLY=0"]; # build_opt2 += ["MAG_UPDATE_YAW_ONLY=0"]
# build_opt2 += ["PROPAGATE_LOW_PASS_RATES=1"]; # build_opt2 += ["PROPAGATE_LOW_PASS_RATES=1"]
# build_opt2 = build_opt1; # build_opt2 = build_opt1
# ahrs_type2 = "FLQ"; # ahrs_type2 = "FLQ"
# ahrs_type2 = "FCR2"; # ahrs_type2 = "FCR2"
# ahrs_type2 = "ICQ"; # ahrs_type2 = "ICQ"
ahrs_type2 = "FCR"; ahrs_type2 = "FCR"
# ahrs_type2 = ahrs_type1; # ahrs_type2 = ahrs_type1
sim_res2 = ahrs_utils.run_simulation(ahrs_type2, build_opt2, traj_nb) sim_res2 = ahrs_utils.run_simulation(ahrs_type2, build_opt2, traj_nb)
+25 -15
View File
@@ -37,10 +37,6 @@ static void report(void) {
int output_sensors = FALSE; int output_sensors = FALSE;
int output_pos = FALSE; int output_pos = FALSE;
#if AHRS_TYPE == AHRS_TYPE_ICE || AHRS_TYPE == AHRS_TYPE_ICQ
EULERS_FLOAT_OF_BFP(ahrs_float.ltp_to_imu_euler, ahrs.ltp_to_imu_euler);
RATES_FLOAT_OF_BFP(ahrs_float.imu_rate, ahrs.imu_rate);
#endif
printf("%f ", aos.time); printf("%f ", aos.time);
printf("%f %f %f ", DegOfRad(aos.ltp_to_imu_euler.phi), printf("%f %f %f ", DegOfRad(aos.ltp_to_imu_euler.phi),
@@ -55,23 +51,37 @@ static void report(void) {
DegOfRad(aos.gyro_bias.q), DegOfRad(aos.gyro_bias.q),
DegOfRad(aos.gyro_bias.r)); DegOfRad(aos.gyro_bias.r));
printf("%f %f %f ", DegOfRad(ahrs_float.ltp_to_imu_euler.phi),
DegOfRad(ahrs_float.ltp_to_imu_euler.theta),
DegOfRad(ahrs_float.ltp_to_imu_euler.psi));
printf("%f %f %f ", DegOfRad(ahrs_float.imu_rate.p),
DegOfRad(ahrs_float.imu_rate.q),
DegOfRad(ahrs_float.imu_rate.r));
#if AHRS_TYPE == AHRS_TYPE_ICQ #if AHRS_TYPE == AHRS_TYPE_ICQ
struct Int32Eulers ltp_to_imu_euler_i;
INT32_EULERS_OF_QUAT(ltp_to_imu_euler_i, ahrs_impl.ltp_to_imu_quat);
struct FloatEulers ltp_to_imu_euler_f;
EULERS_FLOAT_OF_BFP(ltp_to_imu_euler_f, ltp_to_imu_euler_i);
printf("%f %f %f ", DegOfRad(ltp_to_imu_euler_f.phi),
DegOfRad(ltp_to_imu_euler_f.theta),
DegOfRad(ltp_to_imu_euler_f.psi));
struct FloatRates imu_rate_f;
RATES_FLOAT_OF_BFP(imu_rate_f, ahrs_impl.imu_rate);
printf("%f %f %f ", DegOfRad(imu_rate_f.p),
DegOfRad(imu_rate_f.q),
DegOfRad(imu_rate_f.r));
struct FloatRates bias; struct FloatRates bias;
RATES_FLOAT_OF_BFP(bias, ahrs_impl.gyro_bias); RATES_FLOAT_OF_BFP(bias, ahrs_impl.gyro_bias);
printf("%f %f %f ", DegOfRad(bias.p), printf("%f %f %f ", DegOfRad(bias.p),
DegOfRad(bias.q), DegOfRad(bias.q),
DegOfRad(bias.r)); DegOfRad(bias.r));
#endif
#if AHRS_TYPE == AHRS_TYPE_FLQ || AHRS_TYPE == AHRS_TYPE_FCR2 || AHRS_TYPE == AHRS_TYPE_FCQ || AHRS_TYPE == AHRS_TYPE_FCR #elif AHRS_TYPE == AHRS_TYPE_FCR2 || AHRS_TYPE == AHRS_TYPE_FCQ || AHRS_TYPE == AHRS_TYPE_FCR
printf("%f %f %f ", DegOfRad(ahrs_impl.ltp_to_imu_euler.phi),
DegOfRad(ahrs_impl.ltp_to_imu_euler.theta),
DegOfRad(ahrs_impl.ltp_to_imu_euler.psi));
printf("%f %f %f ", DegOfRad(ahrs_impl.imu_rate.p),
DegOfRad(ahrs_impl.imu_rate.q),
DegOfRad(ahrs_impl.imu_rate.r));
printf("%f %f %f ", DegOfRad(ahrs_impl.gyro_bias.p), printf("%f %f %f ", DegOfRad(ahrs_impl.gyro_bias.p),
DegOfRad(ahrs_impl.gyro_bias.q), DegOfRad(ahrs_impl.gyro_bias.q),
DegOfRad(ahrs_impl.gyro_bias.r)); DegOfRad(ahrs_impl.gyro_bias.r));