Showing with 4,582 additions and 2,409 deletions.
  1. +1 −7 Makefile
  2. +1 −158 conf/Makefile.sim
  3. +1 −0 conf/airframes/examples/cube_orange.xml
  4. +212 −0 conf/airframes/tudelft/bebop_one_indi_generated_ekf2.xml
  5. +167 −0 conf/airframes/tudelft/bebop_oneloop_ekf2.xml
  6. +168 −0 conf/airframes/tudelft/bebop_oneloop_generated_ekf2.xml
  7. +1 −5 conf/airframes/tudelft/rot_wing_25kg.xml
  8. +509 −0 conf/airframes/tudelft/rot_wing_v3b.xml
  9. +177 −0 conf/autopilot/rotorcraft_oneloop.xml
  10. +198 −0 conf/autopilot/rotorcraft_oneloop_with_backup.xml
  11. +1 −1 conf/conf_tests.xml
  12. +135 −0 conf/flight_plans/tudelft/oneloop_cyberzoo.xml
  13. +161 −0 conf/flight_plans/tudelft/oneloop_valkenburg.xml
  14. +1 −1 conf/modules/actuators_nps.xml
  15. +19 −0 conf/modules/fdm_fixedwing_sim.xml
  16. +1 −1 conf/modules/firmwares/fixedwing.xml
  17. +1 −1 conf/modules/gps_nps.xml
  18. +19 −0 conf/modules/guidance_oneloop.xml
  19. +1 −1 conf/modules/imu_common.xml
  20. +1 −1 conf/modules/imu_nps.xml
  21. +0 −3 conf/modules/ins_arduimu.xml
  22. +0 −3 conf/modules/ins_arduimu_basic.xml
  23. +2 −2 conf/modules/ins_nps.xml
  24. +1 −1 conf/modules/nav_hybrid.xml
  25. +40 −0 conf/modules/oneloop_andi.xml
  26. +21 −0 conf/modules/stabilization_oneloop.xml
  27. +0 −1 conf/modules/system_core.xml
  28. +1 −1 conf/modules/targets/nps.xml
  29. +1 −1 conf/modules/targets/nps_common.xml
  30. +1 −18 conf/modules/targets/sim.xml
  31. +1 −1 conf/modules/telemetry_nps.xml
  32. +1 −1 conf/modules/udp.xml
  33. +27 −0 conf/modules/wing_rotation_controller_servo.xml
  34. +1 −1 conf/telemetry/AGGIEAIR/aggieair_iris.xml
  35. +1 −1 conf/telemetry/AGGIEAIR/aggieair_rotorcraft.xml
  36. +1 −1 conf/telemetry/DB/db_default_rotorcraft.xml
  37. +2 −2 conf/telemetry/DB/db_quadshot.xml
  38. +2 −2 conf/telemetry/default_quadshot.xml
  39. +4 −2 conf/telemetry/default_rotorcraft.xml
  40. +1 −1 conf/telemetry/default_rotorcraft_mavlink.xml
  41. +1 −1 conf/telemetry/default_rotorcraft_slow.xml
  42. +51 −52 conf/telemetry/highspeed_rotorcraft.xml
  43. +1 −1 conf/telemetry/rotorcraft_with_logger.xml
  44. +1 −1 conf/telemetry/tudelft/outback.xml
  45. +11 −0 conf/userconf/tudelft/conf.xml
  46. +0 −20 sw/airborne/arch/sim/led_hw.c
  47. +0 −19 sw/airborne/arch/sim/led_hw.h
  48. +1 −29 sw/airborne/arch/sim/modules/radio_control/ppm_arch.c
  49. +0 −34 sw/airborne/arch/sim/modules/radio_control/spektrum_arch.c
  50. +0 −19 sw/airborne/arch/sim/sim_adc_generic.c
  51. +0 −38 sw/airborne/arch/sim/sim_ahrs.c
  52. +0 −17 sw/airborne/arch/sim/sim_airspeed.c
  53. +0 −123 sw/airborne/arch/sim/sim_ap.c
  54. +0 −82 sw/airborne/arch/sim/sim_gps.c
  55. +0 −5 sw/airborne/arch/sim/sim_uart_hw.c
  56. +123 −0 sw/airborne/firmwares/rotorcraft/guidance/guidance_oneloop.c
  57. +47 −0 sw/airborne/firmwares/rotorcraft/guidance/guidance_oneloop.h
  58. +1,538 −0 sw/airborne/firmwares/rotorcraft/oneloop/oneloop_andi.c
  59. +134 −0 sw/airborne/firmwares/rotorcraft/oneloop/oneloop_andi.h
  60. +38 −32 sw/airborne/firmwares/rotorcraft/stabilization/stabilization_indi.c
  61. +31 −20 sw/airborne/firmwares/rotorcraft/stabilization/stabilization_indi_simple.c
  62. +94 −0 sw/airborne/firmwares/rotorcraft/stabilization/stabilization_oneloop.c
  63. +20 −12 ...modules/radio_control/rc_datalink.c → firmwares/rotorcraft/stabilization/stabilization_oneloop.h}
  64. +40 −0 sw/airborne/modules/imu/imu.c
  65. +8 −0 sw/airborne/modules/imu/imu.h
  66. +1 −1 sw/airborne/modules/meteo/ekf_aw_wrapper.c
  67. +1 −1 sw/airborne/modules/nav/nav_rotorcraft_hybrid.h
  68. +160 −0 sw/airborne/modules/rot_wing_drone/wing_rotation_controller_servo.c
  69. +54 −0 sw/airborne/modules/rot_wing_drone/wing_rotation_controller_servo.h
  70. +1 −1 sw/ext/pprzlink
  71. +1 −1 sw/ground_segment/python/rot_wing_mon/rot_wing_viewer.py
  72. +2 −22 sw/simulator/Makefile
  73. +0 −73 sw/simulator/data.ml
  74. +0 −36 sw/simulator/data.mli
  75. +0 −138 sw/simulator/diffusion.ml
  76. +0 −57 sw/simulator/fg.c
  77. +0 −53 sw/simulator/fg_environment.xml
  78. +0 −280 sw/simulator/flightModel.ml
  79. +0 −53 sw/simulator/flightModel.mli
  80. +0 −81 sw/simulator/gps.ml
  81. +0 −36 sw/simulator/gps.mli
  82. 0 sw/simulator/{ → nps}/flight_gear.h
  83. +1 −1 sw/simulator/nps/nps_fdm.h
  84. +309 −0 sw/simulator/nps/nps_fdm_fixedwing_sim.c
  85. +1 −1 sw/simulator/nps/nps_flightgear.c
  86. +23 −56 sw/simulator/pprzsim-launch
  87. +0 −325 sw/simulator/sim.ml
  88. +0 −26 sw/simulator/sim.mli
  89. +0 −65 sw/simulator/simlib.ml
  90. +0 −37 sw/simulator/simlib.mli
  91. +0 −14 sw/simulator/simsitl.ml
  92. +0 −221 sw/simulator/sitl.ml
  93. +0 −6 sw/simulator/sitl.mli
  94. +6 −14 sw/supervision/python/session_widget.py
  95. +0 −87 tests/sim/01_Microjet.t
