This commit is contained in:
philipan
2016-01-07 10:54:50 +01:00
parent 71f565d8df
commit cbfd4b94fe
3 changed files with 352 additions and 1 deletions
+284
View File
@@ -0,0 +1,284 @@
<!DOCTYPE airframe SYSTEM "../airframe.dtd">
<!--
AULA_Funjet (based on ENAC/fixedwing/apogee.xml) modified
2016-01-07 a.philipp@geo.uni-augsburg.de sdlog
-->
<airframe name="Apogee_SUMO">
<modules>
<!--load name="sys_mon.xml"/-->
<!-- <load name="mcp355x.xml"> -->
<!-- <define name="USE_SPI1"/> -->
<!-- </load> -->
<!--load name="extra_dl.xml">
<configure name="EXTRA_DL_PORT" value="UART6"/>
<configure name="EXTRA_DL_BAUD" value="B57600"/>
</load>
<load name="meteo_france_DAQ.xml"/-->
<load name="flight_recorder.xml"/>
<!-- Sensors -->
<load name="air_data.xml">
<define name="AIR_DATA_BARO_ABS_ID" />
<define name="AIR_DATA_CALC_AMSL_BARO" value="TRUE"/>
</load>
<load name="gps_ubx_ucenter.xml"/>
<load name="humid_sht.xml">
<define name="SHT_DAT_GPIO" value="GPIOB,GPIO1"/>
<define name="SHT_SCK_GPIO" value="GPIOC,GPIO5"/>
<define name="SHT_SDLOG" value="TRUE"/>
</load>
<load name="airspeed_ets.xml">
<define name="AIRSPEED_ETS_SYNC_SEND"/>
<define name="USE_I2C2"/>
<configure name="AIRSPEED_ETS_I2C_DEV" value="i2c2"/>
<define name="AIRSPEED_ETS_SDLOG" value="TRUE"/>
</load>
<load name="temp_temod.xml">
<configure name="TEMOD_I2C_DEV" value="i2c1"/>
<define name="TEMP_TEMOD_SDLOG" value="TRUE"/>
</load>
<load name="nav_line_border.xml"/>
<load name="nav_line.xml"/>
<load name="nav_survey_poly_osam.xml">
<define name="POLY_OSAM_POLYGONSIZE" value="10" />
<define name="POLY_OSAM_ENTRY_RADIUS" value="0" />
<define name="POLY_OSAM_DEFAULT_SIZE" value="5" />
<define name="POLY_OSAM_DEFAULT_SWEEP" value="100" />
<define name="POLY_OSAM_MIN_RADIUS" value="30" />
<define name="POLY_OSAM_FIRST_SWEEP_DISTANCE" value="4" />
</load>
</modules>
<firmware name="fixedwing">
<define name="USE_INS_NAV_INIT" value="TRUE" /> <!-- initialize ground reference with flight plan coordinates, instead of leaving it uninitialized (to be set
from the GPS fix with NavSetGroundReferenceHere) -->
<target name="ap" board="apogee_1.0_chibios">
<subsystem name="radio_control" type="ppm"/>
<configure name="PERIODIC_FREQUENCY" value="100"/>
<define name="APOGEE_BARO_SDLOG" value="TRUE"/>
</target>
<target name="sim" board="pc">
<subsystem name="radio_control" type="ppm"/>
</target>
<define name="USE_I2C1"/>
<define name="USE_I2C2"/>
<!--define name="AGR_CLIMB"/-->
<!--define name="LOITER_TRIM"/-->
<!--define name="PITCH_TRIM"/-->
<!-- Communication -->
<subsystem name="telemetry" type="transparent">
<configure name="MODEM_BAUD" value="B57600"/>
<configure name="MODEM_PORT" value="UART1"/>
<!-- <define name="TELEMETRY_MODE_FBW" value="2"/> -->
</subsystem>
<!-- <subsystem name="navigation" type="extra"/> -->
<subsystem name="sdlog"/>
<!-- Actuators are automatically chosen according to board-->
<subsystem name="imu" type="apogee_mpu9150"/>
<!-- <subsystem name="imu" type="apogee"/> -->
<subsystem name="ahrs" type="float_dcm"/>
<subsystem name="ins" type="alt_float">
<define name="USE_BAROMETER" value="TRUE"/>
</subsystem>
<subsystem name="control"/>
<subsystem name="navigation"/>
<!-- Sensors -->
<subsystem name="gps" type="ublox"/>
<!--subsystem name="spi_master"/-->
</firmware>
<!-- commands section -->
<servos>
<servo name="MOTOR" no="0" min="1040" neutral="1040" max="2000"/>
<servo name="AILEVON_LEFT" no="1" min="2000" neutral="1500" max="1000"/>
<servo name="AILEVON_RIGHT" no="2" min="1000" neutral="1500" max="2000"/>
</servos>
<commands>
<axis name="THROTTLE" failsafe_value="0"/>
<axis name="ROLL" failsafe_value="0"/>
<axis name="PITCH" failsafe_value="0"/>
</commands>
<rc_commands>
<set command="THROTTLE" value="@THROTTLE"/>
<set command="ROLL" value="@ROLL"/>
<set command="PITCH" value="@PITCH"/>
</rc_commands>
<section name="MIXER">
<define name="AILEVON_AILERON_RATE" value="0.75"/>
<define name="AILEVON_ELEVATOR_RATE" value="0.75"/>
</section>
<command_laws>
<let var="aileron" value="@ROLL * AILEVON_AILERON_RATE"/>
<let var="elevator" value="@PITCH * AILEVON_ELEVATOR_RATE"/>
<set servo="MOTOR" value="@THROTTLE"/>
<set servo="AILEVON_LEFT" value="$elevator - $aileron"/>
<set servo="AILEVON_RIGHT" value="$elevator + $aileron"/>
</command_laws>
<section name="AUTO1" prefix="AUTO1_">
<define name="MAX_ROLL" value="80" unit="deg" />
<define name="MAX_PITCH" value="60" unit="deg" />
</section>
<section name="GCS">
<define name="SPEECH_NAME" value="Funjet 1"/>
<define name="AC_ICON" value="flyingwing"/>
</section>
<section name="IMU" prefix="IMU_">
<!-- Calibration Neutral -->
<define name="GYRO_P_NEUTRAL" value="0"/>
<define name="GYRO_Q_NEUTRAL" value="0"/>
<define name="GYRO_R_NEUTRAL" value="0 "/>
<define name="ACCEL_X_NEUTRAL" value="0"/>
<define name="ACCEL_Y_NEUTRAL" value="0"/>
<define name="ACCEL_Z_NEUTRAL" value="0"/>
<define name="BODY_TO_IMU_PHI" value="0" unit="deg"/> <!--roll-left-->
<define name="BODY_TO_IMU_THETA" value="0" unit="deg"/> <!--pitch-down-->
<define name="BODY_TO_IMU_PSI" value="0"/>
<define name="GYRO_P_SIGN" value="1"/>
<define name="GYRO_Q_SIGN" value="-1"/>
<define name="GYRO_R_SIGN" value="-1"/>
<define name="ACCEL_X_SIGN" value="1"/>
<define name="ACCEL_Y_SIGN" value="-1"/>
<define name="ACCEL_Z_SIGN" value="-1"/>
</section>
<section name="INS" prefix="INS_">
<define name="ROLL_NEUTRAL_DEFAULT" value="0.0" unit="deg"/>
<define name="PITCH_NEUTRAL_DEFAULT" value="0.0" unit="deg"/>
</section>
<section name="BAT">
<define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
<define name="MilliAmpereOfAdc(_adc)" value="(_adc-158)*16.5698"/>
</section>
<section name="MISC">
<define name="NOMINAL_AIRSPEED" value="10." unit="m/s"/>
<define name="CARROT" value="5." unit="s"/>
<define name="KILL_MODE_DISTANCE" value="(1.5*MAX_DIST_FROM_HOME)"/>
<define name="TRIGGER_DELAY" value="1."/>
<define name="DEFAULT_CIRCLE_RADIUS" value="40."/>
<define name="UNLOCKED_HOME_MODE" value="TRUE"/>
</section>
<section name="VERTICAL CONTROL" prefix="V_CTL_">
<!--define name="POWER_CTL_BAT_NOMINAL" value="11.1" unit="volt"/-->
<!-- outer loop proportional gain -->
<define name="ALTITUDE_PGAIN" value="0.18"/> <!-- 0.024 -->
<!-- outer loop saturation -->
<define name="ALTITUDE_MAX_CLIMB" value="5."/>
<!-- Cruise throttle + limits -->
<define name="AUTO_THROTTLE_NOMINAL_CRUISE_THROTTLE" value="0.3"/>
<define name="AUTO_THROTTLE_MIN_CRUISE_THROTTLE" value="0.05"/>
<define name="AUTO_THROTTLE_MAX_CRUISE_THROTTLE" value="0.85"/>
<define name="AUTO_PITCH_MAX_PITCH" value="RadOfDeg(45.)"/> <!-- was 20-->
<define name="AUTO_PITCH_MIN_PITCH" value="-RadOfDeg(45.)"/> <!-- was 20-->
<!-- Climb loop (throttle) -->
<define name="AUTO_THROTTLE_CLIMB_THROTTLE_INCREMENT" value="0.1" unit="%/(m/s)"/>
<!--automatic increase to the throttle position for climb error.
If you have a climb error calculated at 1 m/s, with 0.15 you will increase the throttle
automatically(open loop) by 15%. -->
<define name="AUTO_THROTTLE_PGAIN" value="0.002"/> <!-- 0.005 -->
<define name="AUTO_THROTTLE_DGAIN" value="0.0"/> <!-- 0.005 -->
<define name="AUTO_THROTTLE_IGAIN" value="0.004"/> <!-- 0.005 -->
<!-- Climb loop (pitch) -->
<define name="AUTO_THROTTLE_PITCH_OF_VZ_PGAIN" value="0.03"/>
<!-- increases the pitch setpoint for a climb_error.
If your climb rate error is 1 m/s you will command a pitch of 0.35 radians. -->
<define name="AUTO_PITCH_PGAIN" value="0.04"/> <!-- 0.03 -->
<define name="AUTO_PITCH_DGAIN" value="0.04"/> <!-- 0.03 -->
<define name="AUTO_PITCH_IGAIN" value="0.0"/>
<define name="AUTO_AIRSPEED_SETPOINT" value="13."/>
<define name="AUTO_AIRSPEED_THROTTLE_PGAIN" value="0.1"/>
<define name="AUTO_AIRSPEED_THROTTLE_DGAIN" value="0.12"/>
<define name="AUTO_AIRSPEED_THROTTLE_IGAIN" value="0.0"/>
<define name="AUTO_AIRSPEED_PITCH_PGAIN" value="0.06"/>
<define name="AUTO_AIRSPEED_PITCH_DGAIN" value="0.0"/>
<define name="AUTO_AIRSPEED_PITCH_IGAIN" value="0.042"/>
<define name="AIRSPEED_MAX" value="30"/>
<define name="AIRSPEED_MIN" value="10"/>
<!-- groundspeed control -->
<define name="AUTO_GROUNDSPEED_SETPOINT" value="12."/>
<define name="AUTO_GROUNDSPEED_PGAIN" value="1."/>
<define name="AUTO_GROUNDSPEED_IGAIN" value="0."/>
<!-- pitch trim --> <!-- 5 deg -->
<define name="PITCH_LOITER_TRIM" value="RadOfDeg(0.)"/>
<define name="PITCH_DASH_TRIM" value="RadOfDeg(-0.)"/>
<define name="THROTTLE_SLEW" value="0.1"/>
</section>
<section name="HORIZONTAL CONTROL" prefix="H_CTL_">
<define name="COURSE_PGAIN" value="0.7"/>
<define name="ROLL_MAX_SETPOINT" value="0.8" unit="radians"/>
<define name="PITCH_MAX_SETPOINT" value="0.5" unit="radians"/>
<define name="PITCH_MIN_SETPOINT" value="-0.5" unit="radians"/>
<define name="ROLL_ATTITUDE_GAIN" value="8800."/>
<define name="ROLL_RATE_GAIN" value="500."/>
<define name="ROLL_IGAIN" value="150."/>
<define name="ROLL_KFFA" value="0"/>
<define name="ROLL_KFFD" value="0"/>
<define name="PITCH_PGAIN" value="14000."/>
<define name="PITCH_DGAIN" value="0."/>
<define name="PITCH_IGAIN" value="250."/>
<define name="PITCH_KFFA" value="0."/>
<define name="PITCH_KFFD" value="0."/>
<define name="PITCH_OF_ROLL" value="RadOfDeg(0.0)"/>
<define name="AILERON_OF_THROTTLE" value="0.0"/>
<define name="ELEVATOR_OF_ROLL" value="1400"/>
</section>
<section name="NAV">
<define name="NAV_GLIDE_PITCH_TRIM" value="0"/>
</section>
<section name="FAILSAFE" prefix="FAILSAFE_">
<define name="DELAY_WITHOUT_GPS" value="2" unit="s"/>
<define name="DEFAULT_THROTTLE" value="0.3" unit="%"/>
<define name="DEFAULT_ROLL" value="0.3" unit="rad"/>
<define name="DEFAULT_PITCH" value="0.5" unit="rad"/>
<define name="HOME_RADIUS" value="60" unit="m"/>
</section>
<section name="SIMU">
<!--define name="ROLL_RESPONSE_FACTOR" value="10"/>
<define name="MAX_ROLL_DOT" value="20" unit="rad/s"/-->
</section>
</airframe>
+67
View File
@@ -0,0 +1,67 @@
<!DOCTYPE flight_plan SYSTEM "../flight_plan.dtd">
<flight_plan alt="650" ground_alt="600" lat0="47.830809" lon0="11.061623" max_dist_from_home="500" name="ScaleX_" security_height="30">
<header>
#include "subsystems/datalink/datalink.h"
</header>
<waypoints>
<waypoint name="HOME" x="0" y="0" height="50"/>
<waypoint name="Profil" x="0" y="0"/>
<waypoint name="Anflug" x="-150" y="0" height="30"/>
</waypoints>
<blocks>
<block name="Waiting for GPS fix">
<!-- <set value="1" var="kill_throttle"/> -->
<while cond="!GpsFixValid()"/>
</block>
<block name="Geo init">
<while cond="LessThan(NavBlockTime(), 7)"/>
<!-- <call fun="NavSetGroundReferenceHere()"/> -->
<call fun="NavSetAltitudeReferenceHere()"/>
<set var="air_data.calc_qnh_once" value="TRUE"/>
</block>
<block name="Waiting for Remote Control">
<while cond="RCLost()"/>
</block>
<block name="Unlock throttle">
<set value="1" var="launch"/>
<set value="0" var="kill_throttle"/>
<set value="0" var="autopilot_flight_time"/>
</block>
<block name="Climb">
<circle wp="Profil" pitch="45" radius="-70" throttle="0.80" until="GetPosAlt() > ground_alt + 305" vmode="throttle"/>
<deroute block="Descent"/>
</block>
<block name="Descent">
<circle wp="Profil" climb="-4" radius="-70" throttle="0.40" pitch="auto" until="ground_alt+25 > GetPosAlt()" vmode="climb"/>
<exception cond="GetPosAlt() > ground_alt + 305 + 50 " deroute="Down"/>
<deroute block="Landing"/>
</block>
<block name="Down">
<circle wp="Profil" radius="-70" until="ground_alt+35 > GetPosAlt()" vmode="alt" alt="ground_alt+40"/>
<deroute block="Landing"/>
</block>
<block name="Landing">
<while cond="TRUE">
<go wp="Anflug" approaching_time="1"/>
<go from="Anflug" hmode="route" vmode="glide" wp="HOME" alt="ground_alt+15" approaching_time="1"/>
</while>
<deroute block="Standby"/>
</block>
<block name="Standby" group="home" key="Ctrl+a" strip_button="Standby" strip_icon="home.png">
<circle radius="-70" wp="HOME"/>
</block>
</blocks>
</flight_plan>
+1 -1
View File
@@ -125,7 +125,7 @@ void apogee_baro_event(void)
#if APOGEE_BARO_SDLOG #if APOGEE_BARO_SDLOG
if (pprzLogFile != -1) { if (pprzLogFile != -1) {
if (!log_apogee_baro_started) { if (!log_apogee_baro_started) {
sdLogWriteLog(pprzLogFile, "APOGEE_BARO: Pres(Pa) GPS_fix TOW(ms) Week Lat(1e7deg) Lon(1e7deg) HMSL(mm) gpseed(cm/s) course(1e7deg) climb(cm/s)\n"); sdLogWriteLog(pprzLogFile, "APOGEE_BARO: Pres(Pa) Temp/degC) GPS_fix TOW(ms) Week Lat(1e7deg) Lon(1e7deg) HMSL(mm) gpseed(cm/s) course(1e7deg) climb(cm/s)\n");
log_apogee_baro_started = TRUE; log_apogee_baro_started = TRUE;
} }
if (count_sd_writes == 0) { if (count_sd_writes == 0) {