[generator] add support for matrix and struct in airframe (#3228)

* [generator] add support for matrix and struct in airframe

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

* update calibration tool output
This commit is contained in:
Gautier Hattenberger
2024-01-09 10:46:47 +01:00
committed by GitHub
parent 175e3e018c
commit 1b345804b4
19 changed files with 285 additions and 99 deletions
+12 -8
View File
@@ -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_">
@@ -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}"/>
+12 -8
View File
@@ -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}"/>
@@ -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}"/>
+12 -8
View File
@@ -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}"/>
@@ -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 -->
+17 -6
View File
@@ -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"/>
@@ -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 -->
+44 -8
View File
@@ -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"/>
@@ -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 -->
+20 -5
View File
@@ -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"/>
@@ -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 -->
@@ -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 -->
+6 -4
View File
@@ -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 -->
@@ -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 -->
+7 -1
View File
@@ -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)*>
@@ -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