Skip to content

Commit

Permalink
[generator] add support for matrix and struct in airframe (#3228)
Browse files Browse the repository at this point in the history
* [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
  • Loading branch information
gautierhattenberger committed Jan 9, 2024
1 parent 175e3e0 commit 1b34580
Show file tree
Hide file tree
Showing 19 changed files with 285 additions and 99 deletions.
20 changes: 12 additions & 8 deletions conf/airframes/ENAC/hybrid/cyfoam.xml
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,12 @@

<section name="CTRL_EFF_SCHEDULING" prefix="FWD_">
<!-- control effectiveness, scaled by INDI_G_SCALING (1000)-->
<define name="G1_ROLL" value="{ 0, 0, -13.0, 13.0}"/>
<define name="G1_PITCH" value="{-12.0, 12.0, 0, 0}"/>
<define name="G1_YAW" value="{-20.0, -20.0, 0.0, 0.0}"/>
<define name="G1_THRUST" value="{ 0, 0, -0.9, -0.9}"/>
<define name="G1" type="matrix">
<field name="ROLL" value="{ 0, 0, -13.0, 13.0}"/>
<field name="PITCH" value="{-12.0, 12.0, 0, 0}"/>
<field name="YAW" value="{-20.0, -20.0, 0.0, 0.0}"/>
<field name="THRUST" value="{ 0, 0, -0.9, -0.9}"/>
</define>
</section>

<section name="STABILIZATION_ATTITUDE" prefix="STABILIZATION_ATTITUDE_">
Expand All @@ -180,10 +182,12 @@

<section name="STABILIZATION_ATTITUDE_INDI" prefix="STABILIZATION_INDI_">
<!-- control effectiveness, scaled by INDI_G_SCALING (1000)-->
<define name="G1_ROLL" value="{ 0, 0, -13.3, 13.3}"/>
<define name="G1_PITCH" value="{-2.1, 2.1, 0, 0}"/>
<define name="G1_YAW" value="{-2.0, -2.0, 0.0, 0.0}"/>
<define name="G1_THRUST" value="{ 0, 0, -1.1, -1.1}"/>
<define name="G1" type="matrix">
<field name="ROLL" value="{ 0, 0, -13.3, 13.3}"/>
<field name="PITCH" value="{-2.1, 2.1, 0, 0}"/>
<field name="YAW" value="{-2.0, -2.0, 0.0, 0.0}"/>
<field name="THRUST" value="{ 0, 0, -1.1, -1.1}"/>
</define>
<!--Counter torque effect of spinning up a rotor-->
<define name="G2" value="{0, 0, 0, 0}"/>

Expand Down
20 changes: 12 additions & 8 deletions conf/airframes/ENAC/hybrid/falcon_v1.xml
Original file line number Diff line number Diff line change
Expand Up @@ -184,10 +184,12 @@

<section name="EFF_SCHEDULING" prefix="FWD_">
<!-- control effectiveness, scaled by INDI_G_SCALING (1000)-->
<define name="G1_ROLL" value="{ -9.0, -9.0, 9.0, 9.0}"/>
<define name="G1_PITCH" value="{ -9.0, 9.0, 9.0, -9.0}"/>
<define name="G1_YAW" value="{ -7.0, 7.0, -7.0, 7.0}"/>
<define name="G1_THRUST" value="{ -0.6, -0.6, -0.6, -0.6}"/>
<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}"/>
Expand All @@ -198,10 +200,12 @@
<section name="STABILIZATION_ATTITUDE_INDI" prefix="STABILIZATION_INDI_">
<!-- UR BR BL UL-->
<!-- control effectiveness, scaled by INDI_G_SCALING (1000)-->
<define name="G1_ROLL" value="{ -20.0, -20.0, 20.0, 20.0}"/>
<define name="G1_PITCH" value="{ -19.5, 19.5, 19.5, -19.5}"/>
<define name="G1_YAW" value="{ -7.0, 7.0, -7.0, 7.0}"/>
<define name="G1_THRUST" value="{ -0.85, -0.85, -0.85, -0.85}"/>
<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}"/>
Expand Down
20 changes: 12 additions & 8 deletions conf/airframes/ENAC/hybrid/falcon_v2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -208,19 +208,23 @@