8 changes: 1 addition & 7 deletions Makefile
Expand Up @@ -343,14 +343,8 @@ test_all_confs: all opencv_bebop
test_math:
make -C tests/math

# super simple simulator test, needs X
# always uses conf/conf.xml, so that needs to contain the appropriate aircrafts
# (only Microjet right now)
test_sim: all
prove tests/sim

.PHONY: all print_build_version _print_building _save_build_version init dox ground_segment ground_segment.opt \
subdirs $(SUBDIRS) conf ext libpprz libpprzlink.update libpprzlink.install cockpit cockpit.opt tmtc tmtc.opt generators\
static sim_static opencv_bebop\
clean cleanspaces ab_clean dist_clean distclean dist_clean_irreversible \
test test_examples test_math test_sim test_all_confs
test test_examples test_math test_all_confs
159 changes: 1 addition & 158 deletions conf/Makefile.sim
@@ -1,158 +1 @@
# Hey Emacs, this is a -*- makefile -*-
#
# Copyright (C) 2006 Pascal Brisset, Antoine Drouin
#
# This file is part of paparazzi.
#
# paparazzi is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# paparazzi is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with paparazzi; see the file COPYING. If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#

#
# This is the common Makefile for the sim target.
#

# this should not be needed
SRC_ARCH = arch/sim

include $(PAPARAZZI_SRC)/sw/Makefile.ocaml

