paparazzi-devel
[Top][All Lists]
Advanced

[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

Hi,

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?

Marc

_____________________

<!DOCTYPE airframe SYSTEM "airframe.dtd">



<airframe name="EGE 1 Tiny 2.1">

<!-- commands section -->
  <servos>
    <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"/>        
<!--rechts-->
    <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"/>
  </servos>

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

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

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

  <command_laws>
    <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"/>
  </command_laws>



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

  <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>

  <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>

 <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>

<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>


  <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>
  <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"/>
    <define name="AUTO_THROTTLE_CLIMB_THROTTLE_INCREMENT" 
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>

  <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>

  <section name="NAV">
    <define name="NAV_PITCH" value="0."/>
    <define name="NAV_GLIDE_PITCH_TRIM" value="0."/>
  </section>
  <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>
  
  <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>
 
    <!-- 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>

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


  </section>

  <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>

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

 <makefile>
CONFIG = \"tiny_2_1_1.h\"

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

FLASH_MODE=IAP

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

ap.CFLAGS += -DRADIO_CONTROL -DRADIO_CONTROL_TYPE=RC_FUTABA
ap.srcs += radio_control.c $(SRC_ARCH)/ppm_hw.c  

#ap.CFLAGS += -DDOWNLINK -DUSE_UART1 -DDOWNLINK_TRANSPORT=XBeeTransport 
-DXBEE_UART=Uart1 -DDATALINK=XBEE -DUART1_BAUD=B9600
#ap.srcs += downlink.c $(SRC_ARCH)/uart_hw.c datalink.c xbee.csim.CFLAGS += 
-DCONFIG=\"tiny.h\" -DAGR_CLIMB -DLOITER_TRIM -DALT_KALMAN -DENOSE

#ap.CFLAGS += -DDOWNLINK -DUSE_UART1 -DDOWNLINK_TRANSPORT=XBeeTransport 
-DXBEE_UART=Uart1 -DDATALINK=XBEE -DUART1_BAUD=B9600
#ap.srcs += downlink.c $(SRC_ARCH)/uart_hw.c datalink.c xbee.c

#TRANSPARENT   
ap.CFLAGS += -DDOWNLINK -DUSE_UART1 -DDOWNLINK_TRANSPORT=PprzTransport 
-DDOWNLINK_FBW_DEVICE=Uart1 -DDOWNLINK_AP_DEVICE=Uart1 -DPPRZ_UART=Uart1 
-DDATALINK=PPRZ -DUART1_BAUD=B9600
#TRANSPARENT 
ap.srcs += downlink.c $(SRC_ARCH)/uart_hw.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 -DUSE_ADC_5
ap.srcs += $(SRC_ARCH)/adc_hw.c

#LEA4
#ap.CFLAGS += -DGPS -DUBX -DUSE_UART0 -DGPS_LINK=Uart0 -DUART0_BAUD=B38400 
-DGPS_LED=2 
#LEA5
ap.CFLAGS += -DGPS -DUBX -DUSE_UART0 -DGPS_LINK=Uart0 -DUART0_BAUD=B38400 
-DGPS_LED=2 -DGPS_USE_LATLONG
ap.srcs += gps_ubx.c gps.c latlong.c

ap.CFLAGS += -DINFRARED -DALT_KALMAN
ap.srcs += infrared.c estimator.c

ap.CFLAGS += -DNAV -DAGR_CLIMB -DLOITER_TRIM
ap.srcs += nav.c fw_h_ctl.c fw_v_ctl.c

ap.CFLAGS += -DGYRO -DADXRS150
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.CFLAGS += -DDIGITAL_CAM
ap.srcs += dc.c




########## Barometer (SPI)
#ap.CFLAGS += -DUSE_SPI -DSPI_MASTER -DUSE_SPI_SLAVE0 -DUSE_BARO_MS5534A
#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
#ap.CFLAGS += -DUSE_I2C -DENOSE

# Config for SITL simulation
include $(PAPARAZZI_SRC)/conf/autopilot/sitl.makefile
#sim.CFLAGS += -DCONFIG=\"tiny.h\" -DAGR_CLIMB -DLOITER_TRIM -DALT_KALMAN 
-DENOSE
sim.CFLAGS += -DCONFIG=\"tiny.h\" -DAGR_CLIMB -DLOITER_TRIM -DALT_KALMAN
#sim.CFLAGS += -DCONFIG=\"tiny.h\" -DLOITER_TRIM -DALT_KALMAN 
#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

#ap.CFLAGS += -DHITL


# 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 
-DDATALINK=XBEE -DPPRZ_UART=Uart1
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

  </makefile>
</airframe>

-- 
Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen: 
http://www.gmx.net/de/go/multimessenger01




reply via email to

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