<section name="EFF_SCHEDULING" prefix="FWD_">
<!-- control effectiveness, scaled by INDI_G_SCALING (1000)-->
<define name="G1_ROLL" value="{ -9.0, -9.0, 9.0, 9.0, 0.0, 0.0}"/>
<define name="G1_PITCH" value="{ -20.0, 20.0, 20.0, -20.0, 15.0, -15.0}"/> <!-- 12 , -12 -->
<define name="G1_YAW" value="{ -3.0, 3.0, -3.0, 3.0, -10.0, -10.0}"/> <!-- -20 -20 -->
<define name="G1_THRUST" value="{ -0.6, -0.6, -0.6, -0.6, 0.0, 0.0}"/>
<define name="G1" type="matrix">
<field value="{ -9.0, -9.0, 9.0, 9.0, 0.0, 0.0}"/>
<field value="{ -20.0, 20.0, 20.0, -20.0, 15.0, -15.0}"/> <!-- 12 , -12 -->
<field value="{ -3.0, 3.0, -3.0, 3.0, -10.0, -10.0}"/> <!-- -20 -20 -->
<field value="{ -0.6, -0.6, -0.6, -0.6, 0.0, 0.0}"/>
</define>
</section>

<section name="STABILIZATION_ATTITUDE_INDI" prefix="STABILIZATION_INDI_">
<!-- UR BR BL UL-->
<!-- control effectiveness, scaled by INDI_G_SCALING (1000)-->
<define name="G1_ROLL" value="{ -9.0, -9.0, 9.0, 9.0, 0.0, 0.0}"/>
<define name="G1_PITCH" value="{ -19.5, 19.5, 19.5, -19.5, 0.0, 0.0}"/>
<define name="G1_YAW" value="{ -3.0, 3.0, -3.0, 3.0, 0.0, 0.0}"/>
<define name="G1_THRUST" value="{ -0.85, -0.85, -0.85, -0.85, 0.0, 0.0}"/>
<define name="G1" type="matrix">
<field value="{ -9.0, -9.0, 9.0, 9.0, 0.0, 0.0}"/>
<field value="{ -19.5, 19.5, 19.5, -19.5, 0.0, 0.0}"/>
<field value="{ -3.0, 3.0, -3.0, 3.0, 0.0, 0.0}"/>
<field value="{ -0.85, -0.85, -0.85, -0.85, 0.0, 0.0}"/>
</define>

<!--Counter torque effect of spinning up a rotor-->
<define name="G2" value="{0, 0, 0, 0, 0, 0}"/>
Expand Down
10 changes: 6 additions & 4 deletions conf/airframes/ENAC/quadrotor/anton_indi_aruco.xml
Original file line number Diff line number Diff line change
Expand Up @@ -182,10 +182,12 @@

<!-- Full INDI -->
<!-- control effectiveness -->
<define name="G1_ROLL" value="{-40 , -40, 40 , 40 }"/>
<define name="G1_PITCH" value="{40 , -40, -40 , 40 }"/>
<define name="G1_YAW" value="{5, -5, 5, -5}"/>
<define name="G1_THRUST" value="{-1.5, -1.5, -1.5, -1.5}"/>
<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 -->
Expand Down
23 changes: 17 additions & 6 deletions conf/airframes/ENAC/quadrotor/cobra.xml
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,17 @@
</command_laws>

<section name="IMU" prefix="IMU_">
<define name="ACCEL_CALIB" value="{{.abi_id=9, .calibrated={.neutral=true, .scale=true},.neutral={-12,23,29}, .scale={{65369,62166,40813},{28737,25351,16753}}}}"/>
<!--define name="MAG_CALIB" value="{{.abi_id=3, .calibrated={.neutral=true, .scale=true},.neutral={-833,-5969,-931}, .scale={{22816,38799,15650},{34941,60353,24187}}}}"/-->
<define name="ACCEL_CALIB" type="array">
<field type="struct">
<field name="abi_id" value="9"/>
<field name="calibrated" type="struct">
<field name="neutral" value="true"/>
<field name="scale" value="true"/>
</field>
<field name="neutral" value="-12,23,29" type="int[]"/>
<field name="scale" value="{{65369,62166,40813},{28737,25351,16753}}"/>
</field>
</define>

<define name="BODY_TO_IMU_PHI" value="0." unit="deg"/>
<define name="BODY_TO_IMU_THETA" value="0." unit="deg"/>
Expand Down Expand Up @@ -143,10 +152,12 @@

