58 PRINT_CONFIG_MSG_VALUE(
"USE_BARO_BOARD is TRUE, reading onboard baro: ",
BARO_BOARD)
68 #include "generated/flight_plan.h"
75 #if PERIODIC_TELEMETRY
81 #include "generated/modules.h"
82 #include "generated/settings.h"
83 #if defined RADIO_CONTROL || defined RADIO_CONTROL_AUTO1
95 #ifndef COMMAND_ROLL_TRIM
96 #define COMMAND_ROLL_TRIM 0
99 #ifndef COMMAND_PITCH_TRIM
100 #define COMMAND_PITCH_TRIM 0
103 #ifndef COMMAND_YAW_TRIM
104 #define COMMAND_YAW_TRIM 0
111 PRINT_CONFIG_VAR(PERIODIC_FREQUENCY)
118 #ifndef TELEMETRY_FREQUENCY
119 #define TELEMETRY_FREQUENCY 60
126 PRINT_CONFIG_VAR(MODULES_FREQUENCY)
129 #ifndef BARO_PERIODIC_FREQUENCY
130 #define BARO_PERIODIC_FREQUENCY 50
137 #ifdef AHRS_PROPAGATE_FREQUENCY
138 #if (AHRS_PROPAGATE_FREQUENCY > PERIODIC_FREQUENCY)
139 #warning "PERIODIC_FREQUENCY should be least equal or greater than AHRS_PROPAGATE_FREQUENCY"
140 INFO_VALUE(
"it is recommended to configure in your airframe PERIODIC_FREQUENCY to at least ",
AHRS_PROPAGATE_FREQUENCY)
145 #if defined RADIO_CONTROL || defined RADIO_CONTROL_AUTO1
162 #ifdef AHRS_TRIGGERED_ATTITUDE_LOOP
165 static void new_att_cb(
uint8_t sender_id __attribute__((unused)),
166 uint32_t stamp __attribute__((unused)),
167 struct Int32Rates *gyro __attribute__((unused)))
169 new_ins_attitude = 1;
180 #if defined(PPRZ_TRIG_INT_COMPR_FLASH)
181 pprz_trig_int_init();
195 #ifdef AHRS_TRIGGERED_ATTITUDE_LOOP
196 AbiBindMsgIMU_GYRO_INT32(
ABI_BROADCAST, &new_att_ev, &new_att_cb);
208 #if defined MCU_SPI_LINK || defined MCU_UART_LINK || defined MCU_CAN_LINK
211 #if USE_AUDIO_TELEMETRY
243 #if defined AEROCOMM_DATA_PIN
244 IO0DIR |= _BV(AEROCOMM_DATA_PIN);
245 IO0SET = _BV(AEROCOMM_DATA_PIN);
281 #ifndef AHRS_TRIGGERED_ATTITUDE_LOOP
288 modules_periodic_task();
307 #if defined RADIO_CONTROL || defined RADIO_CONTROL_AUTO1
316 #ifndef RADIO_AUTO_MODE
319 INFO(
"Using RADIO_AUTO_MODE to switch between AUTO1 and AUTO2.")
334 #endif // RADIO_AUTO_MODE
339 #else // not RADIO_CONTROL
348 uint8_t new_status = imcu_get_status();
350 bool changed = ((
mcu1_status & MASK_FBW_CHANGED) != (new_status & MASK_FBW_CHANGED));
364 #ifdef SetAutoCommandsFromRC
366 #elif defined RADIO_YAW && defined COMMAND_YAW
375 #define RC_LOST_MODE PPRZ_MODE_HOME
387 uint8_t really_lost = bit_is_set(imcu_get_status(), STATUS_RADIO_REALLY_LOST) &&
400 if (bit_is_set(imcu_get_status(), AVERAGED_CHANNELS_SENT)) {
402 mode_changed |= pprz_mode_changed;
403 #if defined RADIO_CALIB && defined RADIO_CONTROL_SETTINGS
405 bool calib_mode_changed = RcSettingsModeUpdate(
fbw_state->channels);
407 rc_settings(calib_mode_changed || pprz_mode_changed);
408 mode_changed |= calib_mode_changed;
414 #if defined RADIO_CONTROL || defined RADIO_CONTROL_AUTO1
424 #if H_CTL_YAW_LOOP && defined RADIO_YAW
437 mcu1_ppm_cpt = imcu_get_ppm_cpt();
438 #endif // RADIO_CONTROL
476 #if PERIODIC_TELEMETRY
483 #ifdef FAILSAFE_DELAY_WITHOUT_GPS
484 #define GpsTimeoutError (sys_time.nb_sec - gps.last_3dfix_time > FAILSAFE_DELAY_WITHOUT_GPS)
492 #if defined FAILSAFE_DELAY_WITHOUT_GPS
499 if (GpsTimeoutError) {
528 #if DOWNLINK && !defined PERIOD_NAVIGATION_Ap_0 // If not sent periodically (in default 0 mode)
541 #ifdef H_CTL_RATE_LOOP
558 #if CTRL_VERTICAL_LANDING
571 #if CTRL_VERTICAL_LANDING
575 #if defined V_CTL_THROTTLE_IDLE
579 #ifdef V_CTL_POWER_CTL_BAT_NOMINAL
600 #if H_CTL_YAW_LOOP && defined COMMAND_YAW
601 ap_state->commands[COMMAND_YAW] = h_ctl_rudder_setpoint;
603 #if H_CTL_CL_LOOP && defined COMMAND_CL
604 ap_state->commands[COMMAND_CL] = h_ctl_flaps_setpoint;
608 #if defined MCU_SPI_LINK || defined MCU_UART_LINK || defined MCU_CAN_LINK
610 #elif defined INTER_MCU && defined SINGLE_MCU
622 #if USE_AHRS && defined SITL && !USE_NPS
627 #ifdef LOW_BATTERY_KILL_DELAY
628 #warning LOW_BATTERY_KILL_DELAY has been renamed to CATASTROPHIC_BAT_KILL_DELAY, please update your airframe file!
632 #ifndef CATASTROPHIC_BAT_KILL_DELAY
633 #define CATASTROPHIC_BAT_KILL_DELAY 5
637 #ifndef KILL_MODE_DISTANCE
638 #define KILL_MODE_DISTANCE (1.5*MAX_DIST_FROM_HOME)
642 #ifndef MIN_SPEED_FOR_TAKEOFF
643 #define MIN_SPEED_FOR_TAKEOFF 5.
652 #if defined DATALINK || defined SITL
657 if (
vsupply < CATASTROPHIC_BAT_LEVEL * 10) {
695 #if defined MCU_SPI_LINK || defined MCU_UART_LINK
705 modules_event_task();
707 #ifdef AHRS_TRIGGERED_ATTITUDE_LOOP
708 if (new_ins_attitude > 0) {
710 new_ins_attitude = 0;
#define COMMAND_PITCH_TRIM
void monitor_task(void)
monitor stuff run at 1Hz
Event structure to store callbacks in a linked list.
Interface to align the AHRS via low-passed measurements at startup.
void h_ctl_course_loop(void)
uint16_t vsupply
Supply voltage in deciVolt.
tid_t monitor_tid
id for monitor_task() timer
tid_t modules_tid
id for modules_periodic_task() timer
Communication between fbw and ap processes.
Dispatcher to register actual AHRS implementations.
static float stateGetHorizontalSpeedNorm_f(void)
Get norm of horizontal ground speed (float).
Common barometric sensor implementation.
void h_ctl_attitude_loop(void)
#define AHRS_PROPAGATE_FREQUENCY
void autopilot_init(void)
Autopilot inititalization.
tid_t telemetry_tid
id for telemetry_periodic() timer
static uint8_t mcu1_status_update(void)
Variable setting though the radio control.
pprz_t v_ctl_throttle_setpoint
Periodic telemetry system header (includes downlink utility and generated code).
void navigation_task(void)
Compute desired_course.
uint16_t autopilot_flight_time
flight time in seconds.
AP ( AutoPilot ) process API.
static void audio_telemetry_init(void)
float dist2_to_home
squared distance to home waypoint
tid_t attitude_tid
id for attitude_loop() timer
Handling of messages coming from ground and other A/Cs.
static void telecommand_task(void)
Function to be called when a message from FBW is available.
Main include for ABI (AirBorneInterface).
#define PPRZ_MUTEX_LOCK(_mtx)
void nav_home(void)
Home mode navigation (circle around HOME)
tid_t sensors_tid
id for sensors_task() timer
#define COMMAND_ROLL_TRIM
volatile bool inter_mcu_received_ap
#define V_CTL_MODE_AUTO_THROTTLE
#define RC_LOST_MODE
mode to enter when RC is lost in PPRZ_MODE_MANUAL or PPRZ_MODE_AUTO1
pprz_t h_ctl_elevator_setpoint
pprz_t h_ctl_aileron_setpoint
struct Imu imu
global IMU state
void v_ctl_throttle_slew(void)
Computes slewed throttle from throttle setpoint called at 20Hz.
void v_ctl_climb_loop(void)
Auto-throttle inner loop.
static uint8_t pprz_mode_update(void)
Update paparazzi mode.
static uint8_t mcu1_ppm_cpt
void ahrs_init(void)
AHRS initialization.
struct fbw_state * fbw_state
int32_t current
Supply current in milliAmpere.
void link_mcu_event_task(void)
float v_ctl_pitch_setpoint
struct ap_state * ap_state
static void send_autopilot_version(struct transport_tx *trans, struct link_device *dev)
Fixed wing horizontal control.
void common_nav_periodic_task_4Hz()
#define V_CTL_MODE_AUTO_ALT
#define THROTTLE_THRESHOLD_TAKEOFF
Common transport functions for the communication between FBW and AP.
void rc_settings(bool mode_changed)
Includes generated code from tuning_rc.xml.
Architecture independent timing functions.
static void copy_from_to_fbw(void)
Send back uncontrolled channels.
static bool higher_than_max_altitude(void)
Device independent GPS code (interface)
void update_ahrs_from_sim(void)
int8_t tid_t
sys_time timer id type
static bool datalink_lost(void)
#define DefaultPeriodic
Set default periodic telemetry.
#define CATASTROPHIC_BAT_KILL_DELAY
Maximum time allowed for catastrophic battery level before going into kill mode.
void reporting_task(void)
Send a series of initialisation messages followed by a stream of periodic ones.
Inertial Measurement Unit interface.
Optional exceptions triggeringg HOME_MODE 1) GEOFENCE_DATALINK_LOST_TIME: go to HOME mode if datalink...
#define V_CTL_MODE_AUTO_CLIMB
void nav_init(void)
Navigation Initialisation.
struct OrientationReps body_to_imu
rotation from body to imu frame
void v_ctl_landing_loop(void)
void autopilot_send_mode(void)
Send mode over telemetry.
#define DefaultChannel
SITL.
volatile bool inter_mcu_received_fbw
#define ModeUpdate(_mode, _value)
Assignment, returning _old_value != _value Using GCC expression statements.
Arch independent mcu ( Micro Controller Unit ) utilities.
float energy
Energy consumption (mAh) This is the ap copy of the measurement from fbw.
float h_ctl_pitch_setpoint
#define SEND_NAVIGATION(_trans, _dev)
API to get/set the generic vehicle states.
volatile uint8_t new_ins_attitude
Persistent settings interface.
static bool sys_time_check_and_ack_timer(tid_t id)
Check if timer has elapsed.
volatile uint32_t nb_sec
full seconds since startup
float h_ctl_roll_setpoint
float nav_pitch
with INT32_ANGLE_FRAC
void nav_without_gps(void)
Failsafe navigation without position estimation.
#define TELEMETRY_FREQUENCY
#define FLOAT_OF_PPRZ(pprz, center, travel)
Common code for AP and FBW telemetry.
arch independent LED (Light Emitting Diodes) API
#define ABI_BROADCAST
Broadcast address.
#define MIN_SPEED_FOR_TAKEOFF
Default minimal speed for takeoff in m/s.
#define NAVIGATION_FREQUENCY
void mcu_event(void)
MCU event functions.
#define CONTROL_FREQUENCY
void nav_periodic_task(void)
Navigation main: call to the code generated from the XML flight plan.
#define UNLOCKED_HOME_MODE
#define PPRZ_MODE_OF_PULSE(pprz)
#define PPRZ_MODE_MANUAL
AP modes.
tid_t navigation_tid
id for navigation_task() timer
#define KILL_MODE_DISTANCE
Maximum distance from HOME waypoint before going into kill mode.
#define LATERAL_MODE_COURSE
Fixedwing Navigation library.
#define BARO_PERIODIC_FREQUENCY
void ahrs_aligner_init(void)
pprz_t v_ctl_throttle_slewed
#define PPRZ_MUTEX_UNLOCK(_mtx)
#define PPRZ_MODE_GPS_OUT_OF_ORDER
pprz_t nav_throttle_setpoint
#define V_CTL_MODE_LANDING
tid_t sys_time_register_timer(float duration, sys_time_cb cb)
Register a new system timer.
static struct FloatQuat * orientationGetQuat_f(struct OrientationReps *orientation)
Get vehicle body attitude quaternion (float).
void sensors_task(void)
Run at PERIODIC_FREQUENCY (60Hz if not defined)
void handle_periodic_tasks_ap(void)
void v_ctl_altitude_loop(void)
outer loop
Fixedwing autopilot modes.