[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 |
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=""ATPL2\rATRN1\rATTT80\r\ATBD6\rATWR\r""/> -->
<define name="XBEE_INIT" value=""ATPL2\rATRN1\rATTT80\r""/>
<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