CC = gcc
SIMDIR = $(PAPARAZZI_SRC)/sw/simulator
CAMLINCLUDES = -I $(LIBPPRZDIR) -I $(SIMDIR) -I $(OBJDIR)
PKG = -package glibivy,pprz
LINKPKG = $(PKG) -linkpkg -dllpath-pkg pprz,pprzlink
SIMSITLML = $(OBJDIR)/simsitl.ml
SITLCMA = $(SIMDIR)/sitl.cma
OPT ?= 2

# Launch with "make Q=''" to get full command display
Q=@

#
# End of configuration part.
#

INCLUDES += -I $(shell $(OCAMLC) -where)

CFLAGS = -W -Wall
CFLAGS += $(INCLUDES)
CFLAGS += $($(TARGET).CFLAGS)
CFLAGS += $(USER_CFLAGS) $(BOARD_CFLAGS)
CFLAGS += -fPIC
CFLAGS += -O$(OPT)
CFLAGS += -g
CFLAGS += -std=gnu99
CFLAGS += $(shell pkg-config --cflags-only-I ivy-glib)
CFLAGS += -D_GNU_SOURCE
CFLAGS += -DPPRZLINK_UNALIGNED_ACCESS=1

LDFLAGS = -lm
LDFLAGS += $(BOARD_LDFLAGS)

LIBFLAGS = -shared

UNAME = $(shell uname -s)
ifeq ($(UNAME),Darwin)
LIBFLAGS = -dynamiclib -undefined suppress -flat_namespace
endif

# build sim in custom mode for ARM systems for now...
MNAME = $(shell uname -m)
ifneq (,$(findstring arm,$(MNAME)))
SIMSITLCUSTOM=TRUE
endif

ifdef SIMSITLCUSTOM
CAMLINCLUDES += $(shell ocamlfind query -r -i-format lablgtk2) $(shell ocamlfind query -r -i-format xml-light) $(shell ocamlfind query -r -i-format glibivy)
CAMLCMAS = unix.cma str.cma xml-light.cma glibivy-ocaml.cma lib-pprz.cma lablgtk.cma
endif


#
# General rules
#

$(TARGET).srcsnd = $(notdir $($(TARGET).srcs))
$(TARGET).objso = $($(TARGET).srcs:%.c=$(OBJDIR)/%.o)
$(TARGET).objs = $($(TARGET).objso:%.S=$(OBJDIR)/%.o)

all compile: $(OBJDIR) $(OBJDIR)/simsitl

$(OBJDIR):
@echo CREATING object dir $(OBJDIR)
@test -d $(OBJDIR) || mkdir -p $(OBJDIR)

# shared library of the C autopilot part
# Note: On darwin the file should actually have the .dylib ending but ocamlc
# only assumes that .so files are shared libraries, even though this is only
# correct on linux.
autopilot.so : $($(TARGET).objs)
@echo BUILD $@
$(Q)$(CC) $(LIBFLAGS) $^ -o $(OBJDIR)/$@

ifdef SIMSITLCUSTOM
$(OBJDIR)/simsitl : $($(TARGET).objs) $(SITLCMA) $(SIMSITLML)
@echo LD $@
$(Q)$(OCAMLC) -g -custom $(CAMLINCLUDES) -o $@ $(CAMLCMAS) $^
else
$(OBJDIR)/simsitl : autopilot.so $(SITLCMA) $(SIMSITLML)
@echo LD $@
$(Q)$(OCAMLC) -g $(CAMLINCLUDES) -o $@ $(LINKPKG) $^ -dllpath $(OBJDIR) -dllpath $(SIMDIR)
endif


# The id of the A/C is hardcoded in the code (to be improved with dynlink ?)
$(SIMSITLML) : $(SIMDIR)/simsitl.ml
@echo "Sim.ac_name := \"$(AIRCRAFT)\"" > $@
@cat $< >> $@

%.s: %.c
$(CC) $(CFLAGS) -S -o $@ $<

%.s: %.cpp
$(CC) $(CFLAGS) -S -o $@ $<

$(OBJDIR)/%.s: %.c
@echo CC $@
$(Q)test -d $(dir $@) || mkdir -p $(dir $@)
$(CC) $(CFLAGS) -S -o $@ $<

