[conf] update Enac rotorcraft so that they work in simulation as well (#3235)

- update Enac rotorcraft airframes
- remove dead aircraft
- add jsbsim model files
- update bebop2 example
This commit is contained in:
Gautier Hattenberger
2024-02-07 13:54:55 +01:00
committed by GitHub
parent 19952d8e04
commit 2ae4fed4e3
13 changed files with 1010 additions and 459 deletions
-11
View File
@@ -43,17 +43,6 @@
settings_modules="modules/ahrs_int_cmpl_quat.xml modules/air_data.xml modules/electrical.xml modules/filter_1euro_imu.xml modules/gps.xml modules/gps_ublox.xml modules/guidance_indi.xml modules/guidance_rotorcraft.xml modules/imu_common.xml modules/jevois.xml modules/logger_sd_chibios.xml modules/nav_rotorcraft.xml modules/nav_survey_poly_rotorcraft.xml modules/stabilization_indi.xml modules/switch_servo.xml modules/tag_tracking.xml"
gui_color="#fdd12f992f99"
/>
<aircraft
name="ULYSSE"
ac_id="218"
airframe="airframes/ENAC/quadrotor/ulysse_indi.xml"
radio="radios/FrSky_X-Lite.xml"
telemetry="telemetry/default_rotorcraft.xml"
flight_plan="flight_plans/competitions/IMAV2022_drop.xml"
settings="settings/rotorcraft_basic.xml"
settings_modules="modules/ahrs_int_cmpl_quat.xml modules/air_data.xml modules/electrical.xml modules/gps.xml modules/gps_ublox.xml modules/guidance_indi.xml modules/guidance_rotorcraft.xml modules/imu_common.xml modules/jevois.xml modules/logger_sd_chibios.xml modules/nav_rotorcraft.xml modules/nav_survey_poly_rotorcraft.xml modules/stabilization_indi.xml modules/switch_servo.xml modules/tag_tracking.xml"
gui_color="#c6d33e3ef958"
/>
<aircraft
name="CobraV2"
ac_id="11"
@@ -11,6 +11,8 @@
</description>
<firmware name="rotorcraft">
<!--autopilot name="rotorcraft_autopilot"/-->
<configure name="PERIODIC_FREQUENCY" value="1000"/>
<configure name="AHRS_PROPAGATE_FREQUENCY" value="$(PERIODIC_FREQUENCY)"/>
@@ -28,18 +30,12 @@
<module name="telemetry" type="xbee_api"/>
<module name="motor_mixing"/>
<module name="actuators" type="dshot">
<!--define name="DSHOT_SPEED" value="300"/-->
</module>
<module name="actuators" type="dshot"/>
<module name="board" type="tawaki">
<define name="IMU_MPU_LOWPASS_FILTER" value="MPU60X0_DLPF_256HZ"/>
<define name="IMU_MPU_ACCEL_LOWPASS_FILTER" value="MPU60X0_DLPF_ACC_218HZ"/>
<define name="IMU_MPU_SMPLRT_DIV" value="0"/>
<!--configure name="BOARD_TAWAKI_ROTATED" value="TRUE"/-->
<configure name="MAG_LIS3MDL_I2C_DEV" value="i2c2"/>
</module>
<module name="gps" type="ublox">
<configure name="GPS_BAUD" value="B115200"/>
@@ -50,23 +46,20 @@
<define name="WLS_N_U" value="4" />
<define name="WLS_N_V" value="4" />
</module>
<module name="guidance" type="indi">
<define name="GUIDANCE_INDI_SPECIFIC_FORCE_GAIN" value="-500.0"/>
<define name="GUIDANCE_INDI_THRUST_DYNAMICS_FREQ" value="30.5"/>
<define name="GUIDANCE_INDI_RC_DEBUG" value="FALSE"/>
</module>
<module name="guidance" type="indi"/>
<module name="ins"/>
<module name="ahrs" type="int_cmpl_quat"/>
<module name="ins" type="ekf2"/>
<!--module name="ins"/>
<module name="ahrs" type="int_cmpl_quat"/-->
<module name="air_data"/>
<module name="actuators" type="pwm"/>
<module name="switch" type="servo"/>
<module name="filter" type="1euro_imu">
<!--module name="filter" type="1euro_imu">
<define name="AHRS_ICQ_IMU_ID" value="IMU_F1E_ID"/>
<define name="AHRS_ALIGNER_IMU_ID" value="IMU_F1E_ID"/>
</module>
</module-->
<!--module name="sonar_adc">
<configure name="ADC_SONAR" value="ADC_1"/>
@@ -100,13 +93,6 @@
<axis name="THRUST" failsafe_value="0"/>
</commands>
<section name="MIXING" prefix="MOTOR_MIXING_">
<define name="TYPE" value="QUAD_X"/>
<define name="TRIM_ROLL" value="0"/>
<define name="TRIM_PITCH" value="0"/>
<define name="TRIM_YAW" value="0"/>
</section>
<command_laws>
<set servo="FR" value="autopilot_get_motors_on() ? actuators_pprz[0] : -MAX_PPRZ"/>
<set servo="BR" value="autopilot_get_motors_on() ? actuators_pprz[1] : -MAX_PPRZ"/>
@@ -129,15 +115,15 @@
<define name="ACCEL_Y_SENS" value="2.450207588413862" integer="16"/>
<define name="ACCEL_Z_SENS" value="2.4560049628471914" integer="16"/>
<define name="MAG_X_SIGN" value="1"/>
<define name="MAG_Y_SIGN" value="1"/>
<define name="MAG_X_SIGN" value="-1"/>
<define name="MAG_Y_SIGN" value="-1"/>
<define name="MAG_Z_SIGN" value="1"/>
<define name="MAG_X_NEUTRAL" value="-3868"/>
<define name="MAG_Y_NEUTRAL" value="2013"/>
<define name="MAG_Z_NEUTRAL" value="-101"/>
<define name="MAG_X_SENS" value="0.6497766229092939" integer="16"/>
<define name="MAG_Y_SENS" value="0.6352026516080006" integer="16"/>
<define name="MAG_Z_SENS" value="0.6627284899394246" integer="16"/>
<define name="MAG_X_NEUTRAL" value="415"/>
<define name="MAG_Y_NEUTRAL" value="-2365"/>
<define name="MAG_Z_NEUTRAL" value="1626"/>
<define name="MAG_X_SENS" value="0.6639205812316621" integer="16"/>
<define name="MAG_Y_SENS" value="0.6470134039115051" integer="16"/>
<define name="MAG_Z_SENS" value="0.6456573321937272" integer="16"/>
<define name="BODY_TO_IMU_PHI" value="0." unit="deg"/>
<define name="BODY_TO_IMU_THETA" value="0." unit="deg"/>
@@ -147,10 +133,10 @@
<section name="MAG">
<define name="LIS3MDL_MAG_TO_IMU_PHI" value="0." unit="deg"/>
<define name="LIS3MDL_MAG_TO_IMU_THETA" value="0." unit="deg"/>
<define name="LIS3MDL_MAG_TO_IMU_PSI" value="90." unit="deg"/>
<define name="LIS3MDL_MAG_TO_IMU_PSI" value="0." unit="deg"/>
</section>
<include href="conf/mag/delft_valkenburg.xml"/>
<include href="conf/mag/toulouse_muret.xml"/>
<section name="STABILIZATION_ATTITUDE" prefix="STABILIZATION_ATTITUDE_">
<!-- setpoints -->
@@ -198,37 +184,29 @@
<define name="WLS_PRIORITIES" value="{1000, 1000, 1, 100}"/>
</section>
<section name="GUIDANCE_INDI" prefix="GUIDANCE_INDI_">
<define name="THRUST_DYNAMICS_FREQ" value="30.5"/>
<define name="RC_DEBUG" value="FALSE"/>
</section>
<section name="GUIDANCE_V" prefix="GUIDANCE_V_">
<define name="REF_MIN_ZDD" value="-0.4*9.81"/>
<define name="REF_MAX_ZDD" value=" 0.4*9.81"/>
<define name="REF_MIN_ZD" value="-1.5"/>
<define name="REF_MAX_ZD" value=" 1."/>
<define name="HOVER_KP" value="87"/>
<define name="HOVER_KD" value="120"/>
<define name="HOVER_KI" value="11"/>
<define name="NOMINAL_HOVER_THROTTLE" value="0.30"/>
<define name="ADAPT_THROTTLE_ENABLED" value="TRUE"/>
<define name="ADAPT_NOISE_FACTOR" value="1."/>
<define name="ADAPT_INITIAL_HOVER_THROTTLE" value="0.25"/>
</section>
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="MAX_BANK" value="20" unit="deg"/>
<define name="PGAIN" value="40"/>
<define name="DGAIN" value="108"/>
<define name="IGAIN" value="20"/>
<define name="NGAIN" value="0"/>
<!-- feedforward -->
<define name="AGAIN" value="0"/>
<define name="REF_MAX_SPEED" value="2.5"/>
<define name="REF_MAX_ACCEL" value="2.5"/>
</section>
<section name="NAV">
<define name="ARRIVED_AT_WAYPOINT" value="2.0"/>
<define name="NAV_CLIMB_VSPEED" value="1.0"/>
<define name="NAV_DESCEND_VSPEED" value="-0.5"/>
<define name="NAV_CLIMB_VSPEED" value="1.5"/>
<define name="NAV_DESCEND_VSPEED" value="-0.8"/>
<define name="RECTANGLE_SURVEY_HEADING_NS" value="0."/>
</section>
@@ -267,9 +245,9 @@
</section>
<section name="SIMULATOR" prefix="NPS_">
<define name="ACTUATOR_NAMES" value="nw_motor, ne_motor, se_motor, sw_motor" type="string[]"/>
<define name="JSBSIM_MODEL" value="simple_x_quad_ccw" type="string"/>
<define name="SENSORS_PARAMS" value="nps_sensors_params_default.h" type="string"/>
<define name="ACTUATOR_NAMES" value="ne_motor, se_motor, sw_motor, nw_motor" type="string[]"/>
<define name="COMMANDS_NB" value="4"/>
<define name="JSBSIM_MODEL" value="anton" type="string"/>
<define name="NO_MOTOR_MIXING" value="TRUE"/>
</section>
+5 -23
View File
@@ -19,6 +19,7 @@
<module name="radio_control" type="sbus"/>
<configure name="BARO_PERIODIC_FREQUENCY" value="50"/>
<define name="RADIO_KILL_SWITCH" value="RADIO_GAIN1"/>
<define name="INS_EKF2_OPTITRACK" value="TRUE"/>
</target>
<target name="nps" board="pc">
<module name="fdm" type="jsbsim"/>
@@ -52,9 +53,7 @@
<module name="stabilization" type="indi"/>
<module name="guidance" type="indi"/>
<module name="ins" type="ekf2">
<define name="INS_EKF2_OPTITRACK" value="TRUE"/>
</module>
<module name="ins" type="ekf2"/>
<module name="preflight_checks"/>
<!--module name="filter" type="1euro_imu">
@@ -62,8 +61,6 @@
<define name="AHRS_ALIGNER_IMU_ID" value="IMU_F1E_ID"/>
</module-->
<module name="motor_mixing"/>
<module name="tag_tracking">
<configure name="JEVOIS_UART" value="UART3"/>
</module>
@@ -89,11 +86,6 @@
<axis name="THRUST" failsafe_value="0"/>
</commands>
<section name="MIXING" prefix="MOTOR_MIXING_">
<define name="TYPE" value="QUAD_X"/>
<define name="REVERSE" value="TRUE"/>
</section>
<command_laws>
<set servo="FR" value="autopilot_get_motors_on() ? actuators_pprz[0] : -MAX_PPRZ"/>
<set servo="BR" value="autopilot_get_motors_on() ? actuators_pprz[1] : -MAX_PPRZ"/>
@@ -172,23 +164,11 @@
<define name="REF_MAX_ZDD" value=" 0.4*9.81"/>
<define name="REF_MIN_ZD" value="-2."/>
<define name="REF_MAX_ZD" value=" 2."/>
<define name="HOVER_KP" value="90"/>
<define name="HOVER_KD" value="110"/>
<define name="HOVER_KI" value="10"/>
<define name="NOMINAL_HOVER_THROTTLE" value="0.35"/>
<define name="ADAPT_THROTTLE_ENABLED" value="TRUE"/>
<define name="ADAPT_NOISE_FACTOR" value="1."/>
<define name="ADAPT_INITIAL_HOVER_THROTTLE" value="0.3"/>
</section>
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="MAX_BANK" value="30" unit="deg"/>
<define name="PGAIN" value="41"/>
<define name="DGAIN" value="108"/>
<define name="IGAIN" value="20"/>
<define name="NGAIN" value="0"/>
<!-- feedforward -->
<define name="AGAIN" value="0"/>
<define name="REF_MAX_SPEED" value="0.5"/>
<define name="REF_MAX_ACCEL" value="2."/>
</section>
@@ -231,8 +211,10 @@
</section>
<section name="SIMULATOR" prefix="NPS_">
<define name="ACTUATOR_NAMES" value="nw_motor, ne_motor, se_motor, sw_motor" type="string[]"/>
<define name="ACTUATOR_NAMES" value="ne_motor, se_motor, sw_motor, nw_motor" type="string[]"/>
<define name="JSBSIM_MODEL" value="simple_x_quad_ccw" type="string"/>
<define name="COMMANDS_NB" value="4"/>
<define name="NO_MOTOR_MIXING" value="TRUE"/>
</section>
</airframe>
+4 -11
View File
@@ -19,6 +19,7 @@
<module name="radio_control" type="sbus"/>
<configure name="BARO_PERIODIC_FREQUENCY" value="50"/>
<define name="RADIO_KILL_SWITCH" value="RADIO_GAIN1"/>
<define name="INS_EKF2_OPTITRACK" value="TRUE"/>
</target>
<target name="nps" board="pc">
<module name="fdm" type="jsbsim"/>
@@ -48,9 +49,7 @@
<module name="stabilization" type="indi"/>
<module name="guidance" type="indi"/>
<module name="ins" type="ekf2">
<define name="INS_EKF2_OPTITRACK" value="TRUE"/>
</module>
<module name="ins" type="ekf2"/>
<module name="preflight_checks"/>
<!--module name="filter" type="1euro_imu">
@@ -58,8 +57,6 @@
<define name="AHRS_ALIGNER_IMU_ID" value="IMU_F1E_ID"/>
</module-->
<module name="motor_mixing"/>
<module name="tag_tracking">
<configure name="JEVOIS_UART" value="UART3"/>
</module>
@@ -85,11 +82,6 @@
<axis name="THRUST" failsafe_value="0"/>
</commands>
<section name="MIXING" prefix="MOTOR_MIXING_">
<define name="TYPE" value="QUAD_X"/>
<define name="REVERSE" value="TRUE"/>
</section>
<command_laws>
<set servo="FR" value="autopilot_get_motors_on() ? actuators_pprz[0] : -MAX_PPRZ"/>
<set servo="BR" value="autopilot_get_motors_on() ? actuators_pprz[1] : -MAX_PPRZ"/>
@@ -252,9 +244,10 @@
</section>
<section name="SIMULATOR" prefix="NPS_">
<define name="ACTUATOR_NAMES" value="nw_motor, ne_motor, se_motor, sw_motor" type="string[]"/>
<define name="ACTUATOR_NAMES" value="ne_motor, se_motor, sw_motor, nw_motor" type="string[]"/>
<define name="JSBSIM_MODEL" value="simple_x_quad_ccw" type="string"/>
<define name="COMMANDS_NB" value="4"/>
<define name="NO_MOTOR_MIXING" value="TRUE"/>
</section>
</airframe>
+4 -24
View File
@@ -18,6 +18,7 @@
<module name="radio_control" type="sbus"/>
<configure name="BARO_PERIODIC_FREQUENCY" value="50"/>
<define name="RADIO_KILL_SWITCH" value="RADIO_GAIN1"/>
<define name="INS_EKF2_OPTITRACK" value="TRUE"/>
</target>
<target name="nps" board="pc">
<module name="fdm" type="jsbsim"/>
@@ -43,9 +44,7 @@
<module name="stabilization" type="indi"/>
<module name="guidance" type="indi"/>
<module name="ins" type="ekf2">
<define name="INS_EKF2_OPTITRACK" value="TRUE"/>
</module>
<module name="ins" type="ekf2"/>
<!-- <module name="preflight_checks"/> -->
<!--module name="filter" type="1euro_imu">
@@ -53,8 +52,6 @@
<define name="AHRS_ALIGNER_IMU_ID" value="IMU_F1E_ID"/>
</module-->
<module name="motor_mixing"/>
<module name="tag_tracking">
<configure name="JEVOIS_UART" value="UART3"/>
</module>
@@ -73,7 +70,6 @@
<servo name="FL" no="4" min="0" neutral="100" max="2000"/>
</servos>
<commands>
<axis name="ROLL" failsafe_value="0"/>
<axis name="PITCH" failsafe_value="0"/>
@@ -81,11 +77,6 @@
<axis name="THRUST" failsafe_value="0"/>
</commands>
<section name="MIXING" prefix="MOTOR_MIXING_">
<define name="TYPE" value="QUAD_X"/>
<define name="REVERSE" value="TRUE"/>
</section>
<command_laws>
<set servo="FR" value="autopilot_get_motors_on() ? actuators_pprz[0] : -MAX_PPRZ"/>
<set servo="BR" value="autopilot_get_motors_on() ? actuators_pprz[1] : -MAX_PPRZ"/>
@@ -167,23 +158,11 @@
<define name="REF_MAX_ZDD" value=" 0.4*9.81"/>
<define name="REF_MIN_ZD" value="-2."/>
<define name="REF_MAX_ZD" value=" 2."/>
<define name="HOVER_KP" value="90"/>
<define name="HOVER_KD" value="110"/>
<define name="HOVER_KI" value="10"/>
<define name="NOMINAL_HOVER_THROTTLE" value="0.35"/>
<define name="ADAPT_THROTTLE_ENABLED" value="TRUE"/>
<define name="ADAPT_NOISE_FACTOR" value="1."/>
<define name="ADAPT_INITIAL_HOVER_THROTTLE" value="0.3"/>
</section>
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="MAX_BANK" value="30" unit="deg"/>
<define name="PGAIN" value="41"/>
<define name="DGAIN" value="108"/>
<define name="IGAIN" value="20"/>
<define name="NGAIN" value="0"/>
<!-- feedforward -->
<define name="AGAIN" value="0"/>
<define name="REF_MAX_SPEED" value="0.5"/>
<define name="REF_MAX_ACCEL" value="2."/>
</section>
@@ -225,9 +204,10 @@
</section>
<section name="SIMULATOR" prefix="NPS_">
<define name="ACTUATOR_NAMES" value="nw_motor, ne_motor, se_motor, sw_motor" type="string[]"/>
<define name="ACTUATOR_NAMES" value="ne_motor, se_motor, sw_motor, nw_motor" type="string[]"/>
<define name="JSBSIM_MODEL" value="simple_x_quad_ccw" type="string"/>
<define name="COMMANDS_NB" value="4"/>
<define name="NO_MOTOR_MIXING" value="TRUE"/>
</section>
</airframe>
+3 -21
View File
@@ -63,8 +63,6 @@
<define name="AHRS_ALIGNER_IMU_ID" value="IMU_F1E_ID"/>
</module-->
<module name="motor_mixing"/>
<module name="tag_tracking">
<configure name="JEVOIS_UART" value="UART3"/>
</module>
@@ -90,11 +88,6 @@
<axis name="THRUST" failsafe_value="0"/>
</commands>
<section name="MIXING" prefix="MOTOR_MIXING_">
<define name="TYPE" value="QUAD_X"/>
<define name="REVERSE" value="TRUE"/>
</section>
<command_laws>
<set servo="FR" value="autopilot_get_motors_on() ? actuators_pprz[0] : -MAX_PPRZ"/>
<set servo="BR" value="autopilot_get_motors_on() ? actuators_pprz[1] : -MAX_PPRZ"/>
@@ -185,23 +178,11 @@
<define name="REF_MAX_ZDD" value=" 0.4*9.81"/>
<define name="REF_MIN_ZD" value="-2."/>
<define name="REF_MAX_ZD" value=" 2."/>
<define name="HOVER_KP" value="90"/>
<define name="HOVER_KD" value="110"/>
<define name="HOVER_KI" value="10"/>
<define name="NOMINAL_HOVER_THROTTLE" value="0.35"/>
<define name="ADAPT_THROTTLE_ENABLED" value="TRUE"/>
<define name="ADAPT_NOISE_FACTOR" value="1."/>
<define name="ADAPT_INITIAL_HOVER_THROTTLE" value="0.3"/>
</section>
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="MAX_BANK" value="30" unit="deg"/>
<define name="PGAIN" value="41"/>
<define name="DGAIN" value="108"/>
<define name="IGAIN" value="20"/>
<define name="NGAIN" value="0"/>
<!-- feedforward -->
<define name="AGAIN" value="0"/>
<define name="REF_MAX_SPEED" value="4."/>
<define name="REF_MAX_ACCEL" value="2."/>
</section>
@@ -243,9 +224,10 @@
</section>
<section name="SIMULATOR" prefix="NPS_">
<define name="ACTUATOR_NAMES" value="nw_motor, ne_motor, se_motor, sw_motor" type="string[]"/>
<define name="JSBSIM_MODEL" value="simple_x_quad_ccw" type="string"/>
<define name="ACTUATOR_NAMES" value="ne_motor, se_motor, sw_motor, nw_motor" type="string[]"/>
<define name="JSBSIM_MODEL" value="anton" type="string"/>
<define name="COMMANDS_NB" value="4"/>
<define name="NO_MOTOR_MIXING" value="TRUE"/>
</section>
</airframe>
@@ -258,6 +258,7 @@
<section name="SIMULATOR" prefix="NPS_">
<define name="ACTUATOR_NAMES" value="front_motor, right_motor, back_motor, left_motor" type="string[]"/>
<define name="JSBSIM_MODEL" value="simple_quad_wind" type="string"/>
<define name="COMMANDS_NB" value="4"/>
</section>
</airframe>
+19 -50
View File
@@ -11,13 +11,17 @@
</description>
<firmware name="rotorcraft">
<configure name="PERIODIC_FREQUENCY" value="512"/>
<configure name="PERIODIC_FREQUENCY" value="500"/>
<configure name="AHRS_PROPAGATE_FREQUENCY" value="$(PERIODIC_FREQUENCY)"/>
<target name="ap" board="tawaki_1.1">
<module name="radio_control" type="sbus"/>
<module name="radio_control" type="sbus"/>
<configure name="BARO_PERIODIC_FREQUENCY" value="50"/>
<define name="RADIO_KILL_SWITCH" value="RADIO_GAIN1"/>
<define name="RADIO_KILL_SWITCH" value="RADIO_GAIN1"/>
<module name="filter" type="1euro_imu">
<define name="AHRS_ICQ_IMU_ID" value="IMU_F1E_ID"/>
<define name="AHRS_ALIGNER_IMU_ID" value="IMU_F1E_ID"/>
</module>
</target>
<target name="nps" board="pc">
@@ -32,9 +36,7 @@
<module name="telemetry" type="xbee_api"/>
<module name="actuators" type="dshot">
<!--define name="DSHOT_SPEED" value="300"/-->
</module>
<module name="actuators" type="dshot"/>
<module name="board" type="tawaki">
<define name="IMU_MPU_LOWPASS_FILTER" value="MPU60X0_DLPF_256HZ"/>
<define name="IMU_MPU_ACCEL_LOWPASS_FILTER" value="MPU60X0_DLPF_ACC_218HZ"/>
@@ -48,12 +50,7 @@
<define name="WLS_N_U" value="4" />
<define name="WLS_N_V" value="4" />
</module>
<module name="guidance" type="indi">
<define name="GUIDANCE_INDI_SPEED_GAIN" value="3.0"/>
<define name="GUIDANCE_INDI_SPECIFIC_FORCE_GAIN" value="-500.0"/>
<define name="GUIDANCE_INDI_THRUST_DYNAMICS_FREQ" value="15.6"/>
<define name="GUIDANCE_INDI_RC_DEBUG" value="FALSE"/>
</module>
<module name="guidance" type="indi"/>
<module name="ins"/>
<module name="ahrs" type="int_cmpl_quat">
@@ -62,11 +59,6 @@
</module>
<module name="air_data"/>
<module name="filter" type="1euro_imu">
<define name="AHRS_ICQ_IMU_ID" value="IMU_F1E_ID"/>
<define name="AHRS_ALIGNER_IMU_ID" value="IMU_F1E_ID"/>
</module>
<module name="tag_tracking">
<configure name="JEVOIS_UART" value="UART4" description="dummy uart in this config"/>
</module>
@@ -75,8 +67,6 @@
<configure name="EXTRA_DL_BAUD" value="B115200"/>
</module>
<module name="motor_mixing"/>
<module name="flight_recorder"/>
<!--module name="logger" type="tune_indi"/-->
</firmware>
@@ -95,18 +85,6 @@
<axis name="THRUST" failsafe_value="0"/>
</commands>
<section name="MIXING" prefix="MOTOR_MIXING_">
<define name="TYPE" value="QUAD_X"/>
<define name="REVERSE" value="TRUE"/>
</section>
<!--command_laws>
<call fun="motor_mixing_run(autopilot_get_motors_on(),FALSE,values)"/>
<set servo="FR" value="motor_mixing.commands[MOTOR_FRONT_RIGHT]"/>
<set servo="BR" value="motor_mixing.commands[MOTOR_BACK_RIGHT]"/>
<set servo="BL" value="motor_mixing.commands[MOTOR_BACK_LEFT]"/>
<set servo="FL" value="motor_mixing.commands[MOTOR_FRONT_LEFT]"/>
</command_laws-->
<command_laws>
<set servo="FR" value="autopilot_get_motors_on() ? actuators_pprz[0] : -MAX_PPRZ"/>
<set servo="BR" value="autopilot_get_motors_on() ? actuators_pprz[1] : -MAX_PPRZ"/>
@@ -114,7 +92,6 @@
<set servo="FL" value="autopilot_get_motors_on() ? actuators_pprz[3] : -MAX_PPRZ"/>
</command_laws>
<section name="IMU" prefix="IMU_">
<define name="GYRO_P_SIGN" value="-1"/>
<define name="GYRO_Q_SIGN" value="-1"/>
@@ -148,7 +125,7 @@
<define name="BODY_TO_IMU_PSI" value="0." unit="deg"/>
</section>
<include href="conf/mag/delft_valkenburg.xml"/>
<include href="conf/mag/toulouse_muret.xml"/>
<section name="INS" prefix="INS_">
<define name="INV_NXZ" value="0.25"/>
@@ -192,7 +169,6 @@
<define name="USE_ADAPTIVE" value="FALSE"/>
<define name="ADAPTIVE_MU" value="0.0001"/>
<!-- Full INDI -->
<!-- control effectiveness -->
<define name="G1" type="matrix">
@@ -216,28 +192,22 @@
<define name="REF_MAX_ZDD" value=" 0.4*9.81"/>
<define name="REF_MIN_ZD" value="-1.5"/>
<define name="REF_MAX_ZD" value=" 1."/>
<define name="HOVER_KP" value="90"/>
<define name="HOVER_KD" value="110"/>
<define name="HOVER_KI" value="10"/>
<define name="NOMINAL_HOVER_THROTTLE" value="0.35"/>
<define name="ADAPT_THROTTLE_ENABLED" value="TRUE"/>
<define name="ADAPT_NOISE_FACTOR" value="1."/>
<define name="ADAPT_INITIAL_HOVER_THROTTLE" value="0.3"/>
</section>
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="MAX_BANK" value="20" unit="deg"/>
<define name="PGAIN" value="41"/>
<define name="DGAIN" value="108"/>
<define name="IGAIN" value="20"/>
<define name="NGAIN" value="0"/>
<!-- feedforward -->
<define name="AGAIN" value="0"/>
<define name="REF_MAX_SPEED" value="4."/>
<define name="REF_MAX_ACCEL" value="2."/>
</section>
<section name="GUIDANCE_INDI" prefix="GUIDANCE_INDI_">
<define name="SPEED_GAIN" value="3.0"/>
<define name="SPECIFIC_FORCE_GAIN" value="-500.0"/>
<define name="THRUST_DYNAMICS_FREQ" value="15.6"/>
<define name="RC_DEBUG" value="FALSE"/>
</section>
<section name="NAV">
<define name="ARRIVED_AT_WAYPOINT" value="2.0"/>
<define name="NAV_DESCEND_VSPEED" value="-0.5"/>
@@ -271,10 +241,9 @@
<define name="ACTUATORS_ORDER" value="{3, 2, 1, 0}"/>
<define name="PYBULLET_MODULE" value="simple_quad_sim" type="string"/>
<define name="PYBULLET_URDF" value="robobee.urdf" type="string"/>
<!--define name="ACTUATOR_NAMES" value="nw_motor, ne_motor, se_motor, sw_motor" type="string[]"/>
<!--define name="ACTUATOR_NAMES" value="ne_motor, se_motor, sw_motor, nw_motor" type="string[]"/>
<define name="JSBSIM_MODEL" value="simple_x_quad_ccw" type="string"/-->
<define name="SENSORS_PARAMS" value="nps_sensors_params_default.h" type="string"/>
<define name="COMMANDS_NB" value="4"/>
<define name="NO_MOTOR_MIXING" value="TRUE"/>
</section>
@@ -1,266 +0,0 @@
<!DOCTYPE airframe SYSTEM "../../airframe.dtd">
<airframe name="Quadricopter ULYSSE Tawaki">
<description>
* Autopilot: Tawaki
* Actuators: 4 in 4 Holybro BLHELI ESC
* Telemetry: XBee
* GPS: ublox
* RC: FrSky XM+
</description>
<firmware name="rotorcraft">
<!--configure name="RTOS_DEBUG" value="TRUE"/-->
<configure name="PERIODIC_FREQUENCY" value="1000"/>
<configure name="AHRS_PROPAGATE_FREQUENCY" value="$(PERIODIC_FREQUENCY)"/>
<target name="ap" board="tawaki_1.0">
<configure name="BARO_PERIODIC_FREQUENCY" value="50"/>
<module name="radio_control" type="sbus"/>
<define name="RADIO_KILL_SWITCH" value="RADIO_GAIN1"/>
</target>
<target name="nps" board="pc">
<module name="fdm" type="jsbsim"/>
<module name="radio_control" type="ppm"/>
</target>
<module name="telemetry" type="xbee_api"/>
<module name="motor_mixing"/>
<module name="actuators" type="dshot">
<!--define name="DSHOT_SPEED" value="300"/-->
</module>
<module name="board" type="tawaki">
<!--define name="IMU_MPU_LOWPASS_FILTER" value="MPU60X0_DLPF_256HZ"/-->
<!--define name="IMU_MPU_ACCEL_LOWPASS_FILTER" value="MPU60X0_DLPF_ACC_218HZ"/-->
<define name="IMU_MPU_LOWPASS_FILTER" value="MPU60X0_DLPF_98HZ"/>
<define name="IMU_MPU_ACCEL_LOWPASS_FILTER" value="MPU60X0_DLPF_ACC_99HZ"/>
<define name="IMU_MPU_SMPLRT_DIV" value="0"/>
<!--configure name="BOARD_TAWAKI_ROTATED" value="TRUE"/-->
<configure name="MAG_LIS3MDL_I2C_DEV" value="i2c2"/>
</module>
<module name="gps" type="ublox">
<configure name="GPS_BAUD" value="B115200"/>
<define name="USE_GPS_UBX_RTCM" value="TRUE"/>
</module>
<module name="stabilization" type="indi">
<define name="WLS_N_U" value="4" />
<define name="WLS_N_V" value="4" />
</module>
<module name="guidance" type="indi">
<define name="GUIDANCE_INDI_SPECIFIC_FORCE_GAIN" value="-500.0"/>
<define name="GUIDANCE_INDI_THRUST_DYNAMICS_FREQ" value="30.5"/>
<define name="GUIDANCE_INDI_RC_DEBUG" value="FALSE"/>
</module>
<module name="ins"/>
<module name="ahrs" type="int_cmpl_quat"/>
<module name="air_data"/>
<module name="actuators" type="pwm"/>
<module name="switch" type="servo"/>
<!--module name="filter" type="1euro_imu">
<define name="AHRS_ICQ_IMU_ID" value="IMU_F1E_ID"/>
<define name="AHRS_ALIGNER_IMU_ID" value="IMU_F1E_ID"/>
</module-->
<module name="tag_tracking">
<configure name="JEVOIS_UART" value="UART3" description="UART on which Jevois camera is connected"/>
</module>
<module name="flight_recorder"/>
<!--module name="logger" type="tune_indi"/-->
</firmware>
<servos driver="DShot">
<servo name="FR" no="4" min="0" neutral="100" max="2000"/>
<servo name="BR" no="2" min="0" neutral="100" max="2000"/>
<servo name="BL" no="1" min="0" neutral="100" max="2000"/>
<servo name="FL" no="3" min="0" neutral="100" max="2000"/>
</servos>
<servos driver="Pwm">
<servo name="SWITCH" no="4" min="1000" neutral="1000" max="2000"/>
</servos>
<commands>
<axis name="ROLL" failsafe_value="0"/>
<axis name="PITCH" failsafe_value="0"/>
<axis name="YAW" failsafe_value="0"/>
<axis name="THRUST" failsafe_value="0"/>
</commands>
<section name="MIXING" prefix="MOTOR_MIXING_">
<define name="TYPE" value="QUAD_X"/>
</section>
<command_laws>
<set servo="FR" value="autopilot_get_motors_on() ? actuators_pprz[0] : -MAX_PPRZ"/>
<set servo="BR" value="autopilot_get_motors_on() ? actuators_pprz[1] : -MAX_PPRZ"/>
<set servo="BL" value="autopilot_get_motors_on() ? actuators_pprz[2] : -MAX_PPRZ"/>
<set servo="FL" value="autopilot_get_motors_on() ? actuators_pprz[3] : -MAX_PPRZ"/>
</command_laws>
<section name="IMU" prefix="IMU_">
<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_SIGN" value="1"/>
<define name="ACCEL_Y_SIGN" value="1"/>
<define name="ACCEL_Z_SIGN" value="1"/>
<define name="ACCEL_X_NEUTRAL" value="-27"/>
<define name="ACCEL_Y_NEUTRAL" value="75"/>
<define name="ACCEL_Z_NEUTRAL" value="-109"/>
<define name="ACCEL_X_SENS" value="2.27584739975" integer="16"/>
<define name="ACCEL_Y_SENS" value="2.45270163528" integer="16"/>
<define name="ACCEL_Z_SENS" value="2.44302118661" integer="16"/>
<define name="MAG_X_SIGN" value="1"/>
<define name="MAG_Y_SIGN" value="1"/>
<define name="MAG_Z_SIGN" value="1"/>
<define name="MAG_X_NEUTRAL" value="-525"/>
<define name="MAG_Y_NEUTRAL" value="3252"/>
<define name="MAG_Z_NEUTRAL" value="1029"/>
<define name="MAG_X_SENS" value="0.6621839327083922" integer="16"/>
<define name="MAG_Y_SENS" value="0.635352946158572" integer="16"/>
<define name="MAG_Z_SENS" value="0.6546061419369537" 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="MAG">
<define name="LIS3MDL_MAG_TO_IMU_PHI" value="0." unit="deg"/>
<define name="LIS3MDL_MAG_TO_IMU_THETA" value="0." unit="deg"/>
<define name="LIS3MDL_MAG_TO_IMU_PSI" value="135." unit="deg"/>
</section>
<include href="conf/mag/delft_valkenburg.xml"/>
<section name="STABILIZATION_ATTITUDE" prefix="STABILIZATION_ATTITUDE_">
<!-- setpoints -->
<define name="SP_MAX_PHI" value="45." unit="deg"/>
<define name="SP_MAX_THETA" value="45." unit="deg"/>
<define name="SP_MAX_R" value="60." unit="deg/s"/>
<define name="DEADBAND_R" value="250"/>
</section>
<section name="STABILIZATION_ATTITUDE_INDI" prefix="STABILIZATION_INDI_">
<!-- reference acceleration for attitude control -->
<define name="REF_ERR_P" value="101"/>
<define name="REF_ERR_Q" value="101"/>
<define name="REF_ERR_R" value="124"/>
<define name="REF_RATE_P" value="18.0"/>
<define name="REF_RATE_Q" value="18.0"/>
<define name="REF_RATE_R" value="14.0"/>
<define name="MAX_R" value="60" unit="deg/s"/>
<!-- second order filter parameters -->
<define name="FILT_CUTOFF" value="4.0"/>
<define name="FILT_CUTOFF_R" value="4.0"/>
<!-- Adaptive Learning Rate -->
<define name="USE_ADAPTIVE" value="FALSE"/>
<define name="ADAPTIVE_MU" value="0.0001"/>
<!-- Full INDI -->
<!-- control effectiveness -->
<define name="G1" type="matrix">
<field value="{-40 , -40, 40 , 40 }"/>
<field value="{40 , -40, -40 , 40 }"/>
<field value="{5, -5, 5, -5}"/>
<field value="{-1.5, -1.5, -1.5, -1.5}"/>
</define>
<!--Counter torque effect of spinning up a rotor-->
<define name="G2" value="{150.0, -150.0, 150.0, -150.0 }"/>
<!-- first order actuator dynamics -->
<define name="ACT_FREQ" value="{30.5, 30.5, 30.5, 30.5}"/>
<define name="ESTIMATION_FILT_CUTOFF" value="4.0"/>
<!--Priority for each axis (roll, pitch, yaw and thrust)-->
<define name="WLS_PRIORITIES" value="{1000, 1000, 1, 100}"/>
</section>
<section name="GUIDANCE_V" prefix="GUIDANCE_V_">
<define name="REF_MIN_ZDD" value="-0.4*9.81"/>
<define name="REF_MAX_ZDD" value=" 0.4*9.81"/>
<define name="REF_MIN_ZD" value="-1.5"/>
<define name="REF_MAX_ZD" value=" 1."/>
<define name="HOVER_KP" value="48"/>
<define name="HOVER_KD" value="46"/>
<define name="HOVER_KI" value="11"/>
<define name="NOMINAL_HOVER_THROTTLE" value="0.48"/>
<define name="ADAPT_THROTTLE_ENABLED" value="TRUE"/>
<define name="ADAPT_NOISE_FACTOR" value="1."/>
<define name="ADAPT_INITIAL_HOVER_THROTTLE" value="0.4"/>
</section>
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="MAX_BANK" value="20" unit="deg"/>
<define name="PGAIN" value="41"/>
<define name="DGAIN" value="108"/>
<define name="IGAIN" value="20"/>
<define name="NGAIN" value="0"/>
<!-- feedforward -->
<define name="AGAIN" value="0"/>
<define name="REF_MAX_SPEED" value="2.5"/>
<define name="REF_MAX_ACCEL" value="2.5"/>
</section>
<section name="NAV">
<define name="ARRIVED_AT_WAYPOINT" value="2.0"/>
<define name="NAV_CLIMB_VSPEED" value="1.0"/>
<define name="NAV_DESCEND_VSPEED" value="-0.5"/>
<define name="RECTANGLE_SURVEY_HEADING_NS" value="0."/>
</section>
<section name="BAT">
<define name="CRITIC_BAT_LEVEL" value="9.3" unit="V"/>
</section>
<section name="AUTOPILOT">
<define name="MODE_STARTUP" value="AP_MODE_NAV"/>
<define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
<define name="MODE_AUTO1" value="AP_MODE_ATTITUDE_Z_HOLD"/>
<define name="MODE_AUTO2" value="AP_MODE_NAV"/>
</section>
<section name="AGL" prefix="AGL_DIST_SONAR_">
<define name="ID" value="ABI_BROADCAST"/>
<define name="MAX_RANGE" value="6." unit="m"/>
<define name="MIN_RANGE" value="0.01" unit="m"/>
<define name="FILTER" value="0.15"/> <!--Low pass filter time constant-->
</section>
<section name="TAG_TRACKING" prefix="TAG_TRACKING_">
<define name="BODY_TO_CAM_PSI" value="180."/>
<define name="CAM_POS_Y" value="0.12"/>
</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="-0.5"/>
</section>
<section name="SIMULATOR" prefix="NPS_">
<define name="ACTUATOR_NAMES" value="nw_motor, ne_motor, se_motor, sw_motor" type="string[]"/>
<define name="JSBSIM_MODEL" value="simple_x_quad_ccw" type="string"/>
<define name="SENSORS_PARAMS" value="nps_sensors_params_default.h" type="string"/>
<define name="NO_MOTOR_MIXING" value="TRUE"/>
</section>
</airframe>
+1 -3
View File
@@ -22,9 +22,7 @@
<module name="imu" type="bebop"/>
<module name="gps" type="ublox"/>
<module name="stabilization" type="indi_simple"/>
<module name="ins" type="ekf2">
<define name="INS_EKF2_OPTITRACK" value="true"/>
</module>
<module name="ins" type="ekf2"/>
<module name="air_data"/>
<module name="gps" type="ubx_ucenter"/>
@@ -0,0 +1,109 @@
<aerodynamics>
<axis name="YAW">
<function name="elevon_yaw" frame="BODY" unit="FT*LBS">
<sum>
<product>
<property>fcs/ele_left_lag</property>
<value> -0.35 </value>
</product>
<product>
<property>fcs/ele_right_lag</property>
<value> -.35 </value>
</product>
</sum>
</function>
</axis>
<axis name="PITCH">
<function name="elevon_pitch" frame="BODY" unit="FT*LBS">
<sum>
<product>
<property>fcs/ele_left_lag</property>
<value> -0.0417 </value>
</product>
<product>
<property>fcs/ele_right_lag</property>
<value> .0417 </value>
</product>
</sum>
</function>
</axis>
<axis name="LIFT">
<function name="aero/force/Lift_alpha">
<description>Lift due to alpha</description>
<product>
<property>aero/qbar-psf</property>
<property>metrics/Sw-sqft</property>
<table>
<independentVar lookup="row">aero/alpha-deg</independentVar>
<tableData>
-180 0.14
-140 -0.80
-110 -0.63
-102 -0.74
-98 -0.64
-90 0.0
-85 0.15
-80 0.25
-75 0.42
0 0.0
45 0.8
90 0.0
135 -0.8
180 0.0
</tableData>
</table>
</product>
</function>
</axis>
<axis name="DRAG">
<function name="aero/force/Drag_basic">
<description>Drag</description>
<product>
<property>aero/qbar-psf</property>
<property>metrics/Sw-sqft</property>
<table>
<independentVar lookup="row">aero/alpha-deg</independentVar>
<tableData>
-180 1.7
-160 1.62
-100 0.4
-90 0.15
-85 0.17
-75 0.22
-70 0.33
-65 0.6128
-20 1.36
-4 1.45
15 1.35
30 1.12
</tableData>
</table>
<value>2.0</value> <!-- FIXME why this factor 2 ? -->
</product>
</function>
</axis>
<axis name="SIDE">
<function name="aero/force/Side_beta">
<description>Side force due to beta</description>
<product>
<property>aero/qbar-psf</property>
<property>metrics/Sw-sqft</property>
<property>aero/beta-rad</property>
<!--value>-4</value-->
<value>0.02</value>
</product>
</function>
</axis>
</aerodynamics>
+442
View File
@@ -0,0 +1,442 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="http://jsbsim.sourceforge.net/JSBSim.xsl"?>
<fdm_config name="QUAD ANTON" version="2.0" release="BETA" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<fileheader>
<author>Gautier Hattenberger</author>
<filecreationdate>05-06-2023</filecreationdate>
<version>Version 1.0</version>
<description>
Model for ANTON quadrotor
Simple Quadrotor in X configuration
Motor: T-Motor F40 + prop 6045
Include rotor dynamic
NE/SW turning CCW, NW/SE CW
Drag model is linear with speed and correspond to the quadrotor used in
IMAV2021 paper "Estimating wind using a quadrotor" (Hattenberger, Bronz, Condomines)
</description>
</fileheader>
<metrics>
<wingarea unit="M2"> 1 </wingarea>
<wingspan unit="M"> 1 </wingspan>
<chord unit="M"> 1 </chord>
<htailarea unit="M2"> 0 </htailarea>
<htailarm unit="M"> 0 </htailarm>
<vtailarea unit="M2"> 0 </vtailarea>
<vtailarm unit="M"> 0 </vtailarm>
<location name="AERORP" unit="M">
<x> 0 </x>
<y> 0 </y>
<z> 0 </z>
</location>
<location name="EYEPOINT" unit="M">
<x> 0 </x>
<y> 0 </y>
<z> 0 </z>
</location>
<location name="VRP" unit="M">
<x> 0 </x>
<y> 0 </y>
<z> 0 </z>
</location>
</metrics>
<mass_balance>
<ixx unit="KG*M2"> 0.0068 </ixx>
<iyy unit="KG*M2"> 0.0068 </iyy>
<izz unit="KG*M2"> 0.0136 </izz>
<ixy unit="KG*M2"> 0. </ixy>
<ixz unit="KG*M2"> 0. </ixz>
<iyz unit="KG*M2"> 0. </iyz>
<emptywt unit="KG"> 0.8 </emptywt>
<location name="CG" unit="M">
<x> 0 </x>
<y> 0 </y>
<z> 0 </z>
</location>
</mass_balance>
<ground_reactions>
<contact type="STRUCTURE" name="CONTACT_FRONT">
<location unit="M">
<x>-0.25 </x>
<y> 0 </y>
<z>-0.1 </z>
</location>
<static_friction> 0.8 </static_friction>
<dynamic_friction> 0.5 </dynamic_friction>
<spring_coeff unit="N/M"> 500 </spring_coeff>
<damping_coeff unit="N/M/SEC"> 100 </damping_coeff>
<damping_coeff_rebound type="SQUARE" unit="N/M2/SEC2"> 1000 </damping_coeff_rebound>
<max_steer unit="DEG"> 0.0 </max_steer>
<brake_group> NONE </brake_group>
<retractable>0</retractable>
</contact>
<contact type="STRUCTURE" name="CONTACT_BACK">
<location unit="M">
<x> 0.25</x>
<y> 0 </y>
<z>-0.1 </z>
</location>
<static_friction> 0.8 </static_friction>
<dynamic_friction> 0.5 </dynamic_friction>
<spring_coeff unit="N/M"> 500 </spring_coeff>
<damping_coeff unit="N/M/SEC"> 100 </damping_coeff>
<damping_coeff_rebound type="SQUARE" unit="N/M2/SEC2"> 1000 </damping_coeff_rebound>
<max_steer unit="DEG"> 0.0 </max_steer>
<brake_group> NONE </brake_group>
<retractable>0</retractable>
</contact>
<contact type="STRUCTURE" name="CONTACT_RIGHT">
<location unit="M">
<x> 0. </x>
<y> 0.25</y>
<z>-0.1 </z>
</location>
<static_friction> 0.8 </static_friction>
<dynamic_friction> 0.5 </dynamic_friction>
<spring_coeff unit="N/M"> 500 </spring_coeff>
<damping_coeff unit="N/M/SEC"> 100 </damping_coeff>
<damping_coeff_rebound type="SQUARE" unit="N/M2/SEC2"> 1000 </damping_coeff_rebound>
<max_steer unit="DEG"> 0.0 </max_steer>
<brake_group> NONE </brake_group>
<retractable>0</retractable>
</contact>
<contact type="STRUCTURE" name="CONTACT_LEFT">
<location unit="M">
<x> 0. </x>
<y>-0.25</y>
<z>-0.1 </z>
</location>
<static_friction> 0.8 </static_friction>
<dynamic_friction> 0.5 </dynamic_friction>
<spring_coeff unit="N/M"> 500 </spring_coeff>
<damping_coeff unit="N/M/SEC"> 100 </damping_coeff>
<damping_coeff_rebound type="SQUARE" unit="N/M2/SEC2"> 1000 </damping_coeff_rebound>
<max_steer unit="DEG"> 0.0 </max_steer>
<brake_group> NONE </brake_group>
<retractable>0</retractable>
</contact>
</ground_reactions>
<flight_control name="actuator_dynamics">
<property value="30.">fcs/motor_lag</property>
<property value="50.">fcs/motor_d_filter</property>
<property value="1.">fcs/g1_gain</property>
<property value="1.">fcs/g2_gain</property>
<channel name="filtering">
<!--First order filter represents actuator dynamics-->
<lag_filter name="ne_motor_lag">
<input> fcs/ne_motor </input>
<c1> fcs/motor_lag </c1>
<output> fcs/ne_motor_lag</output>
</lag_filter>
<lag_filter name="se_motor_lag">
<input> fcs/se_motor </input>
<c1> fcs/motor_lag </c1>
<output> fcs/se_motor_lag</output>
</lag_filter>
<lag_filter name="sw_motor_lag">
<input> fcs/sw_motor </input>
<c1> fcs/motor_lag </c1>
<output> fcs/sw_motor_lag</output>
</lag_filter>
<lag_filter name="nw_motor_lag">
<input> fcs/nw_motor </input>
<c1> fcs/motor_lag </c1>
<output> fcs/nw_motor_lag</output>
</lag_filter>
<!--Derivative of actuator dynamics for spinup torque-->
<washout_filter name="ne_motor_d">
<input> fcs/ne_motor </input>
<c1> fcs/motor_d_filter </c1>
<output> fcs/ne_motor_d</output>
</washout_filter>
<washout_filter name="se_motor_d">
<input> fcs/se_motor </input>
<c1> fcs/motor_d_filter </c1>
<output> fcs/se_motor_d</output>
</washout_filter>
<washout_filter name="sw_motor_d">
<input> fcs/sw_motor </input>
<c1> fcs/motor_d_filter </c1>
<output> fcs/sw_motor_d</output>
</washout_filter>
<washout_filter name="nw_motor_d">
<input> fcs/nw_motor </input>
<c1> fcs/motor_d_filter </c1>
<output> fcs/nw_motor_d</output>
</washout_filter>
<pure_gain name="ne_g2timesactd">
<input>fcs/ne_motor_d</input>
<gain>fcs/g2_gain</gain>
<output>fcs/ne_g2timesactd</output>
</pure_gain>
<pure_gain name="ne_g1timesact">
<input>fcs/ne_motor_lag</input>
<gain>fcs/g1_gain</gain>
<output>fcs/ne_g1timesact</output>
</pure_gain>
<summer name="ne_summer">
<input>fcs/ne_g2timesactd</input>
<input>fcs/ne_g1timesact</input>
<output>fcs/ne_yawcontrol</output>
</summer>
<pure_gain name="se_g2timesactd">
<input>fcs/se_motor_d</input>
<gain>fcs/g2_gain</gain>
<output>fcs/se_g2timesactd</output>
</pure_gain>
<pure_gain name="se_g1timesact">
<input>fcs/se_motor_lag</input>
<gain>fcs/g1_gain</gain>
<output>fcs/se_g1timesact</output>
</pure_gain>
<summer name="se_summer">
<input>fcs/se_g2timesactd</input>
<input>fcs/se_g1timesact</input>
<output>fcs/se_yawcontrol</output>
</summer>
<pure_gain name="sw_g2timesactd">
<input>fcs/sw_motor_d</input>
<gain>fcs/g2_gain</gain>
<output>fcs/sw_g2timesactd</output>
</pure_gain>
<pure_gain name="sw_g1timesact">
<input>fcs/sw_motor_lag</input>
<gain>fcs/g1_gain</gain>
<output>fcs/sw_g1timesact</output>
</pure_gain>
<summer name="sw_summer">
<input>fcs/sw_g2timesactd</input>
<input>fcs/sw_g1timesact</input>
<output>fcs/sw_yawcontrol</output>
</summer>
<pure_gain name="nw_g2timesactd">
<input>fcs/nw_motor_d</input>
<gain>fcs/g2_gain</gain>
<output>fcs/nw_g2timesactd</output>
</pure_gain>
<pure_gain name="nw_g1timesact">
<input>fcs/nw_motor_lag</input>
<gain>fcs/g1_gain</gain>
<output>fcs/nw_g1timesact</output>
</pure_gain>
<summer name="summer3">
<input>fcs/nw_g2timesactd</input>
<input>fcs/nw_g1timesact</input>
<output>fcs/nw_yawcontrol</output>
</summer>
</channel>
</flight_control>
<external_reactions>
<property>fcs/ne_motor</property>
<property>fcs/se_motor</property>
<property>fcs/sw_motor</property>
<property>fcs/nw_motor</property>
<property>fcs/ne_motor_lag</property>
<property>fcs/se_motor_lag</property>
<property>fcs/sw_motor_lag</property>
<property>fcs/nw_motor_lag</property>
<!-- First the lift forces produced by each propeller -->
<force name="ne_motor" frame="BODY">
<function>
<product>
<property>fcs/ne_motor_lag</property>
<value> 10. </value>
<value>0.224808943</value> <!-- N to LBS -->
</product>
</function>
<location unit="M">
<x>-0.15</x>
<y>0.15</y>
<z>0</z>
</location>
<direction>
<x>0</x>
<y>0</y>
<z>-1</z>
</direction>
</force>
<force name="sw_motor" frame="BODY">
<function>
<product>
<property>fcs/sw_motor_lag</property>
<value> 10. </value>
<value>0.224808943</value> <!-- N to LBS -->
</product>
</function>
<location unit="M">
<x>0.15</x>
<y>-0.15</y>
<z>0</z>
</location>
<direction>
<x>0</x>
<y>0</y>
<z>-1</z>
</direction>
</force>
<force name="se_motor" frame="BODY">
<function>
<product>
<property>fcs/se_motor_lag</property>
<value> 10. </value>
<value>0.224808943</value> <!-- N to LBS -->
</product>
</function>
<location unit="M">
<x>0.15</x>
<y>0.15</y>
<z>0</z>
</location>
<direction>
<x>0</x>
<y>0</y>
<z>-1</z>
</direction>
</force>
<force name="nw_motor" frame="BODY">
<function>
<product>
<property>fcs/nw_motor_lag</property>
<value> 10. </value>
<value>0.224808943</value> <!-- N to LBS -->
</product>
</function>
<location unit="M">
<x>-0.15</x>
<y>-0.15</y>
<z>0</z>
</location>
<direction>
<x>0</x>
<y>0</y>
<z>-1</z>
</direction>
</force>
<!-- Then the Moment Couples -->
<moment name="ne_couple" frame="BODY">
<function>
<product>
<property>fcs/ne_yawcontrol</property>
<value> 0.5 </value>
<value> 0.738 </value> <!-- N.m to FT.LBS -->
</product>
</function>
<location unit="M">
<x>-0.15</x>
<y>0.15</y>
<z>0</z>
</location>
<direction>
<x>0</x>
<y>0</y>
<z>1</z>
</direction>
</moment>
<moment name="sw_couple" frame="BODY">
<function>
<product>
<property>fcs/sw_yawcontrol</property>
<value> 0.5 </value>
<value> 0.738 </value> <!-- N.m to FT.LBS -->
</product>
</function>
<location unit="M">
<x>0.15</x>
<y>-0.15</y>
<z>0</z>
</location>
<direction>
<x>0</x>
<y>0</y>
<z>1</z>
</direction>
</moment>
<moment name="se_couple" frame="BODY">
<function>
<product>
<property>fcs/se_yawcontrol</property>
<value> 0.5 </value>
<value> 0.738 </value> <!-- N.m to FT.LBS -->
</product>
</function>
<location unit="M">
<x>0.15</x>
<y>0.15</y>
<z>0</z>
</location>
<direction>
<x>0</x>
<y>0</y>
<z>-1</z>
</direction>
</moment>
<moment name="nw_couple" frame="BODY">
<function>
<product>
<property>fcs/nw_yawcontrol</property>
<value> 0.5 </value>
<value> 0.738 </value> <!-- N.m to FT.LBS -->
</product>
</function>
<location unit="M">
<x>0</x>
<y>-0.25</y>
<z>0</z>
</location>
<direction>
<x>0</x>
<y>0</y>
<z>-1</z>
</direction>
</moment>
</external_reactions>
<propulsion/>
<flight_control name="FGFCS"/>
<aerodynamics>
<axis name="DRAG">
<function name="aero/coefficient/CD">
<description>Drag</description>
<product>
<property>velocities/vtrue-fps</property>
<value>0.3048</value> <!-- conversion in m/s -->
<value>0.230292</value> <!-- drag coef -->
<value>0.224808943</value> <!-- N to LBS -->
</product>
</function>
</axis>
</aerodynamics>
</fdm_config>
+394
View File
@@ -0,0 +1,394 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="http://jsbsim.sourceforge.net/JSBSim.xsl"?>
<fdm_config name="QUAD COMPLETE EXT" version="2.0" release="BETA" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
<fileheader>
<author>ENAC</author>
<filecreationdate>09-06-2022</filecreationdate>
<version>Version 0.92 - beta</version>
<description>Falcon</description>
</fileheader>
<metrics>
<wingarea unit="M2"> 0.075 </wingarea>
<wingspan unit="M"> 0.9 </wingspan>
<chord unit="M"> 0.12 </chord>
<htailarea unit="M2"> 0 </htailarea>
<htailarm unit="M"> 0 </htailarm>
<vtailarea unit="M2"> 0 </vtailarea>
<vtailarm unit="M"> 0 </vtailarm>
<wing_incidence unit="DEG"> 90 </wing_incidence>
<location name="AERORP" unit="M">
<x> 0 </x>
<y> 0 </y>
<z> 0 </z>
</location>
<location name="EYEPOINT" unit="M">
<x> 0 </x>
<y> 0 </y>
<z> 0 </z>
</location>
<location name="VRP" unit="M">
<x> 0 </x>
<y> 0 </y>
<z> 0 </z>
</location>
</metrics>
<mass_balance>
<ixx unit="KG*M2"> 0.005 </ixx>
<iyy unit="KG*M2"> 0.005 </iyy>
<izz unit="KG*M2"> 0.015 </izz>
<ixy unit="KG*M2"> 0. </ixy>
<ixz unit="KG*M2"> 0. </ixz>
<iyz unit="KG*M2"> 0. </iyz>
<emptywt unit="KG"> 0.72 </emptywt>
<location name="CG" unit="M">
<x> 0 </x>
<y> 0 </y>
<z> 0 </z>
</location>
</mass_balance>
<ground_reactions>
<contact type="STRUCTURE" name="CONTACT_FRONT">
<location unit="M">
<x> -0.12 </x>
<y> 0.0 </y>
<z>-0.1 </z>
</location>
<static_friction> 0.8 </static_friction>
<dynamic_friction> 0.5 </dynamic_friction>
<spring_coeff unit="N/M"> 500 </spring_coeff>
<damping_coeff unit="N/M/SEC"> 100 </damping_coeff>
<damping_coeff_rebound type="SQUARE" unit="N/M2/SEC2"> 1000 </damping_coeff_rebound>
<max_steer unit="DEG"> 0.0 </max_steer>
<brake_group> NONE </brake_group>
<retractable>0</retractable>
</contact>
<contact type="STRUCTURE" name="CONTACT_BACK">
<location unit="M">
<x> 0.12</x>
<y> 0.0</y>
<z> -0.1</z>
</location>
<static_friction> 0.8 </static_friction>
<dynamic_friction> 0.5 </dynamic_friction>
<spring_coeff unit="N/M"> 500 </spring_coeff>
<damping_coeff unit="N/M/SEC"> 100 </damping_coeff>
<damping_coeff_rebound type="SQUARE" unit="N/M2/SEC2"> 1000 </damping_coeff_rebound>
<max_steer unit="DEG"> 0.0 </max_steer>
<brake_group> NONE </brake_group>
<retractable>0</retractable>
</contact>
<contact type="STRUCTURE" name="CONTACT_RIGHT">
<location unit="M">
<x> 0.0 </x>
<y> 0.12</y>
<z> -0.1 </z>
</location>
<static_friction> 0.8 </static_friction>
<dynamic_friction> 0.5 </dynamic_friction>
<spring_coeff unit="N/M"> 500 </spring_coeff>
<damping_coeff unit="N/M/SEC"> 100 </damping_coeff>
<damping_coeff_rebound type="SQUARE" unit="N/M2/SEC2"> 1000 </damping_coeff_rebound>
<max_steer unit="DEG"> 0.0 </max_steer>
<brake_group> NONE </brake_group>
<retractable>0</retractable>
</contact>
<contact type="STRUCTURE" name="CONTACT_LEFT">
<location unit="M">
<x> 0.0 </x>
<y>-0.12</y>
<z> -0.1 </z>
</location>
<static_friction> 0.8 </static_friction>
<dynamic_friction> 0.5 </dynamic_friction>
<spring_coeff unit="N/M"> 500 </spring_coeff>
<damping_coeff unit="N/M/SEC"> 100 </damping_coeff>
<damping_coeff_rebound type="SQUARE" unit="N/M2/SEC2"> 1000 </damping_coeff_rebound>
<max_steer unit="DEG"> 0.0 </max_steer>
<brake_group> NONE </brake_group>
<retractable>0</retractable>
</contact>
</ground_reactions>
<flight_control name="actuator_dynamics">
<property value="30.">fcs/motor_lag</property>
<property value="54.">fcs/elevon_lag</property>
<channel name="filtering">
<!--First order filter represents actuator dynamics-->
<lag_filter name="UR_lag">
<input> fcs/UR </input>
<clipto>
<min>0</min>
<max>1</max>
</clipto>
<c1> fcs/motor_lag </c1>
<output> fcs/UR_lag</output>
</lag_filter>
<lag_filter name="BR_lag">
<input> fcs/BR </input>
<clipto>
<min>0</min>
<max>1</max>
</clipto>
<c1> fcs/motor_lag </c1>
<output> fcs/BR_lag</output>
</lag_filter>
<lag_filter name="BL_lag">
<input> fcs/BL </input>
<clipto>
<min>0</min>
<max>1</max>
</clipto>
<c1> fcs/motor_lag </c1>
<output> fcs/BL_lag</output>
</lag_filter>
<lag_filter name="UL_lag">
<input> fcs/UL </input>
<clipto>
<min>0</min>
<max>1</max>
</clipto>
<c1> fcs/motor_lag </c1>
<output> fcs/UL_lag</output>
</lag_filter>
<lag_filter name="ele_left_lag">
<input> fcs/ele_left </input>
<c1> fcs/elevon_lag </c1>
<output> fcs/ele_left_lag</output>
</lag_filter>
<lag_filter name="ele_right_lag">
<input> fcs/ele_right </input>
<c1> fcs/elevon_lag </c1>
<output> fcs/ele_right_lag</output>
</lag_filter>
</channel>
</flight_control>
<external_reactions>
<property>fcs/UR</property>
<property>fcs/BR</property>
<property>fcs/BL</property>
<property>fcs/UL</property>
<property>fcs/UR_lag</property>
<property>fcs/BR_lag</property>
<property>fcs/BL_lag</property>
<property>fcs/UL_lag</property>
<property>fcs/ele_left</property>
<property>fcs/ele_left_lag</property>
<property>fcs/ele_right</property>
<property>fcs/ele_right_lag</property>
<property value="6.">fcs/motor_max_thrust</property> <!-- FIXME should be 4. from flight data -->
<property value="0.00001">fcs/motor_max_torque</property>
<!-- First the lift forces produced by each propeller -->
<force name="UR" frame="BODY" unit="LBS">
<function>
<product>
<property>fcs/UR_lag</property>
<property>fcs/motor_max_thrust</property>
<value>0.224808943</value> <!-- N to LBS -->
<table>
<independentVar lookup="row">aero/qbar-psf</independentVar>
<tableData> <!-- 1 psf = 47.88 Pa , 18m/s : 200Pa, 5m/s :15Pa 3m/s:5.5Pa-->
0. 1.
0.1148 1.
4.17 0.7 <!-- 18m/s -->
</tableData>
</table>
</product>
</function>
<location unit="M">
<x>0.105</x>
<y>0.12</y>
<z>0</z>
</location>
<direction>
<x>0.342</x>
<y>0</y>
<z>-0.94</z>
</direction>
</force>
<force name="BR" frame="BODY" unit="LBS">
<function>
<product>
<property>fcs/BR_lag</property>
<property>fcs/motor_max_thrust</property>
<value>0.224808943</value> <!-- N to LBS -->
<table>
<independentVar lookup="row">aero/qbar-psf</independentVar>
<tableData> <!-- 1 psf = 47.88 Pa , 18m/s : 200Pa, 5m/s :15Pa 3m/s:5.5Pa-->
0. 1.
0.1148 1.
4.17 0.7 <!-- 18m/s -->
</tableData>
</table>
</product>
</function>
<location unit="M">
<x>-0.105</x>
<y>0.12</y>
<z>0</z>
</location>
<direction>
<x>-0.342</x>
<y>0</y>
<z>-0.94</z>
</direction>
</force>
<force name="BL" frame="BODY" unit="LBS">
<function>
<product>
<property>fcs/BL_lag</property>
<property>fcs/motor_max_thrust</property>
<value>0.224808943</value> <!-- N to LBS -->
<table>
<independentVar lookup="row">aero/qbar-psf</independentVar>
<tableData> <!-- 1 psf = 47.88 Pa , 18m/s : 200Pa, 5m/s :15Pa 3m/s:5.5Pa-->
0. 1.
0.1148 1.
4.17 0.7 <!-- 18m/s -->
</tableData>
</table>
</product>
</function>
<location unit="M">
<x>-0.105</x>
<y>-0.12</y>
<z>0</z>
</location>
<direction>
<x>-0.342</x>
<y>0</y>
<z>-0.94</z>
</direction>
</force>
<force name="UL" frame="BODY" unit="LBS">
<function>
<product>
<property>fcs/UL_lag</property>
<property>fcs/motor_max_thrust</property>
<value>0.224808943</value> <!-- N to LBS -->
<table>
<independentVar lookup="row">aero/qbar-psf</independentVar>
<tableData> <!-- 1 psf = 47.88 Pa , 18m/s : 200Pa, 5m/s :15Pa 3m/s:5.5Pa-->
0. 1.
0.1148 1.
4.17 0.7 <!-- 18m/s -->
</tableData>
</table>
</product>
</function>
<location unit="M">
<x>0.105</x>
<y>-0.12</y>
<z>0</z>
</location>
<direction>
<x>0.342</x>
<y>0</y>
<z>-0.94</z>
</direction>
</force>
<!-- Then the Moment Couples -->
<moment name="UR_couple" frame="BODY">
<function>
<product>
<property>fcs/UR_lag</property>
<property>fcs/motor_max_torque</property>
<value> 0.738 </value> <!-- N.m to FT.LBS -->
</product>
</function>
<location unit="M">
<x>0.105</x>
<y>0.12</y>
<z>0</z>
</location>
<direction>
<x>0</x>
<y>0</y>
<z>-1</z>
</direction>
</moment>
<moment name="BR_couple" frame="BODY">
<function>
<product>
<property>fcs/BR_lag</property>
<property>fcs/motor_max_torque</property>
<value> 0.738 </value> <!-- N.m to FT.LBS -->
</product>
</function>
<location unit="M">
<x>-0.105</x>
<y>0.12</y>
<z>0</z>
</location>
<direction>
<x>0</x>
<y>0</y>
<z>1</z>
</direction>
</moment>
<moment name="BL_couple" frame="BODY">
<function>
<product>
<property>fcs/BL_lag</property>
<property>fcs/motor_max_torque</property>
<value> 0.738 </value> <!-- N.m to FT.LBS -->
</product>
</function>
<location unit="M">
<x>-0.105</x>
<y>-0.12</y>
<z>0</z>
</location>
<direction>
<x>0</x>
<y>0</y>
<z>-1</z>
</direction>
</moment>
<moment name="UL_couple" frame="BODY">
<function>
<product>
<property>fcs/UL_lag</property>
<property>fcs/motor_max_torque</property>
<value> 0.738 </value> <!-- N.m to FT.LBS -->
</product>
</function>
<location unit="M">
<x>0.105</x>
<y>-0.12</y>
<z>0</z>
</location>
<direction>
<x>0</x>
<y>0</y>
<z>1</z>
</direction>
</moment>
</external_reactions>
<propulsion/>
<flight_control name="FGFCS"/>
<aerodynamics file="Systems/aerodynamics_falcon.xml"/>
</fdm_config>