[boards] Porting KroozSD

This commit is contained in:
Sergey Krukovski
2013-05-11 08:24:36 -07:00
committed by Felix Ruess
parent 3e689f0ce6
commit b79972b7a8
10 changed files with 1245 additions and 110 deletions
+5 -2
View File
@@ -160,12 +160,12 @@ endif
endif endif
LDFLAGS += -Wl,-Map=$(OBJDIR)/$(TARGET).map,--cref,--gc-sections LDFLAGS += -Wl,-Map=$(OBJDIR)/$(TARGET).map,--cref,--gc-sections
LDLIBS += -lc -lm -lgcc
ifneq ($(ARCH_L), ) ifneq ($(ARCH_L), )
LDLIBS += -lopencm3_stm32$(ARCH_L) LDLIBS += -lopencm3_stm32$(ARCH_L)
else else
LDLIBS += -lopencm3_stm32f1 LDLIBS += -lopencm3_stm32f1
endif endif
LDLIBS += -lc -lm -lgcc
CPFLAGS = -j .isr_vector -j .text -j .data CPFLAGS = -j .isr_vector -j .text -j .data
CPFLAGS_BIN = -Obinary CPFLAGS_BIN = -Obinary
@@ -234,11 +234,14 @@ ifeq ($(FLASH_MODE),DFU)
ifdef DFU_ADDR ifdef DFU_ADDR
DFU_ADDR_CMD = --addr=$(DFU_ADDR) DFU_ADDR_CMD = --addr=$(DFU_ADDR)
endif endif
ifdef DFU_PRODUCT
DFU_PRODUCT_CMD = --product=$(DFU_PRODUCT)
endif
# #
# DFU flash mode # DFU flash mode
upload: $(OBJDIR)/$(TARGET).bin upload: $(OBJDIR)/$(TARGET).bin
@echo "Using stm32 mem dfu loader" @echo "Using stm32 mem dfu loader"
$(PYTHON) $(PAPARAZZI_SRC)/sw/tools/dfu/stm32_mem.py $(DFU_ADDR_CMD) $^ $(PYTHON) $(PAPARAZZI_SRC)/sw/tools/dfu/stm32_mem.py $(DFU_PRODUCT_CMD) $(DFU_ADDR_CMD) $^
# #
# serial flash mode # serial flash mode
+249
View File
@@ -0,0 +1,249 @@
<!DOCTYPE airframe SYSTEM "../../airframe.dtd">
<airframe name="Hexarotor KroozSD Mkk">
<firmware name="rotorcraft">
<target name="ap" board="krooz_sd"/>
<target name="nps" board="pc">
<subsystem name="fdm" type="jsbsim"/>
<subsystem name="radio_control" type="ppm"/>
</target>
<subsystem name="radio_control" type="ppm"/>
<subsystem name="telemetry" type="transparent"/>
<subsystem name="motor_mixing"/>
<subsystem name="actuators" type="mkk">
<define name="I2C_TRANSACTION_QUEUE_LEN" value="10"/>
<define name="I2C1_CLOCK_SPEED" value="42000"/>
</subsystem>
<subsystem name="stabilization" type="euler"/>
<subsystem name="gps" type="ublox"/>
<subsystem name="imu" type="krooz_sd"/>
<subsystem name="ahrs" type="int_cmpl_quat"/>
<subsystem name="ins" type="hff"/>
<define name="NO_RC_THRUST_LIMIT"/>
<define name="USE_RC_FP_BLOCK_SWITCHING"/>
<define name="USE_ATTITUDE_REF" value="0"/>
</firmware>
<modules main_freq="512">
<!--<load name="gps_ubx_ucenter.xml"/>
<load name="geo_mag.xml"/>
<load name="sys_mon.xml"/>-->
</modules>
<commands>
<axis name="ROLL" failsafe_value="0"/>
<axis name="PITCH" failsafe_value="0"/>
<axis name="YAW" failsafe_value="0"/>
<axis name="THRUST" failsafe_value="0"/>
</commands>
<section name="ACTUATORS_MKK" prefix="ACTUATORS_MKK_">
<define name="NB" value="6"/>
<define name="ADDR" value="{ 0x52, 0x54, 0x56, 0x58 , 0x5A , 0x5C }"/>
</section>
<servos driver="Mkk">
<servo name="FF" no="0" min="0" neutral="3" max="210"/>
<servo name="FR" no="1" min="0" neutral="3" max="210"/>
<servo name="DR" no="2" min="0" neutral="3" max="210"/>
<servo name="DD" no="3" min="0" neutral="3" max="210"/>
<servo name="DL" no="4" min="0" neutral="3" max="210"/>
<servo name="FL" no="5" min="0" neutral="3" max="210"/>
</servos>
<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="TRIM_A" value="0"/>
<define name="TRIM_E" value="0"/>
<define name="TRIM_R" value="0"/>
<define name="NB_MOTOR" value="6"/>
<define name="SCALE" value="256"/>
<define name="ROLL_COEF" value="{ 0, -256, -256, 0, 256, 256 }"/>
<define name="PITCH_COEF" value="{ 256, 128, -128, -256, -128, 128 }"/>
<define name="YAW_COEF" value="{ -256, 249, -249, 256, -249, 249 }"/>
<define name="THRUST_COEF" value="{ 256, 256, 256, 256, 256, 256 }"/>
</section>
<command_laws>
<call fun="motor_mixing_run(autopilot_motors_on,FALSE,values)"/>
<set servo="FF" value="motor_mixing.commands[SERVO_FF]"/>
<set servo="FR" value="motor_mixing.commands[SERVO_FR]"/>
<set servo="DR" value="motor_mixing.commands[SERVO_DR]"/>
<set servo="DD" value="motor_mixing.commands[SERVO_DD]"/>
<set servo="DL" value="motor_mixing.commands[SERVO_DL]"/>
<set servo="FL" value="motor_mixing.commands[SERVO_FL]"/>
</command_laws>
<section name="VERSION" prefix="VERSION_">
<define name="MAJOR" value="1"/>
<define name="MINOR" value="2"/>
</section>
<section name="IMU" prefix="IMU_">
<!-- replace this with your own calibration -->
<define name="GYRO_P_NEUTRAL" value="0"/>
<define name="GYRO_Q_NEUTRAL" value="0"/>
<define name="GYRO_R_NEUTRAL" value="0"/>
<define name="GYRO_P_SENS" value=" 4.41" integer="16"/>
<define name="GYRO_Q_SENS" value=" 4.41" integer="16"/>
<define name="GYRO_R_SENS" value=" 4.41" integer="16"/>
<define name="ACCEL_X_NEUTRAL" value="-24"/>
<define name="ACCEL_Y_NEUTRAL" value="122"/>
<define name="ACCEL_Z_NEUTRAL" value="-130"/>
<define name="ACCEL_X_SENS" value="4.90555515454" integer="16"/>
<define name="ACCEL_Y_SENS" value="4.90893349017" integer="16"/>
<define name="ACCEL_Z_SENS" value="4.75238978393" integer="16"/>
<define name="MAG_X_NEUTRAL" value="-136"/>
<define name="MAG_Y_NEUTRAL" value="-103"/>
<define name="MAG_Z_NEUTRAL" value="6"/>
<define name="MAG_X_SENS" value="3.18492472198" integer="16"/>
<define name="MAG_Y_SENS" value="3.42471474617" integer="16"/>
<define name="MAG_Z_SENS" value="3.42088446936" 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="AHRS" prefix="AHRS_">
<define name="PROPAGATE_LOW_PASS_RATES" value="1"/>
<define name="GRAVITY_UPDATE_NORM_HEURISTIC" value="1"/>
<define name="H_X" value="0.3586845"/>
<define name="H_Y" value="0.0168651"/>
<define name="H_Z" value="0.933303"/>
</section>
<section name="INS" prefix="INS_">
<define name="BARO_SENS" value="20." integer="16"/>
</section>
<section name="STABILIZATION_RATE" prefix="STABILIZATION_RATE_">
<!-- setpoints -->
<define name="SP_MAX_P" value="10000"/>
<define name="SP_MAX_Q" value="10000"/>
<define name="SP_MAX_R" value="10000"/>
<define name="DEADBAND_P" value="20"/>
<define name="DEADBAND_Q" value="20"/>
<define name="DEADBAND_R" value="200"/>
<define name="REF_TAU" value="4"/>
<!-- feedback -->
<define name="GAIN_P" value="400"/>
<define name="GAIN_Q" value="400"/>
<define name="GAIN_R" value="350"/>
<define name="IGAIN_P" value="75"/>
<define name="IGAIN_Q" value="75"/>
<define name="IGAIN_R" value="50"/>
<!-- feedforward -->
<define name="DDGAIN_P" value="300"/>
<define name="DDGAIN_Q" value="300"/>
<define name="DDGAIN_R" value="300"/>
</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_A" value="0"/>
<define name="DEADBAND_E" value="0"/>
<define name="DEADBAND_R" value="250"/>
<!-- reference -->
<define name="REF_OMEGA_P" value="800" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.85"/>
<define name="REF_MAX_P" value="100." unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(2000.)"/>
<define name="REF_OMEGA_Q" value="800" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.85"/>
<define name="REF_MAX_Q" value="100." unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(2000.)"/>
<define name="REF_OMEGA_R" value="500" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.85"/>
<define name="REF_MAX_R" value="90." unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(180.)"/>
<!-- feedback -->
<define name="PHI_PGAIN" value="1000"/>
<define name="PHI_DGAIN" value="350"/>
<define name="PHI_IGAIN" value="250"/>
<define name="THETA_PGAIN" value="1000"/>
<define name="THETA_DGAIN" value="350"/>
<define name="THETA_IGAIN" value="250"/>
<define name="PSI_PGAIN" value="4000"/>
<define name="PSI_DGAIN" value="1000"/>
<define name="PSI_IGAIN" value="300"/>
<!-- feedforward -->
<define name="PHI_DDGAIN" value="300"/>
<define name="THETA_DDGAIN" value="300"/>
<define name="PSI_DDGAIN" value="2000"/>
</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="TILT_COEFF" value="0.35"/>
<define name="REF_MIN_ZDD" value="-0.2*9.81"/> <!-- max descent acceleration -->
<define name="REF_MAX_ZDD" value="0.2*9.81"/> <!-- max climb acceleration -->
<define name="REF_MIN_ZD" value="-3."/> <!-- max descent speed -->
<define name="REF_MAX_ZD" value="3."/> <!-- max climb speed -->
<define name="HOVER_KP" value="120"/>
<define name="HOVER_KD" value="80"/>
<define name="HOVER_KI" value="20"/>
<define name="RC_CLIMB_COEF" value ="500"/>
<define name="RC_DESCENT_COEF" value ="200"/>
<define name="RC_CLIMB_DEAD_BAND" value ="160000"/>
</section>
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="USE_REF" value="1"/>
<define name="USE_SPEED_REF" value="1"/> <!-- using RC to control horizontal setpoint -->
<define name="MAX_BANK" value="20" unit="deg"/>
<define name="REF_MAX_ACCEL" value="7."/> <!-- max reference horizontal acceleration in m/s2 -->
<define name="REF_MAX_SPEED" value="2."/> <!-- max reference horizontal speed in m/s -->
<define name="RC_SPEED_DEAD_BAND" value="200000"/>
<define name="PGAIN" value="100"/>
<define name="DGAIN" value="120"/>
<define name="IGAIN" value="10"/>
<define name="AGAIN" value="10"/>
</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="INITIAL_CONDITITONS" value="&quot;reset00&quot;"/>
<define name="SENSORS_PARAMS" value="&quot;nps_sensors_params_default.h&quot;"/>
</section>
<section name="AUTOPILOT">
<define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
<define name="MODE_AUTO1" value="AP_MODE_HOVER_Z_HOLD"/>
<define name="MODE_AUTO2" value="AP_MODE_NAV"/>
</section>
<section name="BAT">
<define name="CRITIC_BAT_LEVEL" value="14.0" unit="V"/>
<define name="LOW_BAT_LEVEL" value="14.3" unit="V"/>
<define name="MAX_BAT_LEVEL" value="16.8" unit="V"/>
</section>
</airframe>
+252
View File
@@ -0,0 +1,252 @@
<!DOCTYPE airframe SYSTEM "../../airframe.dtd">
<airframe name="Oktorotor KroozSD Mkk">
<firmware name="rotorcraft">
<target name="ap" board="krooz_sd"/>
<target name="nps" board="pc">
<subsystem name="fdm" type="jsbsim"/>
<subsystem name="radio_control" type="ppm"/>
</target>
<subsystem name="radio_control" type="ppm"/>
<subsystem name="telemetry" type="transparent"/>
<subsystem name="motor_mixing"/>
<subsystem name="actuators" type="mkk">
<define name="I2C_TRANSACTION_QUEUE_LEN" value="10"/>
<define name="I2C1_CLOCK_SPEED" value="42000"/>
</subsystem>
<subsystem name="stabilization" type="euler"/>
<subsystem name="gps" type="ublox"/>
<subsystem name="imu" type="krooz_sd"/>
<subsystem name="ahrs" type="int_cmpl_quat"/>
<subsystem name="ins" type="hff"/>
<define name="NO_RC_THRUST_LIMIT"/>
<define name="USE_RC_FP_BLOCK_SWITCHING"/>
<define name="USE_ATTITUDE_REF" value="0"/>
<define name="KILL_ON_GROUND_DETECT" value="TRUE"/>
</firmware>
<modules main_freq="512">
<!--<load name="gps_ubx_ucenter.xml"/>
<load name="sys_mon.xml"/>
<load name="geo_mag.xml"/>-->
</modules>
<commands>
<axis name="ROLL" failsafe_value="0"/>
<axis name="PITCH" failsafe_value="0"/>
<axis name="YAW" failsafe_value="0"/>
<axis name="THRUST" failsafe_value="0"/>
</commands>
<section name="ACTUATORS_MKK" prefix="ACTUATORS_MKK_">
<define name="NB" value="8"/>
<define name="ADDR" value="{ 0x52, 0x54, 0x56, 0x58 , 0x5A, 0x5C, 0x5E, 0x60}"/>
</section>
<servos driver="Mkk">
<servo name="FF" no="0" min="0" neutral="3" max="210"/>
<servo name="FR" no="1" min="0" neutral="3" max="210"/>
<servo name="RR" no="2" min="0" neutral="3" max="210"/>
<servo name="DR" no="3" min="0" neutral="3" max="210"/>
<servo name="DD" no="4" min="0" neutral="3" max="210"/>
<servo name="DL" no="5" min="0" neutral="3" max="210"/>
<servo name="LL" no="6" min="0" neutral="3" max="210"/>
<servo name="FL" no="7" min="0" neutral="3" max="210"/>
</servos>
<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="MAX_SATURATION_OFFSET" value="2000"/>
<define name="NB_MOTOR" value="8"/>
<define name="SCALE" value="256"/>
<define name="ROLL_COEF" value="{ 108, -108, -256, -256, -108, 108, 256, 256}"/>
<define name="PITCH_COEF" value="{ 256, 256, 108, -108, -256, -256, -108, 108}"/>
<define name="YAW_COEF" value="{ -256, 256, -256, 256, -256, 256, -256, 256}"/>
<define name="THRUST_COEF" value="{ 256, 256, 256, 256, 256, 256, 256, 256}"/>
</section>
<command_laws>
<call fun="motor_mixing_run(autopilot_motors_on,FALSE,values)"/>
<set servo="FF" value="motor_mixing.commands[SERVO_FF]"/>
<set servo="FR" value="motor_mixing.commands[SERVO_FR]"/>
<set servo="RR" value="motor_mixing.commands[SERVO_RR]"/>
<set servo="DR" value="motor_mixing.commands[SERVO_DR]"/>
<set servo="DD" value="motor_mixing.commands[SERVO_DD]"/>
<set servo="DL" value="motor_mixing.commands[SERVO_DL]"/>
<set servo="LL" value="motor_mixing.commands[SERVO_LL]"/>
<set servo="FL" value="motor_mixing.commands[SERVO_FL]"/>
</command_laws>
<section name="VERSION" prefix="VERSION_">
<define name="MAJOR" value="1"/>
<define name="MINOR" value="2"/>
</section>
<section name="IMU" prefix="IMU_">
<!-- replace this with your own calibration -->
<define name="GYRO_P_NEUTRAL" value="0"/>
<define name="GYRO_Q_NEUTRAL" value="0"/>
<define name="GYRO_R_NEUTRAL" value="0"/>
<define name="GYRO_P_SENS" value=" 4.41" integer="16"/>
<define name="GYRO_Q_SENS" value=" 4.41" integer="16"/>
<define name="GYRO_R_SENS" value=" 4.41" integer="16"/>
<define name="ACCEL_X_NEUTRAL" value="-15"/>
<define name="ACCEL_Y_NEUTRAL" value="75"/>
<define name="ACCEL_Z_NEUTRAL" value="-110"/>
<define name="ACCEL_X_SENS" value="4.91713002301" integer="16"/>
<define name="ACCEL_Y_SENS" value="4.90474978531" integer="16"/>
<define name="ACCEL_Z_SENS" value="4.69090792281" integer="16"/>
<define name="MAG_X_NEUTRAL" value="-20"/>
<define name="MAG_Y_NEUTRAL" value="5"/>
<define name="MAG_Z_NEUTRAL" value="67"/>
<define name="MAG_X_SENS" value="3.66584881345" integer="16"/>
<define name="MAG_Y_SENS" value="3.71365620466" integer="16"/>
<define name="MAG_Z_SENS" value="3.93483279876" 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="AHRS" prefix="AHRS_">
<define name="PROPAGATE_LOW_PASS_RATES" value="1"/>
<define name="GRAVITY_UPDATE_NORM_HEURISTIC" value="1"/>
<define name="H_X" value="0.3586845"/>
<define name="H_Y" value="0.0168651"/>
<define name="H_Z" value="0.933303"/>
</section>
<section name="INS" prefix="INS_">
<define name="BARO_SENS" value="20." integer="16"/>
</section>
<section name="STABILIZATION_RATE" prefix="STABILIZATION_RATE_">
<!-- setpoints -->
<define name="SP_MAX_P" value="10000"/>
<define name="SP_MAX_Q" value="10000"/>
<define name="SP_MAX_R" value="10000"/>
<define name="DEADBAND_P" value="20"/>
<define name="DEADBAND_Q" value="20"/>
<define name="DEADBAND_R" value="200"/>
<define name="REF_TAU" value="4"/>
<!-- feedback -->
<define name="GAIN_P" value="400"/>
<define name="GAIN_Q" value="400"/>
<define name="GAIN_R" value="350"/>
<define name="IGAIN_P" value="75"/>
<define name="IGAIN_Q" value="75"/>
<define name="IGAIN_R" value="50"/>
<!-- feedforward -->
<define name="DDGAIN_P" value="300"/>
<define name="DDGAIN_Q" value="300"/>
<define name="DDGAIN_R" value="300"/>
</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_A" value="0"/>
<define name="DEADBAND_E" value="0"/>
<define name="DEADBAND_R" value="250"/>
<!-- reference -->
<define name="REF_OMEGA_P" value="800" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.85"/>
<define name="REF_MAX_P" value="100." unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(2000.)"/>
<define name="REF_OMEGA_Q" value="800" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.85"/>
<define name="REF_MAX_Q" value="100." unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(2000.)"/>
<define name="REF_OMEGA_R" value="500" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.85"/>
<define name="REF_MAX_R" value="90." unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(180.)"/>
<!-- feedback -->
<define name="PHI_PGAIN" value="1000"/>
<define name="PHI_DGAIN" value="350"/>
<define name="PHI_IGAIN" value="250"/>
<define name="THETA_PGAIN" value="1000"/>
<define name="THETA_DGAIN" value="350"/>
<define name="THETA_IGAIN" value="250"/>
<define name="PSI_PGAIN" value="4000"/>
<define name="PSI_DGAIN" value="1000"/>
<define name="PSI_IGAIN" value="300"/>
<!-- feedforward -->
<define name="PHI_DDGAIN" value="300"/>
<define name="THETA_DDGAIN" value="300"/>
<define name="PSI_DDGAIN" value="2000"/>
</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="TILT_COEFF" value="0.35"/>
<define name="REF_MIN_ZDD" value="-0.2*9.81"/> <!-- max descent acceleration -->
<define name="REF_MAX_ZDD" value="0.2*9.81"/> <!-- max climb acceleration -->
<define name="REF_MIN_ZD" value="-3."/> <!-- max descent speed -->
<define name="REF_MAX_ZD" value="3."/> <!-- max climb speed -->
<define name="HOVER_KP" value="120"/>
<define name="HOVER_KD" value="80"/>
<define name="HOVER_KI" value="20"/>
<define name="RC_CLIMB_COEF" value ="500"/>
<define name="RC_DESCENT_COEF" value ="200"/>
<define name="RC_CLIMB_DEAD_BAND" value ="160000"/>
</section>
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="USE_REF" value="1"/>
<define name="USE_SPEED_REF" value="1"/> <!-- using RC to control horizontal setpoint -->
<define name="MAX_BANK" value="20" unit="deg"/>
<define name="REF_MAX_ACCEL" value="1.2"/> <!-- max reference horizontal acceleration in m/s2 -->
<define name="REF_MAX_SPEED" value="2."/> <!-- max reference horizontal speed in m/s -->
<define name="RC_SPEED_DEAD_BAND" value="200000"/>
<define name="PGAIN" value="100"/>
<define name="DGAIN" value="180"/>
<define name="IGAIN" value="3"/>
<define name="AGAIN" value="20"/>
</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="INITIAL_CONDITITONS" value="&quot;reset00&quot;"/>
<define name="SENSORS_PARAMS" value="&quot;nps_sensors_params_default.h&quot;"/>
</section>
<section name="AUTOPILOT">
<define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
<define name="MODE_AUTO1" value="AP_MODE_HOVER_Z_HOLD"/>
<define name="MODE_AUTO2" value="AP_MODE_NAV"/>
</section>
<section name="BAT">
<define name="CRITIC_BAT_LEVEL" value="13.0" unit="V"/>
<define name="LOW_BAT_LEVEL" value="13.2" unit="V"/>
<define name="MAX_BAT_LEVEL" value="16.8" unit="V"/>
</section>
</airframe>
+241
View File
@@ -0,0 +1,241 @@
<!DOCTYPE airframe SYSTEM "../../airframe.dtd">
<airframe name="Quadrotor KroozSD Mkk">
<firmware name="rotorcraft">
<target name="ap" board="krooz_sd">
</target>
<target name="nps" board="pc">
<subsystem name="fdm" type="jsbsim"/>
<subsystem name="radio_control" type="ppm"/>
</target>
<subsystem name="radio_control" type="ppm"/>
<subsystem name="telemetry" type="transparent"/>
<subsystem name="imu" type="krooz_sd"/>
<subsystem name="gps" type="ublox"/>
<subsystem name="stabilization" type="euler"/>
<subsystem name="ahrs" type="int_cmpl_quat"/>
<subsystem name="ins" type="hff"/>
<subsystem name="actuators" type="mkk">
<define name="I2C1_CLOCK_SPEED" value="42000"/>
</subsystem>
<subsystem name="motor_mixing"/>
<define name="NO_RC_THRUST_LIMIT"/>
<define name="USE_RC_FP_BLOCK_SWITCHING"/>
<define name="USE_ATTITUDE_REF" value="0"/>
</firmware>
<modules main_freq="512">
<!--<load name="gps_ubx_ucenter.xml"/>
<load name="sys_mon.xml"/>
<load name="geo_mag.xml"/>-->
</modules>
<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="3" max="210"/>
<servo name="BACK" no="1" min="0" neutral="3" max="210"/>
<servo name="RIGHT" no="2" min="0" neutral="3" max="210"/>
<servo name="LEFT" no="3" min="0" neutral="3" max="210"/>
</servos>
<commands>
<axis name="ROLL" failsafe_value="0"/>
<axis name="PITCH" failsafe_value="0"/>
<axis name="YAW" failsafe_value="0"/>
<axis name="THRUST" failsafe_value="0"/>
</commands>
<command_laws>
<call fun="motor_mixing_run(autopilot_motors_on,FALSE,values)"/>
<set servo="FRONT" value="motor_mixing.commands[SERVO_FRONT]"/>
<set servo="BACK" value="motor_mixing.commands[SERVO_BACK]"/>
<set servo="RIGHT" value="motor_mixing.commands[SERVO_RIGHT]"/>
<set servo="LEFT" value="motor_mixing.commands[SERVO_LEFT]"/>
</command_laws>
<section name="VERSION" prefix="VERSION_">
<define name="MAJOR" value="1"/>
<define name="MINOR" value="2"/>
</section>
<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, -MOTOR_MIXING_SCALE, MOTOR_MIXING_SCALE }"/>
<define name="PITCH_COEF" value="{ MOTOR_MIXING_SCALE, -MOTOR_MIXING_SCALE, 0, 0 }"/>
<define name="YAW_COEF" value="{ -MOTOR_MIXING_SCALE, -MOTOR_MIXING_SCALE, MOTOR_MIXING_SCALE, MOTOR_MIXING_SCALE }"/>
<define name="THRUST_COEF" value="{ MOTOR_MIXING_SCALE, MOTOR_MIXING_SCALE, MOTOR_MIXING_SCALE, MOTOR_MIXING_SCALE }"/>
</section>
<section name="IMU" prefix="IMU_">
<!-- replace this with your own calibration -->
<define name="GYRO_P_NEUTRAL" value="0"/>
<define name="GYRO_Q_NEUTRAL" value="0"/>
<define name="GYRO_R_NEUTRAL" value="0"/>
<define name="GYRO_P_SENS" value=" 4.41" integer="16"/>
<define name="GYRO_Q_SENS" value=" 4.41" integer="16"/>
<define name="GYRO_R_SENS" value=" 4.41" integer="16"/>
<define name="ACCEL_X_NEUTRAL" value="-48"/>
<define name="ACCEL_Y_NEUTRAL" value="86"/>
<define name="ACCEL_Z_NEUTRAL" value="-479"/>
<define name="ACCEL_X_SENS" value="4.86549375955" integer="16"/>
<define name="ACCEL_Y_SENS" value="4.89290708897" integer="16"/>
<define name="ACCEL_Z_SENS" value="4.83749812474" integer="16"/>
<define name="MAG_X_NEUTRAL" value="-282"/>
<define name="MAG_Y_NEUTRAL" value="-78"/>
<define name="MAG_Z_NEUTRAL" value="109"/>
<define name="MAG_X_SENS" value="3.33430456557" integer="16"/>
<define name="MAG_Y_SENS" value="3.53180739126" integer="16"/>
<define name="MAG_Z_SENS" value="3.68297143457" 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="AHRS" prefix="AHRS_">
<define name="PROPAGATE_LOW_PASS_RATES" value="1"/>
<define name="GRAVITY_UPDATE_NORM_HEURISTIC" value="1"/>
<define name="H_X" value="0.3586845"/>
<define name="H_Y" value="0.0168651"/>
<define name="H_Z" value="0.933303"/>
</section>
<section name="INS" prefix="INS_">
<define name="BARO_SENS" value="20." integer="16"/>
</section>
<section name="STABILIZATION_RATE" prefix="STABILIZATION_RATE_">
<!-- setpoints -->
<define name="SP_MAX_P" value="10000"/>
<define name="SP_MAX_Q" value="10000"/>
<define name="SP_MAX_R" value="10000"/>
<define name="DEADBAND_P" value="20"/>
<define name="DEADBAND_Q" value="20"/>
<define name="DEADBAND_R" value="200"/>
<define name="REF_TAU" value="4"/>
<!-- feedback -->
<define name="GAIN_P" value="400"/>
<define name="GAIN_Q" value="400"/>
<define name="GAIN_R" value="350"/>
<define name="IGAIN_P" value="75"/>
<define name="IGAIN_Q" value="75"/>
<define name="IGAIN_R" value="50"/>
<!-- feedforward -->
<define name="DDGAIN_P" value="300"/>
<define name="DDGAIN_Q" value="300"/>
<define name="DDGAIN_R" value="300"/>
</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_A" value="0"/>
<define name="DEADBAND_E" value="0"/>
<define name="DEADBAND_R" value="250"/>
<!-- reference -->
<define name="REF_OMEGA_P" value="800" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.85"/>
<define name="REF_MAX_P" value="400." unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(8000.)"/>
<define name="REF_OMEGA_Q" value="800" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.85"/>
<define name="REF_MAX_Q" value="400." unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(8000.)"/>
<define name="REF_OMEGA_R" value="500" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.85"/>
<define name="REF_MAX_R" value="180." unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)"/>
<!-- feedback -->
<define name="PHI_PGAIN" value="1000"/>
<define name="PHI_DGAIN" value="250"/>
<define name="PHI_IGAIN" value="250"/>
<define name="THETA_PGAIN" value="1000"/>
<define name="THETA_DGAIN" value="250"/>
<define name="THETA_IGAIN" value="250"/>
<define name="PSI_PGAIN" value="4000"/>
<define name="PSI_DGAIN" value="1000"/>
<define name="PSI_IGAIN" value="300"/>
<!-- feedforward -->
<define name="PHI_DDGAIN" value="300"/>
<define name="THETA_DDGAIN" value="300"/>
<define name="PSI_DDGAIN" value="2000"/>
</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="-0.2*9.81"/> <!-- max descent acceleration -->
<define name="REF_MAX_ZDD" value="0.2*9.81"/> <!-- max climb acceleration -->
<define name="REF_MIN_ZD" value="-3."/> <!-- max descent speed -->
<define name="REF_MAX_ZD" value="3."/> <!-- max climb speed -->
<define name="HOVER_KP" value="120"/>
<define name="HOVER_KD" value="80"/>
<define name="HOVER_KI" value="20"/>
<define name="RC_CLIMB_COEF" value ="500"/>
<define name="RC_DESCENT_COEF" value ="200"/>
<define name="RC_CLIMB_DEAD_BAND" value ="160000"/>
</section>
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="USE_REF" value="1"/>
<define name="USE_SPEED_REF" value="1"/> <!-- using RC to control horizontal setpoint -->
<define name="MAX_BANK" value="20" unit="deg"/>
<define name="REF_MAX_ACCEL" value="7."/> <!-- max reference horizontal acceleration in m/s2 -->
<define name="REF_MAX_SPEED" value="2."/> <!-- max reference horizontal speed in m/s -->
<define name="RC_SPEED_DEAD_BAND" value="200000"/>
<define name="PGAIN" value="100"/>
<define name="DGAIN" value="120"/>
<define name="IGAIN" value="10"/>
<define name="AGAIN" value="10"/>
</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="INITIAL_CONDITITONS" value="&quot;reset00&quot;"/>
<define name="SENSORS_PARAMS" value="&quot;nps_sensors_params_default.h&quot;"/>
</section>
<section name="AUTOPILOT">
<define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
<define name="MODE_AUTO1" value="AP_MODE_HOVER_Z_HOLD"/>
<define name="MODE_AUTO2" value="AP_MODE_NAV"/>
</section>
<section name="BAT">
<define name="CRITIC_BAT_LEVEL" value="13.0" unit="V"/>
<define name="LOW_BAT_LEVEL" value="13.2" unit="V"/>
<define name="MAX_BAT_LEVEL" value="16.8" unit="V"/>
</section>
</airframe>
+236
View File
@@ -0,0 +1,236 @@
<!DOCTYPE airframe SYSTEM "../../airframe.dtd">
<airframe name="Quadrotor KroozSD Pwm">
<firmware name="rotorcraft">
<target name="ap" board="krooz_sd">
</target>
<target name="nps" board="pc">
<subsystem name="fdm" type="jsbsim"/>
<subsystem name="radio_control" type="ppm"/>
</target>
<subsystem name="actuators" type="pwm">
<define name="SERVO_HZ" value="400"/>
</subsystem>
<subsystem name="radio_control" type="ppm"/>
<subsystem name="telemetry" type="transparent"/>
<subsystem name="imu" type="krooz_sd"/>
<subsystem name="gps" type="ublox"/>
<subsystem name="stabilization" type="euler"/>
<subsystem name="ahrs" type="int_cmpl_quat"/>
<subsystem name="ins" type="hff"/>
<subsystem name="motor_mixing"/>
<define name="NO_RC_THRUST_LIMIT"/>
<define name="USE_RC_FP_BLOCK_SWITCHING"/>
<define name="USE_ATTITUDE_REF" value="0"/>
</firmware>
<modules main_freq="512">
<!--<load name="gps_ubx_ucenter.xml"/>
<load name="geo_mag.xml"/>-->
</modules>
<servos driver="Pwm">
<servo name="FRONT" no="0" min="1000" neutral="1190" max="1900"/>
<servo name="BACK" no="1" min="1000" neutral="1190" max="1900"/>
<servo name="RIGHT" no="2" min="1000" neutral="1190" max="1900"/>
<servo name="LEFT" no="3" min="1000" neutral="1190" max="1900"/>
</servos>
<commands>
<axis name="ROLL" failsafe_value="0"/>
<axis name="PITCH" failsafe_value="0"/>
<axis name="YAW" failsafe_value="0"/>
<axis name="THRUST" failsafe_value="0"/>
</commands>
<command_laws>
<call fun="motor_mixing_run(autopilot_motors_on,FALSE,values)"/>
<set servo="FRONT" value="motor_mixing.commands[SERVO_FRONT]"/>
<set servo="BACK" value="motor_mixing.commands[SERVO_BACK]"/>
<set servo="RIGHT" value="motor_mixing.commands[SERVO_RIGHT]"/>
<set servo="LEFT" value="motor_mixing.commands[SERVO_LEFT]"/>
</command_laws>
<section name="VERSION" prefix="VERSION_">
<define name="MAJOR" value="1"/>
<define name="MINOR" value="2"/>
</section>
<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="512"/>
<define name="ROLL_COEF" value="{ 0, MOTOR_MIXING_SCALE, 0, -MOTOR_MIXING_SCALE }"/>
<define name="PITCH_COEF" value="{ MOTOR_MIXING_SCALE, 0, -MOTOR_MIXING_SCALE, 0 }"/>
<define name="YAW_COEF" value="{ -MOTOR_MIXING_SCALE, MOTOR_MIXING_SCALE, -MOTOR_MIXING_SCALE, MOTOR_MIXING_SCALE }"/>
<define name="THRUST_COEF" value="{ MOTOR_MIXING_SCALE, MOTOR_MIXING_SCALE, MOTOR_MIXING_SCALE, MOTOR_MIXING_SCALE }"/>
</section>
<section name="IMU" prefix="IMU_">
<!-- replace this with your own calibration -->
<define name="GYRO_P_NEUTRAL" value="0"/>
<define name="GYRO_Q_NEUTRAL" value="0"/>
<define name="GYRO_R_NEUTRAL" value="0"/>
<define name="GYRO_P_SENS" value=" 4.41" integer="16"/>
<define name="GYRO_Q_SENS" value=" 4.41" integer="16"/>
<define name="GYRO_R_SENS" value=" 4.41" integer="16"/>
<define name="ACCEL_X_NEUTRAL" value="-17"/>
<define name="ACCEL_Y_NEUTRAL" value="137"/>
<define name="ACCEL_Z_NEUTRAL" value="-112"/>
<define name="ACCEL_X_SENS" value="4.90163520863" integer="16"/>
<define name="ACCEL_Y_SENS" value="4.92641947248" integer="16"/>
<define name="ACCEL_Z_SENS" value="4.75672568963" integer="16"/>
<define name="MAG_X_NEUTRAL" value="-183"/>
<define name="MAG_Y_NEUTRAL" value="-106"/>
<define name="MAG_Z_NEUTRAL" value="-75"/>
<define name="MAG_X_SENS" value="3.22557142458" integer="16"/>
<define name="MAG_Y_SENS" value="3.52708642214" integer="16"/>
<define name="MAG_Z_SENS" value="3.54627027156" 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="45." unit="deg"/>
</section>
<section name="AHRS" prefix="AHRS_">
<define name="PROPAGATE_LOW_PASS_RATES" value="1"/>
<define name="GRAVITY_UPDATE_NORM_HEURISTIC" value="1"/>
<define name="H_X" value="0.365258"/>
<define name="H_Y" value="0.015505"/>
<define name="H_Z" value="0.930777"/>
</section>
<section name="INS" prefix="INS_">
<define name="BARO_SENS" value="20." integer="16"/>
</section>
<section name="STABILIZATION_RATE" prefix="STABILIZATION_RATE_">
<!-- setpoints -->
<define name="SP_MAX_P" value="10000"/>
<define name="SP_MAX_Q" value="10000"/>
<define name="SP_MAX_R" value="10000"/>
<define name="DEADBAND_P" value="20"/>
<define name="DEADBAND_Q" value="20"/>
<define name="DEADBAND_R" value="200"/>
<define name="REF_TAU" value="4"/>
<!-- feedback -->
<define name="GAIN_P" value="400"/>
<define name="GAIN_Q" value="400"/>
<define name="GAIN_R" value="350"/>
<define name="IGAIN_P" value="75"/>
<define name="IGAIN_Q" value="75"/>
<define name="IGAIN_R" value="50"/>
<!-- feedforward -->
<define name="DDGAIN_P" value="300"/>
<define name="DDGAIN_Q" value="300"/>
<define name="DDGAIN_R" value="300"/>
</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_A" value="0"/>
<define name="DEADBAND_E" value="0"/>
<define name="DEADBAND_R" value="250"/>
<!-- reference -->
<define name="REF_OMEGA_P" value="800" unit="deg/s"/>
<define name="REF_ZETA_P" value="0.85"/>
<define name="REF_MAX_P" value="400." unit="deg/s"/>
<define name="REF_MAX_PDOT" value="RadOfDeg(8000.)"/>
<define name="REF_OMEGA_Q" value="800" unit="deg/s"/>
<define name="REF_ZETA_Q" value="0.85"/>
<define name="REF_MAX_Q" value="400." unit="deg/s"/>
<define name="REF_MAX_QDOT" value="RadOfDeg(8000.)"/>
<define name="REF_OMEGA_R" value="500" unit="deg/s"/>
<define name="REF_ZETA_R" value="0.85"/>
<define name="REF_MAX_R" value="180." unit="deg/s"/>
<define name="REF_MAX_RDOT" value="RadOfDeg(1800.)"/>
<!-- feedback -->
<define name="PHI_PGAIN" value="600"/>
<define name="PHI_DGAIN" value="350"/>
<define name="PHI_IGAIN" value="150"/>
<define name="THETA_PGAIN" value="600"/>
<define name="THETA_DGAIN" value="350"/>
<define name="THETA_IGAIN" value="150"/>
<define name="PSI_PGAIN" value="3500"/>
<define name="PSI_DGAIN" value="1000"/>
<define name="PSI_IGAIN" value="100"/>
<!-- feedforward -->
<define name="PHI_DDGAIN" value="300"/>
<define name="THETA_DDGAIN" value="300"/>
<define name="PSI_DDGAIN" value="1000"/>
</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="-0.2*9.81"/> <!-- max descent acceleration -->
<define name="REF_MAX_ZDD" value="0.2*9.81"/> <!-- max climb acceleration -->
<define name="REF_MIN_ZD" value="-3."/> <!-- max descent speed -->
<define name="REF_MAX_ZD" value="3."/> <!-- max climb speed -->
<define name="HOVER_KP" value="120"/>
<define name="HOVER_KD" value="80"/>
<define name="HOVER_KI" value="20"/>
<define name="RC_CLIMB_COEF" value ="500"/>
<define name="RC_DESCENT_COEF" value ="200"/>
<define name="RC_CLIMB_DEAD_BAND" value ="160000"/>
</section>
<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="USE_REF" value="1"/>
<define name="USE_SPEED_REF" value="1"/> <!-- using RC to control horizontal setpoint -->
<define name="MAX_BANK" value="20" unit="deg"/>
<define name="REF_MAX_ACCEL" value="7."/> <!-- max reference horizontal acceleration in m/s2 -->
<define name="REF_MAX_SPEED" value="2."/> <!-- max reference horizontal speed in m/s -->
<define name="RC_SPEED_DEAD_BAND" value="200000"/>
<define name="PGAIN" value="100"/>
<define name="DGAIN" value="120"/>
<define name="IGAIN" value="10"/>
<define name="AGAIN" value="10"/>
</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="INITIAL_CONDITITONS" value="&quot;reset00&quot;"/>
<define name="SENSORS_PARAMS" value="&quot;nps_sensors_params_default.h&quot;"/>
</section>
<section name="AUTOPILOT">
<define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
<define name="MODE_AUTO1" value="AP_MODE_HOVER_Z_HOLD"/>
<define name="MODE_AUTO2" value="AP_MODE_NAV"/>
</section>
<section name="BAT">
<define name="CRITIC_BAT_LEVEL" value="14.0" unit="V"/>
<define name="LOW_BAT_LEVEL" value="14.2" unit="V"/>
<define name="MAX_BAT_LEVEL" value="16.8" unit="V"/>
</section>
</airframe>
-67
View File
@@ -1,67 +0,0 @@
# Hey Emacs, this is a -*- makefile -*-
#
# krooz_1.0.makefile
#
#
#
BOARD=krooz
BOARD_VERSION=1.0
BOARD_CFG=\"boards/$(BOARD)_$(BOARD_VERSION).h\"
ARCH=stm32
ARCH_L=f4
ARCH_DIR=stm32
SRC_ARCH=arch/$(ARCH_DIR)
$(TARGET).ARCHDIR = $(ARCH)
$(TARGET).LDSCRIPT=$(SRC_ARCH)/krooz.ld
HARD_FLOAT=yes
# -----------------------------------------------------------------------
# default flash mode is via usb dfu bootloader
FLASH_MODE ?= DFU
ifndef NO_LUFTBOOT
$(TARGET).LDFLAGS+=-Wl,-Ttext=0x8004000
endif
#
#
# some default values shared between different firmwares
#
#
#
# default LED configuration
#
RADIO_CONTROL_LED ?= none
BARO_LED ?= none
AHRS_ALIGNER_LED ?= 2
GPS_LED ?= none
SYS_TIME_LED ?= 1
#
# default uart configuration
#
RADIO_CONTROL_SPEKTRUM_PRIMARY_PORT ?= UART1
RADIO_CONTROL_SPEKTRUM_SECONDARY_PORT ?= UART2
MODEM_PORT ?= UART5
MODEM_BAUD ?= B57600
GPS_PORT ?= UART3
GPS_BAUD ?= B38400
#
# default actuator configuration
#
# you can use different actuators by adding a configure option to your firmware section
# e.g. <configure name="ACTUATORS" value="actuators_ppm/>
# and by setting the correct "driver" attribute in servo section
# e.g. <servo driver="Ppm">
#
ACTUATORS ?= actuators_pwm
+58
View File
@@ -0,0 +1,58 @@
# Hey Emacs, this is a -*- makefile -*-
#
# krooz_sd.makefile
#
#
#
BOARD=krooz
BOARD_VERSION=sd
BOARD_CFG=\"boards/$(BOARD)_$(BOARD_VERSION).h\"
ARCH=stm32
ARCH_L=f4
HARD_FLOAT=yes
ARCH_DIR=stm32
SRC_ARCH=arch/$(ARCH_DIR)
$(TARGET).ARCHDIR = $(ARCH)
# not needed?
$(TARGET).OOCD_INTERFACE=flossjtag
#$(TARGET).OOCD_INTERFACE=jtagkey-tiny
$(TARGET).LDSCRIPT=$(SRC_ARCH)/krooz.ld
# -----------------------------------------------------------------------
ifndef FLASH_MODE
FLASH_MODE = DFU
#FLASH_MODE = JTAG
#FLASH_MODE = SERIAL
endif
DFU_ADDR = 0x8004000
DFU_PRODUCT = any
#
#
# some default values shared between different firmwares
#
#
#
# default LED configuration
#
RADIO_CONTROL_LED ?= none
BARO_LED ?= none
AHRS_ALIGNER_LED ?= 2
GPS_LED ?= none
SYS_TIME_LED ?= 1
#
# default uart configuration
#
RADIO_CONTROL_SPEKTRUM_PRIMARY_PORT ?= UART1
MODEM_PORT ?= UART5
MODEM_BAUD ?= B57600
GPS_PORT ?= UART3
GPS_BAUD ?= B38400
+100
View File
@@ -0,0 +1,100 @@
<!DOCTYPE flight_plan SYSTEM "flight_plan.dtd">
<flight_plan alt="35" ground_alt="0" lat0="54.117477" lon0="12.184862" max_dist_from_home="100" name="Krooz Test" security_height="10">
<header>
#include "autopilot.h"
#include "../../subsystems/electrical.h"
</header>
<waypoints>
<waypoint name="HOME" x="0.0" y="0.0"/>
<waypoint name="CLIMB" x="0.0" y="5.0"/>
<waypoint name="STDBY" x="-2.0" y="-5.0"/>
<waypoint name="CAM" x="-20" y="-50" height="11."/>
<waypoint name="TD" x="5.6" y="-10.9"/>
<waypoint name="LAND" x="5.6" y="-10.9"/>
<waypoint name="1" x="3.6" y="-13.9"/>
<waypoint name="2" x="27.5" y="-48.2"/>
<waypoint name="3" x="16.7" y="-19.6"/>
<waypoint name="4" x="13.7" y="-40.7"/>
</waypoints>
<exceptions>
<exception cond="!autopilot_in_flight && !autopilot_motors_on" deroute="Holding point"/>
</exceptions>
<blocks>
<block name="Wait GPS">
<call fun="NavKillThrottle()"/>
<while cond="!GpsFixValid()"/>
</block>
<block name="Geo init">
<while cond="LessThan(NavBlockTime(), 10)"/>
<call fun="NavSetGroundReferenceHere()"/>
</block>
<block name="Holding point">
<exception cond="autopilot_motors_on" deroute="Start Engine"/>
<call fun="NavKillThrottle()"/>
<attitude pitch="0" roll="0" throttle="0" vmode="throttle" until="FALSE"/>
</block>
<block name="Start Engine">
<exception cond="!RcCommand(RC_MODE_CHANGE) && autopilot_in_flight" deroute="Takeoff"/>
<exception cond="RcCommand(RC_MODE_CHANGE) && autopilot_in_flight" deroute="Standby"/>
<call fun="NavResurrect()"/>
<call fun="NavSetWaypointHere(WP_CLIMB)"/>
<call fun="NavSetWaypointHere(WP_TD)"/>
<call fun="NavSetWaypointHere(WP_STDBY)"/>
<attitude pitch="0" roll="0" throttle="0" vmode="throttle" until="FALSE"/>
</block>
<block name="Takeoff" strip_button="Takeoff" strip_icon="takeoff.png">
<!--<call fun="NavStopDetectGround()"/>-->
<exception cond="stateGetPositionEnu_f()->z > 2.0" deroute="Standby"/>
<stay vmode="climb" climb="1.0" wp="CLIMB"/>
</block>
<block name="Come Home">
<call fun="NavSetWpCurAlt(WP_STDBY)"/>
</block>
<block name="Standby" strip_button="Standby" strip_icon="home.png">
<exception cond="!autopilot_motors_on" deroute="Holding point"/>
<exception cond="LowBatLevel()" deroute="Land"/>
<exception cond="RcCommand(RC_ROUTE)" deroute="Route"/>
<exception cond="RcCommand(RC_CIRCLE)" deroute="Circle"/>
<exception cond="RcCommand(RC_LAND)" deroute="Land"/>
<exception cond="RcCommand(RC_MODE_CHANGE) && autopilot_motors_on && !autopilot_in_flight" deroute="Start Engine"/>
<exception cond="RcCommand(RC_MODE_CHANGE) && autopilot_motors_on && autopilot_in_flight" deroute="Come Home"/>
<stay wp="STDBY"/>
</block>
<block name="Route">
<exception cond="LowBatLevel()" deroute="Land"/>
<exception cond="RcCommand(RC_LAND)" deroute="Land"/>
<exception cond="RcCommand(RC_HOME)" deroute="Come Home"/>
<exception cond="!autopilot_motors_on" deroute="Holding point"/>
<exception cond="RcCommand(RC_MODE_CHANGE) && autopilot_motors_on && !autopilot_in_flight" deroute="Start Engine"/>
<!--<call fun="NavStopDetectGround()"/>-->
<go wp="1"/>
<go from="1" hmode="route" wp="2"/>
<go from="2" hmode="route" wp="3"/>
<go from="3" hmode="route" wp="4"/>
<go from="4" hmode="route" wp="1"/>
<deroute block="Land"/>
</block>
<block name="Circle">
<exception cond="LowBatLevel()" deroute="Land"/>
<exception cond="RcCommand(RC_LAND)" deroute="Land"/>
<exception cond="RcCommand(RC_HOME)" deroute="Come Home"/>
<exception cond="!autopilot_motors_on" deroute="Holding point"/>
<exception cond="RcCommand(RC_MODE_CHANGE) && autopilot_motors_on && !autopilot_in_flight" deroute="Start Engine"/><!-- -->
<circle radius="nav_radius" wp="CAM"/>
</block>
<block name="Land here" strip_button="Land Here" strip_icon="land-right.png">
<call fun="NavSetWaypointHere(WP_TD)"/>
</block>
<block name="Land">
<call fun="NavSetWpCurAlt(WP_TD)"/>
<go wp="TD"/>
</block>
<block name="Flare">
<exception cond="RcCommand(RC_MODE_CHANGE) && autopilot_motors_on" deroute="Land here"/>
<exception cond="NavDetectGround()" deroute="Holding point"/>
<call fun="NavStartDetectGround()"/>
<stay climb="-0.8" vmode="climb" wp="TD"/>
</block>
</blocks>
</flight_plan>
+57
View File
@@ -0,0 +1,57 @@
<?xml version="1.0"?>
<!-- $Id: cockpitSX.xml 3610 2009-07-02 16:35:18Z poine $
--
-- (c) 2006 Pascal Brisset, Antoine Drouin
--
-- This file is part of paparazzi.
--
-- paparazzi is free software; you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation; either version 2, or (at your option)
-- any later version.
--
-- paparazzi is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with paparazzi; see the file COPYING. If not, write to
-- the Free Software Foundation, 59 Temple Place - Suite 330,
-- Boston, MA 02111-1307, USA.
-->
<!--
-- Attributes of root (Radio) tag :
-- name: name of RC
-- data_min: min width of a pulse to be considered as a data pulse
-- data_max: max width of a pulse to be considered as a data pulse
-- sync_min: min width of a pulse to be considered as a synchro pulse
-- sync_max: max width of a pulse to be considered as a synchro pulse
-- pulse_type: POSITIVE ( Futaba and others) | NEGATIVE (JR)
-- min, max and sync are expressed in micro-seconds
-->
<!--
-- order in section = order in the PPM frame
-- Attributes of channel tag :
-- ctl: name of the command on the transmitter - only for displaying
-- function: logical command
-- averaged: channel filtered through several frames (for discrete commands)
-- min: minimum pulse length (micro-seconds)
-- max: maximum pulse length (micro-seconds)
-- neutral: neutral pulse length (micro-seconds)
-- Note: a command may be reversed by exchanging min and max values
-->
<!DOCTYPE radio SYSTEM "radio.dtd">
<radio name="mx-16" data_min="967" data_max="2033" sync_min ="5000" sync_max ="15000" pulse_type="NEGATIVE">
<channel ctl="MOTOR" function="THROTTLE" min="1100" neutral="1100" max="1900" average="0"/>
<channel ctl="QUERRUDER" function="ROLL" min="1900" neutral="1500" max="1100" average="0"/>
<channel ctl="HOEHENRUDER" function="PITCH" min="1900" neutral="1500" max="1100" average="0"/>
<channel ctl="SEITENRUDER" function="YAW" min="1900" neutral="1500" max="1100" average="0"/>
<channel ctl="ROCKER" function="MODE" min="1100" neutral="1500" max="1900" average="1"/>
<channel ctl="SHOTS" function="SHOTS" min="1100" neutral="1100" max="1900" average="1"/>
<channel ctl="PHOTO_VIDEO" function="PH_VD" min="1100" neutral="1500" max="1900" average="1"/>
<channel ctl="CAMERA" function="CAM" min="1100" neutral="1500" max="1900" average="1"/>
</radio>
@@ -78,40 +78,41 @@
#define ActuatorsDefaultInit() ActuatorsPwmInit() #define ActuatorsDefaultInit() ActuatorsPwmInit()
#define ActuatorsDefaultCommit() ActuatorsPwmCommit() #define ActuatorsDefaultCommit() ActuatorsPwmCommit()
//#define DefaultVoltageOfAdc(adc) (0.006185*adc)
#define DefaultVoltageOfAdc(adc) (0.008874*adc) #define DefaultVoltageOfAdc(adc) (0.008874*adc)
/* UART */
#define UART1_GPIO_AF GPIO_AF7
#define UART1_GPIO_PORT_RX GPIOA
#define UART1_GPIO_RX GPIO10
#define UART1_GPIO_PORT_TX GPIOA
#define UART1_GPIO_TX GPIO9
#define UART3_GPIO_AF GPIO_AF7
#define UART3_GPIO_PORT_RX GPIOC
#define UART3_GPIO_RX GPIO11
#define UART3_GPIO_PORT_TX GPIOC
#define UART3_GPIO_TX GPIO10
#define UART5_GPIO_AF GPIO_AF8
#define UART5_GPIO_PORT_RX GPIOD
#define UART5_GPIO_RX GPIO2
#define UART5_GPIO_PORT_TX GPIOC
#define UART5_GPIO_TX GPIO12
/* Onboard ADCs */ /* Onboard ADCs */
#define USE_AD_TIM4 1 #define USE_AD_TIM1 1
/*
ADC1 PC3/ADC13
ADC2 PC0/ADC10
ADC3 PC1/ADC11
ADC4 PC5/ADC15
ADC6 PC2/ADC12
BATT PC4/ADC14
*/
#define BOARD_ADC_CHANNEL_1 12 #define BOARD_ADC_CHANNEL_1 12
#define BOARD_ADC_CHANNEL_2 10 #define BOARD_ADC_CHANNEL_2 10
#define BOARD_ADC_CHANNEL_3 11 #define BOARD_ADC_CHANNEL_3 11
#define BOARD_ADC_CHANNEL_4 13 //15 #define BOARD_ADC_CHANNEL_4 13
#define BOARD_ADC_CHANNEL_5 14 #define BOARD_ADC_CHANNEL_5 14
// we can only use ADC1,2,3; the last channel is for bat monitoring #define BOARD_ADC_CHANNEL_6 15
#define BOARD_ADC_CHANNEL_6 15 //13
/* provide defines that can be used to access the ADC_x in the code or airframe file /* provide defines that can be used to access the ADC_x in the code or airframe file
* these directly map to the index number of the 4 adc channels defined above * these directly map to the index number of the 4 adc channels defined above
* 4th (index 3) is used for bat monitoring by default * 4th (index 3) is used for bat monitoring by default
*/ */
#define ADC_1 0
#define ADC_2 1
#define ADC_3 2
#define ADC_4 3
#define ADC_5 4
#define ADC_6 5
/* allow to define ADC_CHANNEL_VSUPPLY in the airframe file*/ /* allow to define ADC_CHANNEL_VSUPPLY in the airframe file*/
#ifndef ADC_CHANNEL_VSUPPLY #ifndef ADC_CHANNEL_VSUPPLY
#define ADC_CHANNEL_VSUPPLY ADC_4 #define ADC_CHANNEL_VSUPPLY ADC_4
@@ -129,8 +130,8 @@
#define ADC_1 ADC1_C1 #define ADC_1 ADC1_C1
#ifdef USE_ADC_1 #ifdef USE_ADC_1
#ifndef ADC_1_GPIO_CLOCK_PORT #ifndef ADC_1_GPIO_CLOCK_PORT
#define ADC_1_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPBEN #define ADC_1_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPCEN
#define ADC_1_INIT() gpio_mode_setup(GPIOB, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO0) #define ADC_1_INIT() gpio_mode_setup(GPIOC, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO2)
#endif #endif
#define USE_AD1_1 1 #define USE_AD1_1 1
#else #else
@@ -141,8 +142,8 @@
#define ADC_2 ADC1_C2 #define ADC_2 ADC1_C2
#ifdef USE_ADC_2 #ifdef USE_ADC_2
#ifndef ADC_2_GPIO_CLOCK_PORT #ifndef ADC_2_GPIO_CLOCK_PORT
#define ADC_2_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPBEN #define ADC_2_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPCEN
#define ADC_2_INIT() gpio_mode_setup(GPIOB, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO1) #define ADC_2_INIT() gpio_mode_setup(GPIOC, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO0)
#endif #endif
#define USE_AD1_2 1 #define USE_AD1_2 1
#else #else
@@ -154,7 +155,7 @@
#ifdef USE_ADC_3 #ifdef USE_ADC_3
#ifndef ADC_3_GPIO_CLOCK_PORT #ifndef ADC_3_GPIO_CLOCK_PORT
#define ADC_3_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPCEN #define ADC_3_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPCEN
#define ADC_3_INIT() gpio_mode_setup(GPIOC, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO4) #define ADC_3_INIT() gpio_mode_setup(GPIOC, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO1)
#endif #endif
#define USE_AD1_3 1 #define USE_AD1_3 1
#else #else
@@ -165,8 +166,8 @@
#define ADC_4 ADC1_C4 #define ADC_4 ADC1_C4
//#ifdef USE_ADC_4 //#ifdef USE_ADC_4
#ifndef ADC_4_GPIO_CLOCK_PORT #ifndef ADC_4_GPIO_CLOCK_PORT
#define ADC_4_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPAEN #define ADC_4_GPIO_CLOCK_PORT RCC_AHB1ENR_IOPCEN
#define ADC_4_INIT() gpio_mode_setup(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO4) #define ADC_4_INIT() gpio_mode_setup(GPIOC, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO3)
#endif #endif
#define USE_AD1_4 1 #define USE_AD1_4 1
//#else //#else
@@ -174,6 +175,8 @@
//#define ADC_4_INIT() {} //#define ADC_4_INIT() {}
//#endif //#endif
#define ADC_GPIO_CLOCK_PORT (ADC_1_GPIO_CLOCK_PORT | ADC_2_GPIO_CLOCK_PORT | ADC_3_GPIO_CLOCK_PORT | ADC_4_GPIO_CLOCK_PORT)
#ifdef USE_AD1 #ifdef USE_AD1
#define ADC1_GPIO_INIT(gpio) { \ #define ADC1_GPIO_INIT(gpio) { \
ADC_1_INIT(); \ ADC_1_INIT(); \
@@ -183,15 +186,17 @@
} }
#endif // USE_AD1 #endif // USE_AD1
#define BOARD_HAS_BARO 1
/* I2C mapping */ /* I2C mapping */
#define GPIO_I2C1_SCL GPIO8 #define GPIO_I2C1_SCL GPIO8
#define GPIO_I2C1_SDA GPIO7 #define GPIO_I2C1_SDA GPIO9
#define GPIO_I2C2_SCL GPIO10 #define GPIO_I2C2_SCL GPIO10
#define GPIO_I2C2_SDA GPIO11 #define GPIO_I2C2_SDA GPIO11
#define GPIO_I2C3_SCL GPIO8 //PA8
#define GPIO_I2C3_SDA GPIO9 //PC9
/* Activate onboard baro */
#define BOARD_HAS_BARO 1
/* PWM */ /* PWM */
#define PWM_USE_TIM2 1 #define PWM_USE_TIM2 1
@@ -209,7 +214,9 @@
#define USE_PWM7 1 #define USE_PWM7 1
#define USE_PWM8 1 #define USE_PWM8 1
#define USE_PWM9 1 #define USE_PWM9 1
#define USE_PWM10 1 //#define USE_PWM10 1
#define ACTUATORS_PWM_NB 10
// PWM_SERVO_x is the index of the servo in the actuators_pwm_values array // PWM_SERVO_x is the index of the servo in the actuators_pwm_values array
#if USE_PWM0 #if USE_PWM0
@@ -360,20 +367,19 @@
#define PWM_TIM4_CHAN_MASK (PWM_SERVO_4_OC_BIT|PWM_SERVO_5_OC_BIT) #define PWM_TIM4_CHAN_MASK (PWM_SERVO_4_OC_BIT|PWM_SERVO_5_OC_BIT)
#define PWM_TIM5_CHAN_MASK (PWM_SERVO_6_OC_BIT|PWM_SERVO_7_OC_BIT|PWM_SERVO_8_OC_BIT|PWM_SERVO_9_OC_BIT) #define PWM_TIM5_CHAN_MASK (PWM_SERVO_6_OC_BIT|PWM_SERVO_7_OC_BIT|PWM_SERVO_8_OC_BIT|PWM_SERVO_9_OC_BIT)
/* PPM */ /* PPM */
#define USE_PPM_TIM1 1 #define USE_PPM_TIM2 1
#define PPM_CHANNEL TIM_IC1 #define PPM_CHANNEL TIM_IC2
#define PPM_TIMER_INPUT TIM_IC_IN_TI1 #define PPM_TIMER_INPUT TIM_IC_IN_TI1
#define PPM_IRQ NVIC_TIM1_CC_IRQ #define PPM_IRQ NVIC_TIM2_IRQ
#define PPM_IRQ2 NVIC_TIM1_UP_TIM10_IRQ //#define PPM_IRQ2 NVIC_TIM2_UP_TIM10_IRQ
#define PPM_IRQ_FLAGS TIM_DIER_CC1IE #define PPM_IRQ_FLAGS TIM_DIER_CC2IE
#define PPM_IRQ_CCIF TIM_SR_CC1IF #define PPM_IRQ_CCIF TIM_SR_CC2IF
#define PPM_GPIO_PERIPHERAL RCC_AHB1ENR_IOPAEN #define PPM_GPIO_PERIPHERAL RCC_AHB1ENR_IOPBEN
#define PPM_GPIO_PORT GPIOA #define PPM_GPIO_PORT GPIOB
#define PPM_GPIO_PIN GPIO8 #define PPM_GPIO_PIN GPIO3
#define PPM_GPIO_AF GPIO_AF1 #define PPM_GPIO_AF GPIO_AF1
/* /*