Showing with 755 additions and 220 deletions.
  1. +1 −1 conf/airframes/examples/cube_orange.xml
  2. +1 −1 conf/airframes/tudelft/bebop2_indi_convergence.xml
  3. +1 −1 conf/airframes/tudelft/cyfoam.xml
  4. +1 −1 conf/airframes/tudelft/disco_rotorcraft_indi.xml
  5. +2 −1 conf/airframes/tudelft/nederdrone4.xml
  6. +1 −1 conf/airframes/tudelft/nederdrone6.xml
  7. +1 −1 conf/airframes/tudelft/nederdrone7.xml
  8. +1 −1 conf/airframes/tudelft/nederdrone8.xml
  9. +1 −2 conf/airframes/tudelft/rot_wing_25kg.xml
  10. +4 −3 conf/modules/guidance_indi_hybrid.xml
  11. +27 −0 conf/modules/guidance_indi_hybrid_quadplane.xml
  12. +24 −0 conf/modules/guidance_indi_hybrid_tailsitter.xml
  13. +11 −1 conf/modules/nav_hybrid.xml
  14. +38 −0 conf/modules/wing_rotation_controller_servo.xml
  15. +46 −180 sw/airborne/firmwares/rotorcraft/guidance/guidance_indi_hybrid.c
  16. +10 −5 sw/airborne/firmwares/rotorcraft/guidance/guidance_indi_hybrid.h
  17. +168 −0 sw/airborne/firmwares/rotorcraft/guidance/guidance_indi_hybrid_quadplane.c
  18. +5 −6 ...mwares/rotorcraft/guidance/{guidance_indi_hybrid_quadplanes.h → guidance_indi_hybrid_quadplane.h}
  19. +110 −0 sw/airborne/firmwares/rotorcraft/guidance/guidance_indi_hybrid_tailsitter.c
  20. +5 −5 ...ares/rotorcraft/guidance/{guidance_indi_hybrid_tailsitters.h → guidance_indi_hybrid_tailsitter.h}
  21. +1 −1 sw/airborne/modules/meteo/ekf_aw_wrapper.c
  22. +16 −8 sw/airborne/modules/nav/nav_rotorcraft_hybrid.c
  23. +2 −1 sw/airborne/modules/nav/nav_rotorcraft_hybrid.h
  24. +222 −0 sw/airborne/modules/rot_wing_drone/wing_rotation_controller_servo.c
  25. +56 −0 sw/airborne/modules/rot_wing_drone/wing_rotation_controller_servo.h
2 changes: 1 addition & 1 deletion conf/airframes/examples/cube_orange.xml
Expand Up @@ -109,7 +109,7 @@
<configure name="USE_TFMINI_AGL" value="FALSE"/>
</module-->

<module name="guidance" type="indi_hybrid">
<module name="guidance" type="indi_hybrid_tailsitter">
<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"/>
Expand Down
2 changes: 1 addition & 1 deletion conf/airframes/tudelft/bebop2_indi_convergence.xml
Expand Up @@ -34,7 +34,7 @@
<module name="gps" type="ublox"/>
<module name="gps" type="ubx_ucenter"/>
<module name="stabilization" type="indi_simple"/>
<module name="guidance" type="indi_hybrid"/>
<module name="guidance" type="indi_hybrid_tailsitter"/>

<module name="ins" type="ekf2"/>
<!--<module name="ahrs" type="int_cmpl_quat">-->
Expand Down
2 changes: 1 addition & 1 deletion conf/airframes/tudelft/cyfoam.xml
Expand Up @@ -292,7 +292,7 @@
<define name="WLS_N_U" value="4" />
<define name="WLS_N_V" value="4" />
</module>
<module name="guidance" type="indi_hybrid">
<module name="guidance" type="indi_hybrid_tailsitter">
<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"/>
Expand Down
2 changes: 1 addition & 1 deletion conf/airframes/tudelft/disco_rotorcraft_indi.xml
Expand Up @@ -60,7 +60,7 @@
<define name="WLS_N_V" value="4"/>
<configure name="INDI_NUM_ACT" value="3"/>
</module>
<module name="guidance" type="indi_hybrid"/>
<module name="guidance" type="indi_hybrid_tailsitter"/>
<!--<module name="sonar_bebop">
<define name="USE_SONAR"/>
<define name="SENSOR_SYNC_SEND_SONAR"/>
Expand Down
3 changes: 2 additions & 1 deletion conf/airframes/tudelft/nederdrone4.xml
Expand Up @@ -150,7 +150,8 @@
<define name="GUIDANCE_H_USE_REF" value="FALSE"/>
</module>

