mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-29 02:38:07 +08:00
Merge remote-tracking branch 'paparazzi/master' into dev
This commit is contained in:
@@ -1,37 +1,69 @@
|
||||
<!DOCTYPE airframe SYSTEM "../../airframe.dtd">
|
||||
|
||||
<!-- Fire Storm
|
||||
Tiny 1.1
|
||||
Tilted infrared sensor
|
||||
Umarim
|
||||
Radiotronix modem
|
||||
Drop servo -->
|
||||
-->
|
||||
|
||||
<airframe name="FireStorm">
|
||||
|
||||
<modules>
|
||||
<load name="poles.xml"/>
|
||||
<load name="baro_board.xml"/>
|
||||
</modules>
|
||||
|
||||
<!-- commands section -->
|
||||
<firmware name="fixedwing">
|
||||
<define name="AGR_CLIMB"/>
|
||||
<define name="ALT_KALMAN"/>
|
||||
<define name="LOITER_TRIM"/>
|
||||
<!--define name="PITCH_TRIM"/-->
|
||||
|
||||
<target name="sim" board="pc"/>
|
||||
<target name="ap" board="umarim_1.0">
|
||||
<configure name="FLASH_MODE" value="IAP"/>
|
||||
<define name="USE_I2C0"/>
|
||||
<define name="USE_I2C1"/>
|
||||
</target>
|
||||
|
||||
<subsystem name="radio_control" type="ppm"/>
|
||||
|
||||
<!-- Communication -->
|
||||
<subsystem name="telemetry" type="transparent">
|
||||
<configure name="MODEM_BAUD" value="B57600"/>
|
||||
</subsystem>
|
||||
|
||||
<!-- Actuators are automatically chosen according to board-->
|
||||
<subsystem name="imu" type="umarim"/>
|
||||
<subsystem name="ahrs" type="float_dcm">
|
||||
<define name="USE_HIGH_ACCEL_FLAG"/>
|
||||
</subsystem>
|
||||
<subsystem name="control" type="adaptive"/>
|
||||
<subsystem name="navigation"/>
|
||||
<!-- Sensors -->
|
||||
<subsystem name="gps" type="ublox"/>
|
||||
|
||||
<subsystem name="current_sensor">
|
||||
<configure name="ADC_CURRENT_SENSOR" value="ADC_0"/>
|
||||
</subsystem>
|
||||
</firmware>
|
||||
|
||||
<!-- commands section -->
|
||||
<servos>
|
||||
<servo name="MOTOR" no="3" min="1250" neutral="1250" max="1800"/>
|
||||
<servo name="AILEVON_LEFT" no="4" min="1850" neutral="1370" max="1000"/>
|
||||
<servo name="AILEVON_RIGHT" no="5" min="1000" neutral="1515" max="1870"/>
|
||||
<servo name="HATCH" no="6" min="1350" neutral="1900" max="1900"/>
|
||||
<servo name="MOTOR" no="2" min="1250" neutral="1250" max="1800"/>
|
||||
<servo name="AILEVON_LEFT" no="0" min="1850" neutral="1370" max="1000"/>
|
||||
<servo name="AILEVON_RIGHT" no="1" min="1000" neutral="1515" max="1870"/>
|
||||
</servos>
|
||||
|
||||
<commands>
|
||||
<axis name="THROTTLE" failsafe_value="0"/>
|
||||
<axis name="ROLL" failsafe_value="0"/>
|
||||
<axis name="PITCH" failsafe_value="0"/>
|
||||
<axis name="HATCH" failsafe_value="0"/>
|
||||
</commands>
|
||||
|
||||
<rc_commands>
|
||||
<set command="THROTTLE" value="@THROTTLE"/>
|
||||
<set command="ROLL" value="@ROLL"/>
|
||||
<set command="PITCH" value="@PITCH"/>
|
||||
<set command="HATCH" value="@GAIN1"/>
|
||||
</rc_commands>
|
||||
|
||||
<section name="MIXER">
|
||||
@@ -44,7 +76,6 @@
|
||||
<let var="aileron" value="@ROLL * AILEVON_AILERON_RATE"/>
|
||||
<let var="elevator" value="@PITCH * AILEVON_ELEVATOR_RATE"/>
|
||||
<set servo="MOTOR" value="@THROTTLE"/>
|
||||
<set servo="HATCH" value="@HATCH"/>
|
||||
<set servo="AILEVON_LEFT" value="$elevator + ($aileron > 0 ? 1 : AILERON_DIFF) * $aileron"/>
|
||||
<set servo="AILEVON_RIGHT" value="$elevator - ($aileron > 0 ? AILERON_DIFF : 1) * $aileron"/>
|
||||
</command_laws>
|
||||
@@ -54,56 +85,51 @@
|
||||
<define name="MAX_PITCH" value="0.6"/>
|
||||
</section>
|
||||
|
||||
<section name="adc" prefix="ADC_CHANNEL_">
|
||||
<define name="IR1" value="ADC_2"/>
|
||||
<define name="IR2" value="ADC_1"/>
|
||||
<define name="IR_TOP" value="ADC_0"/>
|
||||
<define name="IR_NB_SAMPLES" value="16"/>
|
||||
<section name="IMU" prefix="IMU_">
|
||||
<define name="GYRO_P_SIGN" value="1"/>
|
||||
<define name="GYRO_Q_SIGN" value="-1"/>
|
||||
<define name="GYRO_R_SIGN" value="-1"/>
|
||||
|
||||
<define name="GYRO_ROLL" value="ADC_3"/>
|
||||
<define name="GYRO_NB_SAMPLES" value="16"/>
|
||||
<!-- Calibration Neutral -->
|
||||
<define name="GYRO_P_NEUTRAL" value="-53"/>
|
||||
<define name="GYRO_Q_NEUTRAL" value="33"/>
|
||||
<define name="GYRO_R_NEUTRAL" value="-16"/>
|
||||
|
||||
<!-- SENS ITG3200 1/14.375 (deg/s)/LSB, rate frac 12bit => 1/14.375 * pi / 180 * 2^12 -->
|
||||
<define name="GYRO_P_SENS" value="4.97312" integer="16"/>
|
||||
<define name="GYRO_Q_SENS" value="4.97312" integer="16"/>
|
||||
<define name="GYRO_R_SENS" value="4.97312" integer="16"/>
|
||||
|
||||
<define name="ACCEL_X_SIGN" value="1"/>
|
||||
<define name="ACCEL_Y_SIGN" value="-1"/>
|
||||
<define name="ACCEL_Z_SIGN" value="-1"/>
|
||||
|
||||
<define name="ACCEL_X_NEUTRAL" value="-2"/>
|
||||
<define name="ACCEL_Y_NEUTRAL" value="1"/>
|
||||
<define name="ACCEL_Z_NEUTRAL" value="-43"/>
|
||||
|
||||
<define name="ACCEL_X_SENS" value="38.9923420841" integer="16"/>
|
||||
<define name="ACCEL_Y_SENS" value="39.2011913001" integer="16"/>
|
||||
<define name="ACCEL_Z_SENS" value="39.4148057033" integer="16"/>
|
||||
|
||||
<!-- Just to compile -->
|
||||
<define name="MAG_X_NEUTRAL" value="0"/>
|
||||
<define name="MAG_Y_NEUTRAL" value="0"/>
|
||||
<define name="MAG_Z_NEUTRAL" value="0"/>
|
||||
|
||||
<define name="BODY_TO_IMU_PHI" value="0"/>
|
||||
<define name="BODY_TO_IMU_THETA" value="0"/>
|
||||
<define name="BODY_TO_IMU_PSI" value="0"/>
|
||||
</section>
|
||||
|
||||
<section name="INFRARED" prefix="IR_">
|
||||
<define name="ADC_IR1_NEUTRAL" value="512"/>
|
||||
<define name="ADC_IR2_NEUTRAL" value="512"/>
|
||||
<define name="ADC_TOP_NEUTRAL" value="512"/>
|
||||
|
||||
<define name="LATERAL_CORRECTION" value="1."/>
|
||||
<define name="LONGITUDINAL_CORRECTION" value="1."/>
|
||||
<define name="VERTICAL_CORRECTION" value="1.2"/>
|
||||
|
||||
<define name="HORIZ_SENSOR_TILTED" value="1"/>
|
||||
<define name="IR1_SIGN" value="-1"/>
|
||||
<define name="IR2_SIGN" value="1"/>
|
||||
<define name="TOP_SIGN" value="-1"/>
|
||||
|
||||
<define name="ROLL_NEUTRAL_DEFAULT" value="3.49504256248" unit="deg"/>
|
||||
<define name="PITCH_NEUTRAL_DEFAULT" value="-0.114591561258" unit="deg"/>
|
||||
|
||||
<define name="CORRECTION_UP" value="1."/>
|
||||
<define name="CORRECTION_DOWN" value="1."/>
|
||||
<define name="CORRECTION_LEFT" value="1."/>
|
||||
<define name="CORRECTION_RIGHT" value="1."/>
|
||||
</section>
|
||||
|
||||
<section name="GYRO" prefix="GYRO_">
|
||||
<define name="ADC_ROLL_NEUTRAL" value="492"/>
|
||||
<define name="ADC_TEMP_NEUTRAL" value="512"/>
|
||||
<define name="ADC_TEMP_SLOPE" value="0"/>
|
||||
<define name="DYNAMIC_RANGE" value="300" unit="deg/s"/>
|
||||
<define name="ADXRS300_RESISTOR_BRIDGE" value="(3.3/(3.3+1.8))"/>
|
||||
<define name="ADXRS300_SENSITIVITY" value="5" unit="mV/(deg/s)"/>
|
||||
<define name="ROLL_SCALE" value="3.3*1000./1024./(GYRO_ADXRS300_SENSITIVITY*GYRO_ADXRS300_RESISTOR_BRIDGE)" unit="deg/s/adc_unit"/>
|
||||
<define name="ROLL_DIRECTION" value="1."/>
|
||||
<section name="INS" prefix="INS_">
|
||||
<define name="ROLL_NEUTRAL_DEFAULT" value="-0.0640000030398" unit="rad"/>
|
||||
<define name="PITCH_NEUTRAL_DEFAULT" value="0.0670000016689" unit="rad"/>
|
||||
</section>
|
||||
|
||||
<section name="BAT">
|
||||
<define name="MILLIAMP_AT_FULL_THROTTLE" value="2000"/>
|
||||
|
||||
<define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
|
||||
|
||||
<define name="MilliAmpereOfAdc(_adc)" value="(_adc-162)*17.4"/>
|
||||
</section>
|
||||
|
||||
@@ -113,12 +139,10 @@
|
||||
<define name="MAXIMUM_AIRSPEED" value="24." unit="m/s"/>
|
||||
<define name="CARROT" value="5." unit="s"/>
|
||||
<define name="KILL_MODE_DISTANCE" value="(1.5*MAX_DIST_FROM_HOME)"/>
|
||||
<define name="CONTROL_RATE" value="60" unit="Hz"/>
|
||||
<define name="ALT_KALMAN_ENABLED" value="TRUE"/>
|
||||
|
||||
<define name="DEFAULT_CIRCLE_RADIUS" value="80."/>
|
||||
|
||||
<define name="UNLOCKED_HOME_MODE" value="TRUE"/>
|
||||
<define name="TELEMETRY_MODE_AP" value="1"/>
|
||||
</section>
|
||||
|
||||
<section name="VERTICAL CONTROL" prefix="V_CTL_">
|
||||
@@ -135,10 +159,10 @@
|
||||
<define name="AUTO_THROTTLE_MAX_CRUISE_THROTTLE" value="0.80"/>
|
||||
<define name="AUTO_THROTTLE_LOITER_TRIM" value="1500"/>
|
||||
<define name="AUTO_THROTTLE_DASH_TRIM" value="-2500"/>
|
||||
<define name="AUTO_THROTTLE_CLIMB_THROTTLE_INCREMENT" value="0.1" unit="%/(m/s)"/>
|
||||
<define name="AUTO_THROTTLE_PGAIN" value="-0.02"/>
|
||||
<define name="AUTO_THROTTLE_IGAIN" value="0.1"/>
|
||||
<define name="AUTO_THROTTLE_PITCH_OF_VZ_PGAIN" value="0.15"/>
|
||||
<define name="AUTO_THROTTLE_CLIMB_THROTTLE_INCREMENT" value="0.05" unit="%/(m/s)"/>
|
||||
<define name="AUTO_THROTTLE_PGAIN" value="-0.007"/>
|
||||
<define name="AUTO_THROTTLE_IGAIN" value="0.067"/>
|
||||
<define name="AUTO_THROTTLE_PITCH_OF_VZ_PGAIN" value="0.11"/>
|
||||
|
||||
<!-- auto pitch inner loop -->
|
||||
<define name="AUTO_PITCH_PGAIN" value="-0.05"/>
|
||||
@@ -151,7 +175,7 @@
|
||||
</section>
|
||||
|
||||
<section name="HORIZONTAL CONTROL" prefix="H_CTL_">
|
||||
<define name="COURSE_PGAIN" value="-1.23500001431"/>
|
||||
<define name="COURSE_PGAIN" value="-0.9"/>
|
||||
|
||||
<define name="ROLL_MAX_SETPOINT" value="0.805000007153" unit="radians"/>
|
||||
<define name="PITCH_MAX_SETPOINT" value="0.5" unit="radians"/>
|
||||
@@ -162,8 +186,8 @@
|
||||
|
||||
<define name="ELEVATOR_OF_ROLL" value="2000."/>
|
||||
|
||||
<define name="ROLL_ATTITUDE_GAIN" value="-12000"/>
|
||||
<define name="ROLL_RATE_GAIN" value="-2500"/>
|
||||
<define name="ROLL_ATTITUDE_GAIN" value="-2600"/>
|
||||
<define name="ROLL_RATE_GAIN" value="-850"/>
|
||||
|
||||
<define name="ROLL_KFF" value="-500"/>
|
||||
<define name="ROLL_IGAIN" value="-00"/>
|
||||
@@ -173,7 +197,6 @@
|
||||
<section name="NAV">
|
||||
<define name="NAV_PITCH" value="0."/>
|
||||
<define name="NAV_GLIDE_PITCH_TRIM" value="0"/>
|
||||
<define name="NAV_GROUND_SPEED_PGAIN" value="-0.01"/>
|
||||
</section>
|
||||
|
||||
<section name="AGGRESSIVE" prefix="AGR_">
|
||||
@@ -188,87 +211,21 @@
|
||||
</section>
|
||||
|
||||
|
||||
<section name="GYRO_GAINS">
|
||||
<!--section name="GYRO_GAINS">
|
||||
<define name="GYRO_MAX_RATE" value="200."/>
|
||||
<define name="ROLLRATESUM_NB_SAMPLES" value="64"/>
|
||||
<define name="ALT_ROLL__PGAIN" value="1.0"/>
|
||||
<define name="ROLL_RATE_PGAIN" value="1000.0"/>
|
||||
<define name="ROLL_RATE_IGAIN" value="0.0"/>
|
||||
<define name="ROLL_RATE_DGAIN" value="0.0"/>
|
||||
</section>
|
||||
</section-->
|
||||
|
||||
<section name="FAILSAFE" prefix="FAILSAFE_">
|
||||
<define name="DELAY_WITHOUT_GPS" value="1" 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="100" unit="m"/>
|
||||
</section>
|
||||
<define name="DELAY_WITHOUT_GPS" value="1" 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="100" unit="m"/>
|
||||
</section>
|
||||
|
||||
|
||||
<makefile>
|
||||
CONFIG = \"tiny_1_1.h\"
|
||||
|
||||
include $(PAPARAZZI_SRC)/conf/autopilot/tiny.makefile
|
||||
|
||||
FLASH_MODE=IAP
|
||||
|
||||
ap.CFLAGS += -DFBW -DAP -DBOARD_CONFIG=$(CONFIG) -DUSE_LED -DTIME_LED=1
|
||||
ap.srcs = sys_time.c $(SRC_ARCH)/sys_time_hw.c $(SRC_ARCH)/armVIC.c main_fbw.c main_ap.c main.c
|
||||
|
||||
ap.srcs += commands.c
|
||||
|
||||
ap.CFLAGS += -DACTUATORS=\"servos_4015_MAT_hw.h\" -DSERVOS_4015_MAT
|
||||
ap.srcs += $(SRC_ARCH)/servos_4015_MAT_hw.c actuators.c
|
||||
|
||||
ap.CFLAGS += -DRADIO_CONTROL
|
||||
ap.srcs += radio_control.c $(SRC_ARCH)/ppm_hw.c
|
||||
|
||||
ap.CFLAGS += -DDOWNLINK -DUSE_UART0 -DDOWNLINK_TRANSPORT=PprzTransport -DDOWNLINK_FBW_DEVICE=Uart0 -DDOWNLINK_AP_DEVICE=Uart0 -DPPRZ_UART=Uart0 -DDATALINK=PPRZ -DUART0_BAUD=B9600
|
||||
ap.srcs += downlink.c $(SRC_ARCH)/mcu_periph/uart_arch.c datalink.c pprz_transport.c
|
||||
|
||||
ap.CFLAGS += -DINTER_MCU
|
||||
ap.srcs += inter_mcu.c
|
||||
|
||||
ap.CFLAGS += -DADC -DUSE_ADC_0 -DUSE_ADC_1 -DUSE_ADC_2 -DUSE_ADC_3
|
||||
ap.srcs += $(SRC_ARCH)/adc_hw.c
|
||||
|
||||
ap.CFLAGS += -DUSE_GPS -DUBX -DUSE_UART1 -DGPS_LINK=Uart1 -DUART1_BAUD=B38400 -DGPS_LED=2
|
||||
#ap.CFLAGS += -DUSE_GPS -DUBX -DUSE_UART1 -DGPS_LINK=Uart1 -DUART1_BAUD=B9600 -DGPS_LED=2
|
||||
#ap.CFLAGS += -DGPS_CONFIGURE -DGPS_BAUD=38400
|
||||
|
||||
ap.srcs += gps_ubx.c gps.c latlong.c
|
||||
|
||||
ap.CFLAGS += -DUSE_INFRARED -DALT_KALMAN
|
||||
ap.srcs += infrared.c estimator.c
|
||||
|
||||
ap.CFLAGS += -DNAV -DAGR_CLIMB -DLOITER_TRIM
|
||||
ap.srcs += subsystems/nav.c fw_h_ctl.c fw_v_ctl.c
|
||||
|
||||
|
||||
ap.CFLAGS += -DUSE_GYRO -DADXRS150
|
||||
ap.srcs += gyro.c subsystems/navigation/nav_line.c
|
||||
ap.srcs += subsystems/navigation/nav_survey_rectangle.c
|
||||
|
||||
|
||||
# Current sensor; Neutral=162
|
||||
#ap.CFLAGS += -DUSE_ADC_7 -DUSE_ADC_GENERIC -DADC_CHANNEL_GENERIC1=ADC_7 -DADC_CHANNEL_GENERIC_NB_SAMPLES=16
|
||||
#ap.srcs += adc_generic.c
|
||||
|
||||
ap.CFLAGS += -DUSE_ADC_7 -DADC_CHANNEL_CURRENT=ADC_7
|
||||
|
||||
ap.CFLAGS += -DUSE_MODULES
|
||||
|
||||
# Config for SITL simulation
|
||||
#include $(PAPARAZZI_SRC)/conf/autopilot/sitl.makefile
|
||||
sim.ARCHDIR = $(ARCHI)
|
||||
sim.CFLAGS += -DSITL -DAP -DFBW -DRADIO_CONTROL -DINTER_MCU -DDOWNLINK -DDOWNLINK_TRANSPORT=IvyTransport -DUSE_INFRARED -DNAV -DUSE_LED -DWIND_INFO
|
||||
sim.srcs = latlong.c radio_control.c downlink.c commands.c gps.c inter_mcu.c infrared.c fw_h_ctl.c fw_v_ctl.c subsystems/nav.c estimator.c sys_time.c main_fbw.c main_ap.c datalink.c $(SRC_ARCH)/ppm_hw.c $(SRC_ARCH)/sim_gps.c $(SRC_ARCH)/sim_ir.c $(SRC_ARCH)/sim_ap.c $(SRC_ARCH)/ivy_transport.c $(SRC_ARCH)/sim_adc_generic.c $(SRC_ARCH)/led_hw.c
|
||||
|
||||
sim.CFLAGS += -DBOARD_CONFIG=\"tiny.h\" -DAGR_CLIMB -DLOITER_TRIM -DALT_KALMAN
|
||||
|
||||
sim.srcs += subsystems/navigation/nav_line.c subsystems/navigation/nav_survey_rectangle.c
|
||||
|
||||
sim.CFLAGS += -DUSE_MODULES
|
||||
</makefile>
|
||||
</airframe>
|
||||
|
||||
@@ -33,11 +33,13 @@
|
||||
|
||||
<!-- Actuators are automatically chosen according to board-->
|
||||
<subsystem name="imu" type="umarim"/>
|
||||
<subsystem name="ahrs" type="float_dcm"/>
|
||||
<subsystem name="ahrs" type="float_dcm">
|
||||
<define name="USE_HIGH_ACCEL_FLAG"/>
|
||||
</subsystem>
|
||||
<subsystem name="control" type="new"/>
|
||||
<subsystem name="navigation"/>
|
||||
<!-- Sensors -->
|
||||
<subsystem name="gps" type="ublox_lea5h"/>
|
||||
<subsystem name="gps" type="ublox"/>
|
||||
</firmware>
|
||||
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
<target name="ap" board="booz_1.0">
|
||||
<define name="FAILSAFE_GROUND_DETECT"/>
|
||||
<define name="USE_GPS_ACC4R"/>
|
||||
<define name="BOOZ_START_DELAY" value="3"/>
|
||||
</target>
|
||||
<target name="sim" board="pc">
|
||||
<subsystem name="fdm" type="nps"/>
|
||||
@@ -27,10 +28,15 @@
|
||||
<subsystem name="radio_control" type="ppm"/>
|
||||
<subsystem name="telemetry" type="transparent"/>
|
||||
<subsystem name="actuators" type="asctec"/>
|
||||
<!--subsystem name="actuators" type="mkk"/-->
|
||||
<subsystem name="imu" type="b2_v1.1"/>
|
||||
<subsystem name="gps" type="ublox"/>
|
||||
<subsystem name="stabilization" type="euler"/>
|
||||
<subsystem name="ahrs" type="int_cmpl_euler"/>
|
||||
<subsystem name="gps" type="ublox">
|
||||
<configure name="GPS_BAUD" value="B57600"/>
|
||||
</subsystem>
|
||||
<subsystem name="stabilization" type="euler"/>
|
||||
<subsystem name="ahrs" type="int_cmpl_euler">
|
||||
<define name="USE_NOISE_FILTER"/>
|
||||
</subsystem>
|
||||
<subsystem name="ins" type="hff"/>
|
||||
</firmware>
|
||||
|
||||
@@ -47,6 +53,12 @@
|
||||
<servo name="YAW" no="2" min="0" neutral="0" max="255"/>
|
||||
<servo name="THRUST" no="3" min="0" neutral="0" max="255"/>
|
||||
</servos>
|
||||
<!--servos min="0" neutral="0" max="0xff">
|
||||
<servo name="FRONT" no="0" min="0" neutral="0" max="255"/>
|
||||
<servo name="BACK" no="1" min="0" neutral="0" max="255"/>
|
||||
<servo name="RIGHT" no="2" min="0" neutral="0" max="255"/>
|
||||
<servo name="LEFT" no="3" min="0" neutral="0" max="255"/>
|
||||
</servos-->
|
||||
|
||||
<commands>
|
||||
<axis name="PITCH" failsafe_value="0"/>
|
||||
@@ -55,6 +67,31 @@
|
||||
<axis name="THRUST" failsafe_value="0"/>
|
||||
</commands>
|
||||
|
||||
<!--section name="ACTUATORS_MKK" prefix="ACTUATORS_MKK_">
|
||||
<define name="NB" value="4"/>
|
||||
<define name="ADDR" value="{ 0x52, 0x56, 0x54, 0x58 }"/>
|
||||
</section-->
|
||||
|
||||
<section name="SUPERVISION" prefix="SUPERVISION_">
|
||||
<define name="TRIM_A" value="0"/>
|
||||
<define name="TRIM_E" value="0"/>
|
||||
<define name="TRIM_R" value="0"/>
|
||||
</section>
|
||||
<!--section name="SUPERVISION" prefix="SUPERVISION_">
|
||||
<define name="MIN_MOTOR" value="25"/>
|
||||
<define name="MAX_MOTOR" value="243"/>
|
||||
<define name="TRIM_A" value="0"/>
|
||||
<define name="TRIM_E" value="0"/>
|
||||
<define name="TRIM_R" 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-->
|
||||
|
||||
|
||||
<section name="IMU" prefix="IMU_">
|
||||
|
||||
<define name="GYRO_P_CHAN" value="1"/>
|
||||
@@ -93,9 +130,10 @@
|
||||
<define name="MAG_Y_SENS" value="5.43740121157" integer="16"/>
|
||||
<define name="MAG_Z_SENS" value="2.60492836649" integer="16"/>
|
||||
|
||||
<define name="BODY_TO_IMU_PHI" value="RadOfDeg(-1.5)"/>
|
||||
<define name="BODY_TO_IMU_THETA" value="RadOfDeg(-1.5)"/>
|
||||
<define name="BODY_TO_IMU_PSI" value="RadOfDeg(-45)"/> <!-- -13 -->
|
||||
<define name="BODY_TO_IMU_PHI" value="RadOfDeg(0.)"/>
|
||||
<define name="BODY_TO_IMU_THETA" value="RadOfDeg(0.)"/>
|
||||
<!--define name="BODY_TO_IMU_PSI" value="RadOfDeg(45.)"/-->
|
||||
<define name="BODY_TO_IMU_PSI" value="RadOfDeg(0.)"/>
|
||||
|
||||
</section>
|
||||
|
||||
@@ -136,32 +174,25 @@
|
||||
<define name="REF_MAX_RDOT" value="RadOfDeg(900.)"/>
|
||||
|
||||
<!-- feedback -->
|
||||
<define name="PHI_PGAIN" value="-1500"/>
|
||||
<define name="PHI_DGAIN" value="-350"/>
|
||||
<define name="PHI_IGAIN" value="-50"/>
|
||||
<define name="PHI_PGAIN" value="-400"/>
|
||||
<define name="PHI_DGAIN" value="-160"/>
|
||||
<define name="PHI_IGAIN" value="-40"/>
|
||||
|
||||
<define name="THETA_PGAIN" value="-1500"/>
|
||||
<define name="THETA_DGAIN" value="-350"/>
|
||||
<define name="THETA_IGAIN" value="-50"/>
|
||||
<define name="THETA_PGAIN" value="-400"/>
|
||||
<define name="THETA_DGAIN" value="-160"/>
|
||||
<define name="THETA_IGAIN" value="-40"/>
|
||||
|
||||
<define name="PSI_PGAIN" value="-1000"/>
|
||||
<define name="PSI_DGAIN" value="-350"/>
|
||||
<define name="PSI_IGAIN" value="-10"/>
|
||||
|
||||
<!-- feedforward -->
|
||||
<define name="PHI_DDGAIN" value=" 350"/>
|
||||
<define name="THETA_DDGAIN" value=" 350"/>
|
||||
<define name="PHI_DDGAIN" value=" 300"/>
|
||||
<define name="THETA_DDGAIN" value=" 300"/>
|
||||
<define name="PSI_DDGAIN" value=" 300"/>
|
||||
|
||||
</section>
|
||||
|
||||
<section name="SUPERVISION" prefix="SUPERVISION_">
|
||||
<define name="TRIM_A" value="0"/>
|
||||
<define name="TRIM_E" value="0"/>
|
||||
<define name="TRIM_R" value="0"/>
|
||||
<define name="HACK_45" value="1"/>
|
||||
</section>
|
||||
|
||||
<section name="INS" prefix="INS_">
|
||||
<define name="BARO_SENS" value="16.5" integer="16"/>
|
||||
</section>
|
||||
@@ -178,8 +209,8 @@
|
||||
<define name="REF_MAX_ZDD" value=" 0.8*9.81"/>
|
||||
<define name="REF_MIN_ZD" value="-1.5"/>
|
||||
<define name="REF_MAX_ZD" value=" 1.5"/>
|
||||
<define name="HOVER_KP" value="-500"/>
|
||||
<define name="HOVER_KD" value="-250"/>
|
||||
<define name="HOVER_KP" value="-400"/>
|
||||
<define name="HOVER_KD" value="-200"/>
|
||||
<define name="HOVER_KI" value="0"/>
|
||||
<!-- SPEED_BFP_OF_REAL(1.5) / (MAX_PPRZ/2) -->
|
||||
<define name="RC_CLIMB_COEF" value ="163"/>
|
||||
@@ -199,7 +230,7 @@
|
||||
<section name="BAT">
|
||||
<define name="MILLIAMP_PER_PERCENT" value="0.86"/>
|
||||
<define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
|
||||
<define name="BATTERY_SENS" value="0.25" integer="16"/>
|
||||
<define name="VoltageOfAdc(adc)" value="(0.025*adc)"/>
|
||||
</section>
|
||||
|
||||
<section name="AUTOPILOT">
|
||||
@@ -222,7 +253,7 @@
|
||||
<define name="PAN_MIN" value="0"/>
|
||||
<define name="PAN_MAX" value="25736"/> <!-- 360 deg (2^12) -->
|
||||
<define name="DEFAULT_MODE" value="BOOZ_CAM_MODE_MANUAL"/>
|
||||
<!--define name="SetPwm(_v)" value="Booz2SetPwm1Value(_v)"/-->
|
||||
<define name="SetPwm(_v)" value="Booz2SetPwm1Value(_v)"/>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -230,7 +261,7 @@
|
||||
<define name="BOOZ_ANALOG_BARO_THRESHOLD" value="800"/>
|
||||
<define name="FACE_REINJ_1" value="1024"/>
|
||||
<define name="DEFAULT_CIRCLE_RADIUS" value="10."/>
|
||||
<define name="BoozDropPwm(_v)" value="BoozSetPwm1Value(_v)"/>
|
||||
<define name="BoozDropPwm(_v)" value="BoozSetPwm0Value(_v)"/>
|
||||
<define name="IMU_MAG_OFFSET" value="-9."/>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
<airframe name="BOOZ2_G1">
|
||||
|
||||
<modules main_freq="512">
|
||||
<!--load name="booz_pwm.xml"/-->
|
||||
<!--load name="booz_drop.xml"/-->
|
||||
<!--load name="booz_cam.xml"/-->
|
||||
<load name="booz_pwm.xml">
|
||||
<define name="USE_PWM1"/>
|
||||
</load>
|
||||
<load name="booz_drop.xml"/>
|
||||
<load name="booz_cam.xml"/>
|
||||
<!--load name="sonar_maxbotix_booz.xml">
|
||||
<configure name="ADC_SONAR" value="ADC_0"/>
|
||||
</load-->
|
||||
@@ -161,67 +163,77 @@
|
||||
</section>
|
||||
|
||||
<section name="GUIDANCE_V" prefix="GUIDANCE_V_">
|
||||
<define name="MIN_ERR_Z" value="POS_BFP_OF_REAL(-10.)"/>
|
||||
<define name="MAX_ERR_Z" value="POS_BFP_OF_REAL( 10.)"/>
|
||||
<define name="MIN_ERR_ZD" value="SPEED_BFP_OF_REAL(-10.)"/>
|
||||
<define name="MAX_ERR_ZD" value="SPEED_BFP_OF_REAL( 10.)"/>
|
||||
<define name="MAX_SUM_ERR" value="2000000"/>
|
||||
<define name="REF_MIN_ZDD" value="-1.5*9.81"/>
|
||||
<define name="REF_MAX_ZDD" value=" 0.5*9.81"/>
|
||||
<define name="REF_MIN_ZD" value="-1.5"/>
|
||||
<define name="REF_MAX_ZD" value=" 1.5"/>
|
||||
<define name="HOVER_KP" value="-150"/>
|
||||
<define name="HOVER_KD" value="-80"/>
|
||||
<define name="HOVER_KI" value="0"/>
|
||||
<!-- 1.5m/s for full stick : SPEED_BFP_OF_REAL(1.5) / (MAX_PPRZ/2) -->
|
||||
<define name="RC_CLIMB_COEF" value ="163"/>
|
||||
<!-- SPEED_BFP_OF_REAL(1.5) * 20% -->
|
||||
<define name="RC_CLIMB_DEAD_BAND" value ="160000"/>
|
||||
<!-- <define name="INV_M" value="0.118"/> -->
|
||||
<define name="MIN_ERR_Z" value="POS_BFP_OF_REAL(-10.)"/>
|
||||
<define name="MAX_ERR_Z" value="POS_BFP_OF_REAL( 10.)"/>
|
||||
<define name="MIN_ERR_ZD" value="SPEED_BFP_OF_REAL(-10.)"/>
|
||||
<define name="MAX_ERR_ZD" value="SPEED_BFP_OF_REAL( 10.)"/>
|
||||
<define name="MAX_SUM_ERR" value="2000000"/>
|
||||
<define name="REF_MIN_ZDD" value="-1.5*9.81"/>
|
||||
<define name="REF_MAX_ZDD" value=" 0.5*9.81"/>
|
||||
<define name="REF_MIN_ZD" value="-1.5"/>
|
||||
<define name="REF_MAX_ZD" value=" 1.5"/>
|
||||
<define name="HOVER_KP" value="-150"/>
|
||||
<define name="HOVER_KD" value="-80"/>
|
||||
<define name="HOVER_KI" value="0"/>
|
||||
<!-- 1.5m/s for full stick : SPEED_BFP_OF_REAL(1.5) / (MAX_PPRZ/2) -->
|
||||
<define name="RC_CLIMB_COEF" value ="163"/>
|
||||
<!-- SPEED_BFP_OF_REAL(1.5) * 20% -->
|
||||
<define name="RC_CLIMB_DEAD_BAND" value ="160000"/>
|
||||
<!-- <define name="INV_M" value="0.118"/> -->
|
||||
</section>
|
||||
|
||||
|
||||
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
|
||||
<define name="PGAIN" value="-50"/>
|
||||
<define name="DGAIN" value="-100"/>
|
||||
<define name="IGAIN" value="-15"/>
|
||||
<define name="NGAIN" value="-0"/>
|
||||
<!-- feedforward -->
|
||||
<define name="AGAIN" value="100"/>
|
||||
</section>
|
||||
<define name="PGAIN" value="-50"/>
|
||||
<define name="DGAIN" value="-100"/>
|
||||
<define name="IGAIN" value="-15"/>
|
||||
<define name="NGAIN" value="-0"/>
|
||||
<!-- feedforward -->
|
||||
<define name="AGAIN" value="100"/>
|
||||
</section>
|
||||
|
||||
<section name="BAT">
|
||||
<define name="MILLIAMP_PER_PERCENT" value="0.86"/>
|
||||
<define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
|
||||
<define name="BATTERY_SENS" value="0.183" integer="16"/>
|
||||
</section>
|
||||
<section name="BAT">
|
||||
<define name="MILLIAMP_PER_PERCENT" value="0.86"/>
|
||||
<define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
|
||||
<define name="BATTERY_SENS" value="0.183" integer="16"/>
|
||||
</section>
|
||||
|
||||
<section name="AUTOPILOT">
|
||||
<define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
|
||||
<define name="MODE_AUTO1" value="AP_MODE_ATTITUDE_Z_HOLD"/>
|
||||
<define name="MODE_AUTO2" value="AP_MODE_NAV"/>
|
||||
</section>
|
||||
<section name="AUTOPILOT">
|
||||
<define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
|
||||
<define name="MODE_AUTO1" value="AP_MODE_ATTITUDE_Z_HOLD"/>
|
||||
<define name="MODE_AUTO2" value="AP_MODE_NAV"/>
|
||||
</section>
|
||||
|
||||
<section name="FMS">
|
||||
<define name="BOOZ_FMS_TIMEOUT" value="0"/>
|
||||
</section>
|
||||
<section name="FMS">
|
||||
<define name="BOOZ_FMS_TIMEOUT" value="0"/>
|
||||
</section>
|
||||
|
||||
<section name="CAM" prefix="BOOZ_CAM_">
|
||||
<section name="CAM" prefix="BOOZ_CAM_">
|
||||
<define name="ON" value="LED_ON(CAM_SWITCH_LED)"/>
|
||||
<define name="OFF" value="LED_OFF(CAM_SWITCH_LED)"/>
|
||||
<define name="TILT_NEUTRAL" value="1500"/>
|
||||
<define name="TILT_MIN" value="1000"/>
|
||||
<define name="TILT_MAX" value="2000"/>
|
||||
<define name="TILT_ANGLE_MIN" value="RadOfDeg(-85.)" unit="rad"/>
|
||||
<define name="TILT_ANGLE_MAX" value="RadOfDeg( 30.)" unit="rad"/>
|
||||
<define name="TILT_MAX" value="1000"/>
|
||||
<define name="TILT_MIN" value="2300"/>
|
||||
<define name="TILT_ANGLE_MIN" value="RadOfDeg(-90.)" unit="rad"/>
|
||||
<define name="TILT_ANGLE_MAX" value="RadOfDeg( 10.)" unit="rad"/>
|
||||
<define name="PAN_NEUTRAL" value="0"/>
|
||||
<define name="PAN_MIN" value="0"/>
|
||||
<define name="PAN_MAX" value="25736"/> <!-- 360 deg (2^12) -->
|
||||
</section>
|
||||
<define name="SetPwm(_v)" value="BoozSetPwm1Value(_v)"/>
|
||||
</section>
|
||||
|
||||
<section name="MISC">
|
||||
<define name="BOOZ_ANALOG_BARO_THRESHOLD" value="800"/>
|
||||
<define name="FACE_REINJ_1" value="1024"/>
|
||||
<define name="DEFAULT_CIRCLE_RADIUS" value="10."/>
|
||||
</section>
|
||||
<section name="DROP">
|
||||
<define name="DROP_SERVO_CLOSED" value="2120"/>
|
||||
<define name="DROP_SERVO_OPEN" value="1060"/>
|
||||
<!--define name="BoozDropPwm(_v)" value="BoozSetPwm0Value(_v)"/-->
|
||||
</section>
|
||||
|
||||
<section name="MISC">
|
||||
<define name="BOOZ_ANALOG_BARO_THRESHOLD" value="800"/>
|
||||
<define name="FACE_REINJ_1" value="1024"/>
|
||||
<define name="DEFAULT_CIRCLE_RADIUS" value="10."/>
|
||||
<!--define name="IMU_MAG_OFFSET" value="-5.8"/-->
|
||||
</section>
|
||||
|
||||
<section name="GCS">
|
||||
<define name="ALT_SHIFT_PLUS_PLUS" value="5"/>
|
||||
@@ -229,10 +241,10 @@
|
||||
<define name="ALT_SHIFT_MINUS" value="-1"/>
|
||||
</section>
|
||||
|
||||
<section name="SIMULATOR" prefix="NPS_">
|
||||
<define name="ACTUATOR_NAMES" value="{"front_motor", "back_motor", "right_motor", "left_motor"}"/>
|
||||
<!--define name="INITIAL_CONDITITONS" value=""reset_enac""/-->
|
||||
<define name="SENSORS_PARAMS" value=""nps_sensors_params_booz2_a1.h""/>
|
||||
</section>
|
||||
<section name="SIMULATOR" prefix="NPS_">
|
||||
<define name="ACTUATOR_NAMES" value="{"front_motor", "back_motor", "right_motor", "left_motor"}"/>
|
||||
<!--define name="INITIAL_CONDITITONS" value=""reset_enac""/-->
|
||||
<define name="SENSORS_PARAMS" value=""nps_sensors_params_booz2_a1.h""/>
|
||||
</section>
|
||||
|
||||
</airframe>
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
<define name="USE_INS_NAV_INIT"/>
|
||||
<define name="USE_ADAPT_HOVER"/>
|
||||
<define name="NO_FUCKING_STARTUP_DELAY"/>
|
||||
<define name="USE_ATTITUDE_REF" value="0"/>
|
||||
<!--define name="GUIDANCE_H_USE_REF"/-->
|
||||
|
||||
<target name="ap" board="navgo_1.0">
|
||||
@@ -31,7 +32,9 @@
|
||||
<subsystem name="imu" type="navgo"/>
|
||||
<subsystem name="gps" type="ublox"/>
|
||||
<subsystem name="stabilization" type="euler"/>
|
||||
<subsystem name="ahrs" type="int_cmpl_euler"/>
|
||||
<subsystem name="ahrs" type="int_cmpl_euler">
|
||||
<define name="LOW_NOISE_THRESHOLD" value="50000"/>
|
||||
</subsystem>
|
||||
<subsystem name="ins" type="hff"/>
|
||||
</firmware>
|
||||
|
||||
@@ -57,7 +60,7 @@
|
||||
<section name="SUPERVISION" prefix="SUPERVISION_">
|
||||
<define name="MIN_MOTOR" value="20"/>
|
||||
<define name="MAX_MOTOR" value="255"/>
|
||||
<define name="TRIM_A" value="0"/>
|
||||
<define name="TRIM_A" value="6"/>
|
||||
<define name="TRIM_E" value="0"/>
|
||||
<define name="TRIM_R" value="0"/>
|
||||
<define name="NB_MOTOR" value="4"/>
|
||||
@@ -70,18 +73,52 @@
|
||||
|
||||
<section name="IMU" prefix="IMU_">
|
||||
|
||||
<define name="GYRO_P_NEUTRAL" value="5"/>
|
||||
<define name="GYRO_Q_NEUTRAL" value="-10"/>
|
||||
<define name="GYRO_R_NEUTRAL" value="17"/>
|
||||
<define name="GYRO_P_NEUTRAL" value="-126"/>
|
||||
<define name="GYRO_Q_NEUTRAL" value="-29"/>
|
||||
<define name="GYRO_R_NEUTRAL" value="-32"/>
|
||||
|
||||
<!-- SENS ITG3200 1/14.375 (deg/s)/LSB, rate frac 12bit => 1/14.375 * pi / 180 * 2^12 -->
|
||||
<define name="GYRO_P_SENS" value="4.97312" integer="16"/>
|
||||
<define name="GYRO_Q_SENS" value="4.97312" integer="16"/>
|
||||
<define name="GYRO_R_SENS" value="4.97312" integer="16"/>
|
||||
|
||||
<define name="ACCEL_X_NEUTRAL" value="-5"/>
|
||||
<define name="ACCEL_X_NEUTRAL" value="4"/>
|
||||
<define name="ACCEL_Y_NEUTRAL" value="-17"/>
|
||||
<define name="ACCEL_Z_NEUTRAL" value="-22"/>
|
||||
|
||||
<!-- SENS ADXL345 16G 31.2 mg/LSB, accel frac 10bit => 31.2 * 2^10 / 1000 = 31.9488-->
|
||||
<define name="ACCEL_X_SENS" value="38.2816633245" integer="16"/>
|
||||
<define name="ACCEL_Y_SENS" value="38.7857058923" integer="16"/>
|
||||
<define name="ACCEL_Z_SENS" value="39.7459254023" integer="16"/>
|
||||
|
||||
<define name="MAG_X_NEUTRAL" value="85"/>
|
||||
<define name="MAG_Y_NEUTRAL" value="97"/>
|
||||
<define name="MAG_Z_NEUTRAL" value="-43"/>
|
||||
|
||||
<define name="MAG_X_SENS" value="5.43371021972" integer="16"/>
|
||||
<define name="MAG_Y_SENS" value="4.8961742578" integer="16"/>
|
||||
<define name="MAG_Z_SENS" value="5.31527656902" integer="16"/>
|
||||
|
||||
<define name="BODY_TO_IMU_PHI" value="RadOfDeg(0.)"/> <!-- -10 -->
|
||||
<define name="BODY_TO_IMU_THETA" value="RadOfDeg(0.)"/> <!-- -10 -->
|
||||
<define name="BODY_TO_IMU_PSI" value="RadOfDeg(0.)"/>
|
||||
|
||||
</section>
|
||||
|
||||
<section name="IMU_PROTO" prefix="IMU_PROTO_">
|
||||
|
||||
<define name="GYRO_P_NEUTRAL" value="-24"/>
|
||||
<define name="GYRO_Q_NEUTRAL" value="-8"/>
|
||||
<define name="GYRO_R_NEUTRAL" value="21"/>
|
||||
|
||||
<!-- SENS ITG3200 1/14.375 (deg/s)/LSB, rate frac 12bit => 1/14.375 * pi / 180 * 2^12 -->
|
||||
<define name="GYRO_P_SENS" value="4.97312" integer="16"/>
|
||||
<define name="GYRO_Q_SENS" value="4.97312" integer="16"/>
|
||||
<define name="GYRO_R_SENS" value="4.97312" integer="16"/>
|
||||
|
||||
<define name="ACCEL_X_NEUTRAL" value="-9"/>
|
||||
<define name="ACCEL_Y_NEUTRAL" value="0"/>
|
||||
<define name="ACCEL_Z_NEUTRAL" value="-20"/>
|
||||
<define name="ACCEL_Z_NEUTRAL" value="-29"/>
|
||||
|
||||
<!-- SENS ADXL345 16G 31.2 mg/LSB, accel frac 10bit => 31.2 * 2^10 / 1000 = 31.9488-->
|
||||
<define name="ACCEL_X_SENS" value="38.2683" integer="16"/>
|
||||
@@ -153,22 +190,22 @@
|
||||
<define name="REF_MAX_RDOT" value="RadOfDeg(900.)"/>
|
||||
|
||||
<!-- feedback -->
|
||||
<define name="PHI_PGAIN" value="-700"/>
|
||||
<define name="PHI_DGAIN" value="-200"/>
|
||||
<define name="PHI_IGAIN" value="-50"/>
|
||||
<define name="PHI_PGAIN" value="-350"/>
|
||||
<define name="PHI_DGAIN" value="-190"/>
|
||||
<define name="PHI_IGAIN" value="-100"/>
|
||||
|
||||
<define name="THETA_PGAIN" value="-700"/>
|
||||
<define name="THETA_DGAIN" value="-200"/>
|
||||
<define name="THETA_IGAIN" value="-50"/>
|
||||
<define name="THETA_PGAIN" value="-350"/>
|
||||
<define name="THETA_DGAIN" value="-190"/>
|
||||
<define name="THETA_IGAIN" value="-100"/>
|
||||
|
||||
<define name="PSI_PGAIN" value="-700"/>
|
||||
<define name="PSI_DGAIN" value="-250"/>
|
||||
<define name="PSI_IGAIN" value="-20"/>
|
||||
|
||||
<!-- feedforward -->
|
||||
<define name="PHI_DDGAIN" value=" 300"/>
|
||||
<define name="THETA_DDGAIN" value=" 300"/>
|
||||
<define name="PSI_DDGAIN" value=" 300"/>
|
||||
<define name="PHI_DDGAIN" value=" 70"/>
|
||||
<define name="THETA_DDGAIN" value=" 70"/>
|
||||
<define name="PSI_DDGAIN" value=" 70"/>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<joystick>
|
||||
<input>
|
||||
<axis index="6" name="pan"/>
|
||||
<axis index="7" name="tilt"/>
|
||||
</input>
|
||||
<messages period="0.1">
|
||||
<message class="datalink" name="BOOZ_CAM_STICK">
|
||||
<field name="tilt" value="-tilt"/>
|
||||
<field name="pan" value="pan"/>
|
||||
</message>
|
||||
</messages>
|
||||
</joystick>
|
||||
@@ -2171,6 +2171,12 @@
|
||||
<field name="yd" type="float" unit="m"/>
|
||||
</message>
|
||||
|
||||
<message name="BOOZ_CAM_STICK" id="152" link="forwarded">
|
||||
<field name="ac_id" type="uint8"/>
|
||||
<field name="tilt" type="int8"/>
|
||||
<field name="pan" type="int8"/>
|
||||
</message>
|
||||
|
||||
</class>
|
||||
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
</header>
|
||||
<init fun="booz_cam_init()"/>
|
||||
<periodic fun="booz_cam_periodic()" freq="10."/>
|
||||
<datalink message="BOOZ_CAM_STICK" fun="BOOZ_CAM_STICK_PARSE(dl_buffer)"/>
|
||||
<makefile>
|
||||
<define name="USE_CAM"/>
|
||||
<file name="booz_cam.c"/>
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
<!DOCTYPE module SYSTEM "module.dtd">
|
||||
<!--
|
||||
DROP_SERVO_CLOSED and DROP_SERVO_OPEN can be redefined in airframe file
|
||||
units: PWM width in us
|
||||
-->
|
||||
|
||||
<module name="drop">
|
||||
<!-- depend require="booz_pwm" -->
|
||||
@@ -9,8 +13,6 @@
|
||||
<periodic fun="booz_drop_periodic()" freq="10."/>
|
||||
<makefile>
|
||||
<define name="USE_DROP"/>
|
||||
<define name="DROP_SERVO_OPEN" value="2120"/>
|
||||
<define name="DROP_SERVO_CLOSED" value="1060"/>
|
||||
<file name="booz_drop.c"/>
|
||||
</makefile>
|
||||
</module>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
<module name="poles">
|
||||
<header>
|
||||
<file name="subsystems/navigation/nav_poles.h"/>
|
||||
<file name="nav_poles.h"/>
|
||||
</header>
|
||||
<makefile>
|
||||
<file name="nav_poles.c"/>
|
||||
|
||||
@@ -3,17 +3,17 @@
|
||||
|
||||
<dl_settings NAME="CAM">
|
||||
<dl_setting var="booz_cam_mode" MIN="0" STEP="1" MAX="3" module="cam_control/booz_cam" shortname="mode" values="NONE|MAN|HEADING|WP" handler="SetCamMode">
|
||||
<strip_button name="CN" value="0"/>
|
||||
<strip_button name="CM" value="1"/>
|
||||
<strip_button name="CH" value="2"/>
|
||||
<strip_button name="CWP" value="3"/>
|
||||
<strip_button name="CN" value="0" group="cam_mode1"/>
|
||||
<strip_button name="CM" value="1" group="cam_mode1"/>
|
||||
<strip_button name="CH" value="2" group="cam_mode2"/>
|
||||
<strip_button name="CWP" value="3" group="cam_mode2"/>
|
||||
<key_press key="F1" value="0"/>
|
||||
<key_press key="F2" value="1"/>
|
||||
</dl_setting>
|
||||
<dl_setting var="booz_cam_tilt_pwm" min="1000" step="1" max="2500" shortname="tilt_pwm"/>
|
||||
<dl_setting var="booz_cam_tilt" min="-90" step="1" max="0" shortname="tilt" alt_unit="deg" alt_unit_coef="0.0139882">
|
||||
<strip_button name="Look Foreward" icon="lookfore.png" value="0"/>
|
||||
<strip_button name="Look Down" icon="lookdown.png" value="-6434"/>
|
||||
<strip_button name="Look Foreward" icon="lookfore.png" value="0" group="cam_look"/>
|
||||
<strip_button name="Look Down" icon="lookdown.png" value="-6434" group="cam_look"/>
|
||||
</dl_setting>
|
||||
<dl_setting var="booz_cam_pan" MIN="0" STEP="1" MAX="360" shortname="pan" unit="1/2^12r" alt_unit="deg" alt_unit_coef="0.0139882"/>
|
||||
</dl_settings>
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
<settings>
|
||||
<dl_settings>
|
||||
<dl_settings NAME="Poles">
|
||||
<dl_setting MAX="40" MIN="1" STEP="1" VAR="nav_poles_count" module="nav_poles"/>
|
||||
<dl_setting MAX="40" MIN="1" STEP="1" VAR="nav_poles_count" module="modules/poles/nav_poles"/>
|
||||
<dl_setting MAX="180" MIN="0" STEP="1" VAR="nav_poles_time"/>
|
||||
<dl_setting MAX="1" MIN="-1" STEP="2" VAR="nav_poles_land" handler="SetLandDir"/>
|
||||
</dl_settings>
|
||||
</dl_settings>
|
||||
</settings>
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
|
||||
<dl_settings NAME="Drop">
|
||||
<dl_setting var="booz_drop_ball" min="0" step="1" max="1" module="drop/booz_drop" values="Closed|Open">
|
||||
<strip_button name="OPEN" value="1"/>
|
||||
<strip_button name="CLOSE" value="0"/>
|
||||
<strip_button name="OPEN" value="1" group="drop"/>
|
||||
<strip_button name="CLOSE" value="0" group="drop"/>
|
||||
</dl_setting>
|
||||
</dl_settings>
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<message name="ROTORCRAFT_NAV_STATUS" period="1.6"/>
|
||||
<message name="WP_MOVED" period="1.3"/>
|
||||
<message name="BOOZ2_CAM" period="1."/>
|
||||
<message name="BOOZ2_GPS" period=".25"/>
|
||||
<message name="GPS_INT" period=".25"/>
|
||||
<message name="INS" period=".25"/>
|
||||
</mode>
|
||||
|
||||
|
||||
@@ -217,7 +217,7 @@
|
||||
static uint8_t i; \
|
||||
int16_t climb = -gps.ned_vel.z; \
|
||||
int16_t course = (DegOfRad(gps.course)/((int32_t)1e6)); \
|
||||
DOWNLINK_SEND_GPS(DefaultChannel, &gps.fix, &gps.utm_pos.east, &gps.utm_pos.north, &course, &gps.lla_pos.alt, &gps.gspeed, &climb, &gps.week, &gps.tow, &gps.utm_pos.zone, &i); \
|
||||
DOWNLINK_SEND_GPS(DefaultChannel, &gps.fix, &gps.utm_pos.east, &gps.utm_pos.north, &course, &gps.hmsl, &gps.gspeed, &climb, &gps.week, &gps.tow, &gps.utm_pos.zone, &i); \
|
||||
if ((gps.fix != GPS_FIX_3D) && (i >= gps.nb_channels)) i = 0; \
|
||||
if (i >= gps.nb_channels * 2) i = 0; \
|
||||
if (i < gps.nb_channels && gps.svinfos[i].cno > 0) { \
|
||||
|
||||
@@ -91,7 +91,7 @@ void imu_umarim_event( void )
|
||||
// If the itg3200 I2C transaction has succeeded: convert the data
|
||||
itg3200_event();
|
||||
if (itg3200_data_available) {
|
||||
RATES_COPY(imu.gyro_unscaled, itg3200_data);
|
||||
RATES_ASSIGN(imu.gyro_unscaled, itg3200_data.p, itg3200_data.q, itg3200_data.r);
|
||||
itg3200_data_available = FALSE;
|
||||
gyr_valid = TRUE;
|
||||
}
|
||||
@@ -99,6 +99,7 @@ void imu_umarim_event( void )
|
||||
// If the adxl345 I2C transaction has succeeded: convert the data
|
||||
adxl345_event();
|
||||
if (adxl345_data_available) {
|
||||
// Be careful with orientation of the ADXL (ITG axes are taken as default reference)
|
||||
VECT3_ASSIGN(imu.accel_unscaled, adxl345_data.y, -adxl345_data.x, adxl345_data.z);
|
||||
adxl345_data_available = FALSE;
|
||||
acc_valid = TRUE;
|
||||
|
||||
@@ -44,6 +44,39 @@
|
||||
|
||||
/* ADC */
|
||||
|
||||
#define ADC_0 AdcBank1(5)
|
||||
#ifdef USE_ADC_0
|
||||
#ifndef USE_AD1
|
||||
#define USE_AD1
|
||||
#endif
|
||||
#define USE_AD1_5
|
||||
#endif
|
||||
|
||||
#define ADC_1 AdcBank1(4)
|
||||
#ifdef USE_ADC_1
|
||||
#ifndef USE_AD1
|
||||
#define USE_AD1
|
||||
#endif
|
||||
#define USE_AD1_4
|
||||
#endif
|
||||
|
||||
#define ADC_2 AdcBank1(3)
|
||||
#ifdef USE_ADC_2
|
||||
#ifndef USE_AD1
|
||||
#define USE_AD1
|
||||
#endif
|
||||
#define USE_AD1_3
|
||||
#endif
|
||||
|
||||
#define ADC_3 AdcBank1(2)
|
||||
#ifdef USE_ADC_3
|
||||
#ifndef USE_AD1
|
||||
#define USE_AD1
|
||||
#endif
|
||||
#define USE_AD1_2
|
||||
#endif
|
||||
|
||||
|
||||
/* battery */
|
||||
#define ADC_CHANNEL_VSUPPLY AdcBank0(2)
|
||||
#ifndef USE_AD0
|
||||
|
||||
+7
-5
@@ -69,11 +69,13 @@ void stabilization_attitude_ref_init(void) {
|
||||
#define OMEGA_2_R_RES 7
|
||||
#define OMEGA_2_R BFP_OF_REAL((OMEGA_R*OMEGA_R), OMEGA_2_R_RES)
|
||||
|
||||
#define USE_REF 1
|
||||
#ifndef USE_ATTITUDE_REF
|
||||
#define USE_ATTITUDE_REF 1
|
||||
#endif
|
||||
|
||||
void stabilization_attitude_ref_update() {
|
||||
|
||||
#ifdef USE_REF
|
||||
#if USE_ATTITUDE_REF
|
||||
|
||||
/* dumb integrate reference attitude */
|
||||
const struct Int32Eulers d_angle = {
|
||||
@@ -120,10 +122,10 @@ void stabilization_attitude_ref_update() {
|
||||
/* saturate speed and trim accel accordingly */
|
||||
SATURATE_SPEED_TRIM_ACCEL();
|
||||
|
||||
#else /* !USE_REF */
|
||||
EULERS_COPY(stab_att_ref_euler, stabilization_att_sp);
|
||||
#else /* !USE_ATTITUDE_REF */
|
||||
EULERS_COPY(stab_att_ref_euler, stab_att_sp_euler);
|
||||
INT_RATES_ZERO(stab_att_ref_rate);
|
||||
INT_RATES_ZERO(stab_att_ref_accel);
|
||||
#endif /* USE_REF */
|
||||
#endif /* USE_ATTITUDE_REF */
|
||||
|
||||
}
|
||||
|
||||
@@ -135,6 +135,9 @@ void stabilization_rate_read_rc( void ) {
|
||||
stabilization_rate_sp.r = (int32_t)-radio_control.values[RADIO_YAW] * STABILIZATION_RATE_SP_MAX_R / MAX_PPRZ;
|
||||
else
|
||||
stabilization_rate_sp.r = 0;
|
||||
|
||||
// Setpoint at ref resolution
|
||||
INT_RATES_LSHIFT(stabilization_rate_sp, stabilization_rate_sp, REF_FRAC - INT32_RATE_FRAC);
|
||||
}
|
||||
|
||||
void stabilization_rate_enter(void) {
|
||||
|
||||
@@ -299,6 +299,13 @@
|
||||
(_c).r = (_a).r + (_b).r; \
|
||||
}
|
||||
|
||||
/* c = a + _s * b */
|
||||
#define RATES_SUM_SCALED(_c, _a, _b, _s) { \
|
||||
(_c).p = (_a).p + (_s)*(_b).p; \
|
||||
(_c).q = (_a).q + (_s)*(_b).q; \
|
||||
(_c).r = (_a).r + (_s)*(_b).r; \
|
||||
}
|
||||
|
||||
/* c = a - b */
|
||||
#define RATES_DIFF(_c, _a, _b) { \
|
||||
(_c).p = (_a).p - (_b).p; \
|
||||
|
||||
@@ -72,7 +72,7 @@ int16_t booz_cam_pan;
|
||||
#endif
|
||||
|
||||
void booz_cam_init(void) {
|
||||
booz_cam_mode = BOOZ_CAM_DEFAULT_MODE;
|
||||
booz_cam_SetCamMode(BOOZ_CAM_DEFAULT_MODE);
|
||||
#ifdef BOOZ_CAM_USE_TILT
|
||||
booz_cam_tilt_pwm = BOOZ_CAM_TILT_NEUTRAL;
|
||||
BOOZ_CAM_SetPwm(booz_cam_tilt_pwm);
|
||||
@@ -81,10 +81,15 @@ void booz_cam_init(void) {
|
||||
#ifdef BOOZ_CAM_USE_PAN
|
||||
booz_cam_pan = BOOZ_CAM_PAN_NEUTRAL;
|
||||
#endif
|
||||
if (booz_cam_mode == BOOZ_CAM_MODE_NONE) { LED_ON(CAM_SWITCH_LED); } // CAM OFF
|
||||
else { LED_OFF(CAM_SWITCH_LED); } // CAM ON
|
||||
}
|
||||
|
||||
#define ABS(_x) ((_x) < 0 ? -(_x) : (_x))
|
||||
#define D_TILT (BOOZ_CAM_TILT_MAX - BOOZ_CAM_TILT_MIN)
|
||||
#define CT_MIN Min(BOOZ_CAM_TILT_MIN,BOOZ_CAM_TILT_MAX)
|
||||
#define CT_MAX Max(BOOZ_CAM_TILT_MIN,BOOZ_CAM_TILT_MAX)
|
||||
#define CP_MIN Min(BOOZ_CAM_PAN_MIN,BOOZ_CAM_PAN_MAX)
|
||||
#define CP_MAX Max(BOOZ_CAM_PAN_MIN,BOOZ_CAM_PAN_MAX)
|
||||
|
||||
void booz_cam_periodic(void) {
|
||||
|
||||
switch (booz_cam_mode) {
|
||||
@@ -98,17 +103,17 @@ void booz_cam_periodic(void) {
|
||||
break;
|
||||
case BOOZ_CAM_MODE_MANUAL:
|
||||
#ifdef BOOZ_CAM_USE_TILT
|
||||
Bound(booz_cam_tilt_pwm,BOOZ_CAM_TILT_MIN,BOOZ_CAM_TILT_MAX);
|
||||
Bound(booz_cam_tilt_pwm, CT_MIN, CT_MAX);
|
||||
#endif
|
||||
break;
|
||||
case BOOZ_CAM_MODE_HEADING:
|
||||
#ifdef BOOZ_CAM_USE_TILT_ANGLES
|
||||
Bound(booz_cam_tilt,CAM_TA_MIN,CAM_TA_MAX);
|
||||
booz_cam_tilt_pwm = BOOZ_CAM_TILT_MIN + (BOOZ_CAM_TILT_MAX - BOOZ_CAM_TILT_MIN) * (booz_cam_tilt - CAM_TA_MIN) / (CAM_TA_MAX - CAM_TA_MIN);
|
||||
Bound(booz_cam_tilt_pwm,BOOZ_CAM_TILT_MIN,BOOZ_CAM_TILT_MAX);
|
||||
booz_cam_tilt_pwm = BOOZ_CAM_TILT_MIN + D_TILT * (booz_cam_tilt - CAM_TA_MIN) / (CAM_TA_MAX - CAM_TA_MIN);
|
||||
Bound(booz_cam_tilt_pwm, CT_MIN, CT_MAX);
|
||||
#endif
|
||||
#ifdef BOOZ_CAM_USE_PAN
|
||||
Bound(booz_cam_pan,BOOZ_CAM_PAN_MIN,BOOZ_CAM_PAN_MAX);
|
||||
Bound(booz_cam_pan, CP_MIN, CP_MAX);
|
||||
nav_heading = booz_cam_pan;
|
||||
#endif
|
||||
break;
|
||||
@@ -126,8 +131,8 @@ void booz_cam_periodic(void) {
|
||||
height = (waypoints[WP_CAM].z - ins_enu_pos.z) >> INT32_POS_FRAC;
|
||||
INT32_ATAN2(booz_cam_tilt, height, dist);
|
||||
Bound(booz_cam_tilt, CAM_TA_MIN, CAM_TA_MAX);
|
||||
booz_cam_tilt_pwm = BOOZ_CAM_TILT_MIN + (BOOZ_CAM_TILT_MAX - BOOZ_CAM_TILT_MIN) * (booz_cam_tilt - CAM_TA_MIN) / (CAM_TA_MAX - CAM_TA_MIN);
|
||||
Bound(booz_cam_tilt_pwm, BOOZ_CAM_TILT_MIN, BOOZ_CAM_TILT_MAX);
|
||||
booz_cam_tilt_pwm = BOOZ_CAM_TILT_MIN + D_TILT * (booz_cam_tilt - CAM_TA_MIN) / (CAM_TA_MAX - CAM_TA_MIN);
|
||||
Bound(booz_cam_tilt_pwm, CT_MIN, CT_MAX);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#define BOOZ_CAM_H
|
||||
|
||||
#include "generated/airframe.h"
|
||||
#include "math/pprz_algebra_int.h"
|
||||
#include "std.h"
|
||||
#include "led.h"
|
||||
|
||||
@@ -34,6 +35,16 @@
|
||||
#define BOOZ_CAM_MODE_HEADING 2
|
||||
#define BOOZ_CAM_MODE_WP 3
|
||||
|
||||
// Warning:
|
||||
// LED_ON set GPIO low
|
||||
// LED_OFF set GPIO high
|
||||
#ifndef BOOZ_CAM_ON
|
||||
#define BOOZ_CAM_ON LED_OFF(CAM_SWITCH_LED)
|
||||
#endif
|
||||
#ifndef BOOZ_CAM_OFF
|
||||
#define BOOZ_CAM_OFF LED_ON(CAM_SWITCH_LED)
|
||||
#endif
|
||||
|
||||
extern uint8_t booz_cam_mode;
|
||||
|
||||
#ifdef BOOZ_CAM_TILT_NEUTRAL
|
||||
@@ -49,8 +60,17 @@ extern void booz_cam_periodic(void);
|
||||
|
||||
#define booz_cam_SetCamMode(_v) { \
|
||||
booz_cam_mode = _v; \
|
||||
if (booz_cam_mode == BOOZ_CAM_MODE_NONE) { LED_ON(CAM_SWITCH_LED); } \
|
||||
else { LED_OFF(CAM_SWITCH_LED); } \
|
||||
if (booz_cam_mode == BOOZ_CAM_MODE_NONE) { BOOZ_CAM_OFF; } \
|
||||
else { BOOZ_CAM_ON; } \
|
||||
}
|
||||
|
||||
#define BOOZ_CAM_STICK_TILT_INC (ANGLE_BFP_OF_REAL(RadOfDeg(10.))/127.)
|
||||
#define BOOZ_CAM_STICK_PAN_INC (ANGLE_BFP_OF_REAL(RadOfDeg(20.))/127.)
|
||||
|
||||
#define BOOZ_CAM_STICK_PARSE(_dl_buffer) { \
|
||||
booz_cam_tilt += (int16_t)(BOOZ_CAM_STICK_TILT_INC*(float)DL_BOOZ_CAM_STICK_tilt(_dl_buffer)); \
|
||||
booz_cam_pan += (int16_t)(BOOZ_CAM_STICK_PAN_INC*(float)DL_BOOZ_CAM_STICK_pan(dl_buffer)); \
|
||||
INT32_COURSE_NORMALIZE(booz_cam_pan); \
|
||||
}
|
||||
|
||||
#endif /* BOOZ2_CAM_H */
|
||||
|
||||
@@ -33,5 +33,6 @@ extern void booz_drop_init(void);
|
||||
extern void booz_drop_periodic(void);
|
||||
|
||||
#define NavDropNow() ({ booz_drop_ball = TRUE; FALSE; })
|
||||
#define NavDropClose() ({ booz_drop_ball = FALSE; FALSE; })
|
||||
|
||||
#endif /* BOOZ_DROP_H */
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
#include "subsystems/navigation/nav_poles.h"
|
||||
#include "modules/poles/nav_poles.h"
|
||||
#include "subsystems/navigation/common_nav.h"
|
||||
|
||||
uint8_t nav_poles_count = 0;
|
||||
float nav_poles_time = 0.;
|
||||
int8_t nav_poles_land = 1;
|
||||
|
||||
#define SAFETY_MARGIN 0.9
|
||||
#define SAFETY_MARGIN 0.7
|
||||
|
||||
/** computes position of wp1c and wp2c, reference points for an oval around
|
||||
waypoints wp1 and wp2 */
|
||||
|
||||
@@ -5,9 +5,13 @@
|
||||
#include "std.h"
|
||||
|
||||
extern uint8_t nav_poles_count;
|
||||
extern float nav_poles_time;
|
||||
extern int8_t nav_poles_land;
|
||||
|
||||
bool nav_poles_init(uint8_t wp1, uint8_t wp2,
|
||||
uint8_t wp1c, uint8_t wp2c,
|
||||
float radius );
|
||||
|
||||
#define nav_poles_SetLandDir(_d) { if (_d < 0) _d = -1; else _d = 1; }
|
||||
|
||||
#endif
|
||||
|
||||
@@ -91,6 +91,18 @@ int renorm_blowup_count = 0;
|
||||
float imu_health = 0.;
|
||||
#endif
|
||||
|
||||
#ifdef USE_HIGH_ACCEL_FLAG
|
||||
// High Accel Flag
|
||||
#define HIGH_ACCEL_LOW_SPEED 15.0
|
||||
#define HIGH_ACCEL_LOW_SPEED_RESUME 4.0 // Hysteresis
|
||||
#define HIGH_ACCEL_HIGH_THRUST (0.8*MAX_PPRZ)
|
||||
#define HIGH_ACCEL_HIGH_THRUST_RESUME (0.1*MAX_PPRZ) // Hysteresis
|
||||
bool_t high_accel_done;
|
||||
bool_t high_accel_flag;
|
||||
// Command vector for thrust (fixed_wing)
|
||||
#include "inter_mcu.h"
|
||||
#endif
|
||||
|
||||
|
||||
static inline void set_dcm_matrix_from_rmat(struct FloatRMat *rmat)
|
||||
{
|
||||
@@ -175,6 +187,11 @@ void ahrs_init(void) {
|
||||
|
||||
/* set inital filter dcm */
|
||||
set_dcm_matrix_from_rmat(&ahrs_float.ltp_to_imu_rmat);
|
||||
|
||||
#ifdef USE_HIGH_ACCEL_FLAG
|
||||
high_accel_done = FALSE;
|
||||
high_accel_flag = FALSE;
|
||||
#endif
|
||||
}
|
||||
|
||||
void ahrs_align(void)
|
||||
@@ -411,6 +428,25 @@ void Drift_correction(void)
|
||||
// Weight for accelerometer info (<0.5G = 0.0, 1G = 1.0 , >1.5G = 0.0)
|
||||
Accel_weight = Chop(1 - 2*fabs(1 - Accel_magnitude),0,1); //
|
||||
|
||||
#ifdef USE_HIGH_ACCEL_FLAG
|
||||
// Test for high acceleration:
|
||||
// - low speed
|
||||
// - high thrust
|
||||
if (estimator_hspeed_mod < HIGH_ACCEL_LOW_SPEED && ap_state->commands[COMMAND_THROTTLE] > HIGH_ACCEL_HIGH_THRUST && !high_accel_done) {
|
||||
high_accel_flag = TRUE;
|
||||
} else {
|
||||
high_accel_flag = FALSE;
|
||||
if (estimator_hspeed_mod > HIGH_ACCEL_LOW_SPEED && !high_accel_done) {
|
||||
high_accel_done = TRUE; // After takeoff, don't use high accel before landing (GS small, Throttle small)
|
||||
}
|
||||
if (estimator_hspeed_mod < HIGH_ACCEL_HIGH_THRUST_RESUME && ap_state->commands[COMMAND_THROTTLE] < HIGH_ACCEL_HIGH_THRUST_RESUME) {
|
||||
high_accel_done = FALSE; // Activate high accel after landing
|
||||
}
|
||||
}
|
||||
if (high_accel_flag) { Accel_weight = 0.; }
|
||||
#endif
|
||||
|
||||
|
||||
#if PERFORMANCE_REPORTING == 1
|
||||
{
|
||||
|
||||
|
||||
@@ -95,7 +95,41 @@ void ahrs_align(void) {
|
||||
|
||||
}
|
||||
|
||||
//#define USE_NOISE_CUT 1
|
||||
//#define USE_NOISE_FILTER 1
|
||||
#define NOISE_FILTER_GAIN 50
|
||||
|
||||
#ifdef USE_NOISE_CUT
|
||||
#include "led.h"
|
||||
static inline bool_t cut_rates (struct Int32Rates i1, struct Int32Rates i2, int32_t threshold) {
|
||||
struct Int32Rates diff;
|
||||
RATES_DIFF(diff, i1, i2);
|
||||
if (diff.p < -threshold || diff.p > threshold ||
|
||||
diff.q < -threshold || diff.q > threshold ||
|
||||
diff.r < -threshold || diff.r > threshold) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
#define RATE_CUT_THRESHOLD RATE_BFP_OF_REAL(1)
|
||||
|
||||
static inline bool_t cut_accel (struct Int32Vect3 i1, struct Int32Vect3 i2, int32_t threshold) {
|
||||
struct Int32Vect3 diff;
|
||||
VECT3_DIFF(diff, i1, i2);
|
||||
if (diff.x < -threshold || diff.x > threshold ||
|
||||
diff.y < -threshold || diff.y > threshold ||
|
||||
diff.z < -threshold || diff.z > threshold) {
|
||||
LED_ON(4);
|
||||
return TRUE;
|
||||
} else {
|
||||
LED_OFF(4);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
#define ACCEL_CUT_THRESHOLD ACCEL_BFP_OF_REAL(20)
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
*
|
||||
@@ -116,9 +150,22 @@ void ahrs_propagate(void) {
|
||||
/* unbias gyro */
|
||||
struct Int32Rates uf_rate;
|
||||
RATES_DIFF(uf_rate, imu.gyro, ahrs_impl.gyro_bias);
|
||||
/* low pass rate */
|
||||
RATES_ADD(ahrs.imu_rate, uf_rate);
|
||||
RATES_SDIV(ahrs.imu_rate, ahrs.imu_rate, 2);
|
||||
#ifdef USE_NOISE_CUT
|
||||
static struct Int32Rates last_uf_rate = { 0, 0, 0 };
|
||||
if (!cut_rates(uf_rate, last_uf_rate, RATE_CUT_THRESHOLD)) {
|
||||
#endif
|
||||
/* low pass rate */
|
||||
#ifdef USE_NOISE_FILTER
|
||||
RATES_SUM_SCALED(ahrs.imu_rate, ahrs.imu_rate, uf_rate, NOISE_FILTER_GAIN);
|
||||
RATES_SDIV(ahrs.imu_rate, ahrs.imu_rate, NOISE_FILTER_GAIN+1);
|
||||
#else
|
||||
RATES_ADD(ahrs.imu_rate, uf_rate);
|
||||
RATES_SDIV(ahrs.imu_rate, ahrs.imu_rate, 2);
|
||||
#endif
|
||||
#ifdef USE_NOISE_CUT
|
||||
}
|
||||
RATES_COPY(last_uf_rate, uf_rate);
|
||||
#endif
|
||||
|
||||
/* integrate eulers */
|
||||
struct Int32Eulers euler_dot;
|
||||
@@ -152,7 +199,21 @@ void ahrs_propagate(void) {
|
||||
|
||||
void ahrs_update_accel(void) {
|
||||
|
||||
get_phi_theta_measurement_fom_accel(&ahrs_impl.measurement.phi, &ahrs_impl.measurement.theta, imu.accel);
|
||||
#if defined(USE_NOISE_CUT) || defined(USE_NOISE_FILTER)
|
||||
static struct Int32Vect3 last_accel = { 0, 0, 0 };
|
||||
#endif
|
||||
#ifdef USE_NOISE_CUT
|
||||
if (!cut_accel(imu.accel, last_accel, ACCEL_CUT_THRESHOLD)) {
|
||||
#endif
|
||||
#ifdef USE_NOISE_FILTER
|
||||
VECT3_SUM_SCALED(imu.accel, imu.accel, last_accel, NOISE_FILTER_GAIN);
|
||||
VECT3_SDIV(imu.accel, imu.accel, NOISE_FILTER_GAIN+1);
|
||||
#endif
|
||||
get_phi_theta_measurement_fom_accel(&ahrs_impl.measurement.phi, &ahrs_impl.measurement.theta, imu.accel);
|
||||
#ifdef USE_NOISE_CUT
|
||||
}
|
||||
VECT3_COPY(last_accel, imu.accel);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -175,7 +175,8 @@ bool_t nav_approaching_xy(float x, float y, float from_x, float from_y, float ap
|
||||
|
||||
#define NavAttitude(_roll) { \
|
||||
lateral_mode = LATERAL_MODE_ROLL; \
|
||||
h_ctl_roll_setpoint = _roll; \
|
||||
if(pprz_mode != PPRZ_MODE_AUTO1) \
|
||||
{h_ctl_roll_setpoint = _roll;} \
|
||||
}
|
||||
|
||||
#define nav_IncreaseShift(x) { if (x==0) nav_shift = 0; else nav_shift += x; }
|
||||
|
||||
@@ -93,11 +93,11 @@ let get_last_geo_pos = fun lookup ->
|
||||
and utm_north = float_of_string (lookup "GPS" "utm_north") /. 100.
|
||||
and utm_zone = int_of_string (lookup "GPS" "utm_zone") in
|
||||
Latlong.of_utm WGS84 {utm_x=utm_east; utm_y=utm_north; utm_zone=utm_zone}
|
||||
else if lookup "NAV_REF" "x" <>"" && lookup "ROTORCRAFT_FP" "east" <>"" then
|
||||
else if lookup "INS_REF" "ecef_x0" <>"" && lookup "ROTORCRAFT_FP" "east" <>"" then
|
||||
let getf = fun m f -> float_of_string (lookup m f) in
|
||||
let x0 = getf "NAV_REF" "x" /. 100.
|
||||
and y0 = getf "NAV_REF" "y" /. 100.
|
||||
and z0 = getf "NAV_REF" "z" /. 100.
|
||||
let x0 = getf "INS_REF" "ecef_x0" /. 100.
|
||||
and y0 = getf "INS_REF" "ecef_y0" /. 100.
|
||||
and z0 = getf "INS_REF" "ecef_z0" /. 100.
|
||||
and e = getf "ROTORCRAFT_FP" "east" /. 256.
|
||||
and n = getf "ROTORCRAFT_FP" "north" /. 256.
|
||||
and u = getf "ROTORCRAFT_FP" "up" /. 256. in
|
||||
|
||||
@@ -543,10 +543,10 @@ let rec select_gps_values = function
|
||||
l := (t, of_utm WGS84 utm, a) :: !l
|
||||
done;
|
||||
List.rev !l
|
||||
| (m, values)::_ when m.Pprz.name = "BOOZ2_GPS" ->
|
||||
| (m, values)::_ when m.Pprz.name = "GPS_INT" ->
|
||||
let lats = List.assoc "lat" values
|
||||
and lons = List.assoc "lon" values
|
||||
and alts = List.assoc "alt" values in
|
||||
and alts = List.assoc "hmsl" values in
|
||||
let l = ref [] in
|
||||
for i = 0 to Array.length lats - 1 do
|
||||
let a = snd alts.(i) /. 1000. in
|
||||
@@ -554,7 +554,7 @@ let rec select_gps_values = function
|
||||
let t = fst lats.(i)
|
||||
and lat = snd lats.(i) /. 1e7
|
||||
and lon = snd lons.(i) /. 1e7 in
|
||||
let wgs84 = make_geo_deg lat lon in
|
||||
let wgs84 = make_geo lat lon in
|
||||
l := (t, wgs84, a) :: !l
|
||||
done;
|
||||
List.rev !l
|
||||
|
||||
Reference in New Issue
Block a user