Skip to content

Commit

Permalink
[rt_paparazzi] update 0.3.1.
Browse files Browse the repository at this point in the history
aka big fat attempt to finally clean up the callbacks, threads, io and other stuff
1) Two sample configuration files:
* hexarotor Lia with GX3
* hexarotor Lia with Aspirin
2) Clean up in the rotorcraft_rt.makefile
3) Aspirin and MS5611 SPI drivers are now compatible with ChibiOS
4) Improved default chibios telemetry (more information)
5) Cleaned up drivers (ADC, SPI, I2C, UART)
6) Cleaned up board config files
7) Cleaned up error logging for uart (GPS/Telemetry threads)
8) Improved thread structure in main_chibios.c
  • Loading branch information
podhrmic authored and flixr committed Nov 26, 2013
1 parent 20ce9bb commit f2ef433
Show file tree
Hide file tree
Showing 32 changed files with 1,631 additions and 248 deletions.
216 changes: 216 additions & 0 deletions conf/airframes/examples/rt_hexarotor_lia_aspirin.xml
@@ -0,0 +1,216 @@
<!DOCTYPE airframe SYSTEM "../airframe.dtd">

<!-- an example of hexarotor airframe for ChibiOS/RT Paparazzi
* Autopilot: Lia 1.1
* IMU: Aspirin 2.2
* Actuators: PWM motor controllers
* GPS: Ublox
* RC: Turnigy 9XR PPM radio
modified by: AggieAir, A Remote Sensing Unmanned Aerial System for Scientific Applications
Utah State University, http://aggieair.usu.edu/
2013
-->

<airframe name="Hexarotor Lia TEST RT">

<firmware name="rotorcraft_rt">
<target name="ap" board="lia_1.1_chibios">
<subsystem name="radio_control" type="ppm">
<configure name="RADIO_CONTROL_PPM_PIN" value="UART1_RX"/>
</subsystem>
<configure name="FLASH_MODE" value="JTAG"/>
</target>

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

<subsystem name="telemetry" type="transparent"/>
<subsystem name="imu" type="aspirin_v2.2"/>
<subsystem name="gps" type="ublox">
<configure name="GPS_PORT" value="UART5"/>
<configure name="GPS_BAUD" value="B115200"/>
</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"/>
</firmware>

<modules main_freq="500">
</modules>

<servos driver="Pwm">
<servo name="FRONT_RIGHT" no="0" min="1000" neutral="1100" max="1900"/>
<servo name="CENTER_RIGHT" no="1" min="1000" neutral="1100" max="1900"/>
<servo name="BACK_RIGHT" no="2" min="1000" neutral="1100" max="1900"/>
<servo name="BACK_LEFT" no="3" min="1000" neutral="1100" max="1900"/>
<servo name="CENTER_LEFT" no="4" min="1000" neutral="1100" max="1900"/>
<servo name="FRONT_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"/>
<!-- Time-cross, front right CW, front left CCW -->
<define name="ROLL_COEF" value="{ -128, -256, -128, 128, 256, 128 }"/>
<define name="PITCH_COEF" value="{ 256, 0, -256, -256, 0, 256 }"/>
<define name="YAW_COEF" value="{ -128, 128, -128, 128, -128, 128 }"/>
<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="FRONT_RIGHT" value="motor_mixing.commands[SERVO_FRONT_RIGHT]"/>
<set servo="CENTER_RIGHT" value="motor_mixing.commands[SERVO_CENTER_RIGHT]"/>
<set servo="BACK_RIGHT" value="motor_mixing.commands[SERVO_BACK_RIGHT]"/>
<set servo="BACK_LEFT" value="motor_mixing.commands[SERVO_BACK_LEFT]"/>
<set servo="CENTER_LEFT" value="motor_mixing.commands[SERVO_CENTER_LEFT]"/>
<set servo="FRONT_LEFT" value="motor_mixing.commands[SERVO_FRONT_LEFT]"/>
</command_laws>

<section name="IMU" prefix="IMU_">
<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"/>

<define name="ACCEL_X_NEUTRAL" value="11"/>
<define name="ACCEL_Y_NEUTRAL" value="11"/>
<define name="ACCEL_Z_NEUTRAL" value="-25"/>

<!-- replace this with your own calibration -->
<define name="MAG_X_NEUTRAL" value="-179"/>
<define name="MAG_Y_NEUTRAL" value="-21"/>
<define name="MAG_Z_NEUTRAL" value="79"/>
<define name="MAG_X_SENS" value="4.17334785618" integer="16"/>
<define name="MAG_Y_SENS" value="3.98885954135" integer="16"/>
<define name="MAG_Z_SENS" value="4.40442339014" integer="16"/>
</section>

<section name="AHRS" prefix="AHRS_">
<define name="H_X" value="0.3770441"/>
<define name="H_Y" value="0.0193986"/>
<define name="H_Z" value="0.9259921"/>
</section>

<section name="INS" prefix="INS_">
</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.)"/>

<!-- Competition Gains -->
<define name="PHI_PGAIN" value="1800"/>
<define name="PHI_DGAIN" value="900"/>
<define name="PHI_IGAIN" value="2"/>

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

<define name="PSI_PGAIN" value="3000"/>
<define name="PSI_DGAIN" value="3400"/>
<define name="PSI_IGAIN" value="10"/>

<!-- feedforward -->
<define name="PHI_DDGAIN" value="20"/>
<define name="THETA_DDGAIN" value="20"/>
<define name="PSI_DDGAIN" value="10"/>
</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="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="100"/>
<define name="IGAIN" value="20"/>
</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="BAT">
<define name="CATASTROPHIC_BAT_LEVEL" value="13.6" unit="V"/>
<define name="CRITIC_BAT_LEVEL" value="13.8" unit="V"/>
<define name="LOW_BAT_LEVEL" value="14.0" unit="V"/>
<define name="MAX_BAT_LEVEL" value="17.0" unit="V"/>
</section>

</airframe>

0 comments on commit f2ef433

Please sign in to comment.