<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.paparazziuav.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Poine</id>
	<title>PaparazziUAV - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.paparazziuav.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Poine"/>
	<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/wiki/Special:Contributions/Poine"/>
	<updated>2026-05-25T19:50:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Lisa/Bone&amp;diff=18480</id>
		<title>Lisa/Bone</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Lisa/Bone&amp;diff=18480"/>
		<updated>2014-04-15T00:57:15Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lisa/Bone is a project consisting in designing a Paparazzi [http://beagleboard.org/Products/BeagleBone+Black Beaglebone Black] cape.&lt;br /&gt;
&lt;br /&gt;
For now, this page is a placeholder for the definition of the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MCU or not MCU ==&lt;br /&gt;
&lt;br /&gt;
BeagleBone Black (BBB) has all the peripherals needed to make an autopilot (PWM, ADC, SPI, I2C, UARTS, Capture, etc...). The daughter board could just be a connectors, supply and aspirin carrier board. It would minimize cost and complexity, but we'd lose the possibility of segregating critical code. Discarded for that reason&lt;br /&gt;
&lt;br /&gt;
I suggest a 64 pins STM F4 (like in Lisa/M)&lt;br /&gt;
&lt;br /&gt;
We don't need level converters. BBB is happy with 3.3V IOs&lt;br /&gt;
&lt;br /&gt;
My current plan is to base the cape on Lisa/M, rework supply and connectors.&lt;br /&gt;
&lt;br /&gt;
Communications between F4 and BBB is through SPI (BBB master, F4 slave) in order to have high bandwith&lt;br /&gt;
&lt;br /&gt;
Gautier says he wants UART communications: &lt;br /&gt;
   can you justify and specify which UART of the F4 you'd use ?&lt;br /&gt;
   My argument against it is that UARTs are a scarce resource on the F4 - SPI is easy on BBB, from userland using SPIdev ( [http://elinux.org/BeagleBone_Black_Enable_SPIDEV see here]) &lt;br /&gt;
   On F4, Lisa/L's SPI code can be reused. This code is well validated (or did it get broken by the change to libopencm?)&lt;br /&gt;
&lt;br /&gt;
   =&amp;gt; UART comminucation is still easier to use expecially for new-comers. It is also sufficient for high-level operations (controlling at navigation level) from the BB.&lt;br /&gt;
   SPI code on MCU side has changed a lot since Lisa/L, I wouldn't bet it is still working.&lt;br /&gt;
   I really don't care which UART is used.&lt;br /&gt;
&lt;br /&gt;
== Connectors ==&lt;br /&gt;
&lt;br /&gt;
Let's start from Lisa/M connectors. We have a little bit more space available&lt;br /&gt;
  - I would like 10 full size servo connectors - supply bus isolated&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Supply ==&lt;br /&gt;
&lt;br /&gt;
-If we're going for the code segregation thing, it makes sense to have two independent rails: one non-critical for BBB and one critical for F4&lt;br /&gt;
&lt;br /&gt;
-I would like to be able to power the whole thing from 3/4S flight pack&lt;br /&gt;
&lt;br /&gt;
-Should we go for the PTH8080 that were used on Lisa/L, a pair of them?&lt;br /&gt;
&lt;br /&gt;
-Any idea for a good connector for input supply ? Or do we just skip that and go for beefy solder pads as usual?&lt;br /&gt;
&lt;br /&gt;
-Beagle has the possibility to run on one lipo cell and has a chip capable of charging it from the 5V supply ( [http://www.element14.com/community/community/knode/single-board_computers/next-gen_beaglebone/blog/2013/08/10/bbb--rechargeable-on-board-battery-system see here] )&lt;br /&gt;
Should we implement something like this to allow changing the vehicle's battery pack without having to shutdown the autopilot (or switch from lab power supply to flight pack) ?&lt;br /&gt;
1400mAh give ~3h endurance and weights 25g, 500mAh is 10g&lt;br /&gt;
   Discarded, Bryan says it doesn't work&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
  &lt;br /&gt;
-We want a push button for triggering BBB shutdown - maybe with a molex to be able to mount a button in a convenient place when in airframe (P9-9 to ground [http://www.element14.com/community/community/knode/single-board_computers/next-gen_beaglebone/blog/2014/03/05/bbb--sonos-like-sound-system see here])&lt;br /&gt;
&lt;br /&gt;
-If linux system is setup properly you will not have to shutdown the BB.  You will be able to just pull power with no issues.&lt;br /&gt;
&lt;br /&gt;
-Maybe one or two GPIO in order to have status leds next to the button?&lt;br /&gt;
&lt;br /&gt;
-Do we want to be able to flash F4 from BBB?&lt;br /&gt;
&lt;br /&gt;
== Communications ==&lt;br /&gt;
&lt;br /&gt;
* BBB drives the xbee and tunnels communications to F4. Bad, we lose advantage of code segregation &lt;br /&gt;
* BBB and F4 each have a xbee. Bad, we increase weight and power consumption :) &lt;br /&gt;
* for short distances (rotorcraft), BBB through wifi(Bryan-wifi is not hard real time), F4 through wifi&lt;br /&gt;
* BBB communicates throught internet stick, BBB forwards data to F4 &lt;br /&gt;
* BBB uses internet stick, F4 uses xbee -&amp;gt; redundant communication, interent stick could be used for image/video&lt;br /&gt;
* CAN has built in data framing and CRC with many-master-many-slave type data system.&lt;br /&gt;
   Lisa/M (the F4 board) has one can driver. Do we want to add a second driver for the BBB?&lt;br /&gt;
== Use cases ==&lt;br /&gt;
   &lt;br /&gt;
Let's describe a couple of scenarios of what we would do with that board:&lt;br /&gt;
&lt;br /&gt;
* I want to investigate autonomous soaring. F4 runs the current fixedwing code. BBB runs the autonomous soaring program written in Python/Numpy and talks to the navigation layer running on F4. BBB receives every sensor measurement, state estimation and actuators command from F4, for real time use and logging.&lt;br /&gt;
&lt;br /&gt;
* Someone runs image processing on BBB (using a usb webcam?) and current rotorcraft code in F4 - similar to case 1&lt;br /&gt;
&lt;br /&gt;
* OpenCV onboard for motion tracking and 2d ground tracking for extra stability systems&lt;br /&gt;
&lt;br /&gt;
  Does image processing require some kind of fancy camera with a fancy interface, or is USB good enough?  BBB only has one USB... so webcam, or wifi, or hub..&lt;br /&gt;
  Do we want a USB hub on the daughterboard - i would say no, keep it cheap and simple&lt;br /&gt;
&lt;br /&gt;
* What else?&lt;br /&gt;
&lt;br /&gt;
[[Category:Lisa]] [[Category:Autopilots]]&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Lisa/Bone&amp;diff=18479</id>
		<title>Lisa/Bone</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Lisa/Bone&amp;diff=18479"/>
		<updated>2014-04-15T00:46:06Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lisa/Bone is a project consisting in designing a Paparazzi [http://beagleboard.org/Products/BeagleBone+Black Beaglebone Black] cape.&lt;br /&gt;
&lt;br /&gt;
For now, this page is a placeholder for the definition of the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MCU or not MCU ==&lt;br /&gt;
&lt;br /&gt;
BeagleBone Black (BBB) has all the peripherals needed to make an autopilot (PWM, ADC, SPI, I2C, UARTS, Capture, etc...). The daughter board could just be a connectors, supply and aspirin carrier board. It would minimize cost and complexity, but we'd lose the possibility of segregating critical code. Discarded for that reason&lt;br /&gt;
&lt;br /&gt;
I suggest a 64 pins STM F4 (like in Lisa/M)&lt;br /&gt;
&lt;br /&gt;
We don't need level converters. BBB is happy with 3.3V IOs&lt;br /&gt;
&lt;br /&gt;
My current plan is to base the cape on Lisa/M, rework supply and connectors.&lt;br /&gt;
&lt;br /&gt;
Communications between F4 and BBB is through SPI (BBB master, F4 slave) in order to have high bandwith&lt;br /&gt;
&lt;br /&gt;
Gautier says he wants UART communications: &lt;br /&gt;
   can you justify and specify which UART of the F4 you'd use ?&lt;br /&gt;
   My argument against it is that UARTs are a scarce resource on the F4 - SPI is easy on BBB, from userland using SPIdev ( [http://elinux.org/BeagleBone_Black_Enable_SPIDEV see here]) &lt;br /&gt;
   On F4, Lisa/L's SPI code can be reused. This code is well validated (or did it get broken by the change to libopencm?)&lt;br /&gt;
&lt;br /&gt;
   =&amp;gt; UART comminucation is still easier to use expecially for new-comers. It is also sufficient for high-level operations (controlling at navigation level) from the BB.&lt;br /&gt;
   SPI code on MCU side has changed a lot since Lisa/L, I wouldn't bet it is still working.&lt;br /&gt;
   I really don't care which UART is used.&lt;br /&gt;
&lt;br /&gt;
== Connectors ==&lt;br /&gt;
&lt;br /&gt;
Let's start from Lisa/M connectors. We have a little bit more space available&lt;br /&gt;
  - I would like 10 full size servo connectors - supply bus isolated&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Supply ==&lt;br /&gt;
&lt;br /&gt;
-If we're going for the code segregation thing, it makes sense to have two independent rails: one non-critical for BBB and one critical for F4&lt;br /&gt;
&lt;br /&gt;
-I would like to be able to power the whole thing from 3/4S flight pack&lt;br /&gt;
&lt;br /&gt;
-Should we go for the PTH8080 that were used on Lisa/L, a pair of them?&lt;br /&gt;
&lt;br /&gt;
-Any idea for a good connector for input supply ? Or do we just skip that and go for beefy solder pads as usual?&lt;br /&gt;
&lt;br /&gt;
-Beagle has the possibility to run on one lipo cell and has a chip capable of charging it from the 5V supply ( [http://www.element14.com/community/community/knode/single-board_computers/next-gen_beaglebone/blog/2013/08/10/bbb--rechargeable-on-board-battery-system see here] )&lt;br /&gt;
Should we implement something like this to allow changing the vehicle's battery pack without having to shutdown the autopilot (or switch from lab power supply to flight pack) ?&lt;br /&gt;
1400mAh give ~3h endurance and weights 25g, 500mAh is 10g&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
  &lt;br /&gt;
-We want a push button for triggering BBB shutdown - maybe with a molex to be able to mount a button in a convenient place when in airframe (P9-9 to ground [http://www.element14.com/community/community/knode/single-board_computers/next-gen_beaglebone/blog/2014/03/05/bbb--sonos-like-sound-system see here])&lt;br /&gt;
&lt;br /&gt;
-If linux system is setup properly you will not have to shutdown the BB.  You will be able to just pull power with no issues.&lt;br /&gt;
&lt;br /&gt;
-Maybe one or two GPIO in order to have status leds next to the button?&lt;br /&gt;
&lt;br /&gt;
-Do we want to be able to flash F4 from BBB?&lt;br /&gt;
&lt;br /&gt;
== Communications ==&lt;br /&gt;
&lt;br /&gt;
* BBB drives the xbee and tunnels communications to F4. Bad, we lose advantage of code segregation &lt;br /&gt;
* BBB and F4 each have a xbee. Bad, we increase weight and power consumption :) &lt;br /&gt;
* for short distances (rotorcraft), BBB through wifi(Bryan-wifi is not hard real time), F4 through wifi&lt;br /&gt;
* BBB communicates throught internet stick, BBB forwards data to F4 &lt;br /&gt;
* BBB uses internet stick, F4 uses xbee -&amp;gt; redundant communication, interent stick could be used for image/video&lt;br /&gt;
* CAN has built in data framing and CRC with many-master-many-slave type data system.&lt;br /&gt;
   Lisa/M (the F4 board) has one can driver. Do we want to add a second driver for the BBB?&lt;br /&gt;
== Use cases ==&lt;br /&gt;
   &lt;br /&gt;
Let's describe a couple of scenarios of what we would do with that board:&lt;br /&gt;
&lt;br /&gt;
* I want to investigate autonomous soaring. F4 runs the current fixedwing code. BBB runs the autonomous soaring program written in Python/Numpy and talks to the navigation layer running on F4. BBB receives every sensor measurement, state estimation and actuators command from F4, for real time use and logging.&lt;br /&gt;
&lt;br /&gt;
* Someone runs image processing on BBB (using a usb webcam?) and current rotorcraft code in F4 - similar to case 1&lt;br /&gt;
&lt;br /&gt;
* OpenCV onboard for motion tracking and 2d ground tracking for extra stability systems&lt;br /&gt;
&lt;br /&gt;
  Does image processing require some kind of fancy camera with a fancy interface, or is USB good enough?  BBB only has one USB... so webcam, or wifi, or hub..&lt;br /&gt;
  Do we want a USB hub on the daughterboard - i would say no, keep it cheap and simple&lt;br /&gt;
&lt;br /&gt;
* What else?&lt;br /&gt;
&lt;br /&gt;
[[Category:Lisa]] [[Category:Autopilots]]&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Lisa/Bone&amp;diff=18465</id>
		<title>Lisa/Bone</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Lisa/Bone&amp;diff=18465"/>
		<updated>2014-04-13T11:24:04Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lisa/Bone is a project consisting in designing a Paparazzi [http://beagleboard.org/Products/BeagleBone+Black Beaglebone Black] cape.&lt;br /&gt;
&lt;br /&gt;
For now, this page is a placeholder for the definition of the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MCU or not MCU ==&lt;br /&gt;
&lt;br /&gt;
BeagleBone Black (BBB) has all the peripherals needed to make an autopilot (PWM, ADC, SPI, I2C, UARTS, Capture, etc...). The daughter board could just be a connectors, supply and aspirin carrier board. It would minimize cost and complexity, but we'd lose the possibility of segregating critical code. Discarded for that reason&lt;br /&gt;
&lt;br /&gt;
I suggest a 64 pins STM F4 (like in Lisa/M)&lt;br /&gt;
&lt;br /&gt;
We don't need level converters. BBB is happy with 3.3V IOs&lt;br /&gt;
&lt;br /&gt;
My current plan is to base the cape on Lisa/M, rework supply and connectors.&lt;br /&gt;
&lt;br /&gt;
Communications between F4 and BBB is through SPI (BBB master, F4 slave) in order to have high bandwith&lt;br /&gt;
&lt;br /&gt;
Gautier says he wants UART communications: &lt;br /&gt;
   can you justify and specify which UART of the F4 you'd use ?&lt;br /&gt;
   My argument against it is that UARTs are a scarce resource on the F4 - SPI is easy on BBB, from userland using SPIdev ( [http://elinux.org/BeagleBone_Black_Enable_SPIDEV see here]) &lt;br /&gt;
   On F4, Lisa/L's SPI code can be reused. This code is well validated (or did it get broken by the change to libopencm?)&lt;br /&gt;
&lt;br /&gt;
== Connectors ==&lt;br /&gt;
&lt;br /&gt;
Let's start from Lisa/M connectors. We have a little bit more space available&lt;br /&gt;
  - I would like 10 full size servo connectors - supply bus isolated&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Supply ==&lt;br /&gt;
&lt;br /&gt;
-If we're going for the code segregation thing, it makes sense to have two independent rails: one non-critical for BBB and one critical for F4&lt;br /&gt;
&lt;br /&gt;
-I would like to be able to power the whole thing from 3/4S flight pack&lt;br /&gt;
&lt;br /&gt;
-Should we go for the PTH8080 that were used on Lisa/L, a pair of them?&lt;br /&gt;
&lt;br /&gt;
-Any idea for a good connector for input supply ? Or do we just skip that and go for beefy solder pads as usual?&lt;br /&gt;
&lt;br /&gt;
-Beagle has the possibility to run on one lipo cell and has a chip capable of charging it from the 5V supply ( [http://www.element14.com/community/community/knode/single-board_computers/next-gen_beaglebone/blog/2013/08/10/bbb--rechargeable-on-board-battery-system see here] )&lt;br /&gt;
Should we implement something like this to allow changing the vehicle's battery pack without having to shutdown the autopilot (or switch from lab power supply to flight pack) ?&lt;br /&gt;
1400mAh give ~3h endurance and weights 25g, 500mAh is 10g&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
  &lt;br /&gt;
-We want a push button for triggering BBB shutdown - maybe with a molex to be able to mount a button in a convenient place when in airframe (P9-9 to ground [http://www.element14.com/community/community/knode/single-board_computers/next-gen_beaglebone/blog/2014/03/05/bbb--sonos-like-sound-system see here])&lt;br /&gt;
&lt;br /&gt;
-Maybe one or two GPIO in order to have status leds next to the button?&lt;br /&gt;
&lt;br /&gt;
-Do we want to be able to flash F4 from BBB?&lt;br /&gt;
&lt;br /&gt;
== Communications ==&lt;br /&gt;
&lt;br /&gt;
* BBB drives the xbee and tunnels communications to F4. Bad, we lose advantage of code segregation &lt;br /&gt;
* BBB and F4 each have a xbee. Bad, we increase weight and power consumption :) &lt;br /&gt;
* for short distances (rotorcraft), BBB through wifi, F4 through wifi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
   &lt;br /&gt;
Let's describe a couple of scenarios of what we would do with that board:&lt;br /&gt;
&lt;br /&gt;
* I want to investigate autonomous soaring. F4 runs the current fixedwing code. BBB runs the autonomous soaring program written in Python/Numpy and talks to the navigation layer running on F4. BBB receives every sensor measurement, state estimation and actuators command from F4, for real time use and logging.&lt;br /&gt;
&lt;br /&gt;
* Someone runs image processing on BBB (using a usb webcam?) and current rotorcraft code in F4 - similar to case 1&lt;br /&gt;
&lt;br /&gt;
* What else?&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Lisa/Bone&amp;diff=18464</id>
		<title>Lisa/Bone</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Lisa/Bone&amp;diff=18464"/>
		<updated>2014-04-13T11:09:35Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lisa/Bone is a project consisting in designing a Paparazzi [http://beagleboard.org/Products/BeagleBone+Black Beaglebone Black] cape.&lt;br /&gt;
&lt;br /&gt;
For now, this page is a placeholder for the definition of the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MCU or not MCU ==&lt;br /&gt;
&lt;br /&gt;
BeagleBone Black (BBB) has all the peripherals needed to make an autopilot (PWM, ADC, SPI, I2C, UARTS, Capture, etc...). The daughter board could just be a connectors, supply and aspirin carrier board. It would minimize cost and complexity, but we'd lose the possibility of segregating critical code. Discarded for that reason&lt;br /&gt;
&lt;br /&gt;
I suggest a 64 pins STM F4 (like in Lisa/M)&lt;br /&gt;
&lt;br /&gt;
We don't need level converters. BBB is happy with 3.3V IOs&lt;br /&gt;
&lt;br /&gt;
My current plan is to base the cape on Lisa/M, rework supply and connectors.&lt;br /&gt;
&lt;br /&gt;
Communications between F4 and BBB is through SPI (BBB master, F4 slave) in order to have high bandwith&lt;br /&gt;
&lt;br /&gt;
Gautier says he wants UART communications: &lt;br /&gt;
   can you justify and specify which UART of the F4 you'd use ?&lt;br /&gt;
   My argument against it is that UARTs are a scarce resource on the F4 - SPI is easy on BBB, from userland using SPIdev ( [http://elinux.org/BeagleBone_Black_Enable_SPIDEV see here]) - on F4, Lisa/L's SPI code can be reused. This code is well validated&lt;br /&gt;
&lt;br /&gt;
== Connectors ==&lt;br /&gt;
&lt;br /&gt;
Let's start from Lisa/M connectors. We have a little bit more space available&lt;br /&gt;
  - I would like 10 full size servo connectors - supply bus isolated&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Supply ==&lt;br /&gt;
&lt;br /&gt;
-If we're going for the code segregation thing, it makes sense to have two independent rails: one non-critical for BBB and one critical for F4&lt;br /&gt;
&lt;br /&gt;
-I would like to be able to power the whole thing from 3/4S flight pack&lt;br /&gt;
&lt;br /&gt;
-Should we go for the PTH8080 that were used on Lisa/L, a pair of them?&lt;br /&gt;
&lt;br /&gt;
-Any idea for a good connector for input supply ? Or do we just skip that and go for beefy solder pads as usual?&lt;br /&gt;
&lt;br /&gt;
-Beagle has the possibility to run on one lipo cell and has a chip capable of charging it from the 5V supply ( [http://www.element14.com/community/community/knode/single-board_computers/next-gen_beaglebone/blog/2013/08/10/bbb--rechargeable-on-board-battery-system see here] )&lt;br /&gt;
Should we implement something like this to allow changing the vehicle's battery pack without having to shutdown the autopilot (or switch from lab power supply to flight pack) ?&lt;br /&gt;
1400mAh give ~3h endurance and weights 25g, 500mAh is 10g&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
  &lt;br /&gt;
-We want a push button for triggering BBB shutdown - maybe with a molex to be able to mount a button in a convenient place when in airframe&lt;br /&gt;
&lt;br /&gt;
-Maybe one or two GPIO in order to have status leds next to the button?&lt;br /&gt;
&lt;br /&gt;
-Do we want to be able to flash F4 from BBB?&lt;br /&gt;
&lt;br /&gt;
== Communications ==&lt;br /&gt;
&lt;br /&gt;
* BBB drives the xbee and tunnels communications to F4. Bad, we lose advantage of code segregation &lt;br /&gt;
* BBB and F4 each have a xbee. Bad, we increase weight and power consumption :) &lt;br /&gt;
* for short distances (rotorcraft), BBB through wifi, F4 through wifi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use cases ==&lt;br /&gt;
   &lt;br /&gt;
Let's describe a couple of scenarios of what we would do with that board:&lt;br /&gt;
&lt;br /&gt;
* I want to investigate autonomous soaring. F4 runs the current fixedwing code. BBB runs the autonomous soaring program written in Python/Numpy and talks to the navigation layer running on F4. BBB receives every sensor measurement, state estimation and actuators command from F4, for real time use and logging.&lt;br /&gt;
&lt;br /&gt;
* Someone runs image processing on BBB (using a usb webcam?) and current rotorcraft code in F4 - similar to case 1&lt;br /&gt;
&lt;br /&gt;
* What else?&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Lisa/Bone&amp;diff=18463</id>
		<title>Lisa/Bone</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Lisa/Bone&amp;diff=18463"/>
		<updated>2014-04-13T10:55:20Z</updated>

		<summary type="html">&lt;p&gt;Poine: Created page with &amp;quot;Lisa/Bone is a project consisting in designing a Paparazzi [http://beagleboard.org/Products/BeagleBone+Black Beaglebone Black] cape.  For now, this page is a placeholder for t...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lisa/Bone is a project consisting in designing a Paparazzi [http://beagleboard.org/Products/BeagleBone+Black Beaglebone Black] cape.&lt;br /&gt;
&lt;br /&gt;
For now, this page is a placeholder for the definition of the board.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MCU or not MCU ==&lt;br /&gt;
&lt;br /&gt;
BeagleBone Black (BBB) has all the peripherals needed to make an autopilot (PWM, ADC, SPI, I2C, UARTS, Capture, etc...). The daughter board could just be a connectors, supply and aspirin carrier board. It would minimize cost and complexity, but we'd lose the possibility of segregating critical code. Discarded for that reason&lt;br /&gt;
&lt;br /&gt;
I suggest a 64 pins STM F4 (like in Lisa/M)&lt;br /&gt;
&lt;br /&gt;
We don't need level converters. BBB is happy with 3.3V IOs&lt;br /&gt;
&lt;br /&gt;
My current plan is to base the cape on Lisa/M, rework supply and connectors.&lt;br /&gt;
&lt;br /&gt;
Communications between F4 and BBB is through SPI (BBB master, F4 slave) in order to have high bandwith&lt;br /&gt;
&lt;br /&gt;
Gautier says he wants UART communications: &lt;br /&gt;
   can you justify and specify which UART of the F4 you'd use ?&lt;br /&gt;
   My argument against it is that UARTs are a scarce resource on the F4 - SPI is easy on BBB, from userland using SPIdev ( [http://elinux.org/BeagleBone_Black_Enable_SPIDEV see here]) - on F4, Lisa/L's SPI code can be reused. This code is well validated&lt;br /&gt;
&lt;br /&gt;
== Connectors ==&lt;br /&gt;
&lt;br /&gt;
Let's start from Lisa/M connectors. We have a little bit more space available&lt;br /&gt;
  - I would like 10 full size servo connectors - supply bus isolated&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== Supply ==&lt;br /&gt;
&lt;br /&gt;
-If we're going for the code segregation thing, it makes sense to have two independent rails: one non-critical for BBB and one critical for F4&lt;br /&gt;
&lt;br /&gt;
-I would like to be able to power the whole thing from 3/4S flight pack&lt;br /&gt;
&lt;br /&gt;
-Should we go for the PTH8080 that were used on Lisa/L, a pair of them?&lt;br /&gt;
&lt;br /&gt;
-Any idea for a good connector for input supply ? Or do we just skip that and go for beefy solder pads as usual?&lt;br /&gt;
&lt;br /&gt;
-Beagle has the possibility to run on one lipo cell and has a chip capable of charging it from the 5V supply ( [http://www.element14.com/community/community/knode/single-board_computers/next-gen_beaglebone/blog/2013/08/10/bbb--rechargeable-on-board-battery-system see here] )&lt;br /&gt;
Should we implement something like this to allow changing the vehicle's battery pack without having to shutdown the autopilot (or switch from lab power supply to flight pack) ?&lt;br /&gt;
1400mAh give ~3h endurance and weights 25g, 500mAh is 10g&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
  &lt;br /&gt;
-We want a push button for triggering BBB shutdown - maybe with a molex to be able to mount a button in a convenient place when in airframe&lt;br /&gt;
-Maybe one or two GPIO in order to have status leds next to the button?&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=DevGuide/Settings&amp;diff=12459</id>
		<title>DevGuide/Settings</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=DevGuide/Settings&amp;diff=12459"/>
		<updated>2012-06-08T00:46:01Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Settings''' is the generic mechanism that allows to get/set the value of any variable of the embedded code.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
Given an embedded program in C, we want a way to set/get the value of any variable without having to write any ad-hoc code.&lt;br /&gt;
* The variable can be of any base type (e.g. uint16, int32, float) or a structured type (not implemented yet).&lt;br /&gt;
* The variable can be directly accessed (declared in a header) or used through a pair of accessors (e.g. SetVar/GetVar).&lt;br /&gt;
* Typically the variable is manipulated through a graphical user interface on the ground station.&lt;br /&gt;
* The graphical interface can manipulate the variable in a different unit (e.g. the embedded code uses a binary fixed point representation)&lt;br /&gt;
&lt;br /&gt;
===Solution===&lt;br /&gt;
The solution used in Paparazzi consist in describing the variables in a high level xml file, which is then processed to generate embedded code and used by the graphical user interface to display the suitable controls.&lt;br /&gt;
&lt;br /&gt;
[[File:settings_overview.png|frame|800px]]&lt;br /&gt;
&lt;br /&gt;
==Persistent Settings==&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Solution===&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=DevGuide/Settings&amp;diff=12458</id>
		<title>DevGuide/Settings</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=DevGuide/Settings&amp;diff=12458"/>
		<updated>2012-06-08T00:38:38Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Settings''' is the generic mechanism that allows to get/set the value of any variable of the embedded code.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
Given an embedded program in C, we want a way to set/get the value of any variable without having to write any ad-hoc code.&lt;br /&gt;
* The variable can be of any base type (e.g. uint16, int32, float) or a structured type (not implemented yet).&lt;br /&gt;
* The variable can be directly accessed (declared in a header) or used through a pair of accessors (e.g. SetVar/GetVar).&lt;br /&gt;
* Typically the variable is manipulated through a graphical user interface on the ground station.&lt;br /&gt;
* The graphical interface can manipulate the variable in a different unit (e.g. the embedded code uses a binary fixed point representation)&lt;br /&gt;
&lt;br /&gt;
===Solution===&lt;br /&gt;
The solution used in Paparazzi consist in describing the variables in a high level xml file, which is then processed to generate embedded code and used by the graphical user interface to display the suitable controls.&lt;br /&gt;
&lt;br /&gt;
[[File:settings_overview.png|800px]]&lt;br /&gt;
&lt;br /&gt;
==Persistent Settings==&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Solution===&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=File:Settings_overview.png&amp;diff=12457</id>
		<title>File:Settings overview.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=File:Settings_overview.png&amp;diff=12457"/>
		<updated>2012-06-08T00:34:24Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=DevGuide/Settings&amp;diff=12456</id>
		<title>DevGuide/Settings</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=DevGuide/Settings&amp;diff=12456"/>
		<updated>2012-06-08T00:33:53Z</updated>

		<summary type="html">&lt;p&gt;Poine: Created page with &amp;quot;'''Settings''' is the generic mechanism that allows to get/set the value of any variable of the embedded code.  ==Overview==  ===Problem Statement=== Given an embedded program in…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Settings''' is the generic mechanism that allows to get/set the value of any variable of the embedded code.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
Given an embedded program in C, we want a way to set/get the value of any variable without having to write any ad-hoc code.&lt;br /&gt;
* The variable can be of any base type (e.g. uint16, int32, float) or a structured type (not implemented yet).&lt;br /&gt;
* The variable can be directly accessed (declared in a header) or used through a pair of accessors (e.g. SetVar/GetVar).&lt;br /&gt;
* Typically the variable is manipulated through a graphical user interface on the ground station.&lt;br /&gt;
* The graphical interface can manipulate the variable in a different unit (e.g. the embedded code uses a binary fixed point representation)&lt;br /&gt;
&lt;br /&gt;
===Solution===&lt;br /&gt;
[[File:settings_overview.png]]&lt;br /&gt;
&lt;br /&gt;
==Persistent Settings==&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Solution===&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Developer_Guide&amp;diff=12455</id>
		<title>Developer Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Developer_Guide&amp;diff=12455"/>
		<updated>2012-06-07T23:22:04Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== A great resource for in-depth information. ==&lt;br /&gt;
 &lt;br /&gt;
By the time you land on this page, you probably want to enhance the Paparazzi project, that is really good for you karma and well appriciated. You are welcomed to enhance and extend this documentation.&lt;br /&gt;
&lt;br /&gt;
*[[Contributing|Contributing]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;how to contribute&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[DevGuide/Communications|Communications]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;how telemetry and datalink is done&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[DevGuide/CommunicationsNew|Communications (New system)]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;how telemetry and datalink is done&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[DevGuide/Server_GCS_com|Server-GCS communications]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;how the Server and the Ground Control Station interact with each other&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[DevGuide/Values|Values]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;a short walk through the system&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[DevGuide/USBDownload|USB Download]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;how the Paparazzi USB bootloader works&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[BootloaderUploadHowTo|Upload Bootloader]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;How to upload the Bootloader to the AP board&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[DevGuide/JTAG-Debug|JTAG-Debug]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;using JTAG to directly debug on the board&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[DevGuide/DesignOverview|Design Overview]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;Attempt at a longer walk through the airborne code architerture&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[FirmwareArchitecture|Firmware Architecture]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;Attempt at brief overview of the firmware architecture with modules and subsystems&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[DevGuide/USB-Serial|USB-Serial]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;using the USB instead of the UART for telemetry&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[Installation/FromScratch| Toolchain]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;Install Paparazzi ARM toolchain and IVY from scratch&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[DevGuide/CodeEditors|Code Editing]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;How to setup an IDE for OCAML and C and C++&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[DevGuide/LearningToProgram|Learning to Program]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;Improve your Paparazzi code in OCAML,C,C++ and Python&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[DevGuide/Mathlib|Paparazzi Math Library]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;The custom paparazzi math library (C) and how to use it in external programs&amp;lt;/small&amp;gt;&lt;br /&gt;
*[[DevGuide/Settings|Settings]]&amp;lt;br&amp;gt;&amp;lt;small&amp;gt;Settings is the generic mechanism that allows to set and get the value of any variable of the embedded code.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[ControlTheory]]&lt;br /&gt;
*[[Reference/bootloader]]&lt;br /&gt;
*[[Altitude_definitions]]&lt;br /&gt;
*[[Abi]]&lt;br /&gt;
*[[DevGuide/StateInterface]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer_Documentation]]&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9283</id>
		<title>Dev/STM32I2C</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9283"/>
		<updated>2011-04-15T10:12:39Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a work document about STM32 I2C driver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/stonline/products/literature/pm/15491.pdf STM32F10xxx Cortex-M3 programming manual]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/ERRATA_SHEET/CD00197763.pdf STM32F101xC/D/E and STM32F103xC/D/E Errata sheet]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf RM0008 Reference manual] ( page 726 )&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
We're implementing a &amp;quot;Master&amp;quot; driver.&lt;br /&gt;
&lt;br /&gt;
The I2C peripheral on STM32 is very &amp;quot;timing sensitive&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
It has been experienced that we can not rely on &amp;quot;events&amp;quot; like described in the reference manual and need to implement our own state machine in order to be able to deal with the timing sensitivity of the hardware.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
 -1 never crash the MCU&lt;br /&gt;
 -2 never crash the peripheral&lt;br /&gt;
 -3 never provide corrupted data&lt;br /&gt;
 -4 get as few failed transferts as possible&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9282</id>
		<title>Dev/STM32I2C</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9282"/>
		<updated>2011-04-15T10:12:11Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a work document about STM32 I2C driver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/stonline/products/literature/pm/15491.pdf STM32F10xxx Cortex-M3 programming manual]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/ERRATA_SHEET/CD00197763.pdf STM32F101xC/D/E and STM32F103xC/D/E Errata sheet]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf RM0008 Reference manual] ( page 726 )&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
We're implementing a &amp;quot;Master&amp;quot; driver.&lt;br /&gt;
&lt;br /&gt;
The I2C peripheral on STM32 is very &amp;quot;timing sensitive&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
It has been experienced that we can not rely on &amp;quot;events&amp;quot; like described in the reference manual and need to implement our own state machine in order to be able to deal with the timing sensitivity of the hardware.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
 -1 never crash the MCU&lt;br /&gt;
 -2 never provide corrupted data&lt;br /&gt;
 -3 never crash the peripheral&lt;br /&gt;
 -4 get as few failed transferts as possible&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9281</id>
		<title>Dev/STM32I2C</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9281"/>
		<updated>2011-04-15T10:11:32Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a work document about STM32 I2C driver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/stonline/products/literature/pm/15491.pdf STM32F10xxx Cortex-M3 programming manual]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/ERRATA_SHEET/CD00197763.pdf STM32F101xC/D/E and STM32F103xC/D/E Errata sheet]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf RM0008 Reference manual] ( page 726 )&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
We're implementing a &amp;quot;Master&amp;quot; driver.&lt;br /&gt;
&lt;br /&gt;
The I2C peripheral on STM32 is very &amp;quot;timing sensitive&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
It has been experienced that we can not rely on &amp;quot;events&amp;quot; like described in the reference manual and need to implement our own state machine in order to be able to deal with the timing sensitivity of the hardware.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
 -1 never crash the MCU&lt;br /&gt;
 -2 never provide corrupted data&lt;br /&gt;
 -3 get as few failed transferts as possible&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9280</id>
		<title>Dev/STM32I2C</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9280"/>
		<updated>2011-04-15T09:37:58Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a work document about STM32 I2C driver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/stonline/products/literature/pm/15491.pdf STM32F10xxx Cortex-M3 programming manual]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/ERRATA_SHEET/CD00197763.pdf STM32F101xC/D/E and STM32F103xC/D/E Errata sheet]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf RM0008 Reference manual] ( page 726 )&lt;br /&gt;
&lt;br /&gt;
== Problem ==&lt;br /&gt;
&lt;br /&gt;
We're implementing a &amp;quot;Master&amp;quot; driver.&lt;br /&gt;
&lt;br /&gt;
The I2C peripheral on STM32 is very &amp;quot;timing sensitive&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
It has been experienced that we can not rely on &amp;quot;events&amp;quot; like described in the reference manual and need to implement our own state machine in order to be able to deal with the timing sensitivity of the hardware.&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9279</id>
		<title>Dev/STM32I2C</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9279"/>
		<updated>2011-04-15T09:23:58Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a work document about STM32 I2C driver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/stonline/products/literature/pm/15491.pdf STM32F10xxx Cortex-M3 programming manual]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/ERRATA_SHEET/CD00197763.pdf STM32F101xC/D/E and STM32F103xC/D/E Errata sheet]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf RM0008 Reference manual]&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9278</id>
		<title>Dev/STM32I2C</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9278"/>
		<updated>2011-04-15T09:23:10Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a work document about STM32 driver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/stonline/products/literature/pm/15491.pdf STM32F10xxx Cortex-M3 programming manual]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/ERRATA_SHEET/CD00197763.pdf STM32F101xC/D/E and STM32F103xC/D/E Errata sheet]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf RM0008 Reference manual]&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9277</id>
		<title>Dev/STM32I2C</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9277"/>
		<updated>2011-04-15T09:22:49Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a work document about STM32 driver&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/stonline/products/literature/pm/15491.pdf STM32F10xxx Cortex-M3 programming manual]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/ERRATA_SHEET/CD00197763.pdf STM32F101xC/D/E and STM32F103xC/D/E Errata sheet]&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFERENCE_MANUAL/CD00171190.pdf RM0008 Reference manual]&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9276</id>
		<title>Dev/STM32I2C</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9276"/>
		<updated>2011-04-15T09:19:13Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a work document about STM32 driver&lt;br /&gt;
&lt;br /&gt;
[http://www.st.com/stonline/products/literature/pm/15491.pdf STM32F10xxx Cortex-M3 programming manual]&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9274</id>
		<title>Dev/STM32I2C</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Dev/STM32I2C&amp;diff=9274"/>
		<updated>2011-04-15T09:15:51Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a work document about STM32 driver&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Inertial_Measurement_Units&amp;diff=9272</id>
		<title>Inertial Measurement Units</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Inertial_Measurement_Units&amp;diff=9272"/>
		<updated>2011-04-12T07:00:32Z</updated>

		<summary type="html">&lt;p&gt;Poine: /* Booz IMU v 1.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Paparazzi IMU ==&lt;br /&gt;
&lt;br /&gt;
=== Booz IMU v 1.2 ===&lt;br /&gt;
&lt;br /&gt;
*High quality analog devices sensors&lt;br /&gt;
*16bit ADC capable of 200 000 samples per second&lt;br /&gt;
*Special attention to clean power with onboard linear supplies&lt;br /&gt;
*Efficient high-speed SPI for minimal microcontroller overhead and ultra-low latency (=better controller performance).&lt;br /&gt;
*Fits on Booz, Lisa AND Tiny/TWOG autopilots. &lt;br /&gt;
&lt;br /&gt;
While originally designed for use with rotorcrafts, code is now available for use with fixed wing. &lt;br /&gt;
&lt;br /&gt;
[[Image:IMU001.jpg|240px]]&lt;br /&gt;
&lt;br /&gt;
The hardware description is [[BoozIMU|here]].&lt;br /&gt;
&lt;br /&gt;
Available at [https://mini.ppzuav.com/osc/product_info.php?cPath=15&amp;amp;products_id=122&amp;amp;osCsid=bq9cget2u5c7ksa6kd9ssdf03lisuksq PPZUAV].&lt;br /&gt;
&lt;br /&gt;
=== YAI v1.0 ===&lt;br /&gt;
&lt;br /&gt;
Why &amp;quot;yet another imu&amp;quot; while there are already so many out there?&lt;br /&gt;
&lt;br /&gt;
[[Image:yai_assemb.jpg|240px]]&lt;br /&gt;
&lt;br /&gt;
*Designed to be completely compatible with original booz IMU and its code&lt;br /&gt;
*Cheaper sensors (lower bias stability)&lt;br /&gt;
*Higher resolution (16bits) and frequency (200ksps) and cleaner onboard power supply, better grounding and shielding than compared with e.g. external sparkfun breakout boards&lt;br /&gt;
*Fast low latency SPI communication (no uart as the tiny/twog miss uarts)&lt;br /&gt;
*The most important part of attitude determination is proper kinematic compensation using for instance GPS, pressure sensors etc etc. When using IMU with external processors there is often less flexibility. Things as timing for instance are as important as the quality of the gyros themselves.&lt;br /&gt;
&lt;br /&gt;
Board, BOM -&amp;gt; [ http://svn.savannah.nongnu.org/viewvc/paparazzi-hardware/trunk/sensors/yai/?root=paparazzi Hardware Repository]&lt;br /&gt;
&lt;br /&gt;
=== Aspirin IMU ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Aspirin_imu_front.jpg|240px]]&lt;br /&gt;
&lt;br /&gt;
[[AspirinIMU|Next generation flat imu.]]&lt;br /&gt;
&lt;br /&gt;
== 3rd Party IMU ==&lt;br /&gt;
&lt;br /&gt;
'''Loose Terminology Note:''' Like the sparkfun website, the following text incorrectly equates the term &amp;quot;degree-of-freedom&amp;quot; with sensor measurement. Unless we're talking about articulated arms (which paparazzi to date isn't involved with), a body can only have 6 physical DOFs and that would correspond to translation and rotations in the x,y,z cartesian directions of 3D space. If the vehicle state vector includes positions and velocities for each degree of freedom, the state vector would have a dimension of 6 x 2 = 12 states. The goal is to reconstruct these vehicle states using sensor measurements, as once the states can be obtained with reasonable certainty, a control algorithm can have a shot at controlling the system. Using various filtering techniques, multiple sensor types can be combined to estimate these states.&lt;br /&gt;
&lt;br /&gt;
IMU's measure rotation rates, acceleration (6DOF) and some also magnetic fields (9DOF). This data is used by an autopilot to estimate the state of the aircraft. They that can be used with a Paparazzi autopilot based UAS. If you happen to have such a device, we really would love to see that you share your IMU paparazzi autopilot integration projects information on this Wiki.&lt;br /&gt;
&lt;br /&gt;
=== PPZUAV IMU 9DOF ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Ppz9dofimu.jpg|thumb|left|PPZ 9DOF IMU]]&lt;br /&gt;
&lt;br /&gt;
I2C out 5v input. Testing now. So far so good. It's open so anyone can have it now. PCBs available for a few dollars. Schematic open, design open but not in Eagle. I can post the gerbers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SparkFun Razor 6DOF IMU ===&lt;br /&gt;
&lt;br /&gt;
[[Image:RazzorIMU.jpg|thumb|left|Razor IMU (top) with the tiny13 autopilot]]&lt;br /&gt;
&lt;br /&gt;
[[Image:RazzorIMUb.jpg|thumb|left|Razor IMU in the tiny13 autopilot box]]&lt;br /&gt;
&lt;br /&gt;
[http://www.sparkfun.com/commerce/product_info.php?products_id=10010  Official website]&lt;br /&gt;
&lt;br /&gt;
6DOF - Ultra-Thin IMU&lt;br /&gt;
&lt;br /&gt;
Very cheap, currently 62-72 Euro.  [http://www.watterott.com/de/Sensoren/IMU Shop in Europe]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Has been integrated in Paparazzi by Hochschule Bremen, Germany.&lt;br /&gt;
&lt;br /&gt;
Remove the high pass filters of the RazorIMU to get better results.&lt;br /&gt;
&lt;br /&gt;
For the Twog and Tiny 2.2 autopilots you have also remove the resistors to GND and the series resistors to the MC of the 5V analog inputs. The code to fly normal plane is currently in the repository.  Christoph is working on improvements look here: http://paparazzi.enac.fr/wiki/User:Christoph   &lt;br /&gt;
&lt;br /&gt;
[[Media:Wiring_Razor_IMU.pdf|Connections and wiring to the tiny13]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cloudcap Crista IMU ===&lt;br /&gt;
[[Image:crista_sensorhead.jpg|thumb|left|Christa IMU]]&lt;br /&gt;
&lt;br /&gt;
[http://www.cloudcaptech.com/crista_sensorhead.shtm Official website]&lt;br /&gt;
&lt;br /&gt;
More infos soon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 3rd Party INS ==&lt;br /&gt;
&lt;br /&gt;
INS measure rates with their sensors and run algorithms to estimate the state on their own. They give this information the the autopilot (e.g. Euler angles) that can then use it for navigation.&lt;br /&gt;
&lt;br /&gt;
===[http://diydrones.com/profiles/blogs/arduimu-v2-flat-now-available|DIYDrones ArduIMU+ V2 (Flat)] ===&lt;br /&gt;
[[Image:ArduIMU.jpg|thumb|left|ArduIMU]]&lt;br /&gt;
&lt;br /&gt;
[http://code.google.com/p/ardu-imu/wiki/HomePage?tm=6 Official website]&lt;br /&gt;
3 axis Accelerometer + 3 axis Gyroscope.&lt;br /&gt;
&lt;br /&gt;
Very cheap&lt;br /&gt;
Has been integrated in Paparazzi by ZHAW, Winterthur, Switzerland.&lt;br /&gt;
* A magnetometer has been integrated in the software to compensate drift in yaw.&lt;br /&gt;
* GPS from the Tiny is passed over I2C to the AHRS on the IMU&lt;br /&gt;
More info on integration can be found [[ArduIMU|here]].&lt;br /&gt;
Where can I buy ArduIMU?&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.sparkfun.com/products/9956 Sparkfun]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[http://store.diydrones.com/ProductDetails.asp?ProductCode=KT-ArduIMU-20 DIYDrones Store]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Vector-Nav VN-100 ===&lt;br /&gt;
[[Image:VN-100.jpg|thumb|left|Vector-Nav VN-100]]&lt;br /&gt;
&lt;br /&gt;
[http://www.vectornav.com/vn-100-features Official website]&lt;br /&gt;
&lt;br /&gt;
There is a [[Modules|module]] for this AHRS (ins_vn100.xml for fixedwings).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MicroStrain 3DM-GX2 === &lt;br /&gt;
[[Image:3DM-GX2.jpg|thumb|left|MicroStrain 3DM-GX2]]&lt;br /&gt;
&lt;br /&gt;
[http://www.microstrain.com/3dm-gx2.aspx Official website]&lt;br /&gt;
&lt;br /&gt;
More info soon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Xsens MTi and MTi-G (with GPS) ===&lt;br /&gt;
[[Image:MTi.jpeg|thumb|left|Xsens MTi]]&lt;br /&gt;
&lt;br /&gt;
[[Image:MTi-G.jpeg|thumb|left|Xsens MTi-G (with GPS)]]&lt;br /&gt;
&lt;br /&gt;
[http://www.xsens.com/en/general/mti Official website MTi]&lt;br /&gt;
&lt;br /&gt;
[http://www.xsens.com/en/general/mti-g Official website MTi-G]&lt;br /&gt;
&lt;br /&gt;
In sensor fusion, calibration and timing are crucial. If you want latency compensated ADXRS gyro integrated attitude done by an efficient and optimized Blackfin DSP you need an XSens. For rotorcraft the 100Hz is a bit slow, but for fixedwing it's perfect. Directly compatible with [[Yapa]] and [[Lisa]] and all needed code in paparazi. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== MemSense MAG3 ===&lt;br /&gt;
&lt;br /&gt;
MAG3 - 6 DOF Analog IMU with Triaxial Magnetometer&lt;br /&gt;
&lt;br /&gt;
[http://www.memsense.com/index.php/Product-Pages/mag3-worlds-smallest-analog-inertial-measurement-unit.html Official website mag3]&lt;br /&gt;
&lt;br /&gt;
== The Very Short Essential Introduction To Inertial Attitude Estimation ==&lt;br /&gt;
&lt;br /&gt;
The only physical entity related to attitude (pitch and roll) is the earth gravity vector (unless you use a multi-antenna phase-measuring GPS... $$$$). Unfortunately, the sensors that measure gravity (=accelerometers) also measure so-called kinematic accelerations or in other words: changes in speed: like centrifugal forces, Coriolis forces, linear accelerations etc... The sum of all these litteraly is &amp;quot;what you feel&amp;quot; and is called [http://en.wikipedia.org/wiki/Specific_force &amp;quot;specific force&amp;quot;]. &lt;br /&gt;
&lt;br /&gt;
so &lt;br /&gt;
&lt;br /&gt;
  accelerometer_value (specific force) = earth_gravity + change in velocity (linear accelerations) + velocity times turn rate (centrifugal etc)&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
  A = B + C + D  &lt;br /&gt;
&lt;br /&gt;
You measure A and want to know B. What all &amp;quot;gyroscopes and accelerometer only&amp;quot; AHRS projects are doing in some way or another is to neglect the last 2 (C and D). In many situations this is not bad: for instance: when testing the AHRS attached to your computer: it can not accelerate for a very long time (at most a few meters: so if you accerate to the left, then you need to accelerate to the right directly after so the average is zero) and can not rotate to much either (or your cable gets strangled). This is why all AHRS videos on youtube look perfect. And on the desk they are perfect: you neglected 2 terms in the equation that in that situation are perfectly neglect-able. Also with a quadrotor that hovers and keeps its nose in the same direction all the time, these neglected terms are small.&lt;br /&gt;
&lt;br /&gt;
Now what about the gyroscopes you might ask. I deliberately keep them only second as gyroscopes (turn rate or rotation speed sensors) do NOT give you attitude but ONLY HELP TO SOLVE SHORT TERM errors in the previous part. If gyroscopes would measure turn-rate perfectly, then they would help more but all MEMS/PIEZZO sensors are more or less sensitive to 1) temperature, 2) turnrate, 3) vibrations, 4) accelerations, 5) radiation, 6) power supply quality 7) non-linearity 8) ADC-quality 9) dynamic range and saturation problems, ... so if you integrate gyroscopes, sooner or later errors build up (drift). I put this list here so you know what to pay attention for: if using gyroscopes: always try to keep the temperature as constant as possible or let the temperature settle, reduce vibrations (dampers), use better ADC (e.g. 10bit ADC with +/- 1200 deg/sec gyros have a resolution of 2.4 degrees/s per ADC tick, so your phi/theta might drift 1.2deg/sec without noticing) and power supply filtering and shielding etc to start with. All of these define for how long (seconds!/minutes?) gyroscope integration is useful.&lt;br /&gt;
&lt;br /&gt;
If you convert the accelerometer directly to attitude and plot it, it will vibrate a lot and will show errors when you accelerate the AHRS on your desk. During a coordinated turn of a fixedwing plane, the force you feel is perpendicular to the plane (not pointing to earth). The accelerometer only clearly is insufficient to know your attitude. One solution is to use gyroscopes that are so good that you can predict for many minutes (then the average acceleration during several turns would still point to earth). But if your gyros can only help for shorter terms (like all MEMS sensors of less than 500euro/each) then extra information is required. E.g: if you add GPS data or airspeed data however, from the flightpath you can quite accurately reconstruct the missing C and D terms. Together with the accelerometer you can know &amp;quot;where the earth is&amp;quot; even when you keep accelerating and turning. Here questions like latency, update rate, noisy derivatives (linear acceleration) are of importance. &lt;br /&gt;
&lt;br /&gt;
Finally there is the heading... GPS ground-track is not the same as nose direction. Gyroscopes measure how much the nose has been turning, so using GPS to correct it induces errors that increase with corsswind. Magnetometers can help here, and become necessary whenever you do not move enough anymore (hovering). This situation can also occur in plane flying in very strong winds.&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8544</id>
		<title>RotorcraftMixing</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8544"/>
		<updated>2011-01-29T01:34:58Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describe how to compute &amp;quot;mixing&amp;quot; for an arbitrary multirotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_3D.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Mixing&amp;quot; consist in converting rotational accelerations commands computed by the autopilot into throttle commands for each of the motor controllers.  &lt;br /&gt;
&lt;br /&gt;
Let us consider a vehicle comprising a set of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; identical fixed pitch rotors &amp;lt;math&amp;gt;R_i, i \in[1:N]&amp;lt;/math&amp;gt; located at coordinates &amp;lt;math&amp;gt;(X_i,Y_i, 0), i\in[1:N]&amp;lt;/math&amp;gt; and spinning in the same plane in the direction &amp;lt;math&amp;gt;D_i, i\in[1:N], D_i\in[-1;1]&amp;lt;/math&amp;gt; at a rotational speed &amp;lt;math&amp;gt;\omega_i, i\in[1:N]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Expressed in body frame ( front, right, down ), this leads to&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{F}_{i}^{B} = \begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.&lt;br /&gt;
&lt;br /&gt;
The torque produced by each rotor around the CG, expressed in body frame can then be writen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} = \begin{pmatrix}X_i\\Y_i\\0\end{pmatrix}\wedge\begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix} + \begin{pmatrix}0\\0\\D_i C_m \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} =  C_t \omega_i^2 \begin{pmatrix}-Y_i \\X_i \\D_i \frac{C_m}{C_t}\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; is a &amp;quot;thrust&amp;quot; coefficient and &amp;lt;math&amp;gt;Cm&amp;lt;/math&amp;gt; is a &amp;quot;torque&amp;quot; coefficient. It has been measured experimentally that &amp;lt;math&amp;gt;\frac{Ct}{Cm} \approx 10&amp;lt;/math&amp;gt; on a mikrokopter.&lt;br /&gt;
&lt;br /&gt;
As a first approximation we can consider that the rotational speed of the propeller is proportional to the square root of the applied command &amp;lt;math&amp;gt;u_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\omega_i^2 = K u_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This allows us to express the torque produced by the set of rotors as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B} = \sum_{i=1}^{N} \overrightarrow{M}_{i}^{B} = K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
                   -\sum_{i=1}^{N} Y_i u_i\\&lt;br /&gt;
                    \sum_{i=1}^{N} X_i u_i\\&lt;br /&gt;
    \frac{C_m}{C_t} \sum_{i=1}^{N} D_i u_i&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which can be rewriten as a matrix vector product&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = &lt;br /&gt;
  K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    -Y_1&amp;amp;-Y_2&amp;amp;\ldots&amp;amp;-Y_n\\&lt;br /&gt;
     X_1&amp;amp; X_2&amp;amp;\ldots&amp;amp; X_n\\&lt;br /&gt;
    \frac{C_m}{Ct}D_1&amp;amp;\frac{C_m}{Ct}D_2&amp;amp;\ldots&amp;amp;\frac{C_m}{Ct}D_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
 \begin{pmatrix}&lt;br /&gt;
    u_1\\&lt;br /&gt;
    u_2\\&lt;br /&gt;
    \vdots\\&lt;br /&gt;
    u_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = A \overrightarrow{U}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; is a &amp;lt;math&amp;gt;3*N&amp;lt;/math&amp;gt; matrix describing the geometric positions of our rotors and &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; is the vector of throttle commands for our set of motor controllers.&lt;br /&gt;
&lt;br /&gt;
In order to express the command applied to each power train as a function of the momentum we want to apply to our vehicle, we need to find &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;, a &amp;lt;math&amp;gt;N*3&amp;lt;/math&amp;gt; matrix such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  \overrightarrow{U} = B \overrightarrow{M}^B &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; has rank 3, we know that such a matrix exists (yeah, we can't do 2 rotors or have all rotors aligned), and in this case, we have the relationship&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  AB = \mathcal{I}_3 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We know that one solution of this equation is the Moore-Penrose pseudoinverse of &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
Furthermore, this solution is the one leading to the power train command vector having the smallest euclidian norm, which is interesting as it optimizes the repartion of our control effort across our power trains.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Let's consider the following H hexarotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_h.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A =&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
   -0.17 &amp;amp; 0.17 &amp;amp;-0.25&amp;amp; 0.25&amp;amp;-0.33 &amp;amp; 0.33 \\&lt;br /&gt;
   -0.35 &amp;amp;-0.35 &amp;amp; 0   &amp;amp; 0   &amp;amp; 0.35 &amp;amp; 0.35 \\&lt;br /&gt;
   -0.1  &amp;amp; 0.1  &amp;amp; 0.1 &amp;amp;-0.1 &amp;amp;-0.1  &amp;amp; 0.1&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first two lines of the &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; matrix represent the coordinates of each rotor in the &amp;lt;math&amp;gt;X,Y&amp;lt;/math&amp;gt; plan, and the third line the direction in which they spin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
   -0.24  &amp;amp; -0.71 &amp;amp; -1.47 \\&lt;br /&gt;
    0.241 &amp;amp; -0.71 &amp;amp;  1.47 \\&lt;br /&gt;
   -0.93  &amp;amp;  0.   &amp;amp;  2.44 \\&lt;br /&gt;
    0.93  &amp;amp;  0.   &amp;amp; -2.44 \\&lt;br /&gt;
   -0.69  &amp;amp;  0.71 &amp;amp; -1.09 \\&lt;br /&gt;
    0.69  &amp;amp;  0.71 &amp;amp;  1.09 &lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normalizing columns of &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; yelds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\tilde{B} = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
   -67 &amp;amp; -256  &amp;amp; -154 \\&lt;br /&gt;
    67 &amp;amp; -256  &amp;amp;  154 \\&lt;br /&gt;
  -256 &amp;amp;    0  &amp;amp;  256 \\&lt;br /&gt;
   256 &amp;amp;    0  &amp;amp; -256 \\&lt;br /&gt;
  -189 &amp;amp;  256  &amp;amp; -115 \\&lt;br /&gt;
   189 &amp;amp;  256  &amp;amp;  115 \\&lt;br /&gt;
 \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which in turns yelds the following supervision section&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;section name=&amp;quot;SUPERVISION&amp;quot; prefix=&amp;quot;SUPERVISION_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MIN_MOTOR&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAX_MOTOR&amp;quot; value=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_A&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_E&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_R&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NB_MOTOR&amp;quot; value=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SCALE&amp;quot; value=&amp;quot;256&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{ -67,    67, -256,  256, -189,  189}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{ -256, -256,    0,    0,  256,  256}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{ -154,  154,  256, -256, -115,  115}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256,  256,  256}&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above computation can be performed using the following simple octave script&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A = [&lt;br /&gt;
   0.17   -0.17   0.25  -0.25   0.33   -0.33&lt;br /&gt;
  -0.35   -0.35   0.     0.     0.35    0.35&lt;br /&gt;
  -0.1     0.1    0.1   -0.1   -0.1     0.1&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
B = pinv(A)&lt;br /&gt;
&lt;br /&gt;
m = max(B)&lt;br /&gt;
&lt;br /&gt;
[nrow,ncol] = size(B)&lt;br /&gt;
&lt;br /&gt;
for i=1:ncol&lt;br /&gt;
   Btilde(:,i) = B(:,i)/m(i);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Btilde =  round(256*Btilde)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8543</id>
		<title>RotorcraftMixing</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8543"/>
		<updated>2011-01-29T01:34:24Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describe how to compute &amp;quot;mixing&amp;quot; for an arbitrary multirotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_3D.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Mixing&amp;quot; consist in converting rotational accelerations commands computed by the autopilot into throttle commands for each of the motor controllers.  &lt;br /&gt;
&lt;br /&gt;
Let us consider a vehicle comprising a set of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; identical fixed pitch rotors &amp;lt;math&amp;gt;R_i, i \in[1:N]&amp;lt;/math&amp;gt; located at coordinates &amp;lt;math&amp;gt;(X_i,Y_i, 0), i\in[1:N]&amp;lt;/math&amp;gt; and spinning in the same plane in the direction &amp;lt;math&amp;gt;D_i, i\in[1:N], D_i\in[-1;1]&amp;lt;/math&amp;gt; at a rotational speed &amp;lt;math&amp;gt;\omega_i, i\in[1:N]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Expressed in body frame ( front, right, down ), this leads to&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{F}_{i}^{B} = \begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.&lt;br /&gt;
&lt;br /&gt;
The torque produced by each rotor around the CG, expressed in body frame can then be writen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} = \begin{pmatrix}X_i\\Y_i\\0\end{pmatrix}\wedge\begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix} + \begin{pmatrix}0\\0\\D_i C_m \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} =  C_t \omega_i^2 \begin{pmatrix}-Y_i \\X_i \\D_i \frac{C_m}{C_t}\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; is a &amp;quot;thrust&amp;quot; coefficient and &amp;lt;math&amp;gt;Cm&amp;lt;/math&amp;gt; is a &amp;quot;torque&amp;quot; coefficient. It has been measured experimentally that &amp;lt;math&amp;gt;\frac{Ct}{Cm} \approx 10&amp;lt;/math&amp;gt; on a mikrokopter.&lt;br /&gt;
&lt;br /&gt;
As a first approximation we can consider that the rotational speed of the propeller is proportional to the square root of the applied command &amp;lt;math&amp;gt;u_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\omega_i^2 = K u_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This allows us to express the torque produced by the set of rotors as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B} = \sum_{i=1}^{N} \overrightarrow{M}_{i}^{B} = K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
                   -\sum_{i=1}^{N} Y_i u_i\\&lt;br /&gt;
                    \sum_{i=1}^{N} X_i u_i\\&lt;br /&gt;
    \frac{C_m}{C_t} \sum_{i=1}^{N} D_i u_i&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which can be rewriten as a matrix vector product&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = &lt;br /&gt;
  K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    -Y_1&amp;amp;-Y_2&amp;amp;\ldots&amp;amp;-Y_n\\&lt;br /&gt;
     X_1&amp;amp; X_2&amp;amp;\ldots&amp;amp; X_n\\&lt;br /&gt;
    \frac{C_m}{Ct}D_1&amp;amp;\frac{C_m}{Ct}D_2&amp;amp;\ldots&amp;amp;\frac{C_m}{Ct}D_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
 \begin{pmatrix}&lt;br /&gt;
    u_1\\&lt;br /&gt;
    u_2\\&lt;br /&gt;
    \vdots\\&lt;br /&gt;
    u_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = A \overrightarrow{U}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; is a &amp;lt;math&amp;gt;3*N&amp;lt;/math&amp;gt; matrix describing the geometric positions of our rotors and &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; is the vector of throttle commands for our set of motor controllers.&lt;br /&gt;
&lt;br /&gt;
In order to express the command applied to each power train as a function of the momentum we want to apply to our vehicle, we need to find &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;, a &amp;lt;math&amp;gt;N*3&amp;lt;/math&amp;gt; matrix such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  \overrightarrow{U} = B \overrightarrow{M}^B &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; has rank 3, we know that such a matrix exists (yeah, we can't do 2 rotors or have all rotors aligned), and in this case, we have the relationship&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  AB = \mathcal{I}_3 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We know that one solution of this equation is the Moore-Penrose pseudoinverse of &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
Furthermore, this solution is the one leading to the power train command vector having the smallest euclidian norm, which is interesting as it optimizes the repartion of our control effort across our power trains.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Let's consider the following H hexarotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_h.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A =&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
   -0.17 &amp;amp; 0.17 &amp;amp;-0.25&amp;amp; 0.25&amp;amp;-0.33 &amp;amp; 0.33 \\&lt;br /&gt;
   -0.35 &amp;amp;-0.35 &amp;amp; 0   &amp;amp; 0   &amp;amp; 0.35 &amp;amp; 0.35 \\&lt;br /&gt;
   -0.1  &amp;amp; 0.1  &amp;amp; 0.1 &amp;amp;-0.1 &amp;amp;-0.1  &amp;amp; 0.1&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first two lines of the &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; matrix represent the coordinates of each rotor in the &amp;lt;math&amp;gt;X,Y&amp;lt;/math&amp;gt; plan, and the third line the direction in which they spin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
   -0.24  &amp;amp; -0.71 &amp;amp; -1.47 \\&lt;br /&gt;
    0.241 &amp;amp; -0.71 &amp;amp;  1.47 \\&lt;br /&gt;
   -0.93  &amp;amp;  0.   &amp;amp;  2.44 \\&lt;br /&gt;
    0.93  &amp;amp;  0.   &amp;amp; -2.44 \\&lt;br /&gt;
   -0.69  &amp;amp;  0.71 &amp;amp; -1.09 \\&lt;br /&gt;
    0.69  &amp;amp;  0.71 &amp;amp;  1.09 &lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normalizing columns of &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; yelds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\tilde{B} = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
   -67 &amp;amp; -256  &amp;amp; -154 \\&lt;br /&gt;
    67 &amp;amp; -256  &amp;amp;  154 \\&lt;br /&gt;
  -256 &amp;amp;   -0  &amp;amp;  256 \\&lt;br /&gt;
   256 &amp;amp;    0  &amp;amp; -256 \\&lt;br /&gt;
  -189 &amp;amp;  256  &amp;amp; -115 \\&lt;br /&gt;
   189 &amp;amp;  256  &amp;amp;  115 \\&lt;br /&gt;
 \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which in turns yelds the following supervision section&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;section name=&amp;quot;SUPERVISION&amp;quot; prefix=&amp;quot;SUPERVISION_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MIN_MOTOR&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAX_MOTOR&amp;quot; value=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_A&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_E&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_R&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NB_MOTOR&amp;quot; value=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SCALE&amp;quot; value=&amp;quot;256&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{ -67,    67, -256,  256, -189,  189}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{ -256, -256,    0,    0,  256,  256}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{ -154,  154,  256, -256, -115,  115}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256,  256,  256}&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above computation can be performed using the following simple octave script&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A = [&lt;br /&gt;
   0.17   -0.17   0.25  -0.25   0.33   -0.33&lt;br /&gt;
  -0.35   -0.35   0.     0.     0.35    0.35&lt;br /&gt;
  -0.1     0.1    0.1   -0.1   -0.1     0.1&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
B = pinv(A)&lt;br /&gt;
&lt;br /&gt;
m = max(B)&lt;br /&gt;
&lt;br /&gt;
[nrow,ncol] = size(B)&lt;br /&gt;
&lt;br /&gt;
for i=1:ncol&lt;br /&gt;
   Btilde(:,i) = B(:,i)/m(i);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Btilde =  round(256*Btilde)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8537</id>
		<title>RotorcraftMixing</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8537"/>
		<updated>2011-01-29T01:13:48Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describe how to compute &amp;quot;mixing&amp;quot; for an arbitrary multirotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_3D.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Mixing&amp;quot; consist in converting rotational accelerations commands computed by the autopilot into throttle commands for each of the motor controllers.  &lt;br /&gt;
&lt;br /&gt;
Let us consider a vehicle comprising a set of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; identical fixed pitch rotors &amp;lt;math&amp;gt;R_i, i \in[1:N]&amp;lt;/math&amp;gt; located at coordinates &amp;lt;math&amp;gt;(X_i,Y_i, 0), i\in[1:N]&amp;lt;/math&amp;gt; and spinning in the same plane in the direction &amp;lt;math&amp;gt;D_i, i\in[1:N], D_i\in[-1;1]&amp;lt;/math&amp;gt; at a rotational speed &amp;lt;math&amp;gt;\omega_i, i\in[1:N]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Expressed in body frame ( front, right, down ), this leads to&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{F}_{i}^{B} = \begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.&lt;br /&gt;
&lt;br /&gt;
The torque produced by each rotor around the CG, expressed in body frame can then be writen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} = \begin{pmatrix}X_i\\Y_i\\0\end{pmatrix}\wedge\begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix} + \begin{pmatrix}0\\0\\D_i C_m \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} =  C_t \omega_i^2 \begin{pmatrix}-Y_i \\X_i \\D_i \frac{C_m}{C_t}\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; is a &amp;quot;thrust&amp;quot; coefficient and &amp;lt;math&amp;gt;Cm&amp;lt;/math&amp;gt; is a &amp;quot;torque&amp;quot; coefficient. It has been measured experimentally that &amp;lt;math&amp;gt;\frac{Ct}{Cm} \approx 10&amp;lt;/math&amp;gt; on a mikrokopter.&lt;br /&gt;
&lt;br /&gt;
As a first approximation we can consider that the rotational speed of the propeller is proportional to the square root of the applied command &amp;lt;math&amp;gt;u_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\omega_i^2 = K u_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This allows us to express the torque produced by the set of rotors as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B} = \sum_{i=1}^{N} \overrightarrow{M}_{i}^{B} = K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
                   -\sum_{i=1}^{N} Y_i u_i\\&lt;br /&gt;
                    \sum_{i=1}^{N} X_i u_i\\&lt;br /&gt;
    \frac{C_m}{C_t} \sum_{i=1}^{N} D_i u_i&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which can be rewriten as a matrix vector product&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = &lt;br /&gt;
  K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    -Y_1&amp;amp;-Y_2&amp;amp;\ldots&amp;amp;-Y_n\\&lt;br /&gt;
     X_1&amp;amp; X_2&amp;amp;\ldots&amp;amp; X_n\\&lt;br /&gt;
    \frac{C_m}{Ct}D_1&amp;amp;\frac{C_m}{Ct}D_2&amp;amp;\ldots&amp;amp;\frac{C_m}{Ct}D_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
 \begin{pmatrix}&lt;br /&gt;
    u_1\\&lt;br /&gt;
    u_2\\&lt;br /&gt;
    \vdots\\&lt;br /&gt;
    u_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = A \overrightarrow{U}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; is a &amp;lt;math&amp;gt;3*N&amp;lt;/math&amp;gt; matrix describing the geometric positions of our rotors and &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; is the vector of throttle commands for our set of motor controllers.&lt;br /&gt;
&lt;br /&gt;
In order to express the command applied to each power train as a function of the momentum we want to apply to our vehicle, we need to find &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;, a &amp;lt;math&amp;gt;N*3&amp;lt;/math&amp;gt; matrix such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  \overrightarrow{U} = B \overrightarrow{M}^B &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; has rank 3, we know that such a matrix exists (yeah, we can't do 2 rotors or have all rotors aligned), and in this case, we have the relationship&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  AB = \mathcal{I}_3 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We know that one solution of this equation is the Moore-Penrose pseudoinverse of &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
Furthermore, this solution is the one leading to the power train command vector having the smallest euclidian norm, which is interesting as it optimizes the repartion of our control effort across our power trains.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Let's consider the following H hexarotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_h.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A =&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
   -0.17 &amp;amp; 0.17 &amp;amp;-0.25&amp;amp; 0.25&amp;amp;-0.33 &amp;amp; 0.33 \\&lt;br /&gt;
   -0.35 &amp;amp;-0.35 &amp;amp; 0   &amp;amp; 0   &amp;amp; 0.35 &amp;amp; 0.35 \\&lt;br /&gt;
   -0.1  &amp;amp; 0.1  &amp;amp; 0.1 &amp;amp;-0.1 &amp;amp;-0.1  &amp;amp; 0.1&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first two lines of the &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; matrix represent the coordinates of each rotor in the &amp;lt;math&amp;gt;X,Y&amp;lt;/math&amp;gt; plan, and the third line the direction in which they spin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
   -0.24  &amp;amp; -0.71 &amp;amp; -1.47 \\&lt;br /&gt;
    0.241 &amp;amp; -0.71 &amp;amp;  1.47 \\&lt;br /&gt;
   -0.93  &amp;amp;  0.   &amp;amp;  2.44 \\&lt;br /&gt;
    0.93  &amp;amp;  0.   &amp;amp; -2.44 \\&lt;br /&gt;
   -0.69  &amp;amp;  0.71 &amp;amp; -1.09 \\&lt;br /&gt;
    0.69  &amp;amp;  0.71 &amp;amp;  1.09 &lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normalizing columns of &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; yelds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\tilde{B} = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
   -67 &amp;amp; -256  &amp;amp; -154 \\&lt;br /&gt;
    67 &amp;amp; -256  &amp;amp;  154 \\&lt;br /&gt;
  -256 &amp;amp;   -0  &amp;amp;  256 \\&lt;br /&gt;
   256 &amp;amp;    0  &amp;amp; -256 \\&lt;br /&gt;
  -189 &amp;amp;  256  &amp;amp; -115 \\&lt;br /&gt;
   189 &amp;amp;  256  &amp;amp;  115 \\&lt;br /&gt;
 \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which in turns yelds the following supervision section&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;section name=&amp;quot;SUPERVISION&amp;quot; prefix=&amp;quot;SUPERVISION_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MIN_MOTOR&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAX_MOTOR&amp;quot; value=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_A&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_E&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_R&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NB_MOTOR&amp;quot; value=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SCALE&amp;quot; value=&amp;quot;256&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{ -67,    67, -256,  256, -189,  189}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{ -256, -256,    0,    0,  256,  256}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{ -154,  154,  256, -256, -115,  115}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256,  256,  256}&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above computation can be performed using the following simple octave script&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A = [&lt;br /&gt;
   0.17   -0.17   0.25  -0.25   0.33   -0.33&lt;br /&gt;
  -0.35   -0.35   0.     0.     0.35    0.35&lt;br /&gt;
  -0.1     0.1    0.1   -0.1   -0.1     0.1&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
B = pinv(A)&lt;br /&gt;
&lt;br /&gt;
m = max(B)&lt;br /&gt;
&lt;br /&gt;
[nrow,ncol] = size(B)&lt;br /&gt;
&lt;br /&gt;
for i=1:ncol&lt;br /&gt;
   Btilde(:,i) = B(:,i)/m(i);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Btilde =  round(256*Btilde)B = pinv(A)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8534</id>
		<title>RotorcraftMixing</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8534"/>
		<updated>2011-01-29T01:04:14Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describe how to compute &amp;quot;mixing&amp;quot; for an arbitrary multirotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_3D.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Mixing&amp;quot; consist in converting rotational accelerations commands computed by the autopilot into throttle commands for each of the motor controllers.  &lt;br /&gt;
&lt;br /&gt;
Let us consider a vehicle comprising a set of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; identical fixed pitch rotors &amp;lt;math&amp;gt;R_i, i \in[1:N]&amp;lt;/math&amp;gt; located at coordinates &amp;lt;math&amp;gt;(X_i,Y_i, 0), i\in[1:N]&amp;lt;/math&amp;gt; and spinning in the same plane in the direction &amp;lt;math&amp;gt;D_i, i\in[1:N], D_i\in[-1;1]&amp;lt;/math&amp;gt; at a rotational speed &amp;lt;math&amp;gt;\omega_i, i\in[1:N]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Expressed in body frame ( front, right, down ), this leads to&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{F}_{i}^{B} = \begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.&lt;br /&gt;
&lt;br /&gt;
The torque produced by each rotor around the CG, expressed in body frame can then be writen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} = \begin{pmatrix}X_i\\Y_i\\0\end{pmatrix}\wedge\begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix} + \begin{pmatrix}0\\0\\D_i C_m \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} =  C_t \omega_i^2 \begin{pmatrix}Y_i \\X_i \\D_i \frac{C_m}{C_t}\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; is a &amp;quot;thrust&amp;quot; coefficient and &amp;lt;math&amp;gt;Cm&amp;lt;/math&amp;gt; is a &amp;quot;torque&amp;quot; coefficient. It has been measured experimentally that &amp;lt;math&amp;gt;\frac{Ct}{Cm} \approx 10&amp;lt;/math&amp;gt; on a mikrokopter.&lt;br /&gt;
&lt;br /&gt;
As a first approximation we can consider that the rotational speed of the propeller is proportional to the square root of the applied command &amp;lt;math&amp;gt;u_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\omega_i^2 = K u_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This allows us to express the torque produced by the set of rotors as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B} = \sum_{i=1}^{N} \overrightarrow{M}_{i}^{B} = K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
                    \sum_{i=1}^{N} Y_i u_i\\&lt;br /&gt;
                    \sum_{i=1}^{N} X_i u_i\\&lt;br /&gt;
    \frac{C_m}{C_t} \sum_{i=1}^{N} D_i u_i&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which can be rewriten as a matrix vector product&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = &lt;br /&gt;
  K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    Y_1&amp;amp;Y_2&amp;amp;\ldots&amp;amp;Y_n\\&lt;br /&gt;
    X_1&amp;amp;X_2&amp;amp;\ldots&amp;amp;X_n\\&lt;br /&gt;
    \frac{C_m}{Ct}D_1&amp;amp;\frac{C_m}{Ct}D_2&amp;amp;\ldots&amp;amp;\frac{C_m}{Ct}D_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
 \begin{pmatrix}&lt;br /&gt;
    u_1\\&lt;br /&gt;
    u_2\\&lt;br /&gt;
    \vdots\\&lt;br /&gt;
    u_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = A \overrightarrow{U}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; is a &amp;lt;math&amp;gt;3*N&amp;lt;/math&amp;gt; matrix describing the geometric positions of our rotors and &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; is the vector of throttle commands for our set of motor controllers.&lt;br /&gt;
&lt;br /&gt;
In order to express the command applied to each power train as a function of the momentum we want to apply to our vehicle, we need to find &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;, a &amp;lt;math&amp;gt;N*3&amp;lt;/math&amp;gt; matrix such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  \overrightarrow{U} = B \overrightarrow{M}^B &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; has rank 3, we know that such a matrix exists (yeah, we can't do 2 rotors or have all rotors aligned), and in this case, we have the relationship&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  AB = \mathcal{I}_3 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We know that one solution of this equation is the Moore-Penrose pseudoinverse of &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
Furthermore, this solution is the one leading to the power train command vector having the smallest euclidian norm, which is interesting as it optimizes the repartion of our control effort across our power trains.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Let's consider the following H hexarotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_h.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A =&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    0.17 &amp;amp;-0.17 &amp;amp;0.25&amp;amp;-0.25&amp;amp; 0.33 &amp;amp;-0.33 \\&lt;br /&gt;
   -0.35 &amp;amp;-0.35 &amp;amp;0   &amp;amp; 0   &amp;amp; 0.35 &amp;amp; 0.35 \\&lt;br /&gt;
   -0.1  &amp;amp; 0.1  &amp;amp;0.1 &amp;amp;-0.1 &amp;amp;-0.1  &amp;amp; 0.1&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first two lines of the &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; matrix represent the coordinates of each rotor in the &amp;lt;math&amp;gt;X,Y&amp;lt;/math&amp;gt; plan, and the third line the direction in which they spin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    0.24  &amp;amp; -0.71 &amp;amp; -1.47 \\&lt;br /&gt;
   -0.241 &amp;amp; -0.71 &amp;amp;  1.47 \\&lt;br /&gt;
    0.93  &amp;amp;  0.   &amp;amp;  2.44 \\&lt;br /&gt;
   -0.93  &amp;amp;  0.   &amp;amp; -2.44 \\&lt;br /&gt;
    0.69  &amp;amp;  0.71 &amp;amp; -1.09 \\&lt;br /&gt;
   -0.69  &amp;amp;  0.71 &amp;amp;  1.09 &lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normalizing columns of &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; yelds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\tilde{B} = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    67 &amp;amp; -256  &amp;amp; -154 \\&lt;br /&gt;
   -67 &amp;amp; -256  &amp;amp;  154 \\&lt;br /&gt;
   256 &amp;amp;   -0  &amp;amp;  256 \\&lt;br /&gt;
  -256 &amp;amp;    0  &amp;amp; -256 \\&lt;br /&gt;
   189 &amp;amp;  256  &amp;amp; -115 \\&lt;br /&gt;
  -189 &amp;amp;  256  &amp;amp;  115 \\&lt;br /&gt;
 \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which in turns yelds the following supervision section&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;section name=&amp;quot;SUPERVISION&amp;quot; prefix=&amp;quot;SUPERVISION_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MIN_MOTOR&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAX_MOTOR&amp;quot; value=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_A&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_E&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_R&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NB_MOTOR&amp;quot; value=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SCALE&amp;quot; value=&amp;quot;256&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{  67,   -67, 256, -256,  189, -189}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{ -256, -256,   0,    0,  256,  256}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{ -154,  154, 256, -256, -115,  115}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256, 256,  256,  256,  256}&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above computation can be performed using the following simple octave script&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A = [&lt;br /&gt;
   0.17   -0.17   0.25  -0.25   0.33   -0.33&lt;br /&gt;
  -0.35   -0.35   0.     0.     0.35    0.35&lt;br /&gt;
  -0.1     0.1    0.1   -0.1   -0.1     0.1&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
B = pinv(A)&lt;br /&gt;
&lt;br /&gt;
m = max(B)&lt;br /&gt;
&lt;br /&gt;
[nrow,ncol] = size(B)&lt;br /&gt;
&lt;br /&gt;
for i=1:ncol&lt;br /&gt;
   Btilde(:,i) = B(:,i)/m(i);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
Btilde =  round(256*Btilde)B = pinv(A)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8532</id>
		<title>RotorcraftMixing</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8532"/>
		<updated>2011-01-29T00:51:20Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describe how to compute &amp;quot;mixing&amp;quot; for an arbitrary multirotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_3D.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Mixing&amp;quot; consist in converting rotational accelerations commands computed by the autopilot into throttle commands for each of the motor controllers.  &lt;br /&gt;
&lt;br /&gt;
Let us consider a vehicle comprising a set of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; identical fixed pitch rotors &amp;lt;math&amp;gt;R_i, i \in[1:N]&amp;lt;/math&amp;gt; located at coordinates &amp;lt;math&amp;gt;(X_i,Y_i, 0), i\in[1:N]&amp;lt;/math&amp;gt; and spinning in the same plane in the direction &amp;lt;math&amp;gt;D_i, i\in[1:N], D_i\in[-1;1]&amp;lt;/math&amp;gt; at a rotational speed &amp;lt;math&amp;gt;\omega_i, i\in[1:N]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Expressed in body frame ( front, right, down ), this leads to&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{F}_{i}^{B} = \begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.&lt;br /&gt;
&lt;br /&gt;
The torque produced by each rotor around the CG, expressed in body frame can then be writen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} = \begin{pmatrix}X_i\\Y_i\\0\end{pmatrix}\wedge\begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix} + \begin{pmatrix}0\\0\\D_i C_m \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} =  C_t \omega_i^2 \begin{pmatrix}Y_i \\X_i \\D_i \frac{C_m}{C_t}\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; is a &amp;quot;thrust&amp;quot; coefficient and &amp;lt;math&amp;gt;Cm&amp;lt;/math&amp;gt; is a &amp;quot;torque&amp;quot; coefficient. It has been measured experimentally that &amp;lt;math&amp;gt;\frac{Ct}{Cm} \approx 10&amp;lt;/math&amp;gt; on a mikrokopter.&lt;br /&gt;
&lt;br /&gt;
As a first approximation we can consider that the rotational speed of the propeller is proportional to the square root of the applied command &amp;lt;math&amp;gt;u_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\omega_i^2 = K u_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This allows us to express the torque produced by the set of rotors as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B} = \sum_{i=1}^{N} \overrightarrow{M}_{i}^{B} = K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
                    \sum_{i=1}^{N} Y_i u_i\\&lt;br /&gt;
                    \sum_{i=1}^{N} X_i u_i\\&lt;br /&gt;
    \frac{C_m}{C_t} \sum_{i=1}^{N} D_i u_i&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which can be rewriten as a matrix vector product&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = &lt;br /&gt;
  K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    Y_1&amp;amp;Y_2&amp;amp;\ldots&amp;amp;Y_n\\&lt;br /&gt;
    X_1&amp;amp;X_2&amp;amp;\ldots&amp;amp;X_n\\&lt;br /&gt;
    \frac{C_m}{Ct}D_1&amp;amp;\frac{C_m}{Ct}D_2&amp;amp;\ldots&amp;amp;\frac{C_m}{Ct}D_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
 \begin{pmatrix}&lt;br /&gt;
    u_1\\&lt;br /&gt;
    u_2\\&lt;br /&gt;
    \vdots\\&lt;br /&gt;
    u_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = A \overrightarrow{U}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; is a &amp;lt;math&amp;gt;3*N&amp;lt;/math&amp;gt; matrix describing the geometric positions of our rotors and &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; is the vector of throttle commands for our set of motor controllers.&lt;br /&gt;
&lt;br /&gt;
In order to express the command applied to each power train as a function of the momentum we want to apply to our vehicle, we need to find &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;, a &amp;lt;math&amp;gt;N*3&amp;lt;/math&amp;gt; matrix such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  \overrightarrow{U} = B \overrightarrow{M}^B &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; has rank 3, we know that such a matrix exists (yeah, we can't do 2 rotors or have all rotors aligned), and in this case, we have the relationship&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  AB = \mathcal{I}_3 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We know that one solution of this equation is the Moore-Penrose pseudoinverse of &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
Furthermore, this solution is the one leading to the power train command vector having the smallest euclidian norm, which is interesting as it optimizes the repartion of our control effort across our power trains.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Let's consider the following H hexarotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_h.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A =&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    0.17 &amp;amp;-0.17 &amp;amp;0.25&amp;amp;-0.25&amp;amp; 0.33 &amp;amp;-0.33 \\&lt;br /&gt;
   -0.35 &amp;amp;-0.35 &amp;amp;0   &amp;amp; 0   &amp;amp; 0.35 &amp;amp; 0.35 \\&lt;br /&gt;
   -0.1  &amp;amp; 0.1  &amp;amp;0.1 &amp;amp;-0.1 &amp;amp;-0.1  &amp;amp; 0.1&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first two lines of the &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; matrix represent the coordinates of each rotor in the &amp;lt;math&amp;gt;X,Y&amp;lt;/math&amp;gt; plan, and the third line the direction in which they spin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    0.24  &amp;amp; -0.71 &amp;amp; -1.47 \\&lt;br /&gt;
   -0.241 &amp;amp; -0.71 &amp;amp;  1.47 \\&lt;br /&gt;
    0.93  &amp;amp;  0.   &amp;amp;  2.44 \\&lt;br /&gt;
   -0.93  &amp;amp;  0.   &amp;amp; -2.44 \\&lt;br /&gt;
    0.69  &amp;amp;  0.71 &amp;amp; -1.09 \\&lt;br /&gt;
   -0.69  &amp;amp;  0.71 &amp;amp;  1.09 &lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normalizing &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; yelds&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\tilde{B} = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    25  &amp;amp; -75  &amp;amp; -154 \\&lt;br /&gt;
   -25  &amp;amp; -75  &amp;amp;  154 \\&lt;br /&gt;
    97  &amp;amp;   0  &amp;amp;  256 \\&lt;br /&gt;
   -97  &amp;amp;   0  &amp;amp; -256 \\&lt;br /&gt;
    72  &amp;amp;  75  &amp;amp; -115 \\&lt;br /&gt;
   -72  &amp;amp;  75  &amp;amp;  115&lt;br /&gt;
 \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which in turns yelds the following supervision section&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;section name=&amp;quot;SUPERVISION&amp;quot; prefix=&amp;quot;SUPERVISION_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MIN_MOTOR&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAX_MOTOR&amp;quot; value=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_A&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_E&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_R&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NB_MOTOR&amp;quot; value=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SCALE&amp;quot; value=&amp;quot;256&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{  25, -25,  97, -97,   72,  72}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{ -75, -75,   0,   0,   75,  75}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{-154, 154, 256,-256, -115, 115}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{ 256, 256, 256, 256,  256, 256}&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above computation can be performed using the following simple octave script&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A = [&lt;br /&gt;
   0.17   -0.17   0.25  -0.25   0.33   -0.33&lt;br /&gt;
  -0.35   -0.35   0.     0.     0.35    0.35&lt;br /&gt;
  -0.1     0.1    0.1   -0.1   -0.1     0.1&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
B = pinv(A)&lt;br /&gt;
&lt;br /&gt;
m = max(max(B));&lt;br /&gt;
&lt;br /&gt;
Btilde =  round(B*256/m)&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8531</id>
		<title>RotorcraftMixing</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8531"/>
		<updated>2011-01-29T00:35:21Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describe how to compute &amp;quot;mixing&amp;quot; for an arbitrary multirotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_3D.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Mixing&amp;quot; consist in converting rotational accelerations commands computed by the autopilot into throttle commands for each of the motor controllers.  &lt;br /&gt;
&lt;br /&gt;
Let us consider a vehicle comprising a set of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; identical fixed pitch rotors &amp;lt;math&amp;gt;R_i, i \in[1:N]&amp;lt;/math&amp;gt; located at coordinates &amp;lt;math&amp;gt;(X_i,Y_i, 0), i\in[1:N]&amp;lt;/math&amp;gt; and spinning in the same plane in the direction &amp;lt;math&amp;gt;D_i, i\in[1:N], D_i\in[-1;1]&amp;lt;/math&amp;gt; at a rotational speed &amp;lt;math&amp;gt;\omega_i, i\in[1:N]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Expressed in body frame ( front, right, down ), this leads to&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{F}_{i}^{B} = \begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.&lt;br /&gt;
&lt;br /&gt;
The torque produced by each rotor around the CG, expressed in body frame can then be writen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} = \begin{pmatrix}Y_i C_t \omega_i^2\\X_i C_t \omega_i^2\\D_i C_m \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Where &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; is a &amp;quot;thrust&amp;quot; coefficient and &amp;lt;math&amp;gt;Cm&amp;lt;/math&amp;gt; is a &amp;quot;torque&amp;quot; coefficient. It has been measured experimentally that &amp;lt;math&amp;gt;\frac{Ct}{Cm} \approx 10&amp;lt;/math&amp;gt; on a mikrokopter.&lt;br /&gt;
&lt;br /&gt;
As a first approximation we can consider that the rotational speed of the propeller is proportional to the square root of the applied command &amp;lt;math&amp;gt;u_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\omega_i^2 = K u_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This allows us to express the torque produced by the set of rotors as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B} = \sum_{i} \overrightarrow{M}_{i}^{B} =  &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    K C_t \sum_{i} Y_i u_i\\&lt;br /&gt;
    K C_t \sum_{i} X_i u_i\\&lt;br /&gt;
    K C_m \sum_{i} D_i u_i&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which can be rewriten as a matrix vector product&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = &lt;br /&gt;
  K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    Y_1&amp;amp;Y_2&amp;amp;\ldots&amp;amp;Y_n\\&lt;br /&gt;
    X_1&amp;amp;X_2&amp;amp;\ldots&amp;amp;X_n\\&lt;br /&gt;
    \frac{C_m}{Ct}D_1&amp;amp;\frac{C_m}{Ct}D_2&amp;amp;\ldots&amp;amp;\frac{C_m}{Ct}D_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
 \begin{pmatrix}&lt;br /&gt;
    u_1\\&lt;br /&gt;
    u_2\\&lt;br /&gt;
    \vdots\\&lt;br /&gt;
    u_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = A \overrightarrow{U}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; is a &amp;lt;math&amp;gt;3*N&amp;lt;/math&amp;gt; matrix describing the geometric positions of our rotors and &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; is the vector of throttle commands for our set of motor controllers.&lt;br /&gt;
&lt;br /&gt;
In order to express the command applied to each power train as a function of the momentum we want to apply to our vehicle, we need to find &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;, a &amp;lt;math&amp;gt;N*3&amp;lt;/math&amp;gt; matrix such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  \overrightarrow{U} = B \overrightarrow{M}^B &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; has rank 3, we know that such a matrix exists (yeah, we can't do 2 rotors or have all rotors aligned), and in this case, we have the relationship&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  AB = \mathcal{I}_3 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We know that one solution of this equation is the Moore-Penrose pseudoinverse of &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
Furthermore, this solution is the one leading to the power train command vector having the smallest euclidian norm, which is interesting as it optimizes the repartion of our control effort across our power trains.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Let's consider the following H hexarotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_h.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A =&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    0.17 &amp;amp;-0.17 &amp;amp;0.25&amp;amp;-0.25&amp;amp; 0.33 &amp;amp;-0.33 \\&lt;br /&gt;
   -0.35 &amp;amp;-0.35 &amp;amp;0   &amp;amp; 0   &amp;amp; 0.35 &amp;amp; 0.35 \\&lt;br /&gt;
   -0.1  &amp;amp; 0.1  &amp;amp;0.1 &amp;amp;-0.1 &amp;amp;-0.1  &amp;amp; 0.1&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first two lines of the &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; matrix represent the coordinates of each rotor in the &amp;lt;math&amp;gt;X,Y&amp;lt;/math&amp;gt; plan, and the third line the direction in which they spin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    0.24  &amp;amp; -0.71 &amp;amp; -1.47 \\&lt;br /&gt;
   -0.241 &amp;amp; -0.71 &amp;amp;  1.47 \\&lt;br /&gt;
    0.93  &amp;amp;  0.   &amp;amp;  2.44 \\&lt;br /&gt;
   -0.93  &amp;amp;  0.   &amp;amp; -2.44 \\&lt;br /&gt;
    0.69  &amp;amp;  0.71 &amp;amp; -1.09 \\&lt;br /&gt;
   -0.69  &amp;amp;  0.71 &amp;amp;  1.09 &lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normalizing &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; yelds&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\tilde{B} = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    25  &amp;amp; -75  &amp;amp; -154 \\&lt;br /&gt;
   -25  &amp;amp; -75  &amp;amp;  154 \\&lt;br /&gt;
    97  &amp;amp;   0  &amp;amp;  256 \\&lt;br /&gt;
   -97  &amp;amp;   0  &amp;amp; -256 \\&lt;br /&gt;
    72  &amp;amp;  75  &amp;amp; -115 \\&lt;br /&gt;
   -72  &amp;amp;  75  &amp;amp;  115&lt;br /&gt;
 \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which in turns yelds the following supervision section&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;section name=&amp;quot;SUPERVISION&amp;quot; prefix=&amp;quot;SUPERVISION_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MIN_MOTOR&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAX_MOTOR&amp;quot; value=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_A&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_E&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_R&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NB_MOTOR&amp;quot; value=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SCALE&amp;quot; value=&amp;quot;256&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{  25, -25,  97, -97,   72,  72}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{ -75, -75,   0,   0,   75,  75}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{-154, 154, 256,-256, -115, 115}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{ 256, 256, 256, 256,  256, 256}&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above computation can be performed using the following simple octave script&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A = [&lt;br /&gt;
   0.17   -0.17   0.25  -0.25   0.33   -0.33&lt;br /&gt;
  -0.35   -0.35   0.     0.     0.35    0.35&lt;br /&gt;
  -0.1     0.1    0.1   -0.1   -0.1     0.1&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
B = pinv(A)&lt;br /&gt;
&lt;br /&gt;
m = max(max(B));&lt;br /&gt;
&lt;br /&gt;
Btilde =  round(B*256/m)&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8530</id>
		<title>RotorcraftMixing</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8530"/>
		<updated>2011-01-28T23:39:33Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describe how to compute &amp;quot;mixing&amp;quot; for an arbitrary multirotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_3D.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Mixing&amp;quot; consist in converting rotational accelerations commands computed by the autopilot into throttle commands for each of the motor controllers.  &lt;br /&gt;
&lt;br /&gt;
Let us consider a vehicle comprising a set of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; identical fixed pitch rotors &amp;lt;math&amp;gt;R_i, i \in[1:N]&amp;lt;/math&amp;gt; located at coordinates &amp;lt;math&amp;gt;(X_i,Y_i, 0), i\in[1:N]&amp;lt;/math&amp;gt; and spinning in the same plane in the direction &amp;lt;math&amp;gt;D_i, i\in[1:N], D_i\in[-1;1]&amp;lt;/math&amp;gt; at a rotational speed &amp;lt;math&amp;gt;\omega_i, i\in[1:N]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Expressed in body frame ( front, right, down ), this leads to&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{F}_{i}^{B} = \begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.&lt;br /&gt;
&lt;br /&gt;
The moment produced by each rotor around the CG, expressed in body frame can then be writen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} = \begin{pmatrix}X_i C_t \omega_i^2\\Y_i C_t \omega_i^2\\D_i C_m \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Where &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; is a &amp;quot;thrust&amp;quot; coefficient and &amp;lt;math&amp;gt;Cd&amp;lt;/math&amp;gt; is a &amp;quot;torque&amp;quot; coefficient. It has been measured experimentally that &amp;lt;math&amp;gt;\frac{Ct}{Cm} \approx 10&amp;lt;/math&amp;gt; on a mikrokopter.&lt;br /&gt;
&lt;br /&gt;
As a first approximation we can consider that the rotational speed of the propeller is proportional to the square root of the applied command &amp;lt;math&amp;gt;u_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\omega_i^2 = K u_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This allows us to express the momentum produced by the set of rotors as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B} = \sum_{i} \overrightarrow{M}_{i}^{B} =  &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    K C_t \sum_{i} X_i u_i\\&lt;br /&gt;
    K C_t \sum_{i} Y_i u_i\\&lt;br /&gt;
    K C_m \sum_{i} D_i u_i&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which can be rewriten as a matrix vector product&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = &lt;br /&gt;
  K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    X_1&amp;amp;X_2&amp;amp;\ldots&amp;amp;X_n\\&lt;br /&gt;
    Y_1&amp;amp;Y_2&amp;amp;\ldots&amp;amp;Y_n\\&lt;br /&gt;
    \frac{C_m}{Ct}D_1&amp;amp;\frac{C_m}{Ct}D_2&amp;amp;\ldots&amp;amp;\frac{C_m}{Ct}D_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
 \begin{pmatrix}&lt;br /&gt;
    u_1\\&lt;br /&gt;
    u_2\\&lt;br /&gt;
    \vdots\\&lt;br /&gt;
    u_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = A \overrightarrow{U}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; is a &amp;lt;math&amp;gt;3*N&amp;lt;/math&amp;gt; matrix describing the geometric positions of our rotors and &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; is the vector of throttle commands for our set of motor controllers.&lt;br /&gt;
&lt;br /&gt;
In order to express the command applied to each power train as a function of the momentum we want to apply to our vehicle, we need to find &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;, a &amp;lt;math&amp;gt;N*3&amp;lt;/math&amp;gt; matrix such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  \overrightarrow{U} = B \overrightarrow{M}^B &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; has rank 3, we know that such a matrix exists (yeah, we can't do 2 rotors or have all rotors aligned), and in this case, we have the relationship&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  AB = \mathcal{I}_3 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We know that one solution of this equation is the Moore-Penrose pseudoinverse of &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
Furthermore, this solution is the one leading to the power train command vector having the smallest euclidian norm, which is interesting as it optimizes the repartion of our control effort across our power trains.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Let's consider the following H hexarotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_h.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A =&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
   -0.35 &amp;amp;-0.35 &amp;amp;0   &amp;amp; 0   &amp;amp; 0.35 &amp;amp; 0.35 \\&lt;br /&gt;
    0.17 &amp;amp;-0.17 &amp;amp;0.25&amp;amp;-0.25&amp;amp; 0.33 &amp;amp;-0.33 \\&lt;br /&gt;
   -0.1  &amp;amp; 0.1  &amp;amp;0.1 &amp;amp;-0.1 &amp;amp;-0.1  &amp;amp; 0.1&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first two lines of the &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; matrix represent the coordinates of each rotor in the &amp;lt;math&amp;gt;X,Y&amp;lt;/math&amp;gt; plan, and the third line the direction in which they spin.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
  - 0.714 &amp;amp;   0.241 &amp;amp; - 1.465  \\&lt;br /&gt;
  - 0.714 &amp;amp; - 0.241 &amp;amp;   1.465  \\&lt;br /&gt;
    0     &amp;amp;   0.929 &amp;amp;   2.441  \\&lt;br /&gt;
    0     &amp;amp; - 0.929 &amp;amp; - 2.441  \\&lt;br /&gt;
    0.714 &amp;amp;   0.687 &amp;amp; - 1.094  \\&lt;br /&gt;
    0.714 &amp;amp; - 0.687 &amp;amp;   1.094 &lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normalizing &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt; yelds&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\tilde{B} = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
   -75  &amp;amp;  25 &amp;amp; -154 \\&lt;br /&gt;
   -75  &amp;amp; -25 &amp;amp;  154 \\&lt;br /&gt;
     0  &amp;amp;  97 &amp;amp;  256 \\&lt;br /&gt;
     0  &amp;amp; -97 &amp;amp; -256 \\&lt;br /&gt;
    75  &amp;amp;  72 &amp;amp; -115 \\&lt;br /&gt;
    75  &amp;amp; -72 &amp;amp;  115&lt;br /&gt;
 \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which in turns yelds the following supervision section&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=File:Hexa_h.png&amp;diff=8512</id>
		<title>File:Hexa h.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=File:Hexa_h.png&amp;diff=8512"/>
		<updated>2011-01-28T02:25:07Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8511</id>
		<title>RotorcraftMixing</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8511"/>
		<updated>2011-01-28T02:24:50Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describe how to compute &amp;quot;mixing&amp;quot; for an arbitrary multirotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_3D.png|800px]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Mixing&amp;quot; consist in converting rotational accelerations commands computed by the autopilot into throttle commands for each of the motor controllers.  &lt;br /&gt;
&lt;br /&gt;
Let us consider a vehicle comprising a set of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; identical fixed pitch rotors &amp;lt;math&amp;gt;R_i, i \in[1:N]&amp;lt;/math&amp;gt; located at coordinates &amp;lt;math&amp;gt;(X_i,Y_i, 0), i\in[1:N]&amp;lt;/math&amp;gt; and spinning in the same plane in the direction &amp;lt;math&amp;gt;D_i, i\in[1:N], D_i\in[-1;1]&amp;lt;/math&amp;gt; at a rotational speed &amp;lt;math&amp;gt;\omega_i, i\in[1:N]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Expressed in body frame ( front, right, down ), this leads to&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{F}_{i}^{B} = \begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.&lt;br /&gt;
&lt;br /&gt;
The moment produced by each rotor around the CG, expressed in body frame can then be writen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} = \begin{pmatrix}X_i C_t \omega_i^2\\Y_i C_t \omega_i^2\\D_i C_m \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Where &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; is a &amp;quot;thrust&amp;quot; coefficient and &amp;lt;math&amp;gt;Cd&amp;lt;/math&amp;gt; is a &amp;quot;torque&amp;quot; coefficient. It has been measured experimentally that &amp;lt;math&amp;gt;\frac{Ct}{Cm} \approx 10&amp;lt;/math&amp;gt; on a mikrokopter.&lt;br /&gt;
&lt;br /&gt;
As a first approximation we can consider that the rotational speed of the propeller is proportional to the square root of the applied command &amp;lt;math&amp;gt;u_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\omega_i^2 = K u_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This allows us to express the momentum produced by the set of rotors as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B} = \sum_{i} \overrightarrow{M}_{i}^{B} =  &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    K C_t \sum_{i} X_i u_i\\&lt;br /&gt;
    K C_t \sum_{i} Y_i u_i\\&lt;br /&gt;
    K C_m \sum_{i} D_i u_i&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which can be rewriten as a matrix vector product&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = &lt;br /&gt;
  K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    X_1&amp;amp;X_2&amp;amp;\ldots&amp;amp;X_n\\&lt;br /&gt;
    Y_1&amp;amp;Y_2&amp;amp;\ldots&amp;amp;Y_n\\&lt;br /&gt;
    \frac{C_m}{Ct}D_1&amp;amp;\frac{C_m}{Ct}D_2&amp;amp;\ldots&amp;amp;\frac{C_m}{Ct}D_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
 \begin{pmatrix}&lt;br /&gt;
    u_1\\&lt;br /&gt;
    u_2\\&lt;br /&gt;
    \vdots\\&lt;br /&gt;
    u_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = A \overrightarrow{U}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; is a &amp;lt;math&amp;gt;3*N&amp;lt;/math&amp;gt; matrix describing the geometric positions of our rotors and &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt; is the vector of throttle commands for our set of motor controllers.&lt;br /&gt;
&lt;br /&gt;
In order to express the command applied to each power train as a function of the momentum we want to apply to our vehicle, we need to find &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;, a &amp;lt;math&amp;gt;N*3&amp;lt;/math&amp;gt; matrix such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  \overrightarrow{U} = B \overrightarrow{M}^B &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; has rank 3, we know that such a matrix exists (yeah, we can't do 2 rotors or have all rotors aligned), and in this case, we have the relationship&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  AB = \mathcal{I}_3 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We know that one solution of this equation is the Moore-Penrose pseudoinverse of &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
Furthermore, this solution is the one leading to the power train command vector having the smallest euclidian norm, which is interesting as it optimizes the repartion of our control effort across our power trains.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Let's consider the following H hexarotors configuration.&lt;br /&gt;
&lt;br /&gt;
[[Image:hexa_h.png|200px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
A =&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
   -0.35 &amp;amp;-0.35 &amp;amp;0   &amp;amp; 0   &amp;amp; 0.35 &amp;amp; 0.35 \\&lt;br /&gt;
    0.17 &amp;amp;-0.17 &amp;amp;0.25&amp;amp;-0.25&amp;amp; 0.33 &amp;amp;-0.33 \\&lt;br /&gt;
   -0.1  &amp;amp; 0.1  &amp;amp;0.1 &amp;amp;-0.1 &amp;amp;-0.1  &amp;amp; 0.1&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
B = &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
  - 0.714 &amp;amp;   0.241 &amp;amp; - 1.465  \\&lt;br /&gt;
  - 0.714 &amp;amp; - 0.241 &amp;amp;   1.465  \\&lt;br /&gt;
    0     &amp;amp;   0.929 &amp;amp;   2.441  \\&lt;br /&gt;
    0     &amp;amp; - 0.929 &amp;amp; - 2.441  \\&lt;br /&gt;
    0.714 &amp;amp;   0.687 &amp;amp; - 1.094  \\&lt;br /&gt;
    0.714 &amp;amp; - 0.687 &amp;amp;   1.094 &lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8510</id>
		<title>RotorcraftMixing</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8510"/>
		<updated>2011-01-28T02:08:17Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:hexa_3D.png|800px]]&lt;br /&gt;
&lt;br /&gt;
This page describe how to compute &amp;quot;mixing&amp;quot; for an arbitrary multirotors configuration. &amp;quot;Mixing&amp;quot; consist in converting rotational accelerations commands computed by the autopilot into throttle commands for each of the motor controllers.  &lt;br /&gt;
&lt;br /&gt;
Let us consider a vehicle comprising a set of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; identical fixed pitch rotors &amp;lt;math&amp;gt;R_i, i \in[1:N]&amp;lt;/math&amp;gt; located at coordinates &amp;lt;math&amp;gt;(X_i,Y_i, 0), i\in[1:N]&amp;lt;/math&amp;gt; and spinning in the same plane in the direction &amp;lt;math&amp;gt;D_i, i\in[1:N], D_i\in[-1;1]&amp;lt;/math&amp;gt; at a rotational speed &amp;lt;math&amp;gt;\omega_i, i\in[1:N]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Expressed in body frame ( front, right, down ), this leads to&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{F}_{i}^{B} = \begin{pmatrix}0\\0\\-C_t \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.&lt;br /&gt;
&lt;br /&gt;
The moment produced by each rotor around the CG, expressed in body frame can then be writen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}_{i}^{B} = \begin{pmatrix}X_i C_t \omega_i^2\\Y_i C_t \omega_i^2\\D_i C_m \omega_i^2\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Where &amp;lt;math&amp;gt;C_t&amp;lt;/math&amp;gt; is a &amp;quot;thrust&amp;quot; coefficient and &amp;lt;math&amp;gt;Cd&amp;lt;/math&amp;gt; is a &amp;quot;torque&amp;quot; coefficient. It has been measured experimentally that &amp;lt;math&amp;gt;\frac{Ct}{Cm} \approx 10&amp;lt;/math&amp;gt; on a mikrokopter.&lt;br /&gt;
&lt;br /&gt;
As a first approximation we can consider that the rotational speed of the propeller is proportional to the square root of the applied command &amp;lt;math&amp;gt;u_i&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\omega_i^2 = K u_i&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This allows us to express the momentum produced by the set of rotors as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B} = \sum_{i} \overrightarrow{M}_{i}^{B} =  &lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    K C_t \sum_{i} X_i u_i\\&lt;br /&gt;
    K C_t \sum_{i} Y_i u_i\\&lt;br /&gt;
    K C_m \sum_{i} D_i u_i&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which can be rewriten as a matrix vector product&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\overrightarrow{M}^{B}  = &lt;br /&gt;
  K C_t&lt;br /&gt;
  \begin{pmatrix}&lt;br /&gt;
    X_1&amp;amp;X_2&amp;amp;\ldots&amp;amp;X_n\\&lt;br /&gt;
    Y_1&amp;amp;Y_2&amp;amp;\ldots&amp;amp;Y_n\\&lt;br /&gt;
    \frac{C_m}{Ct}D_1&amp;amp;\frac{C_m}{Ct}D_2&amp;amp;\ldots&amp;amp;\frac{C_m}{Ct}D_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
 \begin{pmatrix}&lt;br /&gt;
    u_1\\&lt;br /&gt;
    u_2\\&lt;br /&gt;
    \vdots\\&lt;br /&gt;
    u_n&lt;br /&gt;
  \end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; is a &amp;lt;math&amp;gt;3*N&amp;lt;/math&amp;gt; matrix describing the geometric positions of our rotors.&lt;br /&gt;
&lt;br /&gt;
In order to express the command applied to each power train as a function of the momentum we want to apply to our vehicle, we need to find &amp;lt;math&amp;gt;B&amp;lt;/math&amp;gt;, a &amp;lt;math&amp;gt;N*3&amp;lt;/math&amp;gt; matrix such as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  \overrightarrow{U} = B \overrightarrow{M}^B &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; has rank 3, we know that such a matrix exists (yeah, we can't do 2 rotors or have all rotors aligned), and in this case, we have the relationship&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  AB = \mathcal{I}_3 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We know that one solution of this equation is the Moore-Penrose pseudoinverse of &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt;.&lt;br /&gt;
Furthermore, this solution is the one leading to the power train command vector having the smallest euclidian norm, which is interesting as it optimizes the repartion of our control effort across our power trains.&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8509</id>
		<title>RotorcraftMixing</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8509"/>
		<updated>2011-01-28T01:14:29Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:hexa_3D.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
This page describe how to compute &amp;quot;mixing&amp;quot; for an arbitrary multirotors configuration.&lt;br /&gt;
&lt;br /&gt;
Let us consider a vehicle comprising a set of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; identical power trains &amp;lt;math&amp;gt;R_i, i \in[1:N]&amp;lt;/math&amp;gt; located at coordinates &amp;lt;math&amp;gt;(X_i,Y_i), i\in[1:N]&amp;lt;/math&amp;gt; and spinning in the same plane in the direction &amp;lt;math&amp;gt;D_i, i\in[1:N], D_i\in[-1;1]&amp;lt;/math&amp;gt; at a rotational speed &amp;lt;math&amp;gt;\omega_i, i\in[1:N]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=File:Hexa_3D.png&amp;diff=8508</id>
		<title>File:Hexa 3D.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=File:Hexa_3D.png&amp;diff=8508"/>
		<updated>2011-01-28T01:13:50Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8507</id>
		<title>RotorcraftMixing</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=RotorcraftMixing&amp;diff=8507"/>
		<updated>2011-01-28T01:13:07Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:hexa_3D.png]]&lt;br /&gt;
&lt;br /&gt;
This page describe how to compute &amp;quot;mixing&amp;quot; for an arbitrary multirotors configuration.&lt;br /&gt;
&lt;br /&gt;
Let us consider a vehicle comprising a set of &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; identical power trains &amp;lt;math&amp;gt;R_i, i \in[1:N]&amp;lt;/math&amp;gt; located at coordinates &amp;lt;math&amp;gt;(X_i,Y_i), i\in[1:N]&amp;lt;/math&amp;gt; and spinning in the same plane in the direction &amp;lt;math&amp;gt;D_i, i\in[1:N], D_i\in[-1;1]&amp;lt;/math&amp;gt; at a rotational speed &amp;lt;math&amp;gt;\omega_i, i\in[1:N]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Assuming a quasi hovering regime, the force produced by each rotor can be considered normal to the rotor plane and proportional to the square of its rotational speed. Under the same assumption, the torque produced by each rotor can also be assumed to be in the same direction and proportional to the square of the rotational speed.&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Rotorcraft_Configuration&amp;diff=8506</id>
		<title>Rotorcraft Configuration</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Rotorcraft_Configuration&amp;diff=8506"/>
		<updated>2011-01-28T01:03:38Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The airframe configuration file is located in &amp;lt;tt&amp;gt;conf/airframes&amp;lt;/tt&amp;gt; and contains&lt;br /&gt;
all the hardware and software settings for an aircraft. All gains, trims, and behavior settings are defined with standard XML elements. Optionally you can also add a raw [http://en.wikipedia.org/wiki/Makefile Makefile] section.&lt;br /&gt;
&lt;br /&gt;
== Autopilot modes ==&lt;br /&gt;
For rotorcrafts we have a lot of different modes that can be mapped to your 3-position switch (Manual, Auto1, Auto2).&lt;br /&gt;
The horizontal and vertical mode can be set differently as the following possible modes indicate:&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_FAILSAFE :&lt;br /&gt;
This is a failsafe mode that gets triggered if:&lt;br /&gt;
* RC signal is lost (and you are not in KILL or NAV mode)&lt;br /&gt;
* GPS and RC is lost in NAV mode&lt;br /&gt;
The autopilot will level the rotorcraft out (setpoints to zero pitch and roll angles) and descend at 0.5m/s downwards.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_KILL :&lt;br /&gt;
Motors are simply switched off.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_RATE_DIRECT :&lt;br /&gt;
This is basically the &amp;quot;most&amp;quot; manual mode you can get. You control not the attitude (roll and pitch angles) but the rotation rate. You also set the throttle directly with your RC.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_DIRECT :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles), but the throttle directly proportional to your stick position.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_RATE_RC_CLIMB :&lt;br /&gt;
You control the rotation rate and the vertical speed according to your throttle stick position. If you have your throttle stick in the middle position, the altitude is keept, down goes down at a speed proportional to your stick position (same for up). In this mode it makes sense to mount the spring for your throttle stick so it recenter itself.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_RC_CLIMB :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and the vertical speed according to your throttle stick position. If you have your throttle stick in the middle position, the altitude is keept, down goes down at a speed proportional to your stick position (same for up). In this mode it makes sense to mount the spring for your throttle stick so it recenter itself.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_CLIMB :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and the vertical speed. The vertical speed is set via fms (e.g. joystick).&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_RATE_Z_HOLD :&lt;br /&gt;
You control the rotation rate and it holds the altitude you were at when entering this mode. Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_Z_HOLD :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and it holds the altitude you were at when entering this mode. Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_HOVER_DIRECT :&lt;br /&gt;
The rotorcraft hovers at the horizontal position you were at when entering this mode (position control). You still set the throttle directly with your RC.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_HOVER_CLIMB :&lt;br /&gt;
The rotorcraft hovers at the position you were at when entering this mode (position control). The vertical speed is set via fms (e.g. joystick).&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_HOVER_Z_HOLD :&lt;br /&gt;
The rotorcraft hovers at the 3D position you were at when entering this mode (position and altitude control). Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_NAV :&lt;br /&gt;
Full navigation mode. The rotorcraft follows your flightplan.&lt;br /&gt;
&lt;br /&gt;
== XML Parameters ==&lt;br /&gt;
&lt;br /&gt;
=== Mode ===&lt;br /&gt;
In the mode section you can set the autopilot modes associated with your 3-way mode switch on your RC.&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;MODE&amp;quot; prefix=&amp;quot;MODE_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MANUAL&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_DIRECT&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AUTO1&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_Z_HOLD&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AUTO2&amp;quot; value=&amp;quot;AP_MODE_HOVER_Z_HOLD&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;commands&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; lists the abstract commands you need to control the aircraft. For most multicopter you just need:&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;commands&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;PITCH&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;ROLL&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;YAW&amp;quot; failsafe_value=&amp;quot;0 /&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;THRUST&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/commands&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each command is also associated with a failsafe value which will be used if no controller is active, for example during initialization of the autopilot board.&lt;br /&gt;
&lt;br /&gt;
=== Supervision ===&lt;br /&gt;
&lt;br /&gt;
This section describes the &amp;quot;mixing&amp;quot; used for your particular multirotor configuration. This section is needed for &amp;quot;mkk&amp;quot; (mikrokopter) and &amp;quot;asctecV2&amp;quot; controllers, as &amp;quot;asctecV1&amp;quot; do their mixing themselves.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;section name=&amp;quot;SUPERVISION&amp;quot; prefix=&amp;quot;SUPERVISION_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MIN_MOTOR&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAX_MOTOR&amp;quot; value=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_A&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_E&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_R&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NB_MOTOR&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SCALE&amp;quot; value=&amp;quot;256&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{  0  ,    0,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256,    0,    0 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256,  256, -256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Below are values for the common &amp;quot;plus cross&amp;quot;, &amp;quot;time cross&amp;quot; quadrirotor configurations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Plus Cross : [[Image:cross_plus_simple.png|200px]]&lt;br /&gt;
Assuming that the order of motors, described in the &amp;quot;servos&amp;quot; section is FRONT, BACK, LEFT, RIGHT.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{    0,    0,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256,    0,    0 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256,  256, -256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Time Cross : [[Image:cross_time_simple.png|200px]]&lt;br /&gt;
Assuming that the order of motors, described in the &amp;quot;servos&amp;quot; section is NE, SE, SW, NW.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{ -256, -256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256, -256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256, -256,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if your rotors are spinning opposite to the direction showed in the picture, just reverse signs in the YAW_COEF line.&lt;br /&gt;
&lt;br /&gt;
If you want to compute mixing for a special configuration, please see the [[RotorcraftMixing]] page.&lt;br /&gt;
&lt;br /&gt;
=== Bat === &lt;br /&gt;
This section give characteristics for the monitoring of the main power battery.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;CATASTROPHIC_BAT_LEVEL&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; (was previously &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;LOW_BATTERY&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt;) value defines the voltage at which the autopilot will lock the throttle at 0% in autonomous mode (kill_throttle mode). This value is also used by the ground server to issue a '''CATASTROPHIC''' alarm message on the bus (this message will be displayed in the console of the GCS).  &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;CRITIC&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;LOW&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; values will also used as threshold for '''CRITIC''' and '''WARNING''' alarms. They are optional and the respective defaults are 10.0 and 10.5V.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;MAX_BAT_LEVEL&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; may be specified to improve the display of the battery gauge in the strip or in &amp;quot;papgets&amp;quot;. Note that this definition is optional, with a default value of 12.5V.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;BAT&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MILLIAMP_PER_PERCENT&amp;quot; value=&amp;quot;0.86&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;CATASTROPHIC_BAT_LEVEL&amp;quot; value=&amp;quot;9.3&amp;quot; unit=&amp;quot;V&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MAX_BAT_LEVEL&amp;quot; value=&amp;quot;12.0&amp;quot; unit=&amp;quot;V&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;BATTERY_SENS&amp;quot; value=&amp;quot;0.246&amp;quot; integer=&amp;quot;16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;BATTERY_OFFSET&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulation ===&lt;br /&gt;
Values from this section can be used to tweak the SITL simulation. The NPS (New Paparazzi Sim) currently uses JSBSim as for the flight dynamic modeling, but other FDMs are possible.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;SIMULATOR&amp;quot; prefix=&amp;quot;NPS_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACTUATOR_NAMES&amp;quot; value=&amp;quot;{&amp;amp;quot;front_motor&amp;amp;quot;, &amp;amp;quot;back_motor&amp;amp;quot;, &amp;amp;quot;right_motor&amp;amp;quot;, &amp;amp;quot;left_motor&amp;amp;quot;}&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;INITIAL_CONDITITONS&amp;quot; value=&amp;quot;&amp;amp;quot;reset00&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;SENSORS_PARAMS&amp;quot; value=&amp;quot;&amp;amp;quot;nps_sensors_params_booz2_a1.h&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
The [[Modules|modules]] allow to add new code in a flexible way with initialisation, periodic and event functions without modifying the main AP loop.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;modules main_freq=&amp;quot;512&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;load name=&amp;quot;sys_mon.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/modules&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The main_freq parameter (in Hz) allows to specify the frequency of the main loop. Default is 60 Hz, for rotorcraft you should use 512 Hz.&lt;br /&gt;
&lt;br /&gt;
== Firmware and Hardware definitions ==&lt;br /&gt;
&lt;br /&gt;
This is one example of a pretty standard quadcopter firmware definition:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; board=&amp;quot;pc&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;subsystem name=&amp;quot;fdm&amp;quot;   type=&amp;quot;nps&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;MODEM_BAUD&amp;quot; value=&amp;quot;B57600&amp;quot;/&amp;gt;&amp;lt;!--this is already the default, add and change this line only if needed--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_ADAPT_HOVER&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GUIDANCE_H_USE_REF&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;radio_control&amp;quot; type=&amp;quot;ppm&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;actuators&amp;quot;     type=&amp;quot;mkk&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;imu&amp;quot;           type=&amp;quot;b2_v1.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;           type=&amp;quot;ublox&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ahrs&amp;quot;          type=&amp;quot;cmpl&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot;           type=&amp;quot;hff&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=== Select your Board ===&lt;br /&gt;
The airframe file must include the description of the controller board and it's low-level settings.&lt;br /&gt;
This is done in the &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;firmware&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; section by specifying the ''board'' attribute for the ''target'' &amp;quot;ap&amp;quot; (autopilot).&lt;br /&gt;
&lt;br /&gt;
Select the appropriate board:&lt;br /&gt;
&amp;quot;twog_1.0&amp;quot;, &amp;quot;tiny_2.11&amp;quot;, &amp;quot;tiny_2.1&amp;quot;, &amp;quot;tiny_1.1&amp;quot;, &amp;quot;tiny_0.99&amp;quot;, &amp;quot;booz_1.0&amp;quot;, &amp;quot;lisa_l_1.0&amp;quot;, &amp;quot;lisa_l_1.1&amp;quot;, &amp;quot;pc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; 			board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Radio Control ===&lt;br /&gt;
The Paparazzi autopilot can interface directly with the PWM signal from any standard hobby R/C receiver.  Signal decoding configuration settings for this are stored in the [[Radio_Control|Radio Control]] file.&lt;br /&gt;
&lt;br /&gt;
Just specify the appropriate subsystem in your firmware section:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; 			board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;radio_control&amp;quot;     type=&amp;quot;ppm&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
On the autopilots with a STM32 processor (lisa) you can use the type ''spektrum''.&lt;br /&gt;
&lt;br /&gt;
=== Telemetry (Modem) ===&lt;br /&gt;
The modem protocol and baud rate must be set in both the airframe file and ground station.  Any standard baud rate can be used, with 9600 being adequate and 57600 recommended for most users to allow high speed telemetry for more detailed flight data analysis.  The actual data rate is determined by the number of messages being sent and the period of each message as defined in &amp;lt;tt&amp;gt;conf/telemetry/default.xml&amp;lt;/tt&amp;gt;.  Those wishing to experiment with &amp;quot;alternative&amp;quot; modems can reduce the number and period of each telemetry message to fit within most any bandwidth constraint.&lt;br /&gt;
&lt;br /&gt;
Paparazzi supports the following modem protocols:&lt;br /&gt;
* Standard transparent serial (pprz) - this is compatible with all modems and can be used to connect the autopilot directly to a PC for testing without a modem.&lt;br /&gt;
* Maxstream API protocol (xbee) - compatible with all Maxstream modems including the 9XTend and Zigbee.  This protocol enables hardware addressing, allowing multiple aircraft to be managed from a single ground modem.&lt;br /&gt;
&lt;br /&gt;
Just specify the appropriate subsystem in your firmware section. You can currently choose between the types '''transparent''' and '''xbee_api'''.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The correct UART is already defined by default according to your board.&lt;br /&gt;
The default modem baudrate is 57600baud.&lt;br /&gt;
&lt;br /&gt;
If you use different baud rate or UART set the according parameters, e.g.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;MODEM_BAUD&amp;quot;          value=&amp;quot;B9600&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;MODEM_PORT&amp;quot;          value=&amp;quot;UART1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
The serial port settings must match that of the GPS and are configured here along with the necessary files to interpret the u-blox UBX binary protocol:&lt;br /&gt;
&lt;br /&gt;
For rotorcraft you can use the ublox type for both lea-4p and lea-5h.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;               type=&amp;quot;ublox&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The correct UART is already defined by default according to your board.&lt;br /&gt;
The default modem baudrate is 38400baud.&lt;br /&gt;
&lt;br /&gt;
If you use different baud rates set the according parameters, e.g.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;               type=&amp;quot;ublox&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;GPS_BAUD&amp;quot;          value=&amp;quot;B9600&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
* u-blox GPS modules are factory configured for 9600 baud, 38,400 baud is recommended along with the other required changes.  The GPS can be accessed directly thrugh the [[Compiling#USB_flashing|UART Tunnel]] and [[GPS#GPS_configuration_using_U-Center|Configured with u-center]]&lt;br /&gt;
&lt;br /&gt;
=== IMU ===&lt;br /&gt;
Add the imu subsystem with the type you are using. Currently possible IMU subsystems are &amp;quot;b2_v1.0&amp;quot;, &amp;quot;b2_v1.1&amp;quot;, &amp;quot;b2_v1.2&amp;quot;, &amp;quot;crista&amp;quot; and &amp;quot;aspirin&amp;quot;. Other IMUs can be used through modules or you can just add a subsystem makefile for your own.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 		board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;imu&amp;quot;       type=&amp;quot;b2_v1.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== AHRS ===&lt;br /&gt;
The AHRS subsystem specifies which attitude estimation filter you are using, e.g. for the complementary filter:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ahrs&amp;quot; type=&amp;quot;cmpl&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== INS ===&lt;br /&gt;
The optional INS (Integrated Navigation System) subsystem contains estimations filter to e.g. fuse GPS and IMU data for better position and speed estimates.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot; type=&amp;quot;hff&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
You can also compensate for GPS lag in hff (horizontal filter float) if it is known (in seconds):&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot; type=&amp;quot;hff&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;GPS_LAG=0.2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Beware, this code is kinda bad/ugly and should be replaced/improved!&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=File:Cross_time_simple.png&amp;diff=8505</id>
		<title>File:Cross time simple.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=File:Cross_time_simple.png&amp;diff=8505"/>
		<updated>2011-01-28T00:58:39Z</updated>

		<summary type="html">&lt;p&gt;Poine: classical time cross quadrirotor configuration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;classical time cross quadrirotor configuration&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Rotorcraft_Configuration&amp;diff=8504</id>
		<title>Rotorcraft Configuration</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Rotorcraft_Configuration&amp;diff=8504"/>
		<updated>2011-01-28T00:58:01Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The airframe configuration file is located in &amp;lt;tt&amp;gt;conf/airframes&amp;lt;/tt&amp;gt; and contains&lt;br /&gt;
all the hardware and software settings for an aircraft. All gains, trims, and behavior settings are defined with standard XML elements. Optionally you can also add a raw [http://en.wikipedia.org/wiki/Makefile Makefile] section.&lt;br /&gt;
&lt;br /&gt;
== Autopilot modes ==&lt;br /&gt;
For rotorcrafts we have a lot of different modes that can be mapped to your 3-position switch (Manual, Auto1, Auto2).&lt;br /&gt;
The horizontal and vertical mode can be set differently as the following possible modes indicate:&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_FAILSAFE :&lt;br /&gt;
This is a failsafe mode that gets triggered if:&lt;br /&gt;
* RC signal is lost (and you are not in KILL or NAV mode)&lt;br /&gt;
* GPS and RC is lost in NAV mode&lt;br /&gt;
The autopilot will level the rotorcraft out (setpoints to zero pitch and roll angles) and descend at 0.5m/s downwards.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_KILL :&lt;br /&gt;
Motors are simply switched off.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_RATE_DIRECT :&lt;br /&gt;
This is basically the &amp;quot;most&amp;quot; manual mode you can get. You control not the attitude (roll and pitch angles) but the rotation rate. You also set the throttle directly with your RC.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_DIRECT :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles), but the throttle directly proportional to your stick position.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_RATE_RC_CLIMB :&lt;br /&gt;
You control the rotation rate and the vertical speed according to your throttle stick position. If you have your throttle stick in the middle position, the altitude is keept, down goes down at a speed proportional to your stick position (same for up). In this mode it makes sense to mount the spring for your throttle stick so it recenter itself.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_RC_CLIMB :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and the vertical speed according to your throttle stick position. If you have your throttle stick in the middle position, the altitude is keept, down goes down at a speed proportional to your stick position (same for up). In this mode it makes sense to mount the spring for your throttle stick so it recenter itself.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_CLIMB :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and the vertical speed. The vertical speed is set via fms (e.g. joystick).&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_RATE_Z_HOLD :&lt;br /&gt;
You control the rotation rate and it holds the altitude you were at when entering this mode. Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_Z_HOLD :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and it holds the altitude you were at when entering this mode. Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_HOVER_DIRECT :&lt;br /&gt;
The rotorcraft hovers at the horizontal position you were at when entering this mode (position control). You still set the throttle directly with your RC.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_HOVER_CLIMB :&lt;br /&gt;
The rotorcraft hovers at the position you were at when entering this mode (position control). The vertical speed is set via fms (e.g. joystick).&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_HOVER_Z_HOLD :&lt;br /&gt;
The rotorcraft hovers at the 3D position you were at when entering this mode (position and altitude control). Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_NAV :&lt;br /&gt;
Full navigation mode. The rotorcraft follows your flightplan.&lt;br /&gt;
&lt;br /&gt;
== XML Parameters ==&lt;br /&gt;
&lt;br /&gt;
=== Mode ===&lt;br /&gt;
In the mode section you can set the autopilot modes associated with your 3-way mode switch on your RC.&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;MODE&amp;quot; prefix=&amp;quot;MODE_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MANUAL&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_DIRECT&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AUTO1&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_Z_HOLD&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AUTO2&amp;quot; value=&amp;quot;AP_MODE_HOVER_Z_HOLD&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;commands&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; lists the abstract commands you need to control the aircraft. For most multicopter you just need:&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;commands&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;PITCH&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;ROLL&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;YAW&amp;quot; failsafe_value=&amp;quot;0 /&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;THRUST&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/commands&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each command is also associated with a failsafe value which will be used if no controller is active, for example during initialization of the autopilot board.&lt;br /&gt;
&lt;br /&gt;
=== Supervision ===&lt;br /&gt;
&lt;br /&gt;
This section describes the &amp;quot;mixing&amp;quot; used for your particular multirotor configuration. This is not done using the &amp;quot;command_laws&amp;quot; section as on fixedwings as the supervision attempts to do deal with actuators saturations ( by giving priority to fast dynamics over slow ones ).&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;section name=&amp;quot;SUPERVISION&amp;quot; prefix=&amp;quot;SUPERVISION_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MIN_MOTOR&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAX_MOTOR&amp;quot; value=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_A&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_E&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_R&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NB_MOTOR&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SCALE&amp;quot; value=&amp;quot;256&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{  0  ,    0,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256,    0,    0 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256,  256, -256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Below are values for the common &amp;quot;plus cross&amp;quot;, &amp;quot;time cross&amp;quot; quadrirotor configurations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Plus Cross : [[Image:cross_plus_simple.png|200px]]&lt;br /&gt;
Assuming that the order of motors, described in the &amp;quot;servos&amp;quot; section is FRONT, BACK, LEFT, RIGHT.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{    0,    0,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256,    0,    0 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256,  256, -256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Time Cross : [[Image:cross_time_simple.png]]&lt;br /&gt;
Assuming that the order of motors, described in the &amp;quot;servos&amp;quot; section is NE, SE, SW, NW.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{ -256, -256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256, -256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256, -256,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if your rotors are spinning opposite to the direction showed in the picture, just reverse signs in the YAW_COEF line.&lt;br /&gt;
&lt;br /&gt;
If you want to compute mixing for a special configuration, please see the [[RotorcraftMixing]] page.&lt;br /&gt;
&lt;br /&gt;
=== Bat === &lt;br /&gt;
This section give characteristics for the monitoring of the main power battery.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;CATASTROPHIC_BAT_LEVEL&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; (was previously &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;LOW_BATTERY&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt;) value defines the voltage at which the autopilot will lock the throttle at 0% in autonomous mode (kill_throttle mode). This value is also used by the ground server to issue a '''CATASTROPHIC''' alarm message on the bus (this message will be displayed in the console of the GCS).  &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;CRITIC&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;LOW&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; values will also used as threshold for '''CRITIC''' and '''WARNING''' alarms. They are optional and the respective defaults are 10.0 and 10.5V.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;MAX_BAT_LEVEL&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; may be specified to improve the display of the battery gauge in the strip or in &amp;quot;papgets&amp;quot;. Note that this definition is optional, with a default value of 12.5V.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;BAT&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MILLIAMP_PER_PERCENT&amp;quot; value=&amp;quot;0.86&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;CATASTROPHIC_BAT_LEVEL&amp;quot; value=&amp;quot;9.3&amp;quot; unit=&amp;quot;V&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MAX_BAT_LEVEL&amp;quot; value=&amp;quot;12.0&amp;quot; unit=&amp;quot;V&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;BATTERY_SENS&amp;quot; value=&amp;quot;0.246&amp;quot; integer=&amp;quot;16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;BATTERY_OFFSET&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulation ===&lt;br /&gt;
Values from this section can be used to tweak the SITL simulation. The NPS (New Paparazzi Sim) currently uses JSBSim as for the flight dynamic modeling, but other FDMs are possible.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;SIMULATOR&amp;quot; prefix=&amp;quot;NPS_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACTUATOR_NAMES&amp;quot; value=&amp;quot;{&amp;amp;quot;front_motor&amp;amp;quot;, &amp;amp;quot;back_motor&amp;amp;quot;, &amp;amp;quot;right_motor&amp;amp;quot;, &amp;amp;quot;left_motor&amp;amp;quot;}&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;INITIAL_CONDITITONS&amp;quot; value=&amp;quot;&amp;amp;quot;reset00&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;SENSORS_PARAMS&amp;quot; value=&amp;quot;&amp;amp;quot;nps_sensors_params_booz2_a1.h&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
The [[Modules|modules]] allow to add new code in a flexible way with initialisation, periodic and event functions without modifying the main AP loop.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;modules main_freq=&amp;quot;512&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;load name=&amp;quot;sys_mon.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/modules&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The main_freq parameter (in Hz) allows to specify the frequency of the main loop. Default is 60 Hz, for rotorcraft you should use 512 Hz.&lt;br /&gt;
&lt;br /&gt;
== Firmware and Hardware definitions ==&lt;br /&gt;
&lt;br /&gt;
This is one example of a pretty standard quadcopter firmware definition:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; board=&amp;quot;pc&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;subsystem name=&amp;quot;fdm&amp;quot;   type=&amp;quot;nps&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;MODEM_BAUD&amp;quot; value=&amp;quot;B57600&amp;quot;/&amp;gt;&amp;lt;!--this is already the default, add and change this line only if needed--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_ADAPT_HOVER&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GUIDANCE_H_USE_REF&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;radio_control&amp;quot; type=&amp;quot;ppm&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;actuators&amp;quot;     type=&amp;quot;mkk&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;imu&amp;quot;           type=&amp;quot;b2_v1.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;           type=&amp;quot;ublox&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ahrs&amp;quot;          type=&amp;quot;cmpl&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot;           type=&amp;quot;hff&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=== Select your Board ===&lt;br /&gt;
The airframe file must include the description of the controller board and it's low-level settings.&lt;br /&gt;
This is done in the &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;firmware&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; section by specifying the ''board'' attribute for the ''target'' &amp;quot;ap&amp;quot; (autopilot).&lt;br /&gt;
&lt;br /&gt;
Select the appropriate board:&lt;br /&gt;
&amp;quot;twog_1.0&amp;quot;, &amp;quot;tiny_2.11&amp;quot;, &amp;quot;tiny_2.1&amp;quot;, &amp;quot;tiny_1.1&amp;quot;, &amp;quot;tiny_0.99&amp;quot;, &amp;quot;booz_1.0&amp;quot;, &amp;quot;lisa_l_1.0&amp;quot;, &amp;quot;lisa_l_1.1&amp;quot;, &amp;quot;pc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; 			board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Radio Control ===&lt;br /&gt;
The Paparazzi autopilot can interface directly with the PWM signal from any standard hobby R/C receiver.  Signal decoding configuration settings for this are stored in the [[Radio_Control|Radio Control]] file.&lt;br /&gt;
&lt;br /&gt;
Just specify the appropriate subsystem in your firmware section:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; 			board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;radio_control&amp;quot;     type=&amp;quot;ppm&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
On the autopilots with a STM32 processor (lisa) you can use the type ''spektrum''.&lt;br /&gt;
&lt;br /&gt;
=== Telemetry (Modem) ===&lt;br /&gt;
The modem protocol and baud rate must be set in both the airframe file and ground station.  Any standard baud rate can be used, with 9600 being adequate and 57600 recommended for most users to allow high speed telemetry for more detailed flight data analysis.  The actual data rate is determined by the number of messages being sent and the period of each message as defined in &amp;lt;tt&amp;gt;conf/telemetry/default.xml&amp;lt;/tt&amp;gt;.  Those wishing to experiment with &amp;quot;alternative&amp;quot; modems can reduce the number and period of each telemetry message to fit within most any bandwidth constraint.&lt;br /&gt;
&lt;br /&gt;
Paparazzi supports the following modem protocols:&lt;br /&gt;
* Standard transparent serial (pprz) - this is compatible with all modems and can be used to connect the autopilot directly to a PC for testing without a modem.&lt;br /&gt;
* Maxstream API protocol (xbee) - compatible with all Maxstream modems including the 9XTend and Zigbee.  This protocol enables hardware addressing, allowing multiple aircraft to be managed from a single ground modem.&lt;br /&gt;
&lt;br /&gt;
Just specify the appropriate subsystem in your firmware section. You can currently choose between the types '''transparent''' and '''xbee_api'''.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The correct UART is already defined by default according to your board.&lt;br /&gt;
The default modem baudrate is 57600baud.&lt;br /&gt;
&lt;br /&gt;
If you use different baud rate or UART set the according parameters, e.g.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;MODEM_BAUD&amp;quot;          value=&amp;quot;B9600&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;MODEM_PORT&amp;quot;          value=&amp;quot;UART1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
The serial port settings must match that of the GPS and are configured here along with the necessary files to interpret the u-blox UBX binary protocol:&lt;br /&gt;
&lt;br /&gt;
For rotorcraft you can use the ublox type for both lea-4p and lea-5h.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;               type=&amp;quot;ublox&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The correct UART is already defined by default according to your board.&lt;br /&gt;
The default modem baudrate is 38400baud.&lt;br /&gt;
&lt;br /&gt;
If you use different baud rates set the according parameters, e.g.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;               type=&amp;quot;ublox&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;GPS_BAUD&amp;quot;          value=&amp;quot;B9600&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
* u-blox GPS modules are factory configured for 9600 baud, 38,400 baud is recommended along with the other required changes.  The GPS can be accessed directly thrugh the [[Compiling#USB_flashing|UART Tunnel]] and [[GPS#GPS_configuration_using_U-Center|Configured with u-center]]&lt;br /&gt;
&lt;br /&gt;
=== IMU ===&lt;br /&gt;
Add the imu subsystem with the type you are using. Currently possible IMU subsystems are &amp;quot;b2_v1.0&amp;quot;, &amp;quot;b2_v1.1&amp;quot;, &amp;quot;b2_v1.2&amp;quot;, &amp;quot;crista&amp;quot; and &amp;quot;aspirin&amp;quot;. Other IMUs can be used through modules or you can just add a subsystem makefile for your own.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 		board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;imu&amp;quot;       type=&amp;quot;b2_v1.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== AHRS ===&lt;br /&gt;
The AHRS subsystem specifies which attitude estimation filter you are using, e.g. for the complementary filter:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ahrs&amp;quot; type=&amp;quot;cmpl&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== INS ===&lt;br /&gt;
The optional INS (Integrated Navigation System) subsystem contains estimations filter to e.g. fuse GPS and IMU data for better position and speed estimates.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot; type=&amp;quot;hff&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
You can also compensate for GPS lag in hff (horizontal filter float) if it is known (in seconds):&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot; type=&amp;quot;hff&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;GPS_LAG=0.2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Beware, this code is kinda bad/ugly and should be replaced/improved!&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=File:Cross_plus_simple.png&amp;diff=8503</id>
		<title>File:Cross plus simple.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=File:Cross_plus_simple.png&amp;diff=8503"/>
		<updated>2011-01-28T00:48:22Z</updated>

		<summary type="html">&lt;p&gt;Poine: classic plus cross quadrirotor configuration&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;classic plus cross quadrirotor configuration&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Rotorcraft_Configuration&amp;diff=8502</id>
		<title>Rotorcraft Configuration</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Rotorcraft_Configuration&amp;diff=8502"/>
		<updated>2011-01-28T00:46:52Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The airframe configuration file is located in &amp;lt;tt&amp;gt;conf/airframes&amp;lt;/tt&amp;gt; and contains&lt;br /&gt;
all the hardware and software settings for an aircraft. All gains, trims, and behavior settings are defined with standard XML elements. Optionally you can also add a raw [http://en.wikipedia.org/wiki/Makefile Makefile] section.&lt;br /&gt;
&lt;br /&gt;
== Autopilot modes ==&lt;br /&gt;
For rotorcrafts we have a lot of different modes that can be mapped to your 3-position switch (Manual, Auto1, Auto2).&lt;br /&gt;
The horizontal and vertical mode can be set differently as the following possible modes indicate:&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_FAILSAFE :&lt;br /&gt;
This is a failsafe mode that gets triggered if:&lt;br /&gt;
* RC signal is lost (and you are not in KILL or NAV mode)&lt;br /&gt;
* GPS and RC is lost in NAV mode&lt;br /&gt;
The autopilot will level the rotorcraft out (setpoints to zero pitch and roll angles) and descend at 0.5m/s downwards.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_KILL :&lt;br /&gt;
Motors are simply switched off.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_RATE_DIRECT :&lt;br /&gt;
This is basically the &amp;quot;most&amp;quot; manual mode you can get. You control not the attitude (roll and pitch angles) but the rotation rate. You also set the throttle directly with your RC.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_DIRECT :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles), but the throttle directly proportional to your stick position.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_RATE_RC_CLIMB :&lt;br /&gt;
You control the rotation rate and the vertical speed according to your throttle stick position. If you have your throttle stick in the middle position, the altitude is keept, down goes down at a speed proportional to your stick position (same for up). In this mode it makes sense to mount the spring for your throttle stick so it recenter itself.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_RC_CLIMB :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and the vertical speed according to your throttle stick position. If you have your throttle stick in the middle position, the altitude is keept, down goes down at a speed proportional to your stick position (same for up). In this mode it makes sense to mount the spring for your throttle stick so it recenter itself.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_CLIMB :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and the vertical speed. The vertical speed is set via fms (e.g. joystick).&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_RATE_Z_HOLD :&lt;br /&gt;
You control the rotation rate and it holds the altitude you were at when entering this mode. Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_Z_HOLD :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and it holds the altitude you were at when entering this mode. Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_HOVER_DIRECT :&lt;br /&gt;
The rotorcraft hovers at the horizontal position you were at when entering this mode (position control). You still set the throttle directly with your RC.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_HOVER_CLIMB :&lt;br /&gt;
The rotorcraft hovers at the position you were at when entering this mode (position control). The vertical speed is set via fms (e.g. joystick).&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_HOVER_Z_HOLD :&lt;br /&gt;
The rotorcraft hovers at the 3D position you were at when entering this mode (position and altitude control). Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_NAV :&lt;br /&gt;
Full navigation mode. The rotorcraft follows your flightplan.&lt;br /&gt;
&lt;br /&gt;
== XML Parameters ==&lt;br /&gt;
&lt;br /&gt;
=== Mode ===&lt;br /&gt;
In the mode section you can set the autopilot modes associated with your 3-way mode switch on your RC.&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;MODE&amp;quot; prefix=&amp;quot;MODE_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MANUAL&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_DIRECT&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AUTO1&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_Z_HOLD&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AUTO2&amp;quot; value=&amp;quot;AP_MODE_HOVER_Z_HOLD&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;commands&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; lists the abstract commands you need to control the aircraft. For most multicopter you just need:&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;commands&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;PITCH&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;ROLL&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;YAW&amp;quot; failsafe_value=&amp;quot;0 /&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;THRUST&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/commands&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each command is also associated with a failsafe value which will be used if no controller is active, for example during initialization of the autopilot board.&lt;br /&gt;
&lt;br /&gt;
=== Supervision ===&lt;br /&gt;
&lt;br /&gt;
This section describes the &amp;quot;mixing&amp;quot; used for your particular multirotor configuration. This is not done using the &amp;quot;command_laws&amp;quot; section as on fixedwings as the supervision attempts to do deal with actuators saturations ( by giving priority to fast dynamics over slow ones ).&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;section name=&amp;quot;SUPERVISION&amp;quot; prefix=&amp;quot;SUPERVISION_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MIN_MOTOR&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAX_MOTOR&amp;quot; value=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_A&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_E&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_R&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NB_MOTOR&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SCALE&amp;quot; value=&amp;quot;256&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{  0  ,    0,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256,    0,    0 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256,  256, -256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Below are values for the common &amp;quot;plus cross&amp;quot;, &amp;quot;time cross&amp;quot; quadrirotor configurations.&lt;br /&gt;
&lt;br /&gt;
Assuming that the order of motors, described in the &amp;quot;servos&amp;quot; section is front, back, left, right.&lt;br /&gt;
; plus cross : [[Image:cross_plus_simple.png]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{    0,    0,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256,    0,    0 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256,  256, -256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Assuming that the order of motors, described in the &amp;quot;servos&amp;quot; section is NE, SE, SW, NW.&lt;br /&gt;
; time cross : [[Image:cross_time_simple.png]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{ -256, -256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256, -256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256, -256,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want compute mixing for a special configuration, please see the [[RotorcraftMixing]] page&lt;br /&gt;
&lt;br /&gt;
=== Bat === &lt;br /&gt;
This section give characteristics for the monitoring of the main power battery.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;CATASTROPHIC_BAT_LEVEL&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; (was previously &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;LOW_BATTERY&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt;) value defines the voltage at which the autopilot will lock the throttle at 0% in autonomous mode (kill_throttle mode). This value is also used by the ground server to issue a '''CATASTROPHIC''' alarm message on the bus (this message will be displayed in the console of the GCS).  &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;CRITIC&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;LOW&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; values will also used as threshold for '''CRITIC''' and '''WARNING''' alarms. They are optional and the respective defaults are 10.0 and 10.5V.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;MAX_BAT_LEVEL&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; may be specified to improve the display of the battery gauge in the strip or in &amp;quot;papgets&amp;quot;. Note that this definition is optional, with a default value of 12.5V.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;BAT&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MILLIAMP_PER_PERCENT&amp;quot; value=&amp;quot;0.86&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;CATASTROPHIC_BAT_LEVEL&amp;quot; value=&amp;quot;9.3&amp;quot; unit=&amp;quot;V&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MAX_BAT_LEVEL&amp;quot; value=&amp;quot;12.0&amp;quot; unit=&amp;quot;V&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;BATTERY_SENS&amp;quot; value=&amp;quot;0.246&amp;quot; integer=&amp;quot;16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;BATTERY_OFFSET&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulation ===&lt;br /&gt;
Values from this section can be used to tweak the SITL simulation. The NPS (New Paparazzi Sim) currently uses JSBSim as for the flight dynamic modeling, but other FDMs are possible.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;SIMULATOR&amp;quot; prefix=&amp;quot;NPS_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACTUATOR_NAMES&amp;quot; value=&amp;quot;{&amp;amp;quot;front_motor&amp;amp;quot;, &amp;amp;quot;back_motor&amp;amp;quot;, &amp;amp;quot;right_motor&amp;amp;quot;, &amp;amp;quot;left_motor&amp;amp;quot;}&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;INITIAL_CONDITITONS&amp;quot; value=&amp;quot;&amp;amp;quot;reset00&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;SENSORS_PARAMS&amp;quot; value=&amp;quot;&amp;amp;quot;nps_sensors_params_booz2_a1.h&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
The [[Modules|modules]] allow to add new code in a flexible way with initialisation, periodic and event functions without modifying the main AP loop.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;modules main_freq=&amp;quot;512&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;load name=&amp;quot;sys_mon.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/modules&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The main_freq parameter (in Hz) allows to specify the frequency of the main loop. Default is 60 Hz, for rotorcraft you should use 512 Hz.&lt;br /&gt;
&lt;br /&gt;
== Firmware and Hardware definitions ==&lt;br /&gt;
&lt;br /&gt;
This is one example of a pretty standard quadcopter firmware definition:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; board=&amp;quot;pc&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;subsystem name=&amp;quot;fdm&amp;quot;   type=&amp;quot;nps&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;MODEM_BAUD&amp;quot; value=&amp;quot;B57600&amp;quot;/&amp;gt;&amp;lt;!--this is already the default, add and change this line only if needed--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_ADAPT_HOVER&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GUIDANCE_H_USE_REF&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;radio_control&amp;quot; type=&amp;quot;ppm&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;actuators&amp;quot;     type=&amp;quot;mkk&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;imu&amp;quot;           type=&amp;quot;b2_v1.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;           type=&amp;quot;ublox&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ahrs&amp;quot;          type=&amp;quot;cmpl&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot;           type=&amp;quot;hff&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=== Select your Board ===&lt;br /&gt;
The airframe file must include the description of the controller board and it's low-level settings.&lt;br /&gt;
This is done in the &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;firmware&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; section by specifying the ''board'' attribute for the ''target'' &amp;quot;ap&amp;quot; (autopilot).&lt;br /&gt;
&lt;br /&gt;
Select the appropriate board:&lt;br /&gt;
&amp;quot;twog_1.0&amp;quot;, &amp;quot;tiny_2.11&amp;quot;, &amp;quot;tiny_2.1&amp;quot;, &amp;quot;tiny_1.1&amp;quot;, &amp;quot;tiny_0.99&amp;quot;, &amp;quot;booz_1.0&amp;quot;, &amp;quot;lisa_l_1.0&amp;quot;, &amp;quot;lisa_l_1.1&amp;quot;, &amp;quot;pc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; 			board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Radio Control ===&lt;br /&gt;
The Paparazzi autopilot can interface directly with the PWM signal from any standard hobby R/C receiver.  Signal decoding configuration settings for this are stored in the [[Radio_Control|Radio Control]] file.&lt;br /&gt;
&lt;br /&gt;
Just specify the appropriate subsystem in your firmware section:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; 			board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;radio_control&amp;quot;     type=&amp;quot;ppm&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
On the autopilots with a STM32 processor (lisa) you can use the type ''spektrum''.&lt;br /&gt;
&lt;br /&gt;
=== Telemetry (Modem) ===&lt;br /&gt;
The modem protocol and baud rate must be set in both the airframe file and ground station.  Any standard baud rate can be used, with 9600 being adequate and 57600 recommended for most users to allow high speed telemetry for more detailed flight data analysis.  The actual data rate is determined by the number of messages being sent and the period of each message as defined in &amp;lt;tt&amp;gt;conf/telemetry/default.xml&amp;lt;/tt&amp;gt;.  Those wishing to experiment with &amp;quot;alternative&amp;quot; modems can reduce the number and period of each telemetry message to fit within most any bandwidth constraint.&lt;br /&gt;
&lt;br /&gt;
Paparazzi supports the following modem protocols:&lt;br /&gt;
* Standard transparent serial (pprz) - this is compatible with all modems and can be used to connect the autopilot directly to a PC for testing without a modem.&lt;br /&gt;
* Maxstream API protocol (xbee) - compatible with all Maxstream modems including the 9XTend and Zigbee.  This protocol enables hardware addressing, allowing multiple aircraft to be managed from a single ground modem.&lt;br /&gt;
&lt;br /&gt;
Just specify the appropriate subsystem in your firmware section. You can currently choose between the types '''transparent''' and '''xbee_api'''.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The correct UART is already defined by default according to your board.&lt;br /&gt;
The default modem baudrate is 57600baud.&lt;br /&gt;
&lt;br /&gt;
If you use different baud rate or UART set the according parameters, e.g.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;MODEM_BAUD&amp;quot;          value=&amp;quot;B9600&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;MODEM_PORT&amp;quot;          value=&amp;quot;UART1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
The serial port settings must match that of the GPS and are configured here along with the necessary files to interpret the u-blox UBX binary protocol:&lt;br /&gt;
&lt;br /&gt;
For rotorcraft you can use the ublox type for both lea-4p and lea-5h.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;               type=&amp;quot;ublox&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The correct UART is already defined by default according to your board.&lt;br /&gt;
The default modem baudrate is 38400baud.&lt;br /&gt;
&lt;br /&gt;
If you use different baud rates set the according parameters, e.g.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;               type=&amp;quot;ublox&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;GPS_BAUD&amp;quot;          value=&amp;quot;B9600&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
* u-blox GPS modules are factory configured for 9600 baud, 38,400 baud is recommended along with the other required changes.  The GPS can be accessed directly thrugh the [[Compiling#USB_flashing|UART Tunnel]] and [[GPS#GPS_configuration_using_U-Center|Configured with u-center]]&lt;br /&gt;
&lt;br /&gt;
=== IMU ===&lt;br /&gt;
Add the imu subsystem with the type you are using. Currently possible IMU subsystems are &amp;quot;b2_v1.0&amp;quot;, &amp;quot;b2_v1.1&amp;quot;, &amp;quot;b2_v1.2&amp;quot;, &amp;quot;crista&amp;quot; and &amp;quot;aspirin&amp;quot;. Other IMUs can be used through modules or you can just add a subsystem makefile for your own.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 		board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;imu&amp;quot;       type=&amp;quot;b2_v1.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== AHRS ===&lt;br /&gt;
The AHRS subsystem specifies which attitude estimation filter you are using, e.g. for the complementary filter:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ahrs&amp;quot; type=&amp;quot;cmpl&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== INS ===&lt;br /&gt;
The optional INS (Integrated Navigation System) subsystem contains estimations filter to e.g. fuse GPS and IMU data for better position and speed estimates.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot; type=&amp;quot;hff&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
You can also compensate for GPS lag in hff (horizontal filter float) if it is known (in seconds):&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot; type=&amp;quot;hff&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;GPS_LAG=0.2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Beware, this code is kinda bad/ugly and should be replaced/improved!&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Rotorcraft_Configuration&amp;diff=8501</id>
		<title>Rotorcraft Configuration</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Rotorcraft_Configuration&amp;diff=8501"/>
		<updated>2011-01-28T00:24:25Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The airframe configuration file is located in &amp;lt;tt&amp;gt;conf/airframes&amp;lt;/tt&amp;gt; and contains&lt;br /&gt;
all the hardware and software settings for an aircraft. All gains, trims, and behavior settings are defined with standard XML elements. Optionally you can also add a raw [http://en.wikipedia.org/wiki/Makefile Makefile] section.&lt;br /&gt;
&lt;br /&gt;
== Autopilot modes ==&lt;br /&gt;
For rotorcrafts we have a lot of different modes that can be mapped to your 3-position switch (Manual, Auto1, Auto2).&lt;br /&gt;
The horizontal and vertical mode can be set differently as the following possible modes indicate:&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_FAILSAFE :&lt;br /&gt;
This is a failsafe mode that gets triggered if:&lt;br /&gt;
* RC signal is lost (and you are not in KILL or NAV mode)&lt;br /&gt;
* GPS and RC is lost in NAV mode&lt;br /&gt;
The autopilot will level the rotorcraft out (setpoints to zero pitch and roll angles) and descend at 0.5m/s downwards.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_KILL :&lt;br /&gt;
Motors are simply switched off.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_RATE_DIRECT :&lt;br /&gt;
This is basically the &amp;quot;most&amp;quot; manual mode you can get. You control not the attitude (roll and pitch angles) but the rotation rate. You also set the throttle directly with your RC.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_DIRECT :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles), but the throttle directly proportional to your stick position.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_RATE_RC_CLIMB :&lt;br /&gt;
You control the rotation rate and the vertical speed according to your throttle stick position. If you have your throttle stick in the middle position, the altitude is keept, down goes down at a speed proportional to your stick position (same for up). In this mode it makes sense to mount the spring for your throttle stick so it recenter itself.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_RC_CLIMB :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and the vertical speed according to your throttle stick position. If you have your throttle stick in the middle position, the altitude is keept, down goes down at a speed proportional to your stick position (same for up). In this mode it makes sense to mount the spring for your throttle stick so it recenter itself.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_CLIMB :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and the vertical speed. The vertical speed is set via fms (e.g. joystick).&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_RATE_Z_HOLD :&lt;br /&gt;
You control the rotation rate and it holds the altitude you were at when entering this mode. Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_ATTITUDE_Z_HOLD :&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and it holds the altitude you were at when entering this mode. Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_HOVER_DIRECT :&lt;br /&gt;
The rotorcraft hovers at the horizontal position you were at when entering this mode (position control). You still set the throttle directly with your RC.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_HOVER_CLIMB :&lt;br /&gt;
The rotorcraft hovers at the position you were at when entering this mode (position control). The vertical speed is set via fms (e.g. joystick).&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_HOVER_Z_HOLD :&lt;br /&gt;
The rotorcraft hovers at the 3D position you were at when entering this mode (position and altitude control). Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
; AP_MODE_NAV :&lt;br /&gt;
Full navigation mode. The rotorcraft follows your flightplan.&lt;br /&gt;
&lt;br /&gt;
== XML Parameters ==&lt;br /&gt;
&lt;br /&gt;
=== Mode ===&lt;br /&gt;
In the mode section you can set the autopilot modes associated with your 3-way mode switch on your RC.&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;MODE&amp;quot; prefix=&amp;quot;MODE_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MANUAL&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_DIRECT&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AUTO1&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_Z_HOLD&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AUTO2&amp;quot; value=&amp;quot;AP_MODE_HOVER_Z_HOLD&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;commands&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; lists the abstract commands you need to control the aircraft. For most multicopter you just need:&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;commands&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;PITCH&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;ROLL&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;YAW&amp;quot; failsafe_value=&amp;quot;0 /&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;THRUST&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/commands&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each command is also associated with a failsafe value which will be used if no controller is active, for example during initialization of the autopilot board.&lt;br /&gt;
&lt;br /&gt;
=== Supervision ===&lt;br /&gt;
&lt;br /&gt;
This section describes the &amp;quot;mixing&amp;quot; used for your particular multirotor configuration. This is not done using the &amp;quot;command_laws&amp;quot; section as on fixedwings as the supervision attempts to do deal with actuators saturations ( by giving priority to fast dynamics over slow ones ).&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;section name=&amp;quot;SUPERVISION&amp;quot; prefix=&amp;quot;SUPERVISION_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MIN_MOTOR&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAX_MOTOR&amp;quot; value=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_A&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_E&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_R&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NB_MOTOR&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SCALE&amp;quot; value=&amp;quot;256&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{  0  ,    0,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256,    0,    0 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256,  256, -256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Below are values for the common &amp;quot;plus cross&amp;quot;, &amp;quot;time cross&amp;quot; configurations.&lt;br /&gt;
&lt;br /&gt;
Assuming that the order of motors, described in the &amp;quot;servos&amp;quot; section is front, back, left, right.&lt;br /&gt;
{{Box Code|plus cross|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{  0  ,    0,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256,    0,    0 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256,  256, -256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Assuming that the order of motors, described in the &amp;quot;servos&amp;quot; section is NE, SE, SW, NW.&lt;br /&gt;
{{Box Code|time cross|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{ -256, -256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256, -256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256, -256,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you want compute mixing for a special configuration, please see the [[RotorcraftMixing]] page&lt;br /&gt;
&lt;br /&gt;
=== Bat === &lt;br /&gt;
This section give characteristics for the monitoring of the main power battery.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;CATASTROPHIC_BAT_LEVEL&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; (was previously &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;LOW_BATTERY&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt;) value defines the voltage at which the autopilot will lock the throttle at 0% in autonomous mode (kill_throttle mode). This value is also used by the ground server to issue a '''CATASTROPHIC''' alarm message on the bus (this message will be displayed in the console of the GCS).  &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;CRITIC&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;LOW&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; values will also used as threshold for '''CRITIC''' and '''WARNING''' alarms. They are optional and the respective defaults are 10.0 and 10.5V.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;MAX_BAT_LEVEL&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; may be specified to improve the display of the battery gauge in the strip or in &amp;quot;papgets&amp;quot;. Note that this definition is optional, with a default value of 12.5V.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;BAT&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MILLIAMP_PER_PERCENT&amp;quot; value=&amp;quot;0.86&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;CATASTROPHIC_BAT_LEVEL&amp;quot; value=&amp;quot;9.3&amp;quot; unit=&amp;quot;V&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MAX_BAT_LEVEL&amp;quot; value=&amp;quot;12.0&amp;quot; unit=&amp;quot;V&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;BATTERY_SENS&amp;quot; value=&amp;quot;0.246&amp;quot; integer=&amp;quot;16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;BATTERY_OFFSET&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulation ===&lt;br /&gt;
Values from this section can be used to tweak the SITL simulation. The NPS (New Paparazzi Sim) currently uses JSBSim as for the flight dynamic modeling, but other FDMs are possible.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;SIMULATOR&amp;quot; prefix=&amp;quot;NPS_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACTUATOR_NAMES&amp;quot; value=&amp;quot;{&amp;amp;quot;front_motor&amp;amp;quot;, &amp;amp;quot;back_motor&amp;amp;quot;, &amp;amp;quot;right_motor&amp;amp;quot;, &amp;amp;quot;left_motor&amp;amp;quot;}&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;INITIAL_CONDITITONS&amp;quot; value=&amp;quot;&amp;amp;quot;reset00&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;SENSORS_PARAMS&amp;quot; value=&amp;quot;&amp;amp;quot;nps_sensors_params_booz2_a1.h&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
The [[Modules|modules]] allow to add new code in a flexible way with initialisation, periodic and event functions without modifying the main AP loop.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;modules main_freq=&amp;quot;512&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;load name=&amp;quot;sys_mon.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/modules&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The main_freq parameter (in Hz) allows to specify the frequency of the main loop. Default is 60 Hz, for rotorcraft you should use 512 Hz.&lt;br /&gt;
&lt;br /&gt;
== Firmware and Hardware definitions ==&lt;br /&gt;
&lt;br /&gt;
This is one example of a pretty standard quadcopter firmware definition:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; board=&amp;quot;pc&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;subsystem name=&amp;quot;fdm&amp;quot;   type=&amp;quot;nps&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;MODEM_BAUD&amp;quot; value=&amp;quot;B57600&amp;quot;/&amp;gt;&amp;lt;!--this is already the default, add and change this line only if needed--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_ADAPT_HOVER&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GUIDANCE_H_USE_REF&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;radio_control&amp;quot; type=&amp;quot;ppm&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;actuators&amp;quot;     type=&amp;quot;mkk&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;imu&amp;quot;           type=&amp;quot;b2_v1.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;           type=&amp;quot;ublox&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ahrs&amp;quot;          type=&amp;quot;cmpl&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot;           type=&amp;quot;hff&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=== Select your Board ===&lt;br /&gt;
The airframe file must include the description of the controller board and it's low-level settings.&lt;br /&gt;
This is done in the &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;firmware&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; section by specifying the ''board'' attribute for the ''target'' &amp;quot;ap&amp;quot; (autopilot).&lt;br /&gt;
&lt;br /&gt;
Select the appropriate board:&lt;br /&gt;
&amp;quot;twog_1.0&amp;quot;, &amp;quot;tiny_2.11&amp;quot;, &amp;quot;tiny_2.1&amp;quot;, &amp;quot;tiny_1.1&amp;quot;, &amp;quot;tiny_0.99&amp;quot;, &amp;quot;booz_1.0&amp;quot;, &amp;quot;lisa_l_1.0&amp;quot;, &amp;quot;lisa_l_1.1&amp;quot;, &amp;quot;pc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; 			board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Radio Control ===&lt;br /&gt;
The Paparazzi autopilot can interface directly with the PWM signal from any standard hobby R/C receiver.  Signal decoding configuration settings for this are stored in the [[Radio_Control|Radio Control]] file.&lt;br /&gt;
&lt;br /&gt;
Just specify the appropriate subsystem in your firmware section:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; 			board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;radio_control&amp;quot;     type=&amp;quot;ppm&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
On the autopilots with a STM32 processor (lisa) you can use the type ''spektrum''.&lt;br /&gt;
&lt;br /&gt;
=== Telemetry (Modem) ===&lt;br /&gt;
The modem protocol and baud rate must be set in both the airframe file and ground station.  Any standard baud rate can be used, with 9600 being adequate and 57600 recommended for most users to allow high speed telemetry for more detailed flight data analysis.  The actual data rate is determined by the number of messages being sent and the period of each message as defined in &amp;lt;tt&amp;gt;conf/telemetry/default.xml&amp;lt;/tt&amp;gt;.  Those wishing to experiment with &amp;quot;alternative&amp;quot; modems can reduce the number and period of each telemetry message to fit within most any bandwidth constraint.&lt;br /&gt;
&lt;br /&gt;
Paparazzi supports the following modem protocols:&lt;br /&gt;
* Standard transparent serial (pprz) - this is compatible with all modems and can be used to connect the autopilot directly to a PC for testing without a modem.&lt;br /&gt;
* Maxstream API protocol (xbee) - compatible with all Maxstream modems including the 9XTend and Zigbee.  This protocol enables hardware addressing, allowing multiple aircraft to be managed from a single ground modem.&lt;br /&gt;
&lt;br /&gt;
Just specify the appropriate subsystem in your firmware section. You can currently choose between the types '''transparent''' and '''xbee_api'''.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The correct UART is already defined by default according to your board.&lt;br /&gt;
The default modem baudrate is 57600baud.&lt;br /&gt;
&lt;br /&gt;
If you use different baud rate or UART set the according parameters, e.g.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;MODEM_BAUD&amp;quot;          value=&amp;quot;B9600&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;MODEM_PORT&amp;quot;          value=&amp;quot;UART1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
The serial port settings must match that of the GPS and are configured here along with the necessary files to interpret the u-blox UBX binary protocol:&lt;br /&gt;
&lt;br /&gt;
For rotorcraft you can use the ublox type for both lea-4p and lea-5h.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;               type=&amp;quot;ublox&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The correct UART is already defined by default according to your board.&lt;br /&gt;
The default modem baudrate is 38400baud.&lt;br /&gt;
&lt;br /&gt;
If you use different baud rates set the according parameters, e.g.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;               type=&amp;quot;ublox&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;GPS_BAUD&amp;quot;          value=&amp;quot;B9600&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
* u-blox GPS modules are factory configured for 9600 baud, 38,400 baud is recommended along with the other required changes.  The GPS can be accessed directly thrugh the [[Compiling#USB_flashing|UART Tunnel]] and [[GPS#GPS_configuration_using_U-Center|Configured with u-center]]&lt;br /&gt;
&lt;br /&gt;
=== IMU ===&lt;br /&gt;
Add the imu subsystem with the type you are using. Currently possible IMU subsystems are &amp;quot;b2_v1.0&amp;quot;, &amp;quot;b2_v1.1&amp;quot;, &amp;quot;b2_v1.2&amp;quot;, &amp;quot;crista&amp;quot; and &amp;quot;aspirin&amp;quot;. Other IMUs can be used through modules or you can just add a subsystem makefile for your own.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 		board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;imu&amp;quot;       type=&amp;quot;b2_v1.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== AHRS ===&lt;br /&gt;
The AHRS subsystem specifies which attitude estimation filter you are using, e.g. for the complementary filter:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ahrs&amp;quot; type=&amp;quot;cmpl&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== INS ===&lt;br /&gt;
The optional INS (Integrated Navigation System) subsystem contains estimations filter to e.g. fuse GPS and IMU data for better position and speed estimates.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot; type=&amp;quot;hff&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
You can also compensate for GPS lag in hff (horizontal filter float) if it is known (in seconds):&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot; type=&amp;quot;hff&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;GPS_LAG=0.2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Beware, this code is kinda bad/ugly and should be replaced/improved!&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Rotorcraft_Configuration&amp;diff=8498</id>
		<title>Rotorcraft Configuration</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Rotorcraft_Configuration&amp;diff=8498"/>
		<updated>2011-01-27T14:23:21Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The airframe configuration file is located in &amp;lt;tt&amp;gt;conf/airframes&amp;lt;/tt&amp;gt; and contains&lt;br /&gt;
all the hardware and software settings for an aircraft. All gains, trims, and behavior settings are defined with standard XML elements. Optionally you can also add a raw [http://en.wikipedia.org/wiki/Makefile Makefile] section.&lt;br /&gt;
&lt;br /&gt;
== Autopilot modes ==&lt;br /&gt;
For rotorcrafts we have a lot of different modes that can be mapped to your 3-position switch (Manual, Auto1, Auto2).&lt;br /&gt;
The horizontal and vertical mode can be set differently as the following possible modes indicate:&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_FAILSAFE ===&lt;br /&gt;
This is a failsafe mode that gets triggered if:&lt;br /&gt;
* RC signal is lost (and you are not in KILL or NAV mode)&lt;br /&gt;
* GPS and RC is lost in NAV mode&lt;br /&gt;
The autopilot will level the rotorcraft out (setpoints to zero pitch and roll angles) and descend at 0.5m/s downwards.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_KILL ===&lt;br /&gt;
Motors are simply switched off.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_RATE_DIRECT ===&lt;br /&gt;
This is basically the &amp;quot;most&amp;quot; manual mode you can get. You control not the attitude (roll and pitch angles) but the rotation rate. You also set the throttle directly with your RC.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_ATTITUDE_DIRECT ===&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles), but the throttle directly proportional to your stick position.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_RATE_RC_CLIMB ===&lt;br /&gt;
You control the rotation rate and the vertical speed according to your throttle stick position. If you have your throttle stick in the middle position, the altitude is keept, down goes down at a speed proportional to your stick position (same for up). In this mode it makes sense to mount the spring for your throttle stick so it recenter itself.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_ATTITUDE_RC_CLIMB ===&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and the vertical speed according to your throttle stick position. If you have your throttle stick in the middle position, the altitude is keept, down goes down at a speed proportional to your stick position (same for up). In this mode it makes sense to mount the spring for your throttle stick so it recenter itself.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_ATTITUDE_CLIMB ===&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and the vertical speed. The vertical speed is set via fms (e.g. joystick).&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_RATE_Z_HOLD ===&lt;br /&gt;
You control the rotation rate and it holds the altitude you were at when entering this mode. Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_ATTITUDE_Z_HOLD ===&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and it holds the altitude you were at when entering this mode. Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_HOVER_DIRECT ===&lt;br /&gt;
The rotorcraft hovers at the horizontal position you were at when entering this mode (position control). You still set the throttle directly with your RC.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_HOVER_CLIMB ===&lt;br /&gt;
The rotorcraft hovers at the position you were at when entering this mode (position control). The vertical speed is set via fms (e.g. joystick).&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_HOVER_Z_HOLD ===&lt;br /&gt;
The rotorcraft hovers at the 3D position you were at when entering this mode (position and altitude control). Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_NAV ===&lt;br /&gt;
Full navigation mode. The rotorcraft follows your flightplan.&lt;br /&gt;
&lt;br /&gt;
== XML Parameters ==&lt;br /&gt;
&lt;br /&gt;
=== Mode ===&lt;br /&gt;
In the mode section you can set the autopilot modes associated with your 3-way mode switch on your RC.&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;MODE&amp;quot; prefix=&amp;quot;MODE_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MANUAL&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_DIRECT&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AUTO1&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_Z_HOLD&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AUTO2&amp;quot; value=&amp;quot;AP_MODE_HOVER_Z_HOLD&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;commands&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; lists the abstract commands you need to control the aircraft. For most multicopter you just need:&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;commands&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;PITCH&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;ROLL&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;YAW&amp;quot; failsafe_value=&amp;quot;0 /&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;THRUST&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/commands&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each command is also associated with a failsafe value which will be used if no controller is active, for example during initialization of the autopilot board.&lt;br /&gt;
&lt;br /&gt;
=== Supervision ===&lt;br /&gt;
&lt;br /&gt;
This section describes the &amp;quot;mixing&amp;quot; used for your particular multirotor configuration. This is not done using the &amp;quot;command_laws&amp;quot; section as on fixedwings as the supervision attempts to do deal with actuators saturations ( by giving priority to fast dynamics over slow ones ).&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;section name=&amp;quot;SUPERVISION&amp;quot; prefix=&amp;quot;SUPERVISION_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MIN_MOTOR&amp;quot; value=&amp;quot;3&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAX_MOTOR&amp;quot; value=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_A&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_E&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TRIM_R&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NB_MOTOR&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SCALE&amp;quot; value=&amp;quot;256&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{  0  ,    0,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256,    0,    0 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256,  256, -256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Below are values for the common &amp;quot;plus cross&amp;quot;, &amp;quot;time cross&amp;quot; configurations.&lt;br /&gt;
&lt;br /&gt;
Assuming that the order of motors, described in the &amp;quot;servos&amp;quot; section is front, back, left, right.&lt;br /&gt;
{{Box Code|plus cross|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{  0  ,    0,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256,    0,    0 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256,  256, -256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Assuming that the order of motors, described in the &amp;quot;servos&amp;quot; section is NE, SE, SW, NW.&lt;br /&gt;
{{Box Code|time cross|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ROLL_COEF&amp;quot;   value=&amp;quot;{ -256, -256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PITCH_COEF&amp;quot;  value=&amp;quot;{  256, -256, -256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;YAW_COEF&amp;quot;    value=&amp;quot;{  256, -256,  256, -256 }&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THRUST_COEF&amp;quot; value=&amp;quot;{  256,  256,  256,  256 }&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
If you want compute mixing for a special configuration, please see the [[RotorcraftMixing]] page&lt;br /&gt;
&lt;br /&gt;
=== Bat === &lt;br /&gt;
This section give characteristics for the monitoring of the main power battery.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;CATASTROPHIC_BAT_LEVEL&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; (was previously &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;LOW_BATTERY&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt;) value defines the voltage at which the autopilot will lock the throttle at 0% in autonomous mode (kill_throttle mode). This value is also used by the ground server to issue a '''CATASTROPHIC''' alarm message on the bus (this message will be displayed in the console of the GCS).  &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;CRITIC&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;LOW&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; values will also used as threshold for '''CRITIC''' and '''WARNING''' alarms. They are optional and the respective defaults are 10.0 and 10.5V.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;MAX_BAT_LEVEL&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; may be specified to improve the display of the battery gauge in the strip or in &amp;quot;papgets&amp;quot;. Note that this definition is optional, with a default value of 12.5V.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;BAT&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MILLIAMP_PER_PERCENT&amp;quot; value=&amp;quot;0.86&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;CATASTROPHIC_BAT_LEVEL&amp;quot; value=&amp;quot;9.3&amp;quot; unit=&amp;quot;V&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MAX_BAT_LEVEL&amp;quot; value=&amp;quot;12.0&amp;quot; unit=&amp;quot;V&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;BATTERY_SENS&amp;quot; value=&amp;quot;0.246&amp;quot; integer=&amp;quot;16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;BATTERY_OFFSET&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulation ===&lt;br /&gt;
Values from this section can be used to tweak the SITL simulation. The NPS (New Paparazzi Sim) currently uses JSBSim as for the flight dynamic modeling, but other FDMs are possible.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;SIMULATOR&amp;quot; prefix=&amp;quot;NPS_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACTUATOR_NAMES&amp;quot; value=&amp;quot;{&amp;amp;quot;front_motor&amp;amp;quot;, &amp;amp;quot;back_motor&amp;amp;quot;, &amp;amp;quot;right_motor&amp;amp;quot;, &amp;amp;quot;left_motor&amp;amp;quot;}&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;INITIAL_CONDITITONS&amp;quot; value=&amp;quot;&amp;amp;quot;reset00&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;SENSORS_PARAMS&amp;quot; value=&amp;quot;&amp;amp;quot;nps_sensors_params_booz2_a1.h&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
The [[Modules|modules]] allow to add new code in a flexible way with initialisation, periodic and event functions without modifying the main AP loop.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;modules main_freq=&amp;quot;512&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;load name=&amp;quot;sys_mon.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/modules&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The main_freq parameter (in Hz) allows to specify the frequency of the main loop. Default is 60 Hz, for rotorcraft you should use 512 Hz.&lt;br /&gt;
&lt;br /&gt;
== Firmware and Hardware definitions ==&lt;br /&gt;
&lt;br /&gt;
This is one example of a pretty standard quadcopter firmware definition:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; board=&amp;quot;pc&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;subsystem name=&amp;quot;fdm&amp;quot;   type=&amp;quot;nps&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;MODEM_BAUD&amp;quot; value=&amp;quot;B57600&amp;quot;/&amp;gt;&amp;lt;!--this is already the default, add and change this line only if needed--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_ADAPT_HOVER&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GUIDANCE_H_USE_REF&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;radio_control&amp;quot; type=&amp;quot;ppm&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;actuators&amp;quot;     type=&amp;quot;mkk&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;imu&amp;quot;           type=&amp;quot;b2_v1.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;           type=&amp;quot;ublox&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ahrs&amp;quot;          type=&amp;quot;cmpl&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot;           type=&amp;quot;hff&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=== Select your Board ===&lt;br /&gt;
The airframe file must include the description of the controller board and it's low-level settings.&lt;br /&gt;
This is done in the &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;firmware&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; section by specifying the ''board'' attribute for the ''target'' &amp;quot;ap&amp;quot; (autopilot).&lt;br /&gt;
&lt;br /&gt;
Select the appropriate board:&lt;br /&gt;
&amp;quot;twog_1.0&amp;quot;, &amp;quot;tiny_2.11&amp;quot;, &amp;quot;tiny_2.1&amp;quot;, &amp;quot;tiny_1.1&amp;quot;, &amp;quot;tiny_0.99&amp;quot;, &amp;quot;booz_1.0&amp;quot;, &amp;quot;lisa_l_1.0&amp;quot;, &amp;quot;lisa_l_1.1&amp;quot;, &amp;quot;pc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; 			board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Radio Control ===&lt;br /&gt;
The Paparazzi autopilot can interface directly with the PWM signal from any standard hobby R/C receiver.  Signal decoding configuration settings for this are stored in the [[Radio_Control|Radio Control]] file.&lt;br /&gt;
&lt;br /&gt;
Just specify the appropriate subsystem in your firmware section:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; 			board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;radio_control&amp;quot;     type=&amp;quot;ppm&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
On the autopilots with a STM32 processor (lisa) you can use the type ''spektrum''.&lt;br /&gt;
&lt;br /&gt;
=== Telemetry (Modem) ===&lt;br /&gt;
The modem protocol and baud rate must be set in both the airframe file and ground station.  Any standard baud rate can be used, with 9600 being adequate and 57600 recommended for most users to allow high speed telemetry for more detailed flight data analysis.  The actual data rate is determined by the number of messages being sent and the period of each message as defined in &amp;lt;tt&amp;gt;conf/telemetry/default.xml&amp;lt;/tt&amp;gt;.  Those wishing to experiment with &amp;quot;alternative&amp;quot; modems can reduce the number and period of each telemetry message to fit within most any bandwidth constraint.&lt;br /&gt;
&lt;br /&gt;
Paparazzi supports the following modem protocols:&lt;br /&gt;
* Standard transparent serial (pprz) - this is compatible with all modems and can be used to connect the autopilot directly to a PC for testing without a modem.&lt;br /&gt;
* Maxstream API protocol (xbee) - compatible with all Maxstream modems including the 9XTend and Zigbee.  This protocol enables hardware addressing, allowing multiple aircraft to be managed from a single ground modem.&lt;br /&gt;
&lt;br /&gt;
Just specify the appropriate subsystem in your firmware section. You can currently choose between the types '''transparent''' and '''xbee_api'''.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The correct UART is already defined by default according to your board.&lt;br /&gt;
The default modem baudrate is 57600baud.&lt;br /&gt;
&lt;br /&gt;
If you use different baud rate or UART set the according parameters, e.g.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;MODEM_BAUD&amp;quot;          value=&amp;quot;B9600&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;MODEM_PORT&amp;quot;          value=&amp;quot;UART1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
The serial port settings must match that of the GPS and are configured here along with the necessary files to interpret the u-blox UBX binary protocol:&lt;br /&gt;
&lt;br /&gt;
For rotorcraft you can use the ublox type for both lea-4p and lea-5h.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;               type=&amp;quot;ublox&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The correct UART is already defined by default according to your board.&lt;br /&gt;
The default modem baudrate is 38400baud.&lt;br /&gt;
&lt;br /&gt;
If you use different baud rates set the according parameters, e.g.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;               type=&amp;quot;ublox&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;GPS_BAUD&amp;quot;          value=&amp;quot;B9600&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
* u-blox GPS modules are factory configured for 9600 baud, 38,400 baud is recommended along with the other required changes.  The GPS can be accessed directly thrugh the [[Compiling#USB_flashing|UART Tunnel]] and [[GPS#GPS_configuration_using_U-Center|Configured with u-center]]&lt;br /&gt;
&lt;br /&gt;
=== IMU ===&lt;br /&gt;
Add the imu subsystem with the type you are using. Currently possible IMU subsystems are &amp;quot;b2_v1.0&amp;quot;, &amp;quot;b2_v1.1&amp;quot;, &amp;quot;b2_v1.2&amp;quot;, &amp;quot;crista&amp;quot; and &amp;quot;aspirin&amp;quot;. Other IMUs can be used through modules or you can just add a subsystem makefile for your own.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 		board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;imu&amp;quot;       type=&amp;quot;b2_v1.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== AHRS ===&lt;br /&gt;
The AHRS subsystem specifies which attitude estimation filter you are using, e.g. for the complementary filter:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ahrs&amp;quot; type=&amp;quot;cmpl&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== INS ===&lt;br /&gt;
The optional INS (Integrated Navigation System) subsystem contains estimations filter to e.g. fuse GPS and IMU data for better position and speed estimates.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot; type=&amp;quot;hff&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
You can also compensate for GPS lag in hff (horizontal filter float) if it is known (in seconds):&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot; type=&amp;quot;hff&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;GPS_LAG=0.2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Beware, this code is kinda bad/ugly and should be replaced/improved!&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Rotorcraft_Configuration&amp;diff=8497</id>
		<title>Rotorcraft Configuration</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Rotorcraft_Configuration&amp;diff=8497"/>
		<updated>2011-01-27T13:24:08Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The airframe configuration file is located in &amp;lt;tt&amp;gt;conf/airframes&amp;lt;/tt&amp;gt; and contains&lt;br /&gt;
all the hardware and software settings for an aircraft. All gains, trims, and behavior settings are defined with standard XML elements. Optionally you can also add a raw [http://en.wikipedia.org/wiki/Makefile Makefile] section.&lt;br /&gt;
&lt;br /&gt;
== Autopilot modes ==&lt;br /&gt;
For rotorcrafts we have a lot of different modes that can be mapped to your 3-position switch (Manual, Auto1, Auto2).&lt;br /&gt;
The horizontal and vertical mode can be set differently as the following possible modes indicate:&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_FAILSAFE ===&lt;br /&gt;
This is a failsafe mode that gets triggered if:&lt;br /&gt;
* RC signal is lost (and you are not in KILL or NAV mode)&lt;br /&gt;
* GPS and RC is lost in NAV mode&lt;br /&gt;
The autopilot will level the rotorcraft out (setpoints to zero pitch and roll angles) and descend at 0.5m/s downwards.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_KILL ===&lt;br /&gt;
Motors are simply switched off.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_RATE_DIRECT ===&lt;br /&gt;
This is basically the &amp;quot;most&amp;quot; manual mode you can get. You control not the attitude (roll and pitch angles) but the rotation rate. You also set the throttle directly with your RC.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_ATTITUDE_DIRECT ===&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles), but the throttle directly proportional to your stick position.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_RATE_RC_CLIMB ===&lt;br /&gt;
You control the rotation rate and the vertical speed according to your throttle stick position. If you have your throttle stick in the middle position, the altitude is keept, down goes down at a speed proportional to your stick position (same for up). In this mode it makes sense to mount the spring for your throttle stick so it recenter itself.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_ATTITUDE_RC_CLIMB ===&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and the vertical speed according to your throttle stick position. If you have your throttle stick in the middle position, the altitude is keept, down goes down at a speed proportional to your stick position (same for up). In this mode it makes sense to mount the spring for your throttle stick so it recenter itself.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_ATTITUDE_CLIMB ===&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and the vertical speed. The vertical speed is set via fms (e.g. joystick).&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_RATE_Z_HOLD ===&lt;br /&gt;
You control the rotation rate and it holds the altitude you were at when entering this mode. Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_ATTITUDE_Z_HOLD ===&lt;br /&gt;
You control the attitude (roll, pitch and yaw angles) and it holds the altitude you were at when entering this mode. Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_HOVER_DIRECT ===&lt;br /&gt;
The rotorcraft hovers at the horizontal position you were at when entering this mode (position control). You still set the throttle directly with your RC.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_HOVER_CLIMB ===&lt;br /&gt;
The rotorcraft hovers at the position you were at when entering this mode (position control). The vertical speed is set via fms (e.g. joystick).&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_HOVER_Z_HOLD ===&lt;br /&gt;
The rotorcraft hovers at the 3D position you were at when entering this mode (position and altitude control). Your throttle stick position still limits the max throttle authority, so you should push your throttle stick up after entering this mode so the vertical controller has some &amp;quot;room&amp;quot; to stabilize the altitude. Should something weird happen you can limit the max thrust by taking throttle back.&lt;br /&gt;
&lt;br /&gt;
=== AP_MODE_NAV ===&lt;br /&gt;
Full navigation mode. The rotorcraft follows your flightplan.&lt;br /&gt;
&lt;br /&gt;
== XML Parameters ==&lt;br /&gt;
&lt;br /&gt;
=== Mode ===&lt;br /&gt;
In the mode section you can set the autopilot modes associated with your 3-way mode switch on your RC.&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;MODE&amp;quot; prefix=&amp;quot;MODE_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MANUAL&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_DIRECT&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AUTO1&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_Z_HOLD&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AUTO2&amp;quot; value=&amp;quot;AP_MODE_HOVER_Z_HOLD&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;commands&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; lists the abstract commands you need to control the aircraft. For most multicopter you just need:&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;commands&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;PITCH&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;ROLL&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;YAW&amp;quot; failsafe_value=&amp;quot;0 /&amp;gt;&lt;br /&gt;
   &amp;lt;axis name=&amp;quot;THRUST&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/commands&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each command is also associated with a failsafe value which will be used if no controller is active, for example during initialization of the autopilot board.&lt;br /&gt;
&lt;br /&gt;
=== Rotor Configurations and Mixing ===&lt;br /&gt;
&lt;br /&gt;
=== Bat === &lt;br /&gt;
This section give characteristics for the monitoring of the main power battery.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;CATASTROPHIC_BAT_LEVEL&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; (was previously &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;LOW_BATTERY&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt;) value defines the voltage at which the autopilot will lock the throttle at 0% in autonomous mode (kill_throttle mode). This value is also used by the ground server to issue a '''CATASTROPHIC''' alarm message on the bus (this message will be displayed in the console of the GCS).  &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;CRITIC&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;LOW&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; values will also used as threshold for '''CRITIC''' and '''WARNING''' alarms. They are optional and the respective defaults are 10.0 and 10.5V.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;MAX_BAT_LEVEL&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; may be specified to improve the display of the battery gauge in the strip or in &amp;quot;papgets&amp;quot;. Note that this definition is optional, with a default value of 12.5V.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;BAT&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MILLIAMP_PER_PERCENT&amp;quot; value=&amp;quot;0.86&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;CATASTROPHIC_BAT_LEVEL&amp;quot; value=&amp;quot;9.3&amp;quot; unit=&amp;quot;V&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MAX_BAT_LEVEL&amp;quot; value=&amp;quot;12.0&amp;quot; unit=&amp;quot;V&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;BATTERY_SENS&amp;quot; value=&amp;quot;0.246&amp;quot; integer=&amp;quot;16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;BATTERY_OFFSET&amp;quot; value=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulation ===&lt;br /&gt;
Values from this section can be used to tweak the SITL simulation. The NPS (New Paparazzi Sim) currently uses JSBSim as for the flight dynamic modeling, but other FDMs are possible.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;section name=&amp;quot;SIMULATOR&amp;quot; prefix=&amp;quot;NPS_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACTUATOR_NAMES&amp;quot; value=&amp;quot;{&amp;amp;quot;front_motor&amp;amp;quot;, &amp;amp;quot;back_motor&amp;amp;quot;, &amp;amp;quot;right_motor&amp;amp;quot;, &amp;amp;quot;left_motor&amp;amp;quot;}&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;INITIAL_CONDITITONS&amp;quot; value=&amp;quot;&amp;amp;quot;reset00&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;SENSORS_PARAMS&amp;quot; value=&amp;quot;&amp;amp;quot;nps_sensors_params_booz2_a1.h&amp;amp;quot;&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/section&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modules ===&lt;br /&gt;
The [[Modules|modules]] allow to add new code in a flexible way with initialisation, periodic and event functions without modifying the main AP loop.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tt&amp;gt;&amp;lt;modules main_freq=&amp;quot;512&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;load name=&amp;quot;sys_mon.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &amp;lt;/modules&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The main_freq parameter (in Hz) allows to specify the frequency of the main loop. Default is 60 Hz, for rotorcraft you should use 512 Hz.&lt;br /&gt;
&lt;br /&gt;
== Firmware and Hardware definitions ==&lt;br /&gt;
&lt;br /&gt;
This is one example of a pretty standard quadcopter firmware definition:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; board=&amp;quot;pc&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;subsystem name=&amp;quot;fdm&amp;quot;   type=&amp;quot;nps&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/target&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;MODEM_BAUD&amp;quot; value=&amp;quot;B57600&amp;quot;/&amp;gt;&amp;lt;!--this is already the default, add and change this line only if needed--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_ADAPT_HOVER&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GUIDANCE_H_USE_REF&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;radio_control&amp;quot; type=&amp;quot;ppm&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;actuators&amp;quot;     type=&amp;quot;mkk&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;imu&amp;quot;           type=&amp;quot;b2_v1.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;           type=&amp;quot;ublox&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ahrs&amp;quot;          type=&amp;quot;cmpl&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot;           type=&amp;quot;hff&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=== Select your Board ===&lt;br /&gt;
The airframe file must include the description of the controller board and it's low-level settings.&lt;br /&gt;
This is done in the &amp;lt;b&amp;gt;&amp;lt;tt&amp;gt;firmware&amp;lt;/tt&amp;gt;&amp;lt;/b&amp;gt; section by specifying the ''board'' attribute for the ''target'' &amp;quot;ap&amp;quot; (autopilot).&lt;br /&gt;
&lt;br /&gt;
Select the appropriate board:&lt;br /&gt;
&amp;quot;twog_1.0&amp;quot;, &amp;quot;tiny_2.11&amp;quot;, &amp;quot;tiny_2.1&amp;quot;, &amp;quot;tiny_1.1&amp;quot;, &amp;quot;tiny_0.99&amp;quot;, &amp;quot;booz_1.0&amp;quot;, &amp;quot;lisa_l_1.0&amp;quot;, &amp;quot;lisa_l_1.1&amp;quot;, &amp;quot;pc&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; 			board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Radio Control ===&lt;br /&gt;
The Paparazzi autopilot can interface directly with the PWM signal from any standard hobby R/C receiver.  Signal decoding configuration settings for this are stored in the [[Radio_Control|Radio Control]] file.&lt;br /&gt;
&lt;br /&gt;
Just specify the appropriate subsystem in your firmware section:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;sim&amp;quot; 			board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;radio_control&amp;quot;     type=&amp;quot;ppm&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
On the autopilots with a STM32 processor (lisa) you can use the type ''spektrum''.&lt;br /&gt;
&lt;br /&gt;
=== Telemetry (Modem) ===&lt;br /&gt;
The modem protocol and baud rate must be set in both the airframe file and ground station.  Any standard baud rate can be used, with 9600 being adequate and 57600 recommended for most users to allow high speed telemetry for more detailed flight data analysis.  The actual data rate is determined by the number of messages being sent and the period of each message as defined in &amp;lt;tt&amp;gt;conf/telemetry/default.xml&amp;lt;/tt&amp;gt;.  Those wishing to experiment with &amp;quot;alternative&amp;quot; modems can reduce the number and period of each telemetry message to fit within most any bandwidth constraint.&lt;br /&gt;
&lt;br /&gt;
Paparazzi supports the following modem protocols:&lt;br /&gt;
* Standard transparent serial (pprz) - this is compatible with all modems and can be used to connect the autopilot directly to a PC for testing without a modem.&lt;br /&gt;
* Maxstream API protocol (xbee) - compatible with all Maxstream modems including the 9XTend and Zigbee.  This protocol enables hardware addressing, allowing multiple aircraft to be managed from a single ground modem.&lt;br /&gt;
&lt;br /&gt;
Just specify the appropriate subsystem in your firmware section. You can currently choose between the types '''transparent''' and '''xbee_api'''.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The correct UART is already defined by default according to your board.&lt;br /&gt;
The default modem baudrate is 57600baud.&lt;br /&gt;
&lt;br /&gt;
If you use different baud rate or UART set the according parameters, e.g.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;telemetry&amp;quot;     type=&amp;quot;transparent&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;MODEM_BAUD&amp;quot;          value=&amp;quot;B9600&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;MODEM_PORT&amp;quot;          value=&amp;quot;UART1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== GPS ===&lt;br /&gt;
The serial port settings must match that of the GPS and are configured here along with the necessary files to interpret the u-blox UBX binary protocol:&lt;br /&gt;
&lt;br /&gt;
For rotorcraft you can use the ublox type for both lea-4p and lea-5h.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;               type=&amp;quot;ublox&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The correct UART is already defined by default according to your board.&lt;br /&gt;
The default modem baudrate is 38400baud.&lt;br /&gt;
&lt;br /&gt;
If you use different baud rates set the according parameters, e.g.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 			board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;gps&amp;quot;               type=&amp;quot;ublox&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;GPS_BAUD&amp;quot;          value=&amp;quot;B9600&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
* u-blox GPS modules are factory configured for 9600 baud, 38,400 baud is recommended along with the other required changes.  The GPS can be accessed directly thrugh the [[Compiling#USB_flashing|UART Tunnel]] and [[GPS#GPS_configuration_using_U-Center|Configured with u-center]]&lt;br /&gt;
&lt;br /&gt;
=== IMU ===&lt;br /&gt;
Add the imu subsystem with the type you are using. Currently possible IMU subsystems are &amp;quot;b2_v1.0&amp;quot;, &amp;quot;b2_v1.1&amp;quot;, &amp;quot;b2_v1.2&amp;quot;, &amp;quot;crista&amp;quot; and &amp;quot;aspirin&amp;quot;. Other IMUs can be used through modules or you can just add a subsystem makefile for your own.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; 		board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;imu&amp;quot;       type=&amp;quot;b2_v1.0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== AHRS ===&lt;br /&gt;
The AHRS subsystem specifies which attitude estimation filter you are using, e.g. for the complementary filter:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ahrs&amp;quot; type=&amp;quot;cmpl&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== INS ===&lt;br /&gt;
The optional INS (Integrated Navigation System) subsystem contains estimations filter to e.g. fuse GPS and IMU data for better position and speed estimates.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot; type=&amp;quot;hff&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
You can also compensate for GPS lag in hff (horizontal filter float) if it is known (in seconds):&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;booz_1.0&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
    &amp;lt;subsystem name=&amp;quot;ins&amp;quot; type=&amp;quot;hff&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;GPS_LAG=0.2&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/subsystem&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Beware, this code is kinda bad/ugly and should be replaced/improved!&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Qwip&amp;diff=8188</id>
		<title>Qwip</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Qwip&amp;diff=8188"/>
		<updated>2010-12-16T15:07:46Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== QWIP, a Quick Web Interface for Paparazzi ==&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Quickstart ===&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=FirmwareArchitecture&amp;diff=8187</id>
		<title>FirmwareArchitecture</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=FirmwareArchitecture&amp;diff=8187"/>
		<updated>2010-12-16T13:50:07Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modules ==&lt;br /&gt;
Modules use code generation in order to allow people to use them by only editing the vehicle's xml configuration as opposed to changing/adding to  the code of the autopilot. Typically, function calls are generated for initialisation and in the mainloop for timers (periodic in paparazzi slang) and events. &lt;br /&gt;
&lt;br /&gt;
[[Modules | modules page]]&lt;br /&gt;
&lt;br /&gt;
== Subsystems ==&lt;br /&gt;
Subsystems are just a convention used to provide several implementations of a a peripheral ( like microcontroller peripherals, an exteral imu board ...), protocol ( gps, communications, ...) or algorithm ( control, estimation, ...). Function calls are written &amp;quot;by hand&amp;quot; and the build system takes care to compile the particular implementation. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
Modules naturally provide the &amp;quot;several implementations&amp;quot; feature of the Subsystems. So, ideally we could have a &amp;quot;generic&amp;quot; main.c consisting only in calls to the generated functions.&lt;br /&gt;
This has the advantage of providing flexibility for specifying timing parameters from the xml, like for example the frequency of control or estimation algorithm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nevertheless, care should be taken that switching to a &amp;quot;module only&amp;quot; configuration doesn't become detrimental to the readability and debugability of the code.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fixedwing and Rotorcraft use different gps code and we'll have to decide when we merge if we make it a module or a subsystem.&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=FirmwareArchitecture&amp;diff=8186</id>
		<title>FirmwareArchitecture</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=FirmwareArchitecture&amp;diff=8186"/>
		<updated>2010-12-16T13:49:52Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modules ==&lt;br /&gt;
Modules use code generation in order to allow people to use them by only editing the vehicle's xml configuration as opposed to changing/adding to  the code of the autopilot. Typically, function calls are generated for initialisation and in the mainloop for timers (periodic in paparazzi slang) and events. &lt;br /&gt;
&lt;br /&gt;
[[Modules | modules page]]&lt;br /&gt;
&lt;br /&gt;
== Subsystems ==&lt;br /&gt;
Subsystems are just a convention used to provide several implementations of a a peripheral ( like microcontroller peripherals, an exteral imu board ...), protocol ( gps, communications, ...) or algorithm ( control, estimation, ...). Function calls are written &amp;quot;by hand&amp;quot; and the build system takes care to compile the particular implementation. &lt;br /&gt;
&lt;br /&gt;
Modules naturally provide the &amp;quot;several implementations&amp;quot; feature of the Subsystems. So, ideally we could have a &amp;quot;generic&amp;quot; main.c consisting only in calls to the generated functions.&lt;br /&gt;
This has the advantage of providing flexibility for specifying timing parameters from the xml, like for example the frequency of control or estimation algorithm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nevertheless, care should be taken that switching to a &amp;quot;module only&amp;quot; configuration doesn't become detrimental to the readability and debugability of the code.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fixedwing and Rotorcraft use different gps code and we'll have to decide when we merge if we make it a module or a subsystem.&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=FirmwareArchitecture&amp;diff=8183</id>
		<title>FirmwareArchitecture</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=FirmwareArchitecture&amp;diff=8183"/>
		<updated>2010-12-16T12:43:08Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modules use code generation in order to allow people to use them by only editing the vehicle's xml configuration as opposed to changing/adding to  the code of the autopilot. Typically, function calls are generated for initialisation and in the mainloop for timers (periodic in paparazzi slang) and events. &lt;br /&gt;
&lt;br /&gt;
Subsystems are just a convention used to provide several implementations of a a peripheral ( like microcontroller peripherals, an exteral imu board ...), protocol ( gps, communications, ...) or algorithm ( control, estimation, ...). Function calls are written &amp;quot;by hand&amp;quot; and the build system takes care to compile the particular implementation. &lt;br /&gt;
&lt;br /&gt;
Modules naturally provide the &amp;quot;several implementations&amp;quot; feature of the Subsystems. So, ideally we could have a &amp;quot;generic&amp;quot; main.c consisting only in calls to the generated functions.&lt;br /&gt;
This has the advantage of providing flexibility for specifying timing parameters from the xml, like for example the frequency of control or estimation algorithm.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nevertheless, care should be taken that switching to a &amp;quot;module only&amp;quot; configuration doesn't become detrimental to the readability and debugability of the code.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fixedwing and Rotorcraft use different gps code and we'll have to decide when we merge if we make it a module or a subsystem.&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=File:Aspirin_small.png&amp;diff=7909</id>
		<title>File:Aspirin small.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=File:Aspirin_small.png&amp;diff=7909"/>
		<updated>2010-10-03T11:44:03Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Lisa&amp;diff=7908</id>
		<title>Lisa</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Lisa&amp;diff=7908"/>
		<updated>2010-10-03T11:43:29Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lisa ( the Lost Illusions Serendipitous Autopilot) is a new range of autopilots based on [http://www.st.com/mcu/inchtml-pages-stm32.html STM32] microcontrollers ( CortexM3@72Mhz ) designed to run Paparazzi.&lt;br /&gt;
There's no such thing as a perfect autopilot, only autopilots adapted to a particular purpose. This is the reason why Lisa comes in different flavors for different usages. &lt;br /&gt;
&lt;br /&gt;
The first members of the family are:&lt;br /&gt;
&lt;br /&gt;
*Lisa/L, a design where the STM32 is associated to a gumstix [http://www.gumstix.net/Setup-and-Programming/cat/Overo-Setup-and-Programming/111.html Overo].&lt;br /&gt;
*Lisa/M, a design focusing on cost and simplicity.&lt;br /&gt;
&lt;br /&gt;
=Lisa/L=&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
Lisa/L is a dual processor board autopilot designed to allow the possibility of using Linux for Paparazzi airborne code.&lt;br /&gt;
&lt;br /&gt;
[[Image:lisa_l_bloc_diag_simple.png|360px]]&lt;br /&gt;
[[Image:lisa_l_top.png|360px]] [[Image:lisa_l_bot.png|360px]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
The documentation about Lisa/L has been split in two: You can have a look at the [[User/LisaL]] user manual or the [[Dev/LisaL]] developer manual or look at pictures on the [[LisaL_Gallery]] gallery page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Lisa/M =&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Lisa/M is a 50*25mm single processor board, with 7 full size servo connectors. This board is about the size of a conventional RC receiver and features a footprint for an aspirin IMU and an affordable barometer. Intended usages range from a CAN servo driver to a full blown autopilot or a flybarless heli controller.&lt;br /&gt;
&lt;br /&gt;
[[Image:lisa_m_top_small.png|360px]] [[Image:lisa_m_bot_small.png|360px]] [[Image:aspirin_small.png|360px]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Lisa/M is only at the stage of prototype. Documentation will follow as soon as the board reaches production stage.&lt;br /&gt;
&lt;br /&gt;
= Lisa/S =&lt;br /&gt;
&lt;br /&gt;
Lisa/S is only a project at the moment. The focus for this design is size, weight and power consumption. The intent is to produce an autopilot suited for the smallest airframes.&lt;br /&gt;
For now just a CAD rendering to wet your appetite.&lt;br /&gt;
[[Image:lisa_s_cad.png|360px]]&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Lisa&amp;diff=7893</id>
		<title>Lisa</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Lisa&amp;diff=7893"/>
		<updated>2010-09-29T18:51:41Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lisa ( the Lost Illusions Serendipitous Autopilot) is a new range of autopilots based on [http://www.st.com/mcu/inchtml-pages-stm32.html STM32] microcontrollers ( CortexM3@72Mhz ) designed to run Paparazzi.&lt;br /&gt;
There's no such thing as a perfect autopilot, only autopilots adapted to a particular purpose. This is the reason why Lisa comes in different flavors for different usages. &lt;br /&gt;
&lt;br /&gt;
The first members of the family are:&lt;br /&gt;
&lt;br /&gt;
*Lisa/L, a design where the STM32 is associated to a gumstix [http://www.gumstix.net/Setup-and-Programming/cat/Overo-Setup-and-Programming/111.html Overo].&lt;br /&gt;
*Lisa/M, a design focusing on cost and simplicity.&lt;br /&gt;
&lt;br /&gt;
=Lisa/L=&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
Lisa/L is a dual processor board autopilot designed to allow the possibility of using Linux for Paparazzi airborne code.&lt;br /&gt;
&lt;br /&gt;
[[Image:lisa_l_bloc_diag_simple.png|360px]]&lt;br /&gt;
[[Image:lisa_l_top.png|360px]] [[Image:lisa_l_bot.png|360px]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
The documentation about Lisa/L has been split in two: You can have a look at the [[User/LisaL]] user manual or the [[Dev/LisaL]] developer manual or look at pictures on the [[LisaL_Gallery]] gallery page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Lisa/M =&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Lisa/M is a 50*25mm single processor board, with 7 full size servo connectors. This board is about the size of a conventional RC receiver and features a footprint for an aspirin IMU and an affordable barometer. Intended usages range from a CAN servo driver to a full blown autopilot or a flybarless heli controller.&lt;br /&gt;
&lt;br /&gt;
[[Image:lisa_m_top_small.png|360px]] [[Image:lisa_m_bot_small.png|360px]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Lisa/M is only at the stage of prototype. Documentation will follow as soon as the board reaches production stage.&lt;br /&gt;
&lt;br /&gt;
= Lisa/S =&lt;br /&gt;
&lt;br /&gt;
Lisa/S is only a project at the moment. The focus for this design is size, weight and power consumption. The intent is to produce an autopilot suited for the smallest airframes.&lt;br /&gt;
For now just a CAD rendering to wet your appetite.&lt;br /&gt;
[[Image:lisa_s_cad.png|360px]]&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Lisa&amp;diff=7881</id>
		<title>Lisa</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Lisa&amp;diff=7881"/>
		<updated>2010-09-29T10:42:50Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lisa ( the Lost Illusions Serendipitous Autopilot) is a new range of autopilots based on [http://www.st.com/mcu/inchtml-pages-stm32.html STM32] microcontrollers ( CortexM3@72Mhz ) designed to run Paparazzi.&lt;br /&gt;
There's no such thing as a perfect autopilot, only autopilots adapted to a particular purpose. This is the reason why Lisa comes in different flavors for different usages. &lt;br /&gt;
&lt;br /&gt;
The first members of the family are:&lt;br /&gt;
&lt;br /&gt;
*Lisa/L, a design where the STM32 is associated to a gumstix [http://www.gumstix.net/Setup-and-Programming/cat/Overo-Setup-and-Programming/111.html Overo].&lt;br /&gt;
*Lisa/M, a designing focusing on cost and simplicity.&lt;br /&gt;
&lt;br /&gt;
=Lisa/L=&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
Lisa/L is a dual processor board autopilot designed to allow the possibility of using Linux for Paparazzi airborne code.&lt;br /&gt;
&lt;br /&gt;
[[Image:lisa_l_bloc_diag_simple.png|360px]]&lt;br /&gt;
[[Image:lisa_l_top.png|360px]] [[Image:lisa_l_bot.png|360px]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
The documentation about Lisa/L has been split in two: You can have a look at the [[User/LisaL]] user manual or the [[Dev/LisaL]] developer manual or look at pictures on the [[LisaL_Gallery]] gallery page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Lisa/M =&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
Lisa/M is a 50*25mm single processor board, with 7 full size servo connectors. This board is about the size of a conventional RC receiver and features a footprint for an aspirin IMU and an affordable barometer. Intended usages range from a CAN servo driver to a full blown autopilot or a flybarless heli controller.&lt;br /&gt;
&lt;br /&gt;
[[Image:lisa_m_top_small.png|360px]] [[Image:lisa_m_bot_small.png|360px]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Lisa/M is only at the stage of prototype. Documentation will follow as soon as the board reaches production stage.&lt;br /&gt;
&lt;br /&gt;
= Lisa/S =&lt;br /&gt;
&lt;br /&gt;
Lisa/S is only a project at the moment. The focus for this design is size, weight and power consumption. The intent is to produce an autopilot suited for the smallest airframes.&lt;br /&gt;
For now just a CAD rendering to wet your appetite.&lt;br /&gt;
[[Image:lisa_s_cad.png|360px]]&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Lisa&amp;diff=7880</id>
		<title>Lisa</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Lisa&amp;diff=7880"/>
		<updated>2010-09-29T10:39:22Z</updated>

		<summary type="html">&lt;p&gt;Poine: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lisa ( the Lost Illusions Serendipitous Autopilot) is a new range of autopilots based on [http://www.st.com/mcu/inchtml-pages-stm32.html STM32] microcontrollers ( CortexM3@72Mhz ) designed to run Paparazzi.&lt;br /&gt;
There's no such thing as a perfect autopilot, only autopilots adapted to a particular purpose. This is the reason why Lisa comes in different flavors for different usages. &lt;br /&gt;
&lt;br /&gt;
The first members of the family are:&lt;br /&gt;
&lt;br /&gt;
*Lisa/L, a design where the STM32 is associated to a gumstix [http://www.gumstix.net/Setup-and-Programming/cat/Overo-Setup-and-Programming/111.html Overo].&lt;br /&gt;
*Lisa/M, a designing focusing on cost and simplicity.&lt;br /&gt;
&lt;br /&gt;
=Lisa/L=&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
Lisa/L is a dual processor board autopilot designed to allow the possibility of using Linux for Paparazzi airborne code.&lt;br /&gt;
&lt;br /&gt;
[[Image:lisa_l_bloc_diag_simple.png|360px]]&lt;br /&gt;
[[Image:lisa_l_top.png|360px]] [[Image:lisa_l_bot.png|360px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The documentation about Lisa/L has been split in two: You can have a look at the [[User/LisaL]] user manual or the [[Dev/LisaL]] developer manual or look at pictures on the [[LisaL_Gallery]] gallery page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Lisa/M =&lt;br /&gt;
&lt;br /&gt;
Lisa/M is a 50*25mm single processor board, with 7 full size servo connectors. This board is about the size of a conventional RC receiver and features a footprint for an aspirin IMU and an affordable barometer. Intended usages range from a CAN servo driver to a full blown autopilot or a flybarless heli controller.&lt;br /&gt;
&lt;br /&gt;
[[Image:lisa_m_top_small.png|360px]] [[Image:lisa_m_bot_small.png|360px]]&lt;br /&gt;
&lt;br /&gt;
= Lisa/S =&lt;br /&gt;
&lt;br /&gt;
Lisa/S is only a project at the moment. The focus for this design is size, weight and power consumption. The intent is to produce an autopilot suited for the smallest airframes.&lt;br /&gt;
For now just a CAD rendering to wet your appetite.&lt;br /&gt;
[[Image:lisa_s_cad.png|360px]]&lt;/div&gt;</summary>
		<author><name>Poine</name></author>
	</entry>
</feed>