<!-- Full INDI -->
<!-- control effectiveness -->
<define name="G1_ROLL" value="{ -20.0, -20.0, 20.0, 20.0 }"/>
<define name="G1_PITCH" value="{ 20.0, -20.0, -20.0, 20.0 }"/>
<define name="G1_YAW" value="{ 3, -3, 3, -3 }"/>
<define name="G1_THRUST" value="{ -1., -1., -1., -1.}"/>
<define name="G1" type="matrix">
<field value="{ -20.0, -20.0, 20.0, 20.0 }"/>
<field value="{ 20.0, -20.0, -20.0, 20.0 }"/>
<field value="{ 3., -3., 3., -3. }"/>
<field value="{ -1., -1., -1., -1.}"/>
</define>
<!--Counter torque effect of spinning up a rotor-->
<define name="G2" value="{80, -80, 80, -80.0 }"/>
<!-- first order actuator dynamics -->
Expand Down
52 changes: 44 additions & 8 deletions conf/airframes/ENAC/quadrotor/cobraV2.xml
Original file line number Diff line number Diff line change
Expand Up @@ -98,10 +98,44 @@
</command_laws>

<section name="IMU" prefix="IMU_">
<define name="ACCEL_CALIB" value="{{.abi_id=24, .calibrated={.neutral=true, .scale=true, .rotation=true},.neutral={-10,-47,-130}, .scale={{36821,8142,5741},{60003,13319,9358}}, TAWAKIV2_IMU_ROT}}"/>
<define name="GYRO_CALIB" value="{{.abi_id=24, .calibrated={.neutral=false, .scale=false, .rotation=true}, TAWAKIV2_IMU_ROT}}"/>
<define name="MAG_CALIB" value="{{.abi_id=3, .calibrated={.neutral=true, .scale=true, .rotation=true},.neutral={791,-190,2545}, .scale={{26437,35997,25098},{35181,44272,29767}}, TAWAKIV2_MAG_ROT}}"/>

<define name="ACCEL_CALIB" type="array">
<field type="struct">
<field name="abi_id" value="24"/>
<field name="calibrated" type="struct">
<field name="neutral" value="true"/>
<field name="scale" value="true"/>
<field name="rotation" value="true"/>
</field>
<field name="neutral" value="-10,-47,-130" type="int[]"/>
<field name="scale" value="{{36821,8142,5741},{60003,13319,9358}}"/>
<field value="TAWAKIV2_IMU_ROT"/>
</field>
</define>
<define name="GYRO_CALIB" type="array">
<field type="struct">
<field name="abi_id" value="24"/>
<field name="calibrated" type="struct">
<field name="neutral" value="false"/>
<field name="scale" value="false"/>
<field name="rotation" value="true"/>
</field>
<field value="TAWAKIV2_IMU_ROT"/>
</field>
</define>
<define name="MAG_CALIB" type="array">
<field type="struct">
<field name="abi_id" value="3"/>
<field name="calibrated" type="struct">
<field name="neutral" value="true"/>
<field name="scale" value="true"/>
<field name="rotation" value="true"/>
</field>
<field name="neutral" value="791,-190,2545" type="int[]"/>
<field name="scale" value="{{26437,35997,25098},{35181,44272,29767}}"/>
<field value="TAWAKIV2_MAG_ROT"/>
</field>
</define>

<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="180." unit="deg"/>
Expand Down Expand Up @@ -140,10 +174,12 @@

<!-- Full INDI -->
<!-- control effectiveness -->
<define name="G1_ROLL" value="{ -20.0, -20.0, 20.0, 20.0 }"/>
<define name="G1_PITCH" value="{ 20.0, -20.0, -20.0, 20.0 }"/>
<define name="G1_YAW" value="{ 3, -3, 3, -3 }"/>
<define name="G1_THRUST" value="{ -1., -1., -1., -1.}"/>
<define name="G1" type="matrix">
<field value="{ -20.0, -20.0, 20.0, 20.0 }"/>
<field value="{ 20.0, -20.0, -20.0, 20.0 }"/>
<field value="{ 3., -3., 3., -3. }"/>
<field value="{ -1., -1., -1., -1.}"/>
</define>
<!--Counter torque effect of spinning up a rotor-->
<define name="G2" value="{80, -80, 80, -80.0 }"/>
<!-- first order actuator dynamics -->
Expand Down
25 changes: 20 additions & 5 deletions conf/airframes/ENAC/quadrotor/maya_indoor.xml
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,20 @@
</command_laws>

