28#include "generated/airframe.h"
40#ifndef SERVO_ROTATION_MECH_IDX
41#error ctrl_eff_sched_rotwing requires a servo named ROTATION_MECH_IDX
44#ifndef ROTWING_EFF_SCHED_IXX_BODY
45#error "NO ROTWING_EFF_SCHED_IXX_BODY defined"
48#ifndef ROTWING_EFF_SCHED_IYY_BODY
49#error "NO ROTWING_EFF_SCHED_IYY_BODY defined"
52#ifndef ROTWING_EFF_SCHED_IZZ
53#error "NO ROTWING_EFF_SCHED_IZZ defined"
56#ifndef ROTWING_EFF_SCHED_IXX_WING
57#error "NO ROTWING_EFF_SCHED_IXX_WING defined"
60#ifndef ROTWING_EFF_SCHED_IYY_WING
61#error "NO ROTWING_EFF_SCHED_IYY_WING defined"
64#ifndef ROTWING_EFF_SCHED_M
65#error "NO ROTWING_EFF_SCHED_M defined"
68#ifndef ROTWING_EFF_SCHED_DM_DPPRZ_HOVER_PITCH
69#error "NO ROTWING_EFF_SCHED_DM_DPPRZ_HOVER_PITCH defined"
72#ifndef ROTWING_EFF_SCHED_DM_DPPRZ_HOVER_ROLL
73#error "NO ROTWING_EFF_SCHED_DM_DPPRZ_HOVER_ROLL defined"
76#ifndef ROTWING_EFF_SCHED_HOVER_ROLL_PITCH_COEF
77#error "NO ROTWING_EFF_SCHED_HOVER_ROLL_PITCH_COEF defined"
80#ifndef ROTWING_EFF_SCHED_HOVER_ROLL_ROLL_COEF
81#error "NO ROTWING_EFF_SCHED_HOVER_ROLL_ROLL_COEF defined"
84#ifndef ROTWING_EFF_SCHED_K_ELEVATOR
85#error "NO ROTWING_EFF_SCHED_K_ELEVATOR defined"
88#ifndef ROTWING_EFF_SCHED_K_RUDDER
89#error "NO ROTWING_EFF_SCHED_K_RUDDER defined"
92#ifndef ROTWING_EFF_SCHED_K_AILERON
93#error "NO ROTWING_EFF_SCHED_K_AILERON defined"
96#ifndef ROTWING_EFF_SCHED_K_FLAPERON
97#error "NO ROTWING_EFF_SCHED_K_FLAPERON defined"
100#ifndef ROTWING_EFF_SCHED_K_PUSHER
101#error "NO ROTWING_EFF_SCHED_K_PUSHER defined"
104#ifndef ROTWING_EFF_SCHED_K_ELEVATOR_DEFLECTION
105#error "NO ROTWING_EFF_SCHED_K_ELEVATOR_DEFLECTION defined"
108#ifndef ROTWING_EFF_SCHED_D_RUDDER_D_PPRZ
109#error "NO ROTWING_EFF_SCHED_D_RUDDER_D_PPRZ defined"
112#ifndef ROTWING_EFF_SCHED_K_RPM_PPRZ_PUSHER
113#error "NO ROTWING_EFF_SCHED_K_RPM_PPRZ_PUSHER defined"
116#ifndef ROTWING_EFF_SCHED_K_LIFT_WING
117#error "NO ROTWING_EFF_SCHED_K_LIFT_WING defined"
120#ifndef ROTWING_EFF_SCHED_K_LIFT_FUSELAGE
121#error "NO ROTWING_EFF_SCHED_K_LIFT_FUSELAGE defined"
124#ifndef ROTWING_EFF_SCHED_K_LIFT_TAIL
125#error "NO ROTWING_EFF_SCHED_K_LIFT_TAIL defined"
160 }
else if (value >
up_lim) {
199#ifndef WING_ROTATION_CAN_ROTWING_ID
200#define WING_ROTATION_CAN_ROTWING_ID ABI_BROADCAST
315 for (
uint8_t i = 0; i < 4; i++) {
352#ifdef RADIO_CONTROL_EFF_SWITCH
365#ifdef RADIO_CONTROL_EFF_SWITCH
508#define AIRSPEED_IMPORTANCE_IN_FORWARD_WEIGHT 16
Main include for ABI (AirBorneInterface).
Event structure to store callbacks in a linked list.
struct pprz_autopilot autopilot
Global autopilot structure.
Core autopilot interface common to all firmwares.
bool in_flight
in flight status
void stabilization_indi_set_wls_settings(void)
Function that sets the u_min, u_max and u_pref if function not elsewhere defined.
void eff_scheduling_rotwing_update_flaperon_effectiveness(void)
void eff_scheduling_rotwing_update_rudder_effectiveness(void)
void eff_scheduling_rotwing_update_aileron_effectiveness(void)
float eff_scheduling_rotwing_lift_d
static const float Wu_gih_original[GUIDANCE_INDI_HYBRID_U]
struct rotwing_eff_sched_var_t eff_sched_var
void eff_scheduling_rotwing_update_MMOI(void)
#define WING_ROTATION_CAN_ROTWING_ID
ABI binding wing position data.
void eff_scheduling_rotwing_update_airspeed(void)
void eff_scheduling_rotwing_update_cmd(void)
void eff_scheduling_rotwing_schedule_liftd(void)
float guidance_indi_get_liftd(float pitch UNUSED, float theta UNUSED)
#define AIRSPEED_IMPORTANCE_IN_FORWARD_WEIGHT
void eff_scheduling_rotwing_update_wing_angle(void)
struct rotwing_eff_sched_param_t eff_sched_p
void eff_scheduling_rotwing_update_hover_motor_effectiveness(void)
static abi_event wing_position_ev
void eff_scheduling_rotwing_init(void)
void eff_scheduling_rotwing_update_elevator_effectiveness(void)
float eff_sched_pusher_time
float bound_or_zero(float value, float low_lim, float up_lim)
void eff_scheduling_rotwing_update_pusher_effectiveness(void)
void eff_scheduling_rotwing_periodic(void)
static void wing_position_cb(uint8_t sender_id UNUSED, struct act_feedback_t *pos_msg, uint8_t num_act)
void guidance_indi_hybrid_set_wls_settings(float body_v[3], float roll_angle, float pitch_angle)
float DMdpprz_hover_roll[2]
float pitch_motor_dMdpprz
float k_elevator_deflection[2]
float k_rpm_pprz_pusher[3]
float hover_roll_pitch_coef[2]
float DMdpprz_hover_pitch[2]
float hover_roll_roll_coef[2]
void float_eulers_of_quat_zxy(struct FloatEulers *e, struct FloatQuat *q)
euler rotation 'ZXY' This rotation order is useful if you need 90 deg pitch
static struct FloatQuat * stateGetNedToBodyQuat_f(void)
Get vehicle body attitude quaternion (float).
static float stateGetAirspeed_f(void)
Get airspeed (float).
float guidance_indi_max_bank
float guidance_indi_pitch_pref_deg
struct FloatEulers eulers_zxy
state eulers in zxy order
A guidance mode based on Incremental Nonlinear Dynamic Inversion Come to ICRA2016 to learn more!
#define GUIDANCE_INDI_MAX_PITCH
#define GUIDANCE_INDI_MIN_PITCH
Hardware independent API for actuators (servos, motor controllers).
PRINT_CONFIG_VAR(ONELOOP_ANDI_FILT_CUTOFF)
struct RadioControl radio_control
Generic interface for radio control modules.
pprz_t values[RADIO_CONTROL_NB_CHANNEL]
bool rotwing_state_pusher_motor_running(void)
bool rotwing_state_hover_motors_running(void)
bool rotwing_state_hover_motors_idling(void)
Check if hover motors are idling (COMMAND_THRUST < ROTWING_QUAD_IDLE_MIN_THRUST) for ROTWING_QUAD_IDL...
struct rotwing_state_t rotwing_state
#define ROTWING_QUAD_PREF_PITCH
float meas_skew_angle_deg
#define ROTWING_SKEW_ANGLE_STEP
float act_pref[INDI_NUM_ACT]
bool act_is_servo[INDI_NUM_ACT]
float g1g2[INDI_OUTPUTS][INDI_NUM_ACT]
float actuator_state_filt_vect[INDI_NUM_ACT]
API to get/set the generic vehicle states.
int int32_t
Typedef defining 32 bit int type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.
float u_pref[WLS_N_U_MAX]