[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Paparazzi-devel] Auto throttle problem

From: Aka
Subject: [Paparazzi-devel] Auto throttle problem
Date: Tue, 28 Apr 2009 16:46:02 +0200


we are using a plane to take pictures and spectroscopic readings using the OSAM 
routines to survey a field. Things work pretty good.

The only bigger problem left is that the auto throttle function seems to have 
values it won´t get over. This is a value of 60% in our case. As you can see 
from the attached file, the max-value should be 80%... In replay I can clearly 
see that the desired climb is the 2m/s set in the config.
The second thing, even stranger, is that when the boundary to agressive climb 
mode is reached (20m under desired) the maximum throttle value drops down to 
50%. Then we have a constant descent...
The plane can barely stay leveled at 60%, so a workaround could be to 
deactivate Agressive, but for me that´s not the solution.

The behaviour is reproducable in the simulation. I tried to alter every 
variable that seemed to belong to throttle control, but no success so far.

Anybody has an Idea?



<!DOCTYPE airframe SYSTEM "airframe.dtd">

<airframe name="EGE 1 Tiny 2.1">

<!-- commands section -->
    <servo name="MOTOR" no="0" min="1000" neutral="1000" max="2000"/>
    <servo name="RUDDER" no="7" min="1130" neutral="1570" max="1880"/>
    <servo name="ELEVATOR" no="1" min="1100" neutral="1500" max="1900"/>        
    <servo name="ELEVATOR2" no="6" min="1900" neutral="1515" max="1100"/>
    <servo name="AILERON_RIGHT" no="2" min="1100" neutral="1565" max="1900"/>
    <servo name="AILERON_LEFT" no="5" min="1100" neutral="1550" max="1900"/>

    <axis name="THROTTLE" failsafe_value="0"/>
    <axis name="YAW" failsafe_value="0"/>
    <axis name="ROLL" failsafe_value="0"/>
    <axis name="PITCH" failsafe_value="0"/>

    <set command="THROTTLE" value="@THROTTLE"/>
    <set command="ROLL" value="@ROLL"/>
    <set command="PITCH" value="@PITCH"/>
    <set command="YAW" value="@YAW"/>

  <section name="MIXER">
     <define name="AILERON_DIFF" value="0.66"/>
     <define name="COMBI_SWITCH" value="0.4"/>

    <set servo="MOTOR" value="@THROTTLE"/>
    <set servo="ELEVATOR" value="@PITCH"/>
    <set servo="ELEVATOR2" value="@PITCH"/>
    <!--<set servo="RUDDER" value="@YAW + @ROLL"/>-->
    <!--<set servo="RUDDER" value="@ROLL"/>-->

    <set servo="RUDDER" value="@YAW + @ROLL*COMBI_SWITCH"/>

    <let var="roll" value="@ROLL"/>
    <set servo="AILERON_LEFT" value="($roll > 0 ? 1 : AILERON_DIFF) * $roll"/>
    <set servo="AILERON_RIGHT" value="($roll > 0 ? AILERON_DIFF : 1) * $roll"/>

  <section name="AUTO1" prefix="AUTO1_">
    <define name="MAX_ROLL" value="0.8"/>
    <define name="MAX_PITCH" value="0.6"/>

  <section name="adc" prefix="ADC_CHANNEL_">
    <define name="IR1" value="ADC_1"/>
    <define name="IR2" value="ADC_2"/>
    <define name="IR_TOP" value="ADC_0"/>
    <define name="IR_NB_SAMPLES" value="16"/>

   <define name="GYRO_ROLL" value="ADC_5"/>
    <define name="GYRO_NB_SAMPLES" value="16"/>


  <section name="INFRARED" prefix="IR_">
    <define name="ADC_IR1_NEUTRAL" value="511"/>
    <define name="ADC_IR2_NEUTRAL" value="514"/>
    <define name="ADC_TOP_NEUTRAL" value="520"/>

    <define name="LATERAL_CORRECTION" value="1."/>
    <define name="LONGITUDINAL_CORRECTION" value="1."/>
    <define name="VERTICAL_CORRECTION" value="0.40000000596"/>

    <define name="HORIZ_SENSOR_TILTED" value="1"/>
    <!--<define name="HORIZ_SENSOR_ALIGNED" value="1"/> -->
    <define name="IR1_SIGN" value="-1"/>
    <define name="TOP_SIGN" value="-1"/>

    <define name="ROLL_NEUTRAL_DEFAULT" value="0." unit="deg"/>
    <define name="PITCH_NEUTRAL_DEFAULT" value="0." 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 name="GYRO" prefix="GYRO_">
    <define name="ADC_ROLL_NEUTRAL" value="452"/>
    <define name="ROLL_SCALE" value="1.3846"/>
    <define name="ROLL_DIRECTION" value="-1."/> 

