Skip to content

Commit

Permalink
Merge pull request #1452 from paparazzi/compressed_trig
Browse files Browse the repository at this point in the history
[math] compressed sine table for flash and RAM, support for 20K RAM boards

Needed for boards like CC3D and naze32 (STM32F103CBT6, 128K flash, 20K RAM).

Also adds preliminary support for the naze32 rev4 and rev5, CC3D and CJMCU boards.
  • Loading branch information
flixr committed Dec 3, 2015
2 parents 6a4e0fa + 6d6e59e commit 6c2cdab
Show file tree
Hide file tree
Showing 27 changed files with 2,740 additions and 19 deletions.
4 changes: 4 additions & 0 deletions conf/airframes/ENAC/fixed-wing/funjet2.xml
Expand Up @@ -10,6 +10,10 @@

<airframe name="Funjet II">

<firmware name="test_progs">
<target name="test_math_trig_compressed" board="apogee_1.0"/>
</firmware>

<modules>
<load name="mag_hmc58xx.xml">
<define name="MODULE_HMC58XX_UPDATE_AHRS"/>
Expand Down
30 changes: 26 additions & 4 deletions conf/airframes/flixr/conf.xml
Expand Up @@ -18,19 +18,19 @@
telemetry="telemetry/default_rotorcraft.xml"
flight_plan="flight_plans/rotorcraft_basic.xml"
settings="settings/rotorcraft_basic.xml settings/control/rotorcraft_guidance.xml settings/estimation/ahrs_float_mlkf.xml settings/control/stabilization_att_int_quat.xml"
settings_modules="modules/geo_mag.xml modules/air_data.xml modules/video_thread.xml modules/video_rtp_stream.xml"
gui_color="blue"
settings_modules="modules/geo_mag.xml modules/air_data.xml modules/video_thread.xml modules/video_rtp_stream.xml"
/>
<aircraft
name="cc3d"
ac_id="21"
name="demo_cc3d"
ac_id="2"
airframe="airframes/untested/demo_cc3d.xml"
radio="radios/cockpitSX.xml"
telemetry="telemetry/demo.xml"
flight_plan="flight_plans/dummy.xml"
settings="settings/estimation/ahrs_int_cmpl_quat.xml settings/estimation/body_to_imu.xml settings/test_actuators_pwm.xml"
gui_color="blue"
settings_modules=""
gui_color="blue"
/>
<aircraft
name="discovery"
Expand Down Expand Up @@ -76,6 +76,28 @@
settings_modules="modules/gps_ubx_ucenter.xml"
gui_color="blue"
/>
<aircraft
name="quad_cc3d"
ac_id="3"
airframe="airframes/untested/quad_cc3d.xml"
radio="radios/dummy.xml"
telemetry="telemetry/default_rotorcraft.xml"
flight_plan="flight_plans/rotorcraft_basic.xml"
settings="settings/rotorcraft_basic.xml settings/control/stabilization_att_int.xml settings/control/rotorcraft_guidance.xml settings/estimation/ahrs_int_cmpl_quat.xml settings/estimation/body_to_imu.xml"
settings_modules=""
gui_color="blue"
/>
<aircraft
name="quad_flip32"
ac_id="32"
airframe="airframes/untested/quad_flip32.xml"
radio="radios/TGY9x_jeti.xml"
telemetry="telemetry/default_rotorcraft.xml"
flight_plan="flight_plans/rotorcraft_basic.xml"
settings="settings/rotorcraft_basic.xml settings/control/stabilization_att_int.xml settings/control/rotorcraft_guidance.xml settings/estimation/ahrs_int_cmpl_quat.xml settings/estimation/body_to_imu.xml"
settings_modules="modules/air_data.xml modules/gps_ubx_ucenter.xml"
gui_color="blue"
/>
<aircraft
name="test_bbb"
ac_id="1"
Expand Down
212 changes: 212 additions & 0 deletions conf/airframes/untested/hex_naze32.xml
@@ -0,0 +1,212 @@
<!DOCTYPE airframe SYSTEM "../airframe.dtd">

<!-- this is a test file for the Abusemark Naze32 rev5 board:
* Autopilot: Abusemark Naze32 https://code.google.com/p/afrodevices/wiki/AfroFlight32
* Actuators: PWM motor controllers http://wiki.paparazziuav.org/wiki/Subsystem/actuators#PWM
* RC: PPM input http://wiki.paparazziuav.org/wiki/Subsystem/radio_control#PPM
hex copter configuration (USE_SERVOS_5AND6) moves the PPM input from "1" to "6" on RC input
pwm motor connectors are in "standard mode" M1-M6 on the servo headers
-->

<airframe name="Hexcopter Naze32">

<firmware name="rotorcraft">
<define name="USE_SERVOS_5AND6"/>
<define name="PPRZ_TRIG_INT_COMPR_FLASH"/>
<define name="PPRZ_TRIG_INT_COMPR_HIGHEST"/>
<target name="ap" board="naze32_rev5">
</target>

<subsystem name="radio_control" type="ppm"/>

<subsystem name="motor_mixing"/>
<subsystem name="actuators" type="pwm">
<define name="SERVO_HZ" value="400"/>
</subsystem>

