Files
paparazzi/conf/airframes/ENAC/hybrid/falcon_v1.xml
T
Gautier Hattenberger 1b345804b4 [generator] add support for matrix and struct in airframe (#3228)
* [generator] add support for matrix and struct in airframe

update ENAC airframe and code for indi G1 matrix and IMU calib

* update calibration tool output
2024-01-09 10:46:47 +01:00

354 lines
14 KiB
XML

<!DOCTYPE airframe SYSTEM "../../airframe.dtd">
<airframe name="FALCON_V1">
<description>
Falcon Airframe H-Configuration (no flaps)
Tawaki v1.0 Chibios
Xbee API
Ublox F9P
SBUS Futaba
</description>
<firmware name="rotorcraft">
<configure name="PERIODIC_FREQUENCY" value="500"/>
<target name="ap" board="tawaki_1.1">
<module name="radio_control" type="sbus">
<!-- Put the mode on channel AUX1-->
<define name="RADIO_KILL_SWITCH" value="RADIO_GAIN1"/>
</module>
<!--Switch advanced INDI scheduling functions on or off-->
<define name="INDI_FUNCTIONS_RC_CHANNEL" value="6"/>
</target>
<target name="nps" board="pc">
<module name="fdm" type="jsbsim"/>
<module name="radio_control" type="datalink"/>
<!--Switch advanced INDI scheduling functions on or off-->
<!--Take the mode channel for simulation-->
<define name="INDI_FUNCTIONS_RC_CHANNEL" value="4"/>
</target>
<module name="eff_scheduling_generic"/>
<module name="current_sensor">
<configure name="ADC_CURRENT_SENSOR" value="ADC_1"/>
</module>
<module name="sys_mon"/>
<module name="telemetry" type="xbee_api"/>
<module name="flight_recorder"/>
<!--module name="logger" type="control_effectiveness">
<define name="LOGGER_CONTROL_EFFECTIVENESS_COMMANDS" value="FALSE"/>
<define name="LOGGER_CONTROL_EFFECTIVENESS_ACTUATORS" value="TRUE"/>
<define name="LOGGER_CONTROL_EFFECTIVENESS_POS" value="TRUE"/>
<define name="LOGGER_CONTROL_EFFECTIVENESS_SPEED" value="TRUE"/>
<define name="LOGGER_CONTROL_EFFECTIVENESS_AIRSPEED" value="TRUE"/>
</module-->
<module name="actuators" type="dshot">
<!-- <define name="DSHOT_SPEED" value="300"/> -->
<!--define name="DSHOT_TIM4_TELEMETRY_NUM" value="DSHOT_TLM_RX"/>
<define name="STM32_SERIAL_USE_UART4" value="TRUE"/-->
</module>
<module name="airspeed" type="sdp3x">
<define name="SDP3X_i2C_DEV" value="i2c2"/>
<define name="SDP3X_PRESSURE_SCALE" value="8.0"/>
<define name="SDP3X_PRESSURE_OFFSET" value="0.0"/>
<define name="USE_AIRSPEED_SDP3X" value="TRUE"/>
</module>
<module name="board" type="tawaki">
<configure name="BOARD_TAWAKI_ROTATED" value="TRUE"/>
<define name="IMU_MPU_CHAN_X" value="2"/>
<define name="IMU_MPU_CHAN_Z" value="0"/>
<define name="IMU_MPU_Z_SIGN" value="-1"/>
<!--Set the frequency to 2000 hz with 256 Hz internal low pass-->
<define name="IMU_MPU_LOWPASS_FILTER" value="MPU60X0_DLPF_256HZ"/>
<define name="IMU_MPU_SMPLRT_DIV" value="3"/>
<define name="IMU_MPU_ACCEL_LOWPASS_FILTER" value="MPU60X0_DLPF_ACC_218HZ"/>
<define name="LIS3MDL_CHAN_X" value="2" />
<define name="LIS3MDL_CHAN_Z" value="0" />
<define name="LIS3MDL_CHAN_Y_SIGN" value="-" />
</module>
<module name="air_data"/>
<module name="gps" type="ublox">
<configure name="GPS_BAUD" value="B115200"/>
<configure name="UBX_GPS_PORT" value="UART7"/>
<define name="GPS_FIX_TIMEOUT" value="0.5"/>
</module>
<module name="ins" type="ekf2"/>
<module name="stabilization" type="indi"/>
<module name="guidance" type="indi_hybrid_tailsitter"/>
<module name="nav" type="hybrid"/>
<module name="tag_tracking">
<configure name="JEVOIS_UART" value="UART3" description="UART on which Jevois camera is connected"/>
</module>
</firmware>
<servos driver="DShot">
<servo name="UR" no="3" min="0" neutral="100" max="2000"/>
<servo name="BR" no="4" min="0" neutral="100" max="2000"/>
<servo name="BL" no="1" min="0" neutral="100" max="2000"/>
<servo name="UL" no="2" min="0" neutral="100" max="2000"/>
</servos>
<commands>
<axis name="PITCH" failsafe_value="0"/>
<axis name="ROLL" failsafe_value="0"/>
<axis name="YAW" failsafe_value="0"/>
<axis name="THRUST" failsafe_value="0"/>
</commands>
<command_laws>
<set servo="UR" value="autopilot.motors_on ? actuators_pprz[0] : -MAX_PPRZ"/>
<set servo="BR" value="autopilot.motors_on ? actuators_pprz[1] : -MAX_PPRZ"/>
<set servo="BL" value="autopilot.motors_on ? actuators_pprz[2] : -MAX_PPRZ"/>
<set servo="UL" value="autopilot.motors_on ? actuators_pprz[3] : -MAX_PPRZ"/>
</command_laws>
<section name="IMU" prefix="IMU_">
<!-- IMU calibration, make sure to calibrate the IMU properly before flight, see the wiki for more info-->
<!-- <define name="MAG_X_CURRENT_COEF" value="0."/>
<define name="MAG_Y_CURRENT_COEF" value="0."/>
<define name="MAG_Z_CURRENT_COEF" value="0."/> -->
<!--define name= "MAG_X_CURRENT_COEF" value="-0.511272562535"/>
<define name= "MAG_Y_CURRENT_COEF" value="0.244268225323"/>
<define name= "MAG_Z_CURRENT_COEF" value="1.59518542807"/-->
<define name="MAG_X_NEUTRAL" value="-1057"/>
<define name="MAG_Y_NEUTRAL" value="-5436"/>
<define name="MAG_Z_NEUTRAL" value="-7865"/>
<define name="MAG_X_SENS" value="0.6407900424399927" integer="16"/>
<define name="MAG_Y_SENS" value="0.6504650411481829" integer="16"/>
<define name="MAG_Z_SENS" value="0.6138129561725305" integer="16"/>
<define name="ACCEL_X_SIGN" value="1"/>
<define name="ACCEL_Y_SIGN" value="1"/>
<define name="ACCEL_Z_SIGN" value="1"/>
<define name="GYRO_P_SIGN" value="1"/>
<define name="GYRO_Q_SIGN" value="1"/>
<define name="GYRO_R_SIGN" value="1"/>
<define name="ACCEL_X_NEUTRAL" value="70"/>
<define name="ACCEL_Y_NEUTRAL" value="5"/>
<define name="ACCEL_Z_NEUTRAL" value="48"/>
<define name="ACCEL_X_SENS" value="2.459511813085781" integer="16"/>
<define name="ACCEL_Y_SENS" value="2.404502491913208" integer="16"/>
<define name="ACCEL_Z_SENS" value="2.4486570636573215" integer="16"/>
<define name="BODY_TO_IMU_PHI" value="0." unit="deg"/>
<define name="BODY_TO_IMU_THETA" value="0." unit="deg"/>
<define name="BODY_TO_IMU_PSI" value="0." unit="deg"/>
</section>
<section name="AUTOPILOT">
<define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
<define name="MODE_AUTO1" value="AP_MODE_FORWARD"/>
<!-- <define name="MODE_AUTO1" value="AP_MODE_HOVER_Z_HOLD"/> -->
<define name="MODE_AUTO2" value="AP_MODE_NAV"/>
<define name="MODE_STARTUP" value="AP_MODE_NAV"/>
</section>
<section name="BAT">
<define name="MilliAmpereOfAdc(_adc)" value="_adc*100."/>
<define name="CATASTROPHIC_BAT_LEVEL" value="12.4" unit="V"/>
<define name="CRITIC_BAT_LEVEL" value="13.8" unit="V"/>
<define name="LOW_BAT_LEVEL" value="14.5" unit="V"/>
<define name="MAX_BAT_LEVEL" value="17.0" unit="V"/>
<define name="BAT_NB_CELLS" value="4"/>
</section>
<section name="STABILIZATION_ATTITUDE" prefix="STABILIZATION_ATTITUDE_">
<!-- setpoints -->
<define name="SP_MAX_PHI" value="60." unit="deg"/>
<define name="SP_MAX_THETA" value="60." unit="deg"/>
<define name="SP_MAX_R" value="90." unit="deg/s"/>
<define name="DEADBAND_R" value="250"/>
<define name="DEADBAND_A" value="250"/>
<define name="SP_PSI_DELTA_LIMIT" value="90" unit="deg"/>
</section>
<section name="EFF_SCHEDULING" prefix="FWD_">
<!-- control effectiveness, scaled by INDI_G_SCALING (1000)-->
<define name="G1" type="matrix">
<field value="{ -9.0, -9.0, 9.0, 9.0}"/>
<field value="{ -9.0, 9.0, 9.0, -9.0}"/>
<field value="{ -7.0, 7.0, -7.0, 7.0}"/>
<field value="{ -0.6, -0.6, -0.6, -0.6}"/>
</define>
<!--<define name="G1_ROLL" value="{ -10.0, -10.0, 10.0, 10.0}"/>
<define name="G1_PITCH" value="{ -10.0, 10.0, 10.0, -10.0}"/>
<define name="G1_YAW" value="{ -1.5, 1.5, -1.5, 1.5}"/>
<define name="G1_THRUST" value="{ -0.6, -0.6, -0.6, -0.6}"/>-->
</section>
<section name="STABILIZATION_ATTITUDE_INDI" prefix="STABILIZATION_INDI_">
<!-- UR BR BL UL-->
<!-- control effectiveness, scaled by INDI_G_SCALING (1000)-->
<define name="G1" type="matrix">
<field value="{ -20.0, -20.0, 20.0, 20.0}"/>
<field value="{ -19.5, 19.5, 19.5, -19.5}"/>
<field value="{ -7.0, 7.0, -7.0, 7.0}"/>
<field value="{ -0.85, -0.85, -0.85, -0.85}"/>
</define>
<!-- Big Wings -->
<!-- <define name="G1_ROLL" value="{ -4.0, -4.0, 4.0, 4.0}"/>
<define name="G1_PITCH" value="{ -16.5, 16.5, 16.5, -16.5}"/>
<define name="G1_YAW" value="{ -1.0, 1.0, -1.0, 1.0}"/>
<define name="G1_THRUST" value="{ -0.6, -0.6, -0.6, -0.6}"/> -->
<!--<define name="G1_ROLL" value="{ -15.0, -15.0, 15.0, 15.0}"/>
<define name="G1_PITCH" value="{ -15.0, 15.0, 15.0, -15.0}"/>
<define name="G1_YAW" value="{ -2.5, 2.5, -2.5, 2.5}"/>
<define name="G1_THRUST" value="{ -1.0, -1.0, -1.0, -1.0}"/>-->
<!--Counter torque effect of spinning up a rotor-->
<define name="G2" value="{0, 0, 0, 0}"/>
<!-- reference acceleration for attitude control -->
<define name="REF_ERR_P" value="100"/>
<define name="REF_ERR_Q" value="80"/>
<define name="REF_ERR_R" value="70"/>
<define name="REF_RATE_P" value="20."/>
<define name="REF_RATE_Q" value="18.0"/>
<define name="REF_RATE_R" value="11.0"/>
<!-- old falcon numbers : define name="REF_ERR_P" value="100"/>
<define name="REF_ERR_Q" value="63"/>
<define name="REF_ERR_R" value="50"/>
<define name="REF_RATE_P" value="20."/>
<define name="REF_RATE_Q" value="10.0"/>
<define name="REF_RATE_R" value="5.0"/-->
<!--<define name="REF_ERR_P" value="90.0"/>
<define name="REF_ERR_Q" value="130.0"/>
<define name="REF_ERR_R" value="130.0"/>
<define name="REF_RATE_P" value="8.0"/>
<define name="REF_RATE_Q" value="10.0"/>
<define name="REF_RATE_R" value="10.0"/> -->
<!--Maxium yaw rate, to avoid instability-->
<define name="MAX_R" value="60.0" unit="deg/s"/>
<define name="ESTIMATION_FILT_CUTOFF" value="4.0"/>
<define name="FILT_CUTOFF" value="5.0"/>
<!-- first order actuator dynamics -->
<define name="ACT_FREQ" value="{12.66, 12.66, 12.66, 12.66}"/>
<define name="ACT_RATE_LIMIT" value="{9600, 9600, 9600, 9600}"/>
<define name="ACT_IS_SERVO" value="{0, 0, 0, 0}"/>
<!-- Adaptive Learning Rate -->
<define name="USE_ADAPTIVE" value="FALSE"/>
<define name="ADAPTIVE_MU" value="0.0001"/>
</section>
<section name="GUIDANCE_INDI">
<define name="GUIDANCE_INDI_RC_DEBUG" value="FALSE"/>
<define name="GUIDANCE_INDI_POS_GAIN" value="0.2"/>
<define name="GUIDANCE_INDI_SPEED_GAIN" value="1.0"/>
<define name="GUIDANCE_INDI_POS_GAINZ" value="1.6"/>
<define name="GUIDANCE_INDI_SPEED_GAINZ" value="2.0"/>
<define name="GUIDANCE_INDI_PITCH_LIFT_EFF" value="0.12"/>
<define name="GUIDANCE_INDI_PITCH_EFF_SCALING" value="1.0"/>
<define name="GUIDANCE_H_REF_MAX_SPEED" value="16.0"/> <!--not used-->
<define name="GUIDANCE_INDI_MIN_THROTTLE" value="2000"/>
<define name="GUIDANCE_INDI_MIN_THROTTLE_FWD" value="1000"/>
<define name="GUIDANCE_INDI_MIN_PITCH" value="-120."/>
<define name="GUIDANCE_INDI_MAX_PITCH" value="25."/>
<define name="GUIDANCE_INDI_MAX_AIRSPEED" value="16.0"/>
<define name="GUIDANCE_HEADING_IS_FREE" value="FALSE"/> <!--heading can not be set by navigation -->
<define name="GUIDANCE_INDI_HEADING_BANK_GAIN" value="9.0"/>
<define name="GUIDANCE_INDI_PITCH_OFFSET_GAIN" value="0.0"/>
<define name="GUIDANCE_INDI_FILTER_CUTOFF" value="1.5"/>
<define name="GUIDANCE_INDI_LINE_GAIN" value="0.7"/>
<!--Flap effectiveness on lift-->
<define name="FE_LIFT_A_PITCH" value="0.00018"/>
<define name="FE_LIFT_B_PITCH" value="0.00072"/>
<define name="FE_LIFT_A_AS" value="0.0008"/>
<define name="FE_LIFT_B_AS" value="0.00009"/>
</section>
<!-- Gains for vertical navigation -->
<section name="GUIDANCE_V" prefix="GUIDANCE_V_">
<define name="HOVER_KP" value="174"/>
<define name="HOVER_KD" value="92"/>
<define name="HOVER_KI" value="72"/>
<define name="NOMINAL_HOVER_THROTTLE" value="0.4"/>
<define name="ADAPT_THROTTLE_ENABLED" value="FALSE"/>
</section>
<section name="NAV">
<define name="NAV_CLIMB_VSPEED" value="1.5"/>
<define name="NAV_DESCEND_VSPEED" value="-0.8"/>
</section>
<section name="AHRS" prefix="AHRS_">
<define name="GRAVITY_HEURISTIC_FACTOR" value="0"/>
</section>
<include href="conf/mag/germany_aachen.xml"/>
<!-- Gains for horizontal navigation-->
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="MAX_BANK" value="50" unit="deg"/>
<define name="PGAIN" value="100"/> <!-- 100 for CYFOAM-->
<define name="DGAIN" value="100"/> <!-- 100 for CYFOAM-->
<define name="IGAIN" value="10"/> <!-- 0 for CYFOAM-->
</section>
<section name="MISC">
<!--The Quadshot uses (when TRUE) a slightly different axis system for the setpoint, to make both hovering and flying forward intuitive-->
<define name="USE_EARTH_BOUND_RC_SETPOINT" value="TRUE"/>
<!-- This is the pitch angle that the Quadshot will have in forward flight, where 0 degrees is hover-->
<define name="TRANSITION_MAX_OFFSET" value="-80.0" unit="deg"/>
<define name="NO_RC_THRUST_LIMIT" value="TRUE"/>
<define name="COORDINATED_TURN_AIRSPEED" value="18.0"/>
<define name="BARO_PERIODIC_FREQUENCY" value="50"/>
<define name="USE_AIRSPEED" value="TRUE"/>
<define name="FWD_SIDESLIP_GAIN" value="0.20"/> <!-- most flight done with 0.3 -->
<define name="EFF_SCHED_USE_FUNCTION" value="TRUE"/>
<define name="ARRIVED_AT_WAYPOINT" value="4.0"/> <!-- For outdoor -->
<define name="DEFAULT_CIRCLE_RADIUS" value="60"/> <!-- For outdoor -->
<define name="CARROT" value="5.0"/>
</section>
<section name="TAG_TRACKING" prefix="TAG_TRACKING_">
<define name="BODY_TO_CAM_PSI" value="0."/>
</section>
<section name="SIMULATOR" prefix="NPS_">
<define name="ACTUATOR_NAMES" value="UR,BR,BL,UL" type="string[]"/>
<define name="JSBSIM_MODEL" value="falcon" type="string"/>
<define name="NO_MOTOR_MIXING" value="TRUE"/>
</section>
<section name="GCS">
<define name="ALT_SHIFT_PLUS_PLUS" value="3"/>
<define name="ALT_SHIFT_PLUS" value="1"/>
<define name="ALT_SHIFT_MINUS" value="-1"/>
</section>
</airframe>