$(OBJDIR)/%.s: %.cpp
@echo CC $@
$(Q)test -d $(dir $@) || mkdir -p $(dir $@)
$(CC) $(CFLAGS) -S -o $@ $<

$(OBJDIR)/%.o: %.c $(OBJDIR)/../Makefile.ac
@echo CC $@
$(Q)test -d $(dir $@) || mkdir -p $(dir $@)
$(Q)$(CC) -MMD $(CFLAGS) -c -o $@ $<

$(OBJDIR)/%.o: %.cpp $(OBJDIR)/../Makefile.ac
@echo CC $@
$(Q)test -d $(dir $@) || mkdir -p $(dir $@)
$(Q)$(CC) -MMD $(CFLAGS) -c -o $@ $<

.PHONY: all compile

#
# Dependencies
#

DEPS = $(addprefix $(OBJDIR)/,$($(TARGET).srcs:.c=.d))

ifneq ($(MAKECMDGOALS),clean)
-include $(DEPS)
endif
include $(PAPARAZZI_SRC)/conf/Makefile.nps
1 change: 1 addition & 0 deletions conf/airframes/examples/cube_orange.xml
Expand Up @@ -89,6 +89,7 @@
<module name="stabilization" type="indi_simple"/>
<module name="stabilization" type="rate_indi"/>
<module name="ins" type="ekf2"/>
<module name="nav" type="hybrid"/>

<module name="air_data"/>

Expand Down
212 changes: 212 additions & 0 deletions conf/airframes/tudelft/bebop_one_indi_generated_ekf2.xml
@@ -0,0 +1,212 @@
<!DOCTYPE airframe SYSTEM "../airframe.dtd">

<airframe name="bebop_one_indi_ekf2">
<description> bebop with a oneloop ANDI and backup INDI controller and EKF2
</description>

<firmware name="rotorcraft">
<autopilot name="rotorcraft_oneloop_with_backup.xml"/>
<target name="ap" board="bebop">
<define name="RADIO_TH_HOLD" value="0"/>
</target>

<target name="nps" board="pc">
<module name="fdm" type="jsbsim"/>
<module name="udp"/>
</target>

<module name="telemetry" type="transparent_udp"/>
<module name="radio_control" type="datalink"/>
<module name="actuators" type="bebop"/>
<module name="imu" type="bebop"/>

<!-- <module name="gps" type="furuno"/> -->
<module name="gps" type="datalink"/>

<module name="oneloop" type="andi">
<configure name="ANDI_NUM_ACT" value="4"/>
<configure name="ANDI_NUM_VIRTUAL_ACT" value="2"/>
<configure name="ANDI_OUTPUTS" value="6"/>
</module>

<module name="stabilization" type="indi" >
<configure name="INDI_NUM_ACT" value="4"/>
</module>

<module name="ins" type="ekf2">
<define name="INS_EKF2_OPTITRACK" value="true"/>
</module>
<module name="nav_hybrid"/>

<module name="guidance" type="indi">
<define name="GUIDANCE_INDI_SPECIFIC_FORCE_GAIN" value="-500.0"/>
<define name="GUIDANCE_INDI_THRUST_DYNAMICS" value="0.1"/>
<define name="GUIDANCE_INDI_RC_DEBUG" value="FALSE"/>
</module>

<module name="geo_mag"/>
<module name="air_data"/>

<module name="wls">
<define name="WLS_N_U" value = "6"/>
<define name="WLS_N_V" value = "6"/>
</module>

<module name="logger_file">
<define name="FILE_LOGGER_PATH" value="/data/ftp/internal_000/"/>
</module>
</firmware>

<commands>
<axis name="PITCH" failsafe_value="0"/>
<axis name="ROLL" failsafe_value="0"/>
<axis name="YAW" failsafe_value="0"/>
<axis name="THRUST" failsafe_value="4000"/>
</commands>

<servos driver="Default">
<servo name="TOP_LEFT" no="0" min="3000" neutral="3000" max="12000"/>
<servo name="TOP_RIGHT" no="1" min="3000" neutral="3000" max="12000"/>
<servo name="BOTTOM_RIGHT" no="2" min="3000" neutral="3000" max="12000"/>
<servo name="BOTTOM_LEFT" no="3" min="3000" neutral="3000" max="12000"/>
</servos>

