Hi,
I have a Tiny v2.11
autopilot with all the hardware needed for autonomous flight. I have started on
the programming, but have run into a few difficulties.
I have installed all the
hardware in my aircraft, but have not gotten any further than that succesfully.
I am meant to be demonstrating autonomous flight a week from now, so it would
be really great if I could get the autopilot fully working by then.
I am new to Linux, and have
run into some problems regarding the programming. It would be extremely helpful
if you could provide some assistance. I am using Ubuntu 8.04.1 - Hardy Heron
I have been studying the
Wiki and following it very closely.
This is what I need help
with:
- Installing the drivers for
the radio modem (the ground-station modem. It plugs into the USB port and grabs
the serial signals. I'm sure you know all about this... The readme file that
came with it says that I need to compile the driver into a 'Loadable Kernel
Module' but I am unsure how to do this. The modem I am using is a Digi
(Maxstream) 9XTend operating on 900MHz. I have been told that I may not need to
install the driver, but can you please advise me on what to do.
- Configuring the rc radio
settings: I am using a 6-channel JR Radio. I have found (using a scope) that my
JR R700 7-channel receiver outputs the ppm signal through the 'signal' pin in
the battery connector. I can attach a picture of the signal if you want. Also,
how do you choose which channel determines the mode? (Auto 1, Auto 2, Manual).
- Configuring the airframe
file: I have had a go at making my own airframe file (following the wiki), but
are not sure if it is correct. I have pasted the code at the bottom. My
airframe is very simple: A 3-Channel Easystar. It also hope to be able to
trigger a servo for controlling the shutter on a camera at a set position, but
I will keep it simple and focus on achieving autonomous flight first.
It would really be great if you could help me get this working within the next
week.
Thankyou very much,
Ben
Here is my airframe code:
<!DOCTYPE airframe SYSTEM
"airframe.dtd">
<airframe name="EASYSTAR">
<!-- tiny v2.11 airframe -->
<!-- commands section -->
<servos>
<servo name="THROTTLE" no="0"
min="1000" neutral="1500" max="2000"/>
<servo name="RUDDER" no="2"
min="1000" neutral="1500" max="2000"/>
<servo name="ELEVATOR" no="6"
min="1000" neutral="1500" min="2000"/>
</servos>
<commands>
<axis name="THROTTLE"
failsafe_value="0"/>
<axis name="YAW"
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"/>
</rc_commands>
<command_laws>
<set servo="THROTTLE"
value="@THROTTLE"/>
<set servo="RUDDER"
value="@ROLL"/>
<set servo="ELEVATOR" value="@PITCH"/>
</command_laws>
<section name="AUTO1" prefix="AUTO1_">
<define name="MAX_ROLL"
value="0.6"/>
<define name="MAX_PITCH"
value="0.6"/>
</section>
<section name="adc" prefix="ADC_CHANNEL_">
<define name="IR1" value="ADC_0"/>
<define name="IR2" value="ADC_1"/>
<define name="IR_TOP" value="ADC_6"/>
</section>
<section name="INFRARED" prefix="IR_">
<define name="ADC_IR1_NEUTRAL"
value="512"/>
<define name="ADC_IR2_NEUTRAL"
value="512"/>
<define name="ADC_TOP_NEUTRAL"
value="512"/>
<define name="IR2_SIGN"
value="-1"/>
<define name="TOP_SIGN"
value="-1"/>
<define name="HORIZ_SENSOR_TILTED"
value="1"/>
<define name="LATERAL_CORRECTION"
value="1"/>
<define name="LONGITUDINAL_CORRECTION"
value="1"/>
<define name="VERTICAL_CORRECTION"
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="BAT">
<define name="MILLIAMP_PER_PERCENT"
value="0.86"/>
<define name="CATASTROPHIC_BAT_LEVEL"
value="5.5" unit="V"/>
</section>
<section name="MISC">
<define name="NOMINAL_AIRSPEED"
value="7" 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"/>
</section>
<section name="PID">
<define name="ROLL_PGAIN"
value="5000."/>
<define name="PITCH_OF_ROLL"
value="0.25"/>
<define name="PITCH_PGAIN"
value="10000."/>
<define name="MAX_ROLL"
value="0.35"/>
<define name="MAX_PITCH"
value="0.35"/>
<define name="MIN_PITCH"
value="-0.35"/>
<define name="AILERON_OF_THROTTLE"
value="0.0"/>
<define name="CRUISE_THROTTLE"
value="0.35"/>
</section>
<section name="ALT" prefix="CLIMB_">
<define name="PITCH_PGAIN"
value="-0.05"/>
<define name="PITCH_IGAIN"
value="0.075"/>
<define name="PGAIN"
value="-0.01"/>
<define name="IGAIN" value="0.1"/>
<define name="MAX" value="1."/>
<define name="PITCH_OF_VZ_PGAIN"
value="0.05"/>
<define name="THROTTLE_OF_CLIMB"
value="0.15" unit="%/(m/s)"/>
</section>
<section name="HORIZONTAL CONTROL"
prefix="H_CTL_">
<define name="COURSE_PGAIN"
value="-0.4"/>
<define name="ROLL_MAX_SETPOINT"
value="0.6" unit="radians"/>
<define name="PITCH_MAX_SETPOINT"
value="0.5" unit="radians"/>
<define name="PITCH_MIN_SETPOINT"
value="-0.5" unit="radians"/>
<define name="ROLL_PGAIN"
value="5000."/>
<define name="AILERON_OF_THROTTLE"
value="0.0"/>
<define name="PITCH_PGAIN"
value="-9000."/>
<define name="PITCH_DGAIN"
value="1.5"/>
<!-- roll rate loop -->
<define name="ROLL_RATE_MODE_DEFAULT"
value="1"/>
<define name="ROLL_RATE_SETPOINT_PGAIN"
value="-5." unit="rad/s/rad"/>
<define name="ROLL_RATE_MAX_SETPOINT"
value="10"/>
<define name="LO_THROTTLE_ROLL_RATE_PGAIN"
value="1000."/>
<define name="HI_THROTTLE_ROLL_RATE_PGAIN"
value="1000."/>
<define name="ROLL_RATE_IGAIN"
value="0"/>
<define name="ROLL_RATE_DGAIN"
value="0"/>
<define name="ROLL_RATE_SUM_NB_SAMPLES"
value="64"/>
</section>
<section name="VERTICAL CONTROL"
prefix="V_CTL_">
<define name="POWER_CTL_BAT_NOMINAL"
value="6" unit="volt"/>
<!-- outer loop proportional gain -->
<define name="ALTITUDE_PGAIN"
value="-0.03"/>
<!-- outer loop saturation -->
<define name="ALTITUDE_MAX_CLIMB"
value="2."/>
<!-- auto throttle inner loop -->
<define
name="AUTO_THROTTLE_NOMINAL_CRUISE_THROTTLE"
value="0.4"/>
<define
name="AUTO_THROTTLE_MIN_CRUISE_THROTTLE" value="0.30"/>
<define name="AUTO_THROTTLE_MAX_CRUISE_THROTTLE"
value="0.80"/>
<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.15"
unit="%/(m/s)"/>
<define name="AUTO_THROTTLE_PGAIN"
value="-0.01"/>
<define name="AUTO_THROTTLE_IGAIN"
value="0.1"/>
<define name="AUTO_THROTTLE_PITCH_OF_VZ_PGAIN"
value="0.05"/>
<!-- auto pitch inner loop -->
<define name="AUTO_PITCH_PGAIN"
value="-0.05"/>
<define name="AUTO_PITCH_IGAIN"
value="0.075"/>
<define name="AUTO_PITCH_MAX_PITCH"
value="0.35"/>
<define name="AUTO_PITCH_MIN_PITCH"
value="-0.35"/>
<define name="THROTTLE_SLEW"
value="0.1"/>
</section>
<section name="NAV">
<define name="NAV_PITCH"
value="0.0"/>
<define name="NAV_GLIDE_PITCH_TRIM"
value="0.2"/>
<define name="DEFAULT_CIRCLE_RADIUS"
value="100" unit="m"/>
</section>
<section name="AGGRESSIVE" prefix="AGR_">
<define name="CLIMB_THROTTLE"
value="0.95"/><!-- Throttle for Aggressive Climb -->
<define name="DESCENT_THROTTLE"
value="0.1"/><!-- Throttle for Aggressive Decent -->
<define name="CLIMB_PITCH"
value="0.3"/><!-- Pitch for Aggressive Climb -->
<define name="DESCENT_PITCH"
value="-0.25"/><!-- Pitch for Aggressive Decent -->
<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_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>
<!--
<section name="DATALINK" prefix="DATALINK_">
<define name="DEVICE_TYPE"
value="PPRZ"/>
<define name="DEVICE_ADDRESS"
value="...."/>
</section>
-->
<makefile>
include $(PAPARAZZI_SRC)/conf/autopilot/tiny.makefile
FLASH_MODE=IAP
ap.CFLAGS += -DFBW -DAP -DCONFIG=\"tiny.h\" -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.CFLAGS += -DLED_3_BANK=0 -DLED_3_PIN=17 -DLED_4_BANK=0 -DLED_4_PIN=18
-DLED_5_BANK=0 -DLED_5_PIN=19 -DLED_6_BANK=0 -DLED_6_PIN=20
ap.srcs += commands.c
ap.CFLAGS += -DACTUATORS=\"servos_4015_hw.h\" -DSERVOS_4015
ap.srcs += actuators.c $(SRC_ARCH)/servos_4015_hw.c
ap.CFLAGS += -DRADIO_CONTROL -DRADIO_CONTROL_TYPE=RC_JR
ap.srcs += radio_control.c $(SRC_ARCH)/ppm_hw.c
ap.CFLAGS += -DDOWNLINK -DUSE_UART0 -DDOWNLINK_TRANSPORT=PprzTransport
-DDOWNLINK_FBW_DEVICE=Uart0 -DDOWNLINK_AP_DEVICE=Uart0 -DPPRZ_UART=Uart0
-DDATALINK=PPRZ -DUART0_BAUD=B9600
ap.srcs += downlink.c $(SRC_ARCH)/uart_hw.c datalink.c pprz_transport.c
latlong.c
ap.CFLAGS += -DINTER_MCU
ap.srcs += inter_mcu.c
ap.CFLAGS += -DADC -DUSE_AD0 -DUSE_AD0_2 -DUSE_AD0_3 -DUSE_AD1 -DUSE_AD1_5
-DUSE_AD1_3 -DUSE_AD1_5
ap.srcs += $(SRC_ARCH)/adc_hw.c
ap.CFLAGS += -DGPS -DUBX -DUSE_UART1 -DGPS_LINK=Uart1 -DUART1_BAUD=B9600
ap.srcs += gps_ubx.c gps.c
ap.CFLAGS += -DINFRARED
ap.srcs += infrared.c estimator.c
ap.CFLAGS += -DNAV
ap.srcs += nav.c fw_h_ctl.c fw_v_ctl.c nav_survey_rectangle.c nav_line.c
ap.CFLAGS += -DGYRO -DADXRS150 -DPID_RATE_LOOP
ap.srcs += gyro.c
# Harware In The Loop
#ap.CFLAGS += -DHITL
# Config for SITL simulation
include $(PAPARAZZI_SRC)/conf/autopilot/sitl.makefile
sim.CFLAGS += -DCONFIG=\"tiny.h\" -DAGR_CLIMB -DLOITER_TRIM
-DALT_KALMAN
sim.srcs += nav_survey_rectangle.c traffic_info.c nav_line.c
</makefile>
</airframe>