<section name="IMU" prefix="IMU_">
<define name="ACCEL_CALIB" value="{{.abi_id=9, .calibrated={.neutral=true, .scale=true},.neutral={18,45,-22}, .scale={{47720,3841,3732},{18911,1570,1517}}}}"/>
<define name="ACCEL_CALIB" type="array">
<field type="struct">
<field name="abi_id" value="9"/>
<field name="calibrated" type="struct">
<field name="neutral" value="true"/>
<field name="scale" value="true"/>
</field>
<field name="neutral" value="18,45,-22" type="int[]"/>
<field name="scale" type="matrix">
<field value="47720,3841,3732" type="int[]"/>
<field value="18911,1570,1517" type="int[]"/>
</field>
</field>
</define>

<define name="BODY_TO_IMU_PHI" value="0." unit="deg"/>
<define name="BODY_TO_IMU_THETA" value="0." unit="deg"/>
Expand Down Expand Up @@ -134,10 +147,12 @@

<!-- Full INDI -->
<!-- control effectiveness -->
<define name="G1_ROLL" value="{ -20.0, -20.0, 20.0, 20.0 }"/>
<define name="G1_PITCH" value="{ 20.0, -20.0, -20.0, 20.0 }"/>
<define name="G1_YAW" value="{ 3, -3, 3, -3 }"/>
<define name="G1_THRUST" value="{ -1., -1., -1., -1.}"/>
<define name="G1" type="matrix">
<field value="{ -20.0, -20.0, 20.0, 20.0 }"/>
<field value="{ 20.0, -20.0, -20.0, 20.0 }"/>
<field value="{ 3., -3., 3., -3. }"/>
<field value="{ -1., -1., -1., -1.}"/>
</define>
<!--Counter torque effect of spinning up a rotor-->
<define name="G2" value="{80, -80, 80, -80.0 }"/>
<!-- first order actuator dynamics -->
Expand Down
10 changes: 6 additions & 4 deletions conf/airframes/ENAC/quadrotor/maya_outdoor.xml
Original file line number Diff line number Diff line change
Expand Up @@ -165,10 +165,12 @@

<!-- Full INDI -->
<!-- control effectiveness -->
<define name="G1_ROLL" value="{ -20.0, -20.0, 20.0, 20.0 }"/>
<define name="G1_PITCH" value="{ 20.0, -20.0, -20.0, 20.0 }"/>
<define name="G1_YAW" value="{ 3, -3, 3, -3 }"/>
<define name="G1_THRUST" value="{ -1., -1., -1., -1.}"/>
<define name="G1" type="matrix">
<field value="{ -20.0, -20.0, 20.0, 20.0 }"/>
<field value="{ 20.0, -20.0, -20.0, 20.0 }"/>
<field value="{ 3, -3, 3, -3 }"/>
<field value="{ -1., -1., -1., -1.}"/>
</define>
<!--Counter torque effect of spinning up a rotor-->
<define name="G2" value="{80, -80, 80, -80.0 }"/>
<!-- first order actuator dynamics -->
Expand Down
10 changes: 6 additions & 4 deletions conf/airframes/ENAC/quadrotor/robobee.xml
Original file line number Diff line number Diff line change
Expand Up @@ -195,10 +195,12 @@

<!-- Full INDI -->
<!-- control effectiveness -->
<define name="G1_ROLL" value="{ -20.0, -20.0, 20.0, 20.0 }"/>
<define name="G1_PITCH" value="{ 20.0, -20.0, -20.0, 20.0 }"/>
<define name="G1_YAW" value="{ 3, -3, 3, -3 }"/>
<define name="G1_THRUST" value="{ -0.5, -0.5, -0.5, -0.5}"/>
<define name="G1" type="matrix">
<field value="{ -20.0, -20.0, 20.0, 20.0 }"/>
<field value="{ 20.0, -20.0, -20.0, 20.0 }"/>
<field value="{ 3, -3, 3, -3 }"/>
<field value="{ -0.5, -0.5, -0.5, -0.5}"/>
</define>
<!--Counter torque effect of spinning up a rotor-->
<define name="G2" value="{100, -100, 100, -100.0 }"/>
<!-- first order actuator dynamics -->
Expand Down
10 changes: 6 additions & 4 deletions conf/airframes/ENAC/quadrotor/ulysse_indi.xml
Original file line number Diff line number Diff line change
Expand Up @@ -176,10 +176,12 @@