<command_laws>
<let VAR="th_hold" value="!autopilot_get_motors_on()"/>
<set value="($th_hold? -9600 : actuators_pprz[0])" SERVO="TOP_LEFT"/>
<set value="($th_hold? -9600 : actuators_pprz[1])" SERVO="TOP_RIGHT"/>
<set value="($th_hold? -9600 : actuators_pprz[2])" SERVO="BOTTOM_RIGHT"/>
<set value="($th_hold? -9600 : actuators_pprz[3])" SERVO="BOTTOM_LEFT"/>
</command_laws>

<section name="MISC">
<define name="AUTOPILOT_IN_FLIGHT_MIN_THRUST" value = "300"/>
<define name="THRESHOLD_GROUND_DETECT" value = "40"/>
<define name="AUTOPILOT_ARMING_DELAY" value = "2"/>
<define name="GUIDANCE_INDI_MAX_AIRSPEED" value = "5.0f"/> <!--remove once hybrid nav is made not dependent on guidance indi hybrid-->
<define name="GUIDANCE_INDI_NAV_SPEED_MARGIN" value = "0.0"/> <!--remove once hybrid nav is made not dependent on guidance indi hybrid-->
</section>

<section name="AIR_DATA" prefix="AIR_DATA_">
<define name="CALC_AIRSPEED" value="FALSE"/>
<define name="CALC_TAS_FACTOR" value="FALSE"/>
<define name="CALC_AMSL_BARO" value="TRUE"/>
</section>

<section name="IMU" prefix="IMU_">
<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"/>
<define name="ACCEL_CALIB" value="{{.abi_id=1, .calibrated={.neutral=true, .scale=true},.neutral={171,25,-326}, .scale={{22001,54059,59579},{8998,22092,24933}}}}"/>
<define name="IMU_MAG_CALIB" value="{{.abi_id=1, .calibrated={.neutral=true, .scale=true},.neutral={-9,8,121}, .scale={{1143,47395,48383},{152,5978,5811}}}}"/>
</section>

<section name="INS" prefix="INS_">
<define name="SONAR_MAX_RANGE" value="2.2"/>
</section>
<section name="RC_SETPOINT" prefix="STABILIZATION_ATTITUDE_">
<define name="SP_MAX_PHI" value="45" unit="deg"/>
<define name="SP_MAX_THETA" value="45" unit="deg"/>
<define name="SP_MAX_R" value="400" unit="deg/s"/>
<define name="DEADBAND_A" value="0"/>
<define name="DEADBAND_E" value="0"/>
<define name="DEADBAND_R" value="50"/>
</section>

<section name="STABILIZATION_ATTITUDE_INDI" prefix="STABILIZATION_INDI_">
<define name="G1_ROLL" value="{20 , -20, -20 , 20 }"/>
<define name="G1_PITCH" value="{14 , 14, -14 , -14 }"/>
<define name="G1_YAW" value="{-1, 1, -1, 1}"/>
<define name="G1_THRUST" value="{-.4, -.4, -.4, -.4}"/>
<define name="G2" value="{-61.2093, 65.3670, -65.7419, 65.4516}"/>
<define name="REF_ERR_P" value="600.0"/>
<define name="REF_ERR_Q" value="600.0"/>
<define name="REF_ERR_R" value="600.0"/>
<define name="REF_RATE_P" value="28.0"/>
<define name="REF_RATE_Q" value="28.0"/>
<define name="REF_RATE_R" value="28.0"/>
<define name="ESTIMATION_FILT_CUTOFF" value="4.0"/>
<define name="FILT_CUTOFF" value="5.0"/>
<define name="ACT_DYN" value="{0.1, 0.1, 0.1, 0.1}"/>
<define name="USE_ADAPTIVE" value="TRUE"/>
<define name="ADAPTIVE_MU" value="0.0001"/>
<define name="WLS_PRIORITIES" value="{1000, 1000, 1, 100}"/>
</section>

<section name="GUIDANCE_V" prefix="GUIDANCE_V_">
<define name="HOVER_KP" value="283"/>
<define name="HOVER_KD" value="82"/>
<define name="HOVER_KI" value="20"/>
<define name="NOMINAL_HOVER_THROTTLE" value="0.655"/>
<define name="ADAPT_THROTTLE_ENABLED" value="TRUE"/>
</section>