<subsystem name="telemetry" type="transparent"/>
<subsystem name="imu" type="mpu60x0_i2c">
<configure name="IMU_MPU60X0_I2C_DEV" value="i2c2"/>
<configure name="USE_MAGNETOMETER" value="FALSE"/>
</subsystem>
<subsystem name="stabilization" type="int_quat"/>
<subsystem name="ahrs" type="int_cmpl_quat">
<define name="AHRS_GRAVITY_HEURISTIC_FACTOR" value="30"/>
</subsystem>
<subsystem name="ins"/>
<subsystem name="gps" type="ublox"/>
</firmware>

<firmware name="test_progs">
<target name="test_sys_time_timer" board="naze32_rev5"/>
<target name="test_sys_time_usleep" board="naze32_rev5"/>
<target name="test_telemetry" board="naze32_rev5"/>
<target name="test_math_trig_lut" board="naze32_rev5"/>
<target name="test_imu" board="naze32_rev5">
<subsystem name="imu" type="mpu6000"/>
</target>
<target name="test_ahrs" board="naze32_rev5">
<subsystem name="imu" type="mpu6000"/>
<subsystem name="ahrs" type="int_cmpl_quat"/>
<configure name="USE_MAGNETOMETER" value="FALSE"/>
</target>
</firmware>

<modules>
<load name="mag_hmc58xx.xml">
<define name="MODULE_HMC58XX_UPDATE_AHRS"/>
<configure name="MAG_HMC58XX_I2C_DEV" value="i2c2"/>
</load>
<load name="gps_ubx_ucenter.xml"/>
</modules>

<servos driver="Pwm">
<!-- Naze32 Hexa-X standard -->
<servo name="BACK_RIGHT" no="0" min="1000" neutral="1100" max="1900"/>
<servo name="FRONT_RIGHT" no="1" min="1000" neutral="1100" max="1900"/>
<servo name="BACK_LEFT" no="2" min="1000" neutral="1100" max="1900"/>
<servo name="FRONT_LEFT" no="3" min="1000" neutral="1100" max="1900"/>
<servo name="CENTER_RIGHT" no="4" min="1000" neutral="1100" max="1900"/>
<servo name="CENTER_LEFT" no="5" min="1000" neutral="1100" 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>

<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="6"/>
<define name="SCALE" value="256"/>
<!-- https://github.com/gearwolf-OP/Mini-Hexacopter >
< Naze32 Hexa-X standard BR_CC FR_CC BL_C FL_C CR_C CL_CC -->
<define name="ROLL_COEF" value="{ 106, 150, -106, -150, 256, -256}"/>
<define name="PITCH_COEF" value="{-256, 256, -256, 256, 0, 0}"/>
<define name="YAW_COEF" value="{ 199, 192, -199, -192, -256, 256}"/>
<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="BACK_RIGHT" value="motor_mixing.commands[0]"/>
<set servo="FRONT_RIGHT" value="motor_mixing.commands[1]"/>
<set servo="BACK_LEFT" value="motor_mixing.commands[2]"/>
<set servo="FRONT_LEFT" value="motor_mixing.commands[3]"/>
<set servo="CENTER_RIGHT" value="motor_mixing.commands[4]"/>
<set servo="CENTER_LEFT" value="motor_mixing.commands[5]"/>
</command_laws>

<section name="IMU" prefix="IMU_">
<define name="BODY_TO_IMU_PHI" value="180." 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="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="400" 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="400" 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="250" 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="400"/>
<define name="PHI_IGAIN" value="200"/>

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

<define name="PSI_PGAIN" value="500"/>
<define name="PSI_DGAIN" value="300"/>
<define name="PSI_IGAIN" value="10"/>

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

<section name="GUIDANCE_V" prefix="GUIDANCE_V_">
<define name="HOVER_KP" value="150"/>
<define name="HOVER_KD" value="80"/>
<define name="HOVER_KI" value="20"/>
<define name="NOMINAL_HOVER_THROTTLE" value="0.5"/>
<define name="ADAPT_THROTTLE_ENABLED" value="TRUE"/>
</section>

<section name="GUIDANCE_H" prefix="GUIDANCE_H_">
<define name="MAX_BANK" value="20" unit="deg"/>
<define name="USE_SPEED_REF" value="TRUE"/>
<define name="PGAIN" value="50"/>
<define name="DGAIN" value="100"/>
<define name="AGAIN" value="70"/>
<define name="IGAIN" value="20"/>
</section>

<section name="AUTOPILOT">
<define name="MODE_MANUAL" value="AP_MODE_RATE_DIRECT"/>
<define name="MODE_AUTO1" value="AP_MODE_ATTITUDE_DIRECT"/>
<define name="MODE_AUTO2" value="AP_MODE_HOVER_Z_HOLD"/>
</section>

<section name="BAT">
<define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
<define name="CRITIC_BAT_LEVEL" value="9.6" unit="V"/>
<define name="LOW_BAT_LEVEL" value="10.1" unit="V"/>
<define name="MAX_BAT_LEVEL" value="12.4" unit="V"/>
<define name="MILLIAMP_AT_FULL_THROTTLE" value="30000"/>
</section>

</airframe>

0 comments on commit 6c2cdab

Please sign in to comment.