<!-- Full INDI -->
<!-- control effectiveness -->
<define name="G1_ROLL" value="{-40 , -40, 40 , 40 }"/>
<define name="G1_PITCH" value="{40 , -40, -40 , 40 }"/>
<define name="G1_YAW" value="{5, -5, 5, -5}"/>
<define name="G1_THRUST" value="{-1.5, -1.5, -1.5, -1.5}"/>
<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 -->
Expand Down
8 changes: 7 additions & 1 deletion conf/airframes/airframe.dtd
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
<!ELEMENT copy EMPTY>
<!ELEMENT curve EMPTY>
<!ELEMENT let EMPTY>
<!ELEMENT define EMPTY>
<!ELEMENT define (field)*>
<!ELEMENT field (field)*>
<!ELEMENT modules (module)*>
<!ELEMENT configure EMPTY>
<!ELEMENT firmware (target|module|autopilot|configure|define|comment)*>
Expand Down Expand Up @@ -105,6 +106,11 @@ integer CDATA #IMPLIED
type CDATA #IMPLIED
description CDATA #IMPLIED>

<!ATTLIST field
name CDATA #IMPLIED
value CDATA #IMPLIED
type CDATA #IMPLIED>

<!ATTLIST configure
name CDATA #REQUIRED
value CDATA #REQUIRED
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,9 @@ bool indi_thrust_increment_set = false;

float g1g2_pseudo_inv[INDI_NUM_ACT][INDI_OUTPUTS];
float g2[INDI_NUM_ACT] = STABILIZATION_INDI_G2; //scaled by INDI_G_SCALING
#ifdef STABILIZATION_INDI_G1
float g1[INDI_OUTPUTS][INDI_NUM_ACT] = STABILIZATION_INDI_G1;
#else // old defines TODO remove
#if INDI_OUTPUTS == 5
float g1[INDI_OUTPUTS][INDI_NUM_ACT] = {STABILIZATION_INDI_G1_ROLL,
STABILIZATION_INDI_G1_PITCH, STABILIZATION_INDI_G1_YAW,
Expand All @@ -265,6 +268,7 @@ float g1[INDI_OUTPUTS][INDI_NUM_ACT] = {STABILIZATION_INDI_G1_ROLL,
STABILIZATION_INDI_G1_PITCH, STABILIZATION_INDI_G1_YAW, STABILIZATION_INDI_G1_THRUST
};
#endif
#endif

float g1g2[INDI_OUTPUTS][INDI_NUM_ACT];
float g1_est[INDI_OUTPUTS][INDI_NUM_ACT];
Expand Down
8 changes: 8 additions & 0 deletions sw/airborne/modules/ctrl/eff_scheduling_cyfoam.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,19 +37,27 @@
#error "You need to define an RC channel to switch between simple and advanced scheduling"
#endif

#ifdef FWD_G1
static float g1g2_forward[INDI_OUTPUTS][INDI_NUM_ACT] = FWD_G1;
#else
static float g1g2_forward[INDI_OUTPUTS][INDI_NUM_ACT] = {
FWD_G1_ROLL,
FWD_G1_PITCH,
FWD_G1_YAW,
FWD_G1_THRUST
};
#endif

#ifdef STABILIZATION_INDI_G1
static float g1g2_hover[INDI_OUTPUTS][INDI_NUM_ACT] = STABILIZATION_INDI_G1;
#else
static float g1g2_hover[INDI_OUTPUTS][INDI_NUM_ACT] = {
STABILIZATION_INDI_G1_ROLL,
STABILIZATION_INDI_G1_PITCH,
STABILIZATION_INDI_G1_YAW,
STABILIZATION_INDI_G1_THRUST
};
#endif

static float g2_both[INDI_NUM_ACT] = STABILIZATION_INDI_G2; //scaled by INDI_G_SCALING

Expand Down
4 changes: 4 additions & 0 deletions sw/airborne/modules/ctrl/eff_scheduling_falcon.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,16 @@
#define EFF_SCHEDULING_FALCON_LOW_AIRSPEED 8.0f
#endif

#ifdef STABILIZATION_INDI_G1
static float g1g2_hover[INDI_OUTPUTS][INDI_NUM_ACT] = STABILIZATION_INDI_G1;
#else
static float g1g2_hover[INDI_OUTPUTS][INDI_NUM_ACT] = {
STABILIZATION_INDI_G1_ROLL,
STABILIZATION_INDI_G1_PITCH,
STABILIZATION_INDI_G1_YAW,
STABILIZATION_INDI_G1_THRUST
};
#endif

void eff_scheduling_falcon_init(void)
{
Expand Down

0 comments on commit 1b34580

Please sign in to comment.