<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="MAX_BANK" value="20" unit="deg"/>
<define name="REF_MAX_SPEED" value="2" unit="m/s"/>
<define name="PGAIN" value="79"/>
<define name="DGAIN" value="100"/>
<define name="IGAIN" value="30"/>
</section>

<section PREFIX="ONELOOP_ANDI_" name="ONELOOP_ANDI">
<define name = "G1_ROLL" value = "{20.0f , -20.0f, -20.0f, 20.0f , 0.0f, 0.0f }"/>
<define name = "G1_PITCH" value = "{10.0f , 10.0f , -10.0f, -10.0f, 0.0f, 0.0f }"/>
<define name = "G1_YAW" value = "{-1.0f , 1.0f , -1.0f , 1.0f , 0.0f, 0.0f }"/>
<define name = "G1_THRUST" value = "{-.4f , -.4f , -.4f , -.4f , 0.0f, 0.0f }"/>
<define name = "G1_ZERO" value = "{0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }"/>
<define name = "G2" value = "{0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}"/>
<define name = "MAX_R" value = "120.0" unit="deg/s"/>
<define name = "FILT_CUTOFF" value = "1.0" />
<define name = "FILT_CUTOFF_ACC" value = "1.0" />
<define name = "FILT_CUTOFF_VEL" value = "10.0"/>
<define name = "FILT_CUTOFF_POS" value = "10.0"/>
<define name = "ESTIMATION_FILT_CUTOFF" value = "3.2" />
<define name = "FILT_CUTOFF_P" value = "5.0" />
<define name = "FILT_CUTOFF_Q" value = "5.0" />
<define name = "FILT_CUTOFF_R" value = "5.0" />
<define name = "FILT_CUTOFF_RDOT" value = "0.5" />
<define name = "FILTER_YAW_RATE" value = "TRUE"/>
<define name = "ACT_DYN" value = "{50.0f, 50.0f, 50.0f, 50.0f, 0.0f,0.0f}" />
<define name = "ACT_IS_SERVO" value = "{0, 0, 0, 0, 0, 0}" />
<define name = "ACT_MAX" value = "{9600.0f, 9600.0f, 9600.0f, 9600.0f, M_PI_4, M_PI_4}"/>
<define name = "ACT_MIN" value = "{0.0f , 0.0f, 0.0f, 0.0f, -M_PI_4, -M_PI_4}"/>
<define name = "ACT_MAX_NORM" value = "{1.0f , 1.0f, 1.0f, 1.0f, 1.0f, 1.0f}"/>
<define name = "ACT_MIN_NORM" value = "{0.0f , 0.0f, 0.0f, 0.0f, -1.0f, -1.0f}"/>
<define name = "DEBUG_MODE" value = "FALSE"/>
<define name = "AC_HAS_PUSHER" value = "FALSE"/>
<define name = "WV" value = "{1.0f, 1.0f, 1.0f, 1000.0f, 1000.0f, 100.0f}"/>
<define name = "WU" value = "{3.0f, 3.0f, 3.0f, 3.0f, 2.0f, 2.0f}"/>
<define name = "U_PREF" value = "{0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}"/>
<define name = "MAX_AIRSPEED" value = "5.0f"/>
</section>

<section name="NAVIGATION" prefix="NAV_">
<define name="CLIMB_VSPEED" value="2.5"/>
<define name="DESCEND_VSPEED" value="-1.0"/>
</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="bebop" type="string"/>
<define name="COMMANDS_NB" value="4"/>
<define name="NO_MOTOR_MIXING" value="TRUE"/>
</section>

<section name="AUTOPILOT">
<define name="MODE_STARTUP" value="AP_MODE_ATTITUDE_DIRECT"/>
<define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
<define name="MODE_AUTO1" value="AP_MODE_MODULE"/>
<define name="MODE_AUTO2" value="AP_MODE_NAV"/>
<define name="NO_RC_THRUST_LIMIT" value="TRUE"/>
</section>

<section name="BAT">
<define name="MILLIAMP_AT_FULL_THROTTLE" value="8700"/>
<define name="CATASTROPHIC_BAT_LEVEL" value="9.9" unit="V"/>
<define name="CRITIC_BAT_LEVEL" value="11.0" unit="V"/>
<define name="LOW_BAT_LEVEL" value="11.1" unit="V"/>
<define name="MAX_BAT_LEVEL" value="12.4" unit="V"/>
</section>

</airframe>