<module name="guidance" type="indi_hybrid">
<module name="guidance" type="indi_hybrid_tailsitter">
<define name="GUIDANCE_INDI_HYBRID_USE_WLS" value="TRUE"/>
<define name="GUIDANCE_INDI_RC_DEBUG" value="FALSE"/>
<define name="GUIDANCE_INDI_POS_GAIN" value="0.3"/>
<define name="GUIDANCE_INDI_SPEED_GAIN" value="0.5"/>
Expand Down
2 changes: 1 addition & 1 deletion conf/airframes/tudelft/nederdrone6.xml
Expand Up @@ -138,7 +138,7 @@
<define name="GUIDANCE_H_USE_REF" value="FALSE"/>
</module>

<module name="guidance" type="indi_hybrid">
<module name="guidance" type="indi_hybrid_tailsitter">
<define name="GUIDANCE_INDI_RC_DEBUG" value="FALSE"/>
<define name="GUIDANCE_INDI_POS_GAIN" value="0.3"/>
<define name="GUIDANCE_INDI_SPEED_GAIN" value="0.5"/>
Expand Down
2 changes: 1 addition & 1 deletion conf/airframes/tudelft/nederdrone7.xml
Expand Up @@ -138,7 +138,7 @@
<define name="GUIDANCE_H_USE_REF" value="FALSE"/>
</module>

<module name="guidance" type="indi_hybrid">
<module name="guidance" type="indi_hybrid_tailsitter">
<define name="GUIDANCE_INDI_RC_DEBUG" value="FALSE"/>
<define name="GUIDANCE_INDI_POS_GAIN" value="0.3"/>
<define name="GUIDANCE_INDI_SPEED_GAIN" value="0.5"/>
Expand Down
2 changes: 1 addition & 1 deletion conf/airframes/tudelft/nederdrone8.xml
Expand Up @@ -138,7 +138,7 @@
<define name="GUIDANCE_H_USE_REF" value="FALSE"/>
</module>

<module name="guidance" type="indi_hybrid">
<module name="guidance" type="indi_hybrid_tailsitter">
<define name="GUIDANCE_INDI_RC_DEBUG" value="FALSE"/>
<define name="GUIDANCE_INDI_POS_GAIN" value="0.3"/>
<define name="GUIDANCE_INDI_SPEED_GAIN" value="0.5"/>
Expand Down
3 changes: 1 addition & 2 deletions conf/airframes/tudelft/rot_wing_25kg.xml
Expand Up @@ -102,7 +102,7 @@

<module name="ctrl_eff_sched_rot_wing"/>

<module name="guidance" type="indi_hybrid"/>
<module name="guidance" type="indi_hybrid_quadplane"/>
<module name="nav_hybrid"/>

<!-- Other -->
Expand Down Expand Up @@ -409,7 +409,6 @@
<define name="PITCH_LIFT_EFF" value="0.0"/>
<define name="ZERO_AIRSPEED" value="TRUE"/>

<define name="QUADPLANE" value="TRUE"/>
<define name="THRUST_Z_EFF" value="-0.0023"/>
<define name="THRUST_X_EFF" value="0.00055"/>

