Difference between revisions of "User/AirborneCodeReorg"
m (→In Brief) |
m (→Why) |
||
Line 3: | Line 3: | ||
=== Why === | === Why === | ||
# Because of its growth, paparazzi needs significant reorganization. To make this possible without breaking airframe files, the 'subsystem' idea introduced in booz is now generalized to all airframes. | |||
# A nicer looking XML structure. | |||
# users are not required to understand Makefile's anymore in order to choose what to compile. | |||
IMHO not really compelling reasons for such a drastical change [OpenUAS] | |||
==FixedWing== | ==FixedWing== |
Revision as of 23:36, 20 August 2010
This page summarizes the changes needed to switch from the "raw makefile in airframes" to a new "xml only aiframes" syntax
Why
- Because of its growth, paparazzi needs significant reorganization. To make this possible without breaking airframe files, the 'subsystem' idea introduced in booz is now generalized to all airframes.
- A nicer looking XML structure.
- users are not required to understand Makefile's anymore in order to choose what to compile.
IMHO not really compelling reasons for such a drastical change [OpenUAS]
FixedWing
In Brief
The idea is to replace the <makefile> section with a <target> section
NOTE: IMHO now compiling the AC from commandline becomes more cumbersome. The makefile can already be in an Include in the XML. Do not forget it was designed this way for a reason ;). A dynamic makefile is OK by me but make sure the old methods do not break. Code refactoring is better first done by cleaning up odl thing, not redesigning first.
Typicaly, replace:
<makefile> CONFIG=\"tiny_2_1_1.h\" include $(PAPARAZZI_SRC)/conf/autopilot/tiny.makefile FLASH_MODE=IAP ap.CFLAGS += -DFBW -DAP -DBOARD_CONFIG=$(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 ap.srcs += radio_control.c $(SRC_ARCH)/ppm_hw.c ap.CFLAGS += -DDOWNLINK -DUSE_UART1 -DDOWNLINK_TRANSPORT=PprzTransport -DDOWNLINK_FBW_DEVICE=Uart1 -DDOWNLINK_AP_DEVICE=Uart1 -DPPRZ_UART=Uart1 -DDATALINK=PPRZ -DUART1_BAUD=B9600 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 ap.srcs += $(SRC_ARCH)/adc_hw.c ap.CFLAGS += -DGPS -DUBX -DUSE_UART1 -DGPS_LINK=Uart1 -DUART1_BAUD=B38400 ap.CFLAGS += -DGPS_CONFIGURE -DGPS_BAUD=38400 ap.srcs += gps_ubx.c gps.c latlong.c ap.CFLAGS += -DINFRARED ap.srcs += infrared.c estimator.c ap.CFLAGS += -DNAV -DAGR_CLIMB -DLOITER_TRIM -DALT_KALMAN -DWIND_INFO ap.srcs += nav.c fw_h_ctl.c fw_v_ctl.c ap.srcs += nav_line.c nav_survey_rectangle.c </makefile>
with
<firmware name="fixedwing"> <target name="sim" board="pc" > <define name="TRAFFIC_INFO" /> </target> <target name="ap" board="tiny_2.11"> <param name="FLASH_MODE" value="IAP" /> <define name="AGR_CLIMB" /> <define name="LOITER_TRIM" /> <define name="WIND_INFO" /> <define name="TRAFFIC_INFO" /> <define name="ALT_KALMAN" /> </target> <subsystem name="radio_control" type="ppm"/> <subsystem name="telemetry" type="transparent"> <param name="MODEM_BAUD" value="9600"/> </subsystem> <subsystem name="actuators" type="4017"/> <subsystem name="gyro"/> <subsystem name="attitude" type="infrared"/> <subsystem name="gps" type="ublox_lea4p"/> <subsystem name="navigation"/> </firmware> <makefile location="after"> # specific stuff that only you are needing... be aware that files might move, so USE the firmware-source variable ap.srcs += $(FIXEDWING_SRCS)/polygon_survey.c </makefile>
But you can also add:
<firmware name="setup"> <target name="tunnel" board="tiny_2.11" /> <target name="setup_actuators" board="tiny_2.11" /> </firmware>
In details
Let's look in more detail how this is done
You can define several <firmware> branches that are linked with you airframe
For a tiny2 this is typically the 'fixedwing' firmware. This chooses which main routine will run. In this case the fixedwing main.c
<firmware name="fixedwing">
The old first two lines of the makefile
CONFIG=\"tiny_2_1_1.h\" include $(PAPARAZZI_SRC)/conf/autopilot/tiny.makefile FLASH_MODE=IAP
are now replaced by the <target> block. Notice that this name is automatically filled in paparazzi center.
<target name="ap" board="tiny_2.11"> <param name="FLASH_MODE" value="IAP"/>
The only field you might want to adapt depending on your configuration is the board one. The list of supported boards is
- "twog_1"
- "tiny_2.11"
- "tiny_2.1"
- "tiny_1.1"
- "tiny_0.99"
- "booz"
- "lisa_l_1.0"
- "pc"
Then you should define which subsystems to use for you board. For most fixedwing Tiny users this will be standard. But for booz there are already many more options, and wait until you see the power of Lisa!
The following line defines what kind of radio control you'll be using. Fox now fixedwing doesn't have a choice and uses ppm
<subsystem name="radio_control" type="ppm"/>
replaces
ap.CFLAGS += -DRADIO_CONTROL ap.srcs += radio_control.c $(SRC_ARCH)/ppm_hw.c