<section name="BAT">
 <define name="MILLIAMP_PER_PERCENT" value="0.86"/>
 <define name="CATASTROPHIC_BAT_LEVEL" value="5.6" unit="V"/>
 <define name="CRITIC_BAT_LEVEL" value="5.8" unit="V"/>
 <define name="LOW_BAT_LEVEL" value="6.2" unit="V"/>
 <define name="MAX_BAT_LEVEL" value="8.4" unit="V"/>

  <section name="MISC">
    <define name="NOMINAL_AIRSPEED" value="20." 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="XBEE_INIT" 
value="&quot;ATPL2\rATRN1\rATTT80\r\ATBD6\rATWR\r&quot;"/> -->
    <define name="XBEE_INIT" value="&quot;ATPL2\rATRN1\rATTT80\r&quot;"/>
    <define name="NO_XBEE_API_INIT" value="TRUE"/>
    <define name="ALT_KALMAN_ENABLED" value="TRUE"/>
    <define name="TRIGGER_DELAY" value="1."/>
    <define name="DEFAULT_CIRCLE_RADIUS" value="150."/>
    <define name="MIN_CIRCLE_RADIUS" value="120."/>
  <section name="VERTICAL CONTROL" prefix="V_CTL_">
    <define name="POWER_CTL_BAT_NOMINAL" value="5.0" unit="volt"/>
    <!-- outer loop proportional gain -->
    <define name="ALTITUDE_PGAIN" value="-0.123000003397"/>
    <!-- outer loop saturation -->
    <define name="ALTITUDE_MAX_CLIMB" value="8."/>
    <!-- auto throttle inner loop -->
    <define name="AUTO_THROTTLE_NOMINAL_CRUISE_THROTTLE" value="0.6"/>
    <define name="AUTO_THROTTLE_MIN_CRUISE_THROTTLE" value="0.35"/>
    <define name="AUTO_THROTTLE_MAX_CRUISE_THROTTLE" value="0.9"/>
    <define name="AUTO_THROTTLE_LOITER_TRIM" value="1500."/>
    <define name="AUTO_THROTTLE_DASH_TRIM" value="-1000"/>
value="0.170000001788" unit="%/(m/s)"/>
    <define name="AUTO_THROTTLE_PGAIN" value="-0.0399999991059"/>
    <define name="AUTO_THROTTLE_IGAIN" value="0.151999995112"/>
    <define name="AUTO_THROTTLE_PITCH_OF_VZ_PGAIN" value="0.0500000007451"/>
    <!-- auto pitch inner loop -->
    <define name="AUTO_PITCH_PGAIN" value="-0.0500000007451"/>
    <define name="AUTO_PITCH_IGAIN" value="0.0750000029802"/>
    <define name="AUTO_PITCH_MAX_PITCH" value="0.35"/>
    <define name="AUTO_PITCH_MIN_PITCH" value="-0.35"/>
   <define name="THROTTLE_SLEW" value="0.5"/>

  <section name="HORIZONTAL CONTROL" prefix="H_CTL_">
    <define name="COURSE_PGAIN" value="-2.9319999218"/>
    <define name="ROLL_MAX_SETPOINT" value="0.916999995708" unit="radians"/>
    <define name="PITCH_MAX_SETPOINT" value="0.5" unit="radians"/>
    <define name="PITCH_MIN_SETPOINT" value="-0.5" unit="radians"/>
    <define name="PITCH_PGAIN" value="-5000."/>
    <define name="PITCH_DGAIN" value="1.5"/>
    <define name="ELEVATOR_OF_ROLL" value="2500."/>
    <define name="ROLL_ATTITUDE_GAIN" value="-9000."/>
    <define name="ROLL_RATE_GAIN" value="-761.905029297"/>

  <section name="NAV">
    <define name="NAV_PITCH" value="0."/>
    <define name="NAV_GLIDE_PITCH_TRIM" value="0."/>
  <section name="AGGRESSIVE" prefix="AGR_">
    <define name="BLEND_START" value="20"/><!-- Altitude Error to Initiate 
Aggressive Climb CANNOT BE ZERO!!-->
    <define name="BLEND_END" value="10"/><!-- Altitude Error to Blend 