Expand Down
7 changes: 4 additions & 3 deletions conf/modules/guidance_indi_hybrid.xml
Expand Up @@ -3,7 +3,9 @@
<module name="guidance_indi_hybrid" dir="guidance" task="control">
<doc>
<description>
Guidance controller for hybrids using INDI
Common guidance controller code for hybrids using INDI: in your airframe file include one of the options:
- guidance_indi_hybid_tailsitter
- guidance_indi_hybid_quadplane
</description>
<section name="GUIDANCE_INDI_HYBRID" prefix="GUIDANCE_INDI_HYBRID_">
<define name="USE_WLS" value="FALSE|TRUE" description="use WLS allocation instead of matrix inversion (default: FALSE)"/>
Expand Down Expand Up @@ -31,14 +33,13 @@
</settings>
<dep>
<depends>@navigation,guidance_rotorcraft,wls</depends>
<provides>guidance,attitude_command</provides>
<suggests>guidance_indi_hybrid_tailsitter</suggests>
</dep>
<header>
<file name="guidance_indi_hybrid.h"/>
</header>
<init fun="guidance_indi_init()"/>
<init fun="guidance_indi_enter()"/>
<!--<periodic fun="guidance_indi_propagate_filters()" freq="PERIODIC_FREQUENCY" autorun="TRUE"/>-->
<makefile target="ap|nps" firmware="rotorcraft">
<file name="guidance_indi_hybrid.c" dir="$(SRC_FIRMWARE)/guidance"/>
<define name="GUIDANCE_INDI_HYBRID" value="TRUE"/>
Expand Down
27 changes: 27 additions & 0 deletions conf/modules/guidance_indi_hybrid_quadplane.xml
@@ -0,0 +1,27 @@
<!DOCTYPE module SYSTEM "module.dtd">

<module name="guidance_indi_hybrid_quadplane" dir="guidance" task="control">
<doc>
<description>
Guidance controller for hybrid quadplane vehicles
</description>
</doc>
<dep>
<depends>guidance_indi_hybrid</depends>
<conflicts>guidance_indi_hybrid_tailsitter</conflicts>
<provides>guidance,attitude_command</provides>
</dep>
<header>
<file name="guidance_indi_hybrid_quadplane.h"/>
</header>
<init fun="guidance_indi_quadplane_init()"/>
<periodic fun="guidance_indi_quadplane_propagate_filters()" freq="PERIODIC_FREQUENCY" autorun="TRUE"/>
<makefile target="ap|nps" firmware="rotorcraft">
<define name="GUIDANCE_INDI_HYBRID_USE_WLS" value="1"/>
<!-- Guidance actuators: (roll, pitch, thrust, push) for quadplanes -->
<define name="GUIDANCE_INDI_HYBRID_U" value="4"/>
<!-- Guidance control objectives: ax, ay, ay for quadplanes -->
<define name="GUIDANCE_INDI_HYBRID_V" value="3"/>
<file name="guidance_indi_hybrid_quadplane.c" dir="$(SRC_FIRMWARE)/guidance"/>
</makefile>
</module>
24 changes: 24 additions & 0 deletions conf/modules/guidance_indi_hybrid_tailsitter.xml
@@ -0,0 +1,24 @@
<!DOCTYPE module SYSTEM "module.dtd">

