<!--
 This airframe is connected to the build server and is used for hardware testing.
 The hardware configuration is
 Powered via a plug 12V pack
 Lisa/L v1.1 board
 XBee connected to UART2 configured at 38400 (Configured for XBee API
 Booz2 v1.2
 -->
<airframe name="TestConfig">
    <firmware name="rotorcraft">
        <target name="ap" board="lisa_l_1.1">
            <!--define name="NO_RC_THRUST_LIMIT"/-->
            <subsystem name="radio_control" type="spektrum"/>
            <define name="RADIO_MODE" value="RADIO_AUX1"/>
            <define name="RADIO_KILL_SWITCH" value="RADIO_GEAR"/>
            <configure name="USE_SECONDARY_SPEKTRUM_RECEIVER" value="1"/>
        </target>

        <target name="nps" board="pc">
            <subsystem name="fdm"           type="jsbsim"/>
            <subsystem name="radio_control" type="ppm"/>
        </target>

        <subsystem name="telemetry"     type="xbee_api">
            <configure name="MODEM_BAUD" value="B38400"/>
        </subsystem>
        <subsystem name="motor_mixing"/>
        <subsystem name="actuators"     type="mkk"/>
        <subsystem name="imu"           type="aspirin_v1.5"/>
        <subsystem name="gps"           type="ublox">
            <configure name="GPS_BAUD"    value="B57600"/>
        </subsystem>
        <subsystem name="stabilization"   type="int_euler"/>
        <subsystem name="ahrs"            type="int_cmpl_quat"/>
        <subsystem name="ins"/>
    </firmware>

    <section name="ACTUATORS_MKK" prefix="ACTUATORS_MKK_">
        <define name="NB" value="4"/>
        <define name="ADDR" value="{ 0x52, 0x54, 0x56, 0x58 }"/>
    </section>

    <servos driver="Mkk">
        <servo name="FRONT"   no="0" min="0" neutral="2" max="210"/>
        <servo name="BACK"    no="1" min="0" neutral="2" max="210"/>
        <servo name="RIGHT"   no="2" min="0" neutral="2" max="210"/>
        <servo name="LEFT"    no="3" min="0" neutral="2" max="210"/>
    </servos>

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

    <section name="MIXING" prefix="MOTOR_MIXING_">
        <define name="TRIM_ROLL" value="0"/>
        <define name="TRIM_PITCH" value="0"/>
        <define name="TRIM_YAW" value="0"/>
        <define name="NB_MOTOR" value="4"/>
        <define name="SCALE" value="256"/>
        <define name="ROLL_COEF"   value="{    0,    0, -256,  256 }"/>
        <define name="PITCH_COEF"  value="{  256, -256,    0,    0 }"/>
        <define name="YAW_COEF"    value="{ -256, -256,  256,  256 }"/>
        <define name="THRUST_COEF" value="{  256,  256,  256,  256 }"/>
    </section>

    <command_laws>
      <call fun="motor_mixing_run(autopilot_motors_on,FALSE,values)"/>
      <set servo="FRONT"  value="motor_mixing.commands[0]"/>
      <set servo="BACK"   value="motor_mixing.commands[1]"/>
      <set servo="RIGHT"  value="motor_mixing.commands[2]"/>
      <set servo="LEFT"   value="motor_mixing.commands[3]"/>
    </command_laws>

    <section name="IMU" prefix="IMU_">
        <define name="GYRO_P_NEUTRAL" value="32581"/>
        <define name="GYRO_Q_NEUTRAL" value="32008"/>
        <define name="GYRO_R_NEUTRAL" value="33207"/>
        <define name="GYRO_P_SENS"    value=".903" integer="16"/>
        <define name="GYRO_Q_SENS"    value=".905" integer="16"/>
        <define name="GYRO_R_SENS"    value=".893" integer="16"/>
        <define name="GYRO_PQ_SENS"   value="0.0" integer="16"/>
        <define name="GYRO_PR_SENS"   value="0.0" integer="16"/>
        <define name="GYRO_QR_SENS"   value="0.0" integer="16"/>

        <define name="ACCEL_X_NEUTRAL" value="25950"/>
        <define name="ACCEL_Y_NEUTRAL" value="26351"/>
        <define name="ACCEL_Z_NEUTRAL" value="25696"/>
        <define name="ACCEL_X_SENS"    value="1.86342150011" integer="16"/>
        <define name="ACCEL_Y_SENS"    value="1.88378993899" integer="16"/>
        <define name="ACCEL_Z_SENS"    value="1.86557913201" integer="16"/>
        <define name="ACCEL_XY_SENS"   value="0.0" integer="16"/>
        <define name="ACCEL_XZ_SENS"   value="0.0" integer="16"/>
        <define name="ACCEL_YZ_SENS"   value="0.0" integer="16"/>

        <define name="MAG_X_NEUTRAL"   value="0"/>
        <define name="MAG_Y_NEUTRAL"   value="0"/>
        <define name="MAG_Z_NEUTRAL"   value="0"/>
        <define name="MAG_X_SENS"      value="1." integer="16"/>
        <define name="MAG_Y_SENS"      value="1." integer="16"/>
        <define name="MAG_Z_SENS"      value="1." 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="AUTOPILOT">
        <define name="MODE_AUTO1"  value="AP_MODE_ATTITUDE_DIRECT"/>
        <define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_Z_HOLD"/>
        <define name="MODE_AUTO2"  value="AP_MODE_HOVER_Z_HOLD"/>
    </section>

    <section name="BAT">
        <define name="CATASTROPHIC_BAT_LEVEL" value="12.4" unit="V"/>
        <define name="MAX_BAT_LEVEL" value="16.8" unit="V" />
        <define name="CRITIC_BAT_LEVEL" value="13.0" unit="V" />
        <define name="LOW_BAT_LEVEL" value="14.0" unit="V" />
    </section>

    <section name="STABILIZATION_RATE" prefix="STABILIZATION_RATE_">

        <define name="SP_MAX_P" value="10000"/>
        <define name="SP_MAX_Q" value="10000"/>
        <define name="SP_MAX_R" value="10000"/>

        <define name="GAIN_P" value="400"/>
        <define name="GAIN_Q" value="400"/>
        <define name="GAIN_R" value="350"/>

    </section>

    <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="90." unit="deg/s"/>
        <define name="DEADBAND_R"     value="250"/>

        <!-- reference -->
        <define name="REF_OMEGA_P"  value="800" unit="deg/s"/>
        <define name="REF_ZETA_P"   value="0.9"/>
        <define name="REF_MAX_P"    value="300." unit="deg/s"/>
        <define name="REF_MAX_PDOT" value="RadOfDeg(7000.)"/>

        <define name="REF_OMEGA_Q"  value="800" unit="deg/s"/>
        <define name="REF_ZETA_Q"   value="0.9"/>
        <define name="REF_MAX_Q"    value="300." unit="deg/s"/>
        <define name="REF_MAX_QDOT" value="RadOfDeg(7000.)"/>

        <define name="REF_OMEGA_R"  value="500" unit="deg/s"/>
        <define name="REF_ZETA_R"   value="0.9"/>
        <define name="REF_MAX_R"    value="180." unit="deg/s"/>
        <define name="REF_MAX_RDOT" value="RadOfDeg(1800.)"/>

        <!-- feedback -->
        <define name="PHI_PGAIN"  value="900"/>
        <define name="PHI_DGAIN"  value="200"/>
        <define name="PHI_IGAIN"  value="200"/>

        <define name="THETA_PGAIN"  value="900"/>
        <define name="THETA_DGAIN"  value="200"/>
        <define name="THETA_IGAIN"  value="200"/>

        <define name="PSI_PGAIN"  value="900"/>
        <define name="PSI_DGAIN"  value="200"/>
        <define name="PSI_IGAIN"  value="10"/>

        <!-- feedforward -->
        <define name="PHI_DDGAIN"   value="200"/>
        <define name="THETA_DDGAIN" value="200"/>
        <define name="PSI_DDGAIN"   value="200"/>

    </section>

    <section name="AHRS" prefix="AHRS_">
        <define name="H_X" value=" 0.3723657"/>
        <define name="H_Y" value=" 0.1515225"/>
        <define name="H_Z" value="-0.9156335"/>
    </section>

    <section name="INS" prefix="INS_">
    </section>

    <section name="GUIDANCE_V" prefix="GUIDANCE_V_">
        <define name="HOVER_KP"    value="150"/>
        <define name="HOVER_KD"    value="80"/>
        <define name="HOVER_KI"    value="0"/>

    </section>


    <section name="GUIDANCE_H" prefix="GUIDANCE_H_">
        <define name="PGAIN" value="100"/>
        <define name="DGAIN" value="100"/>
        <define name="IGAIN" value="0"/>
    </section>

    <section name="MISC">
        <define name="FACE_REINJ_1"  value="1024"/>
    </section>

    <section name="SIMULATOR" prefix="NPS_">
        <define name="ACTUATOR_NAMES"  value="{&quot;front_motor&quot;, &quot;back_motor&quot;, &quot;right_motor&quot;, &quot;left_motor&quot;}"/>
        <define name="JSBSIM_MODEL" value="&quot;simple_quad&quot;"/>
        <define name="SENSORS_PARAMS" value="&quot;nps_sensors_params_default.h&quot;"/>
    </section>

</airframe>