Aggressive to Regular Climb Modes  CANNOT BE ZERO!!-->
    <define name="CLIMB_THROTTLE" value="0.8"/><!-- Gaz for Aggressive Climb -->
    <define name="CLIMB_PITCH" value="0.1"/><!-- Pitch for Aggressive Climb -->
    <define name="DESCENT_THROTTLE" value="0.1"/><!-- Gaz for Aggressive Decent 
    <define name="DESCENT_PITCH" value="-0.15"/><!-- Pitch for Aggressive 
Decent -->
    <define name="CLIMB_NAV_RATIO" value="0.8"/><!-- Percent Navigation for 
Altitude Error Equal to Start Altitude -->
    <define name="DESCENT_NAV_RATIO" value="1.0"/>
  <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"/>
    <!-- For Osam bungee takeoff  -->
  <section name="Takeoff" prefix="Takeoff_">
        <define name="Height" value="30" unit="m"/>
        <define name="Speed" value="15" unit="m/s"/>
        <define name="Distance" value="3" unit="m"/>
        <define name="MinSpeed" value="35" unit="m/s"/>


 <section name="DATALINK" prefix="DATALINK_">
    <define name="DEVICE_TYPE" value="PPRZ"/>
    <define name="DEVICE_ADDRESS" value="...."/>


  <section name="Digital camera telecommand">
    <!-- IOs are seen as LEDs -->

    <define name="LED_6_BANK" value="0"/>
    <define name="LED_6_PIN" value="2"/> <!-- I2C SCL -->

    <!-- ADC 5 -->
    <define name="LED_7_BANK" value="0"/>
    <define name="LED_7_PIN" value="3"/> <!-- I2C SDA -->

    <define name="DC_SHUTTER_LED" value="6"/> <!-- Grey wire -->
    <define name="DC_ZOOM_LED" value="7"/>

 <section name="SIMU">
    <define name="YAW_RESPONSE_FACTOR" value="0.5"/>

CONFIG = \"tiny_2_1_1.h\"

include $(PAPARAZZI_SRC)/conf/autopilot/tiny.makefile


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_4017_hw.h\" -DSERVOS_4017
ap.srcs += $(SRC_ARCH)/servos_4017_hw.c actuators.c

ap.srcs += radio_control.c $(SRC_ARCH)/ppm_hw.c  

#ap.srcs += downlink.c $(SRC_ARCH)/uart_hw.c datalink.c xbee.csim.CFLAGS += 

#ap.srcs += downlink.c $(SRC_ARCH)/uart_hw.c datalink.c xbee.c

ap.srcs += downlink.c $(SRC_ARCH)/uart_hw.c datalink.c pprz_transport.c

ap.srcs += inter_mcu.c 

ap.srcs += $(SRC_ARCH)/adc_hw.c

ap.srcs += gps_ubx.c gps.c latlong.c

ap.srcs += infrared.c estimator.c

ap.srcs += nav.c fw_h_ctl.c fw_v_ctl.c

ap.srcs += gyro.c nav_line.c  
ap.srcs += OSAMNav.c
#ap.srcs += nav_line.c
ap.srcs += nav_survey_rectangle.c
# chemotaxis.c anemotaxis.c discsurvey.c

ap.srcs += dc.c

########## Barometer (SPI)
#ap.srcs += spi.c $(SRC_ARCH)/spi_hw.c $(SRC_ARCH)/baro_MS5534A.c

########## Chemo sensor (I2C)
#ap.srcs += i2c.c arm7/i2c_hw.c enose.c chemo_detect.c

# Config for SITL simulation
include $(PAPARAZZI_SRC)/conf/autopilot/sitl.makefile
#sim.srcs += nav_line.c anemotaxis.c nav_survey_rectangle.c 
sim.srcs += nav_line.c nav_survey_rectangle.c OSAMNav.c
# chemotaxis.c $(SRC_ARCH)/sim_enose.c chemo_detect.c discsurvey.c

# Harware In The Loop


# a test program to setup actuators 
setup_actuators.ARCHDIR = $(ARCHI)
setup_actuators.ARCH = arm7tdmi
setup_actuators.TARGET = setup_actuators
setup_actuators.TARGETDIR = setup_actuators

setup_actuators.CFLAGS += -DFBW -DCONFIG=\"tiny.h\" -DLED -DTIME_LED=1 
-DACTUATORS=\"servos_4015_hw.h\" -DSERVOS_4015 -DUSE_UART1 -DUART1_BAUD=B9600 
setup_actuators.srcs += sys_time.c $(SRC_ARCH)/sys_time_hw.c 
$(SRC_ARCH)/armVIC.c pprz_transport.c setup_actuators.c $(SRC_ARCH)/uart_hw.c 
$(SRC_ARCH)/servos_4015_hw.c main.c


Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen:

reply via email to

[Prev in Thread] Current Thread [Next in Thread]