<module name="guidance_indi_hybrid_tailsitter" dir="guidance" task="control">
<doc>
<description>
Guidance controller for hybrid tailsitter vehicles
</description>
</doc>
<dep>
<depends>guidance_indi_hybrid</depends>
<conflicts>guidance_indi_hybrid_quadplane</conflicts>
<provides>guidance,attitude_command</provides>
</dep>
<header>
<file name="guidance_indi_hybrid_tailsitter.h"/>
</header>
<makefile target="ap|nps" firmware="rotorcraft">
<!-- Guidance actuators: (roll, pitch, thrust, push) for quadplanes -->
<define name="GUIDANCE_INDI_HYBRID_U" value="3"/>
<!-- Guidance control objectives: ax, ay, ay for quadplanes -->
<define name="GUIDANCE_INDI_HYBRID_V" value="3"/>
<file name="guidance_indi_hybrid_tailsitter.c" dir="$(SRC_FIRMWARE)/guidance"/>
</makefile>
</module>
12 changes: 11 additions & 1 deletion conf/modules/nav_hybrid.xml
Expand Up @@ -8,11 +8,19 @@
<section name="NAV_HYBRID" prefix="NAV_HYBRID_">
<define name="MAX_DECELERATION" value="1.0" description="Maximum deceleration in [m/s2] when arriving to hover at a WP"/>
</section>
<section name="GUIDANCE_INDI_HYBRID" prefix="GUIDANCE_INDI_">
<define name="MAX_AIRSPEED" value="15." description="maximum airspeed (required)"/>
<define name="NAV_SPEED_MARGIN" value="10." description="maximum commanded ground speed is MAX_AIRSPEED + NAV_SPEED_MARGIN"/>
<define name="GOTO_SPEED" value="nav_max_speed" description="maximum speed when flying goto/stay routines (default is max speed)"/>
<define name="NAV_LINE_DIST" value="50" description="distance coefficient for line routine"/>
<define name="NAV_CIRCLE_DIST" value="40" description="distance coefficient for circle routine"/>
</section>
</doc>
<settings>
<dl_settings>
<dl_settings NAME="nav_hybrid">
<dl_setting var="nav_max_speed" min="1.0" step="1.0" max="50.0" shortname="nav_max_speed"/>
<dl_setting var="nav_max_speed" min="1.0" step="1.0" max="50.0"/>
<dl_setting var="nav_hover_speed" min="0.1" step="0.1" max="10.0"/>
<dl_setting var="nav_max_deceleration_sp" min="0.5" step="0.1" max="10.0" shortname="max_deceleration" param="NAV_HYBRID_MAX_DECELERATION"/>
</dl_settings>
</dl_settings>
Expand All @@ -32,6 +40,8 @@
<define name="DOWNLINK_TRANSPORT" value="pprz_tp"/>
<define name="DOWNLINK_DEVICE" value="uart0"/>
<define name="USE_UART0"/>
<define name="GUIDANCE_INDI_HYBRID_U" value="3"/>
<define name="GUIDANCE_INDI_HYBRID_V" value="3"/>
</test>
</makefile>
</module>
38 changes: 38 additions & 0 deletions conf/modules/wing_rotation_controller_servo.xml
@@ -0,0 +1,38 @@
<!DOCTYPE module SYSTEM "module.dtd">
<module name="wing_rotation_controller_servo" dir="rot_wing_drone">
<doc>
<description>Module to control wing rotation servo command based on prefered angle setpoint</description>
<section name="WING_ROTATION" prefix="WING_ROTATION_CONTROLLER_">
<define name="POSITION_ADC_0" value="62930" description="Endpoint quad"/>
<define name="POSITION_ADC_90" value="41760" description="Endpoint wing"/>
<define name="DEADZONE_PPRZ_CMD" value="500" description="Make the servo not move"/>
<define name="P_GAIN" value="-50000" description="P-gain"/>
<define name="MAX_CMD" value="9600" description="Maximum rotation speed"/>
<define name="RESET_RADIO_CHANNEL" value="10" description="Radio channel to reset"/>
</section>
</doc>
<settings>
<dl_settings NAME="wing_rotation">
<dl_settings NAME="wing_rot">
<dl_setting MAX="90" MIN="0" STEP="1" VAR="wing_rotation_controller.wing_angle_deg_sp" shortname="wing_sp_deg"/>
<dl_setting MAX="1" MIN="0" STEP="1" VAR="wing_rotation_controller.airspeed_scheduling" shortname="airspeed_sched"/>
<dl_setting MAX="1" MIN="0" STEP="1" VAR="wing_rotation_controller.force_rotation_angle" shortname="force_skew"/>
<dl_setting MAX="0.01" MIN="0" STEP="0.0001" VAR="wing_rotation_controller.wing_rotation_first_order_dynamics" shortname="first_dyn"/>
<dl_setting MAX="0.01" MIN="0" STEP="0.0001" VAR="wing_rotation_controller.wing_rotation_second_order_dynamics" shortname="second_dyn"/>
</dl_settings>
</dl_settings>
</settings>
<header>
<file name="wing_rotation_controller_servo.h"/>
</header>
<init fun="wing_rotation_init()"/>
<periodic fun="wing_rotation_periodic()" freq="1.0"/>
<periodic fun="wing_rotation_event()"/>
<makefile>
<configure name="ADC_CHANNEL_WING_ROTATION_CONTROLLER_POSITION" default="ADC_5" case="lower|upper"/>
<define name="ADC_CHANNEL_WING_ROTATION_CONTROLLER_POSITION" value="$(ADC_CHANNEL_WING_ROTATION_CONTROLLER_POSITION_UPPER)"/>
<define name="USE_$(ADC_CHANNEL_WING_ROTATION_CONTROLLER_POSITION_UPPER)"/>
<define name="USE_WING_ROTATION_CONTROLLER_SERVO"/>
<file name="wing_rotation_controller_servo.c"/>
</makefile>
</module>