<?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=Openuas</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=Openuas"/>
	<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/wiki/Special:Contributions/Openuas"/>
	<updated>2026-05-10T01:27:46Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Installation/FromScratch&amp;diff=30505</id>
		<title>Installation/FromScratch</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Installation/FromScratch&amp;diff=30505"/>
		<updated>2026-03-05T20:34:28Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* LPC21ISP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Installation&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
'''Users of recent Debian/Ubuntu distributions are advised to use the binary packages as described in [[Installation/Linux]].'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''WARNING! Only use if you are proficient in working with Linux!'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
Users of other Linux flavors or anyone needing manual control of each individual package can install them independently. &amp;lt;br/&amp;gt;&lt;br /&gt;
The list of dependencies of the Debian package is located in the [https://github.com/paparazzi/paparazzi-portability-support/blob/master/debian/paparazzi-dev/debian/control &amp;lt;tt&amp;gt;debian/control&amp;lt;/tt&amp;gt;] file and may help users of other distributions.&lt;br /&gt;
&lt;br /&gt;
Some corresponding source tarballs can be downloaded from [https://launchpad.net/~paparazzi-uav/+archive/ppa/+packages paparazzi-uav ppa] on launchpad. (maybe building the packages from source is more reliable in view of dependencies)&lt;br /&gt;
&lt;br /&gt;
For distributions using RPM packaging, the [http://packages.debian.org/unstable/source/alien alien] tool can be used to convert a .deb package into a .rpm package.&lt;br /&gt;
&lt;br /&gt;
As with all Wiki pages, also this page is a work in progress. Try to be a big help to the Paparazzi project and improve this page whenever you can. If you have a distribution different from Ubuntu which doesn't satisfy any other dependency and have instructions about compiling it, packaging it, feel free to add any reference on how to do that on this wikipage.&lt;br /&gt;
&lt;br /&gt;
== Goal ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to clarify about which version of each piece of software has to be compiled, where to find that software, patches needed to make it compile on Linux, maybe even FreeBSD or OSX.&lt;br /&gt;
&lt;br /&gt;
== Fedora 19  ==&lt;br /&gt;
&lt;br /&gt;
To build paparazzi-uav on Fedora 19, you must install the next packages from the official repository:&lt;br /&gt;
* ocaml&lt;br /&gt;
* ocaml-findlib&lt;br /&gt;
* ocaml-xml-light&lt;br /&gt;
* ocaml-ocamlnet&lt;br /&gt;
* ocaml-lablgtk-devel&lt;br /&gt;
* libxml2-devel&lt;br /&gt;
* SDL-devel&lt;br /&gt;
* libusb-devel&lt;br /&gt;
&lt;br /&gt;
Paparazzi-uav needs to include some ocaml headers when it compiles the simulator, then please be sure that they are included. If not, edit sw/simulator/Makefile and add:&lt;br /&gt;
&lt;br /&gt;
  CAML_CFLAGS = -I/usr/lib64/ocaml&lt;br /&gt;
&lt;br /&gt;
The following packages must be built from source code (they are not included in the official repository): &lt;br /&gt;
* ivy-c &lt;br /&gt;
* ivy-ocaml &lt;br /&gt;
&lt;br /&gt;
Paparazzi-uav was successfully compiled using ivy-c 3.14 and ivy-ocaml 1.2. Please note that the ivy-c version is an unstable version!&lt;br /&gt;
&lt;br /&gt;
Additionally, you need install the next RPMs to build ivy-c:&lt;br /&gt;
* pcre-devel&lt;br /&gt;
* libXt-devel&lt;br /&gt;
* tcl-devel&lt;br /&gt;
* glib2-devel&lt;br /&gt;
&lt;br /&gt;
Don't forget to set the environment variable PKG_CONFIG before building ivy-ocaml, e.g:&lt;br /&gt;
&lt;br /&gt;
  $ export PKG_CONFIG=/usr/local/lib/pkgconfig&lt;br /&gt;
&lt;br /&gt;
== Fedora 24  ==&lt;br /&gt;
NOTE: Built upon Fedora 19 instruction, unnecessary instructions may occour.&lt;br /&gt;
&lt;br /&gt;
1. Install dependencies:&lt;br /&gt;
  $ sudo dnf install ocaml ocaml-findlib ocaml-xml-light ocaml-ocamlnet ocaml-lablgtk-devel ocaml-camlp4-devel libxml2-devel SDL-devel libusb-devel pcre-devel libXt-devel tcl-devel tk-devel glib2-devel gsl-devel&lt;br /&gt;
&lt;br /&gt;
2. Edit the PKG_CONFIG_PATH variable in your ~/.bashrc file to accomondate /usr/local/lib/pkgconfig/ (default for ivy libs)&lt;br /&gt;
&lt;br /&gt;
3. Edit all the ivy specific .pc files in /usr/local/lib/pkgconfig, changing line 3 from &amp;quot;libdir=${exec_prefix}/lib&amp;quot; to &amp;quot;libdir=${exec_prefix}/lib64&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4. Install ivy-python via pip and compile and istall ivy-c and ivy-ocaml from source as shown [[Installation/FromScratch#IVY]]&lt;br /&gt;
&lt;br /&gt;
Note: dependencies for compiling ivy-c and ivy-ocaml are already covered above (except toolchain!).&lt;br /&gt;
&lt;br /&gt;
5. Compile and install [[JSBSim|JSBsim from source]]&lt;br /&gt;
&lt;br /&gt;
Hacks: Link libivy and libJSBsim after compiling&lt;br /&gt;
  $ sudo ln -s /usr/local/lib64/libivy.so /usr/local/lib64/libivy.so.3 /usr/lib&lt;br /&gt;
  $ sudo ln -s /opt/jsbsim/lib/libJSBSim.so.0 /usr/lib&lt;br /&gt;
  $ sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
== Arch Linux ==&lt;br /&gt;
&lt;br /&gt;
This is a dirty hacked together (not really according to &amp;quot;the Arch Way&amp;quot;) install, but works on a fresh installed Archbang GNU/Linux.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: following issues '''&lt;br /&gt;
# Only written and tested for Archbang and Manjaro, not tested on vanilla Arch Linux yet. &lt;br /&gt;
# It seems that the error &amp;quot;unbound module GnoCanvas&amp;quot; can be resolved by installing lablgtk2 via yaourt first and then conf-gnomecanvas over opam.&lt;br /&gt;
# No symlink from liblglibivy.so.3 and liblglibivy.so.3 to libglibivy.so.3.15, so can't find these files.&lt;br /&gt;
# If pkg-config can't find some .pc files, a pkg-config path might not be set and exported properly. Use &amp;quot;pkg-config --variable pc_path pkg-config&amp;quot; to check if the path containing the ''ivy-c.pc'', ''ivy-glib.pc'' and ''ivy-tcl.pc'' files is found.&lt;br /&gt;
# &amp;quot;ocamlfind: Package `netclient' not found&amp;quot; -&amp;gt; seems that the opam packages need to be installed in a specific order... (try ocamlnet first, then lablgtk.2.16) &lt;br /&gt;
&lt;br /&gt;
'''Requirements:'''&lt;br /&gt;
# Up to date system&lt;br /&gt;
#* pacman -Syyu&lt;br /&gt;
# Install Yaourt&lt;br /&gt;
#*https://astrofloyd.wordpress.com/2015/01/17/installing-yaourt-on-arch-linux/&lt;br /&gt;
&lt;br /&gt;
'''Install Paparazzi:'''&lt;br /&gt;
# Packages base-devel, yajl and general dependencies&lt;br /&gt;
#: &amp;lt;pre&amp;gt;# pacman -S base-devel yajl subversion git libusb pcre ocaml camlp4 tcl tk python python-pip sdl glade&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Check if the PKG_CONFIG_PATH points to ''/usr/local/lib/pkgconfig'', otherwise set and export it&lt;br /&gt;
#: &amp;lt;pre&amp;gt;$ echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/' &amp;gt;&amp;gt; ~/.bashrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Build and install Ivy-C from Source&lt;br /&gt;
#: &amp;lt;pre&amp;gt;$ git clone https://gitlab.com/ivybus/ivy-c.git /home/$USER/temp/ivy-c &amp;amp;#10;$ cd /home/$USER/temp/ivy-c/src &amp;amp;#10;$ make &amp;amp;#10;$ sudo make install&amp;lt;/pre&amp;gt;&lt;br /&gt;
# '''Dirty''' All the ivy libs are installed in ''/usr/local/lib64'' and not ''/usr/local/lib'' as the .pc files point to currently. &amp;lt;br/&amp;gt;&lt;br /&gt;
#:Change in the third line (libdir) in the ivy-c.pc, ivy-glib.pc and ivy-tcl.pc file from ''lib'' to ''lib64'' and the fourth line (includedir) from ''include'' to ''include/Ivy''&lt;br /&gt;
# '''Dirty'''For libgivy, libivy and libtclivy (.so and .so.3 ending) is a link directing to the lib with .so.3.15 availaible, but not for libglibivy. &amp;lt;br/&amp;gt;&lt;br /&gt;
#Create these links for libglibivy&lt;br /&gt;
#: &amp;lt;pre&amp;gt;$ sudo ln -s /usr/local/lib64/libglibivy.so.3.15 /usr/local/lib64/libglibivy.so &amp;amp;#10;$ sudo ln -s /usr/local/lib64/libglibivy.so.3.15 /usr/local/lib64/libglibivy.so.3&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Install opam (OCaml packet manager) via yaourt&lt;br /&gt;
#: &amp;lt;pre&amp;gt;$ yaourt -S opam&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Initialize opam&lt;br /&gt;
#: &amp;lt;pre&amp;gt;$ opam init &amp;amp;#10;$ f &amp;amp;#10;$ ~/.bashrc &amp;amp;#10;$ echo 'eval `opam config env`' &amp;gt;&amp;gt; ~/.bashrc&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Install and pin lablgtk.2.16.0 (2.18.0 will not work)&lt;br /&gt;
#: &amp;lt;pre&amp;gt;$ opam install -v lablgtk.2.16.0 &amp;amp;#10;$ opam pin add lablgtk 2.16.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Install OCaml packets via opam&lt;br /&gt;
#: &amp;lt;pre&amp;gt;$ opam install ocamlfind ocamlnet xml-light pcre ivy&amp;lt;/pre&amp;gt;&lt;br /&gt;
#: If this fails at Ivy related parts check the notes on top of this guide.&lt;br /&gt;
# Install ivy-python via pip&lt;br /&gt;
#: &amp;lt;pre&amp;gt;$ sudo pip install ivy-python&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Install the Toolchain for Paparazzi (e.g. [https://aur.archlinux.org/packages/gcc-arm-none-eabi-bin/ gcc-arm-none-eabi-bin] from the AUR)&lt;br /&gt;
#: &amp;lt;pre&amp;gt;$ sudo pacman -S gcc-arm-none-eabi-bin&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Optional:&lt;br /&gt;
&lt;br /&gt;
# Install flashing utilities if needed&lt;br /&gt;
 $ yaourt stlink-git dfu-util&lt;br /&gt;
# Install [[JSBSim]] for [[NPS]]&lt;br /&gt;
&lt;br /&gt;
[[Installation#Getting_the_Source_Code|Download]] and [[Installation#Launching_the_Software|build Paparazzi]]&lt;br /&gt;
&lt;br /&gt;
== Installing the Cross compiler toolchain ==&lt;br /&gt;
&lt;br /&gt;
There are currently two different toolchains available that can be used on Linux based systems with Paparazzi. For more information see [[Installation/Linux#ARM_embedded_toolchain]]&lt;br /&gt;
&lt;br /&gt;
== Installing OCaml packages using OPAM ==&lt;br /&gt;
&lt;br /&gt;
One possibility to install and manage OCaml packages is [http://opam.ocamlpro.com/ OPAM (OCaml Package Manager)]:&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Please first check the official [http://opam.ocaml.org/doc/Install.html OPAM install guide] for the simplest method.'''&amp;lt;br/&amp;gt;&lt;br /&gt;
To install it from the latest git tree run:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;git clone https://github.com/OCamlPro/opam.git&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd opam&lt;br /&gt;
 ./configure &amp;amp;&amp;amp; make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
 opam init&lt;br /&gt;
 eval `opam config env`&lt;br /&gt;
&lt;br /&gt;
Update your shell environment as per opam init's instructions. E.g. add to your ''~/.profile'':&lt;br /&gt;
 eval `opam config env`&lt;br /&gt;
&lt;br /&gt;
Build and install OCaml libs:&lt;br /&gt;
 opam install ocamlfind xml-light pcre ocamlnet&lt;br /&gt;
 opam install -v lablgtk&lt;br /&gt;
&lt;br /&gt;
==  IVY ==&lt;br /&gt;
&lt;br /&gt;
IVY is a simple protocol and a set of open-source libraries and programs that allows applications to broadcast information through text messages, with a subscription mechanism based on regular expressions. The project can be found at: https://ivybus.gitlab.io/  &lt;br /&gt;
&lt;br /&gt;
In the paparazzi project, Ivy is used to send telemetry data to where ever you want.&lt;br /&gt;
&lt;br /&gt;
NOTE: Do not confuse this IVY with the Apache Ivy project. &lt;br /&gt;
&lt;br /&gt;
=== Ivy-python ===&lt;br /&gt;
&lt;br /&gt;
The ivy-python package makes it possible to use the IVY libraries from within the Python programming language. The ivy-python package is architecture independent, so it can be downloaded from the Ubuntu or Debian paparazzi repository.&lt;br /&gt;
&lt;br /&gt;
The easiest way to instally it on non Debian based systems is using [https://pip.pypa.io/ pip] to install the [https://pypi.python.org/pypi/ivy-python ivy-python package] from [https://pypi.python.org/pypi PyPi - the Python Package Index].&lt;br /&gt;
 pip install ivy-python&lt;br /&gt;
&lt;br /&gt;
Or install from the source repository via &lt;br /&gt;
 &lt;br /&gt;
 git clone https://gitlab.com/ivybus/ivy-python.git&lt;br /&gt;
 cd ivy-python&lt;br /&gt;
 ./setup.py install&lt;br /&gt;
&lt;br /&gt;
=== Ivy-c ===&lt;br /&gt;
&lt;br /&gt;
To be able to use ivy-c, the libraries need to be installed. &lt;br /&gt;
&lt;br /&gt;
Required packages (Debian based):&lt;br /&gt;
* tk-dev&lt;br /&gt;
* libpcre3-dev&lt;br /&gt;
* libxt-dev&lt;br /&gt;
* pkg-config&lt;br /&gt;
* libglib2.0-dev&lt;br /&gt;
&lt;br /&gt;
Download source, compile and install libraries:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /opt/ivy-c &lt;br /&gt;
 # cd /opt/ivy-c&lt;br /&gt;
 # git clone https://gitlab.com/ivybus/ivy-c.git&lt;br /&gt;
 # cd /opt/ivy-c/trunk/src&lt;br /&gt;
 # make&lt;br /&gt;
 # make install&lt;br /&gt;
&lt;br /&gt;
It is possible you get errors of the test module when compiling, just ignore the messages, it is not important for the Paparazzi project. Contact the IVY team to help them also to resolve also the testing makefile issue.&lt;br /&gt;
&lt;br /&gt;
==== troubleshooting ====&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
 gcc -c -O2 -Wall -Wshadow -fPIC -I/usr/include/tcl8.4 -DTCL_CHANNEL_INTEGRATION  ivytcl.c&lt;br /&gt;
 ivytcl.c:28:17: fatal error: tcl.h: No such file or directory&lt;br /&gt;
&lt;br /&gt;
The Makefile cannot read the tcl-dev version you have installed and assumes that version 8.4 is installed, but can't find the appropriate folder.&amp;lt;br/&amp;gt;&lt;br /&gt;
Edit the line 57 of the Makefile from TCLVERS=8.4 according to your installed version, or just delete the 8.4, both work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Can't find 64bit libs:&lt;br /&gt;
Your ivy libs were probably installed to /usr/local/lib64 and you have to make symbolic links so that they will be found:&lt;br /&gt;
 $ sudo ln -s /usr/local/lib64/libivy.so /usr/local/lib64/libivy.so.3 /usr/lib&lt;br /&gt;
or &lt;br /&gt;
 sudo ln -s /usr/local/lib64/libivy.so /usr/local/lib64/libivy.so.3 /usr/local/lib&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ivy-OCaml ===&lt;br /&gt;
&lt;br /&gt;
ivy-ocaml provides OCaml bindings for ivy-c and is needed for most of the ground segment agents that are written in OCaml like [[Server]] and [[GCS]].&lt;br /&gt;
&lt;br /&gt;
Download source, compile and install libraries:&lt;br /&gt;
&lt;br /&gt;
 # mkdir -p /opt/ivy-ocaml&lt;br /&gt;
 # cd /opt/ivy-ocaml&lt;br /&gt;
 # git clone https://gitlab.com/ivybus/ivy-ocaml.git&lt;br /&gt;
 # cd /opt/ivy-ocaml/trunk&lt;br /&gt;
 # make&lt;br /&gt;
 # make install&lt;br /&gt;
&lt;br /&gt;
==== ivy-ocaml via OPAM ====&lt;br /&gt;
Or use OPAM: While the source repository and debian package is named ''ivy-ocaml'', in OPAM it is only named ''ivy'' (since it is obviously for OCaml).&lt;br /&gt;
&lt;br /&gt;
 $ opam update&lt;br /&gt;
 $ opam install ivy&lt;br /&gt;
&lt;br /&gt;
== Paparazzi-dev Debian/Ubuntu packages ==&lt;br /&gt;
&lt;br /&gt;
For Ubuntu users, you can install the following packages from standard repository. You can just copy the line(s) and paste into your terminal. But do not copy the $ sign, this symbol is just added on this page to show that it is to be pasted at a normal terminal prompt.&lt;br /&gt;
&lt;br /&gt;
=== Whole lot in one ===&lt;br /&gt;
&lt;br /&gt;
  sudo apt-get install ocaml libcamlimages-ocaml liblablgtk2-ocaml-dev liblablgtk2-gl-ocaml-dev \&lt;br /&gt;
                       liblablgtk2-gnome-ocaml-dev libxml-light-ocaml-dev libocamlnet-ocaml-dev libpcre-ocaml \&lt;br /&gt;
                       libpcre-ocaml-dev libgnomecanvas2-0 libgnomecanvas2-dev libglade2-0 libglade2-dev make build-essential \&lt;br /&gt;
                       git gnuplot m4 libtool libftdi-dev libmpfr-dev tcl8.5-dev xutils-dev&lt;br /&gt;
&lt;br /&gt;
=== Ocaml and libraries ===&lt;br /&gt;
&lt;br /&gt;
Ocaml, short for Objective Caml is the most popular variant of the Caml language. The Paparazzi Ground Control Station (GCS) and some of it's tools are crafted in this language.&lt;br /&gt;
&lt;br /&gt;
* ocaml, ocaml-camlimages-devel, ocaml-lablgtk2-devel, ocaml-xml-light-devel, ocamlnet-ocaml-devel&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install ocaml libcamlimages-ocaml liblablgtk2-ocaml-dev liblablgtk2-gl-ocaml-dev \&lt;br /&gt;
                        liblablgtk2-gnome-ocaml-dev libxml-light-ocaml-dev libocamlnet-ocaml-dev&lt;br /&gt;
&lt;br /&gt;
=== Gnome canvas Library ===&lt;br /&gt;
&lt;br /&gt;
The GnomeCanvas is an engine for structured graphics that offers a rich imaging model, high performance rendering, and a powerful, high level API. This widget can be used for flexible display of graphics and for creating interactive user interface elements.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libgnomecanvas2-0 libgnomecanvas2-dev&lt;br /&gt;
&lt;br /&gt;
=== USB Library ===&lt;br /&gt;
&lt;br /&gt;
The libusb project aims to create a library for use by user level applications to access USB devices regardless of OS. [http://www.libusb.org]&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libusb-dev&lt;br /&gt;
&lt;br /&gt;
=== Ocaml PCRE ===&lt;br /&gt;
&lt;br /&gt;
This OCaml-library interfaces the PCRE (Perl-compatibility regular expressions) C library. it can be used for matching regular expressions which are written in Perl style.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libpcre-ocaml libpcre-ocaml-dev&lt;br /&gt;
&lt;br /&gt;
=== Glade Library ===&lt;br /&gt;
&lt;br /&gt;
Libglade is a library that performs a similar job to the C source output routines in the GLADE user interface builder. Whereas GLADE's output routines create C source code that must be compiled, libglade builds the interface from an XML file (GLADE's save format) at runtime. This can allow modifying the user interface without recompiling.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libglade2-0 libglade2-dev&lt;br /&gt;
&lt;br /&gt;
=== Tcl/Tk ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install tcl-dev&lt;br /&gt;
&lt;br /&gt;
Also the some utils are required to compile and  install Ivy.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install xutils-dev&lt;br /&gt;
&lt;br /&gt;
=== Make ===&lt;br /&gt;
&lt;br /&gt;
GNU Make is an utility which controls the generation of executables and other target files of a program from the program's source files. &lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install make&lt;br /&gt;
&lt;br /&gt;
=== Build essential ===&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install build-essential&lt;br /&gt;
&lt;br /&gt;
=== Libtool ===&lt;br /&gt;
&lt;br /&gt;
GNU libtool is a generic library support script. Libtool hides the complexity of using shared libraries behind a consistent, portable interface. Creating the files for Paparazzi software building becomes less cumbersome by using this tool.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libtool&lt;br /&gt;
&lt;br /&gt;
=== libpcre3-dev ===&lt;br /&gt;
&lt;br /&gt;
Required for compiling Ivy-C.&lt;br /&gt;
&lt;br /&gt;
 $ apt-get install libpcre3-dev&lt;br /&gt;
&lt;br /&gt;
=== Git Client ===&lt;br /&gt;
&lt;br /&gt;
Git is a version control system. Version control systems allow many individuals to collaborate on the Paparazzi source code. This is needed to retrieve the latest sourcecode from various packages and Paparazzi sourcecode itself.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install git&lt;br /&gt;
&lt;br /&gt;
=== Subversion ===&lt;br /&gt;
&lt;br /&gt;
Version control system, required for cloning the ivy packages.&lt;br /&gt;
&lt;br /&gt;
 $ apt-get install subversion&lt;br /&gt;
&lt;br /&gt;
=== GNU Plot ===&lt;br /&gt;
&lt;br /&gt;
A command-line driven interactive plotting program. Unknow if it is used&lt;br /&gt;
 &lt;br /&gt;
 $ sudo apt-get install gnuplot&lt;br /&gt;
&lt;br /&gt;
=== Meld ===&lt;br /&gt;
&lt;br /&gt;
Meld is a graphical front end to the diff program. It provides a side-by-side view of the differences between two files. It is used by the Paparazzi Center when configuration changes are not yet saved and the option comes along where one either can keep or view changes made in aircraft- and other configuration files.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install meld&lt;br /&gt;
&lt;br /&gt;
=== FTDI library ===&lt;br /&gt;
&lt;br /&gt;
libftdi is a library that talks to FTDI's 232 type chips, including the popular bitbang mode, using libusb. A library to be able to use with a debugging Autopilot hardware boards.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libftdi-dev &lt;br /&gt;
&lt;br /&gt;
=== MPFR library ===&lt;br /&gt;
&lt;br /&gt;
The MPFR library is a C library for multiple-precision floating-point computations with correct rounding. MPFR is based on the GMP multiple-precision library. The main goal of MPFR is to provide a library for multiple-precision floating-point computation which is both efficient and has a well-defined semantics.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libmpfr-dev&lt;br /&gt;
&lt;br /&gt;
=== ImageMagick ===&lt;br /&gt;
&lt;br /&gt;
ImageMagick is a software suite to create, edit, and compose bitmap images. It can read, convert and write images in a variety of formats. Use ImageMagick to translate, flip, mirror, rotate, scale, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bézier curves. Being able to modify image based map pictures is a feature that may come in handy one time.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install imagemagick&lt;br /&gt;
&lt;br /&gt;
=== Optional on an older OS ===&lt;br /&gt;
&lt;br /&gt;
If you have an older OS distribution it never hurts to install the following...&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install libx11-6 libx11-dev texinfo libncurses5 libncursesw5 libncursesw5-dev zlibc&lt;br /&gt;
&lt;br /&gt;
== Paparazzi Main sourcecode ==&lt;br /&gt;
&lt;br /&gt;
See the main [[Installation#Getting_the_Source_Code]] page&lt;br /&gt;
&lt;br /&gt;
TIP: &lt;br /&gt;
If you get the File &amp;quot;pprz.mli&amp;quot;, line 149, characters 78-89: Error: Unbound type constructor Ivy.binding&lt;br /&gt;
...this happens when IVY libraries are not yet installed. How to do this, read the part on installing IVY on this page&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
&lt;br /&gt;
https://launchpad.net/gcc-arm-embedded/&lt;br /&gt;
&lt;br /&gt;
https://github.com/paparazzi/paparazzi-portability-support&lt;br /&gt;
&lt;br /&gt;
http://wiki.ubuntuusers.de/GNU_arm-toolchain&lt;br /&gt;
&lt;br /&gt;
http://gcc.gnu.org/onlinedocs/gcc-4.5.0/gcc/ARM-Options.html#ARM-Options&lt;br /&gt;
&lt;br /&gt;
http://mcuprogramming.com/forum/arm/gnu-arm-toolchain-installer/&lt;br /&gt;
&lt;br /&gt;
http://www.ethernut.de/en/documents/cross-toolchain-osx.html&lt;br /&gt;
&lt;br /&gt;
http://www.hermann-uwe.de/blog/building-an-arm-cross-toolchain-with-binutils-gcc-newlib-and-gdb-from-source&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:Developer_Documentation]] [[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Disco&amp;diff=30504</id>
		<title>Disco</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Disco&amp;diff=30504"/>
		<updated>2026-03-05T17:32:05Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; width: 15%&amp;quot;&amp;gt;&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Autopilots&amp;lt;/categorytree&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 45%; overflow: hidden&amp;quot;&amp;gt;[[Image:Parrot_disco_frontside.jpg|right|500px|Parrot Disco]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 40%&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
The [http://www.parrot.com/ Parrot] [https://www.parrot.com/us/drones/parrot-disco-fpv Disco] is a Wifi controlled fixed-wing aircraft, originally designed for FPV flights.&lt;br /&gt;
The hardware electronic components are very close the the [[Bebop]] quadrotor and the same principle can be applied to fly in full autonomous mode with Paparazzi.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
&lt;br /&gt;
Here are some differences or addition compared to the [[Bebop]] hardware:&lt;br /&gt;
&lt;br /&gt;
== PWM ==&lt;br /&gt;
&lt;br /&gt;
The Disco has 6 PWM outputs available with the following mapping:&lt;br /&gt;
&lt;br /&gt;
* Internal mapping of the PWM with output index&lt;br /&gt;
* servo rail 1 &amp;lt;-&amp;gt; linux pwm_4&lt;br /&gt;
* servo rail 2 &amp;lt;-&amp;gt; linux pwm_5&lt;br /&gt;
* servo rail 3 &amp;lt;-&amp;gt; linux pwm_6&lt;br /&gt;
* servo rail 4 &amp;lt;-&amp;gt; linux pwm_1&lt;br /&gt;
* servo rail 5 &amp;lt;-&amp;gt; linux pwm_2&lt;br /&gt;
* servo rail 6 &amp;lt;-&amp;gt; linux pwm_3&lt;br /&gt;
&lt;br /&gt;
== Radio Control Input ==&lt;br /&gt;
&lt;br /&gt;
A radio control input is available for RC based on serial protocols such as Spektrum serial or SBUS out. Since the SBUS protocol is using an inverted logic (serial idle low), the signal input pin is tight to two UARTs internally and can be accessed with the the following symbolic links:&lt;br /&gt;
&lt;br /&gt;
* /dev/uart-sbus: the signal is inverted&lt;br /&gt;
* /dev/uart-sumd: the signal is not inverted&lt;br /&gt;
&lt;br /&gt;
The RC input is recommended for the safety link instead of using the Wifi link to control the plane in manual or assisted mode.&lt;br /&gt;
&lt;br /&gt;
== Automatically start 2 button press == &lt;br /&gt;
&lt;br /&gt;
In order to automatically start the 2-button press mode which is required in order to upload the paparazzi autopilot or to start an ftp session, you just have to enable the initial status of the telnet session. &lt;br /&gt;
&lt;br /&gt;
First press the power button 2 times in order to activate the telnet session. Then telnet to it using &lt;br /&gt;
&lt;br /&gt;
$ telnet 192.168.42.1&lt;br /&gt;
 &lt;br /&gt;
Mount and remount the drive to obtain write access to the files using &lt;br /&gt;
&lt;br /&gt;
$ mount -o remount,rw /&lt;br /&gt;
&lt;br /&gt;
Then change the /etc/boxinit.d/50-telnetd.rc file using: &lt;br /&gt;
&lt;br /&gt;
$ vi /etc/boxinit.d/50-telnetd.rc &lt;br /&gt;
&lt;br /&gt;
Go into write mode using :w + [Enter] and press i to go into insert mode. Change to disabled to enabled to automatically enable telnet.&lt;br /&gt;
&lt;br /&gt;
Write to the file using :w  + [Enter] and quit by pressing [Esc] and type :x + [Enter]&lt;br /&gt;
&lt;br /&gt;
== GPS ==&lt;br /&gt;
&lt;br /&gt;
The GPS used is a uBlox M8N.&lt;br /&gt;
&lt;br /&gt;
= Modifications =&lt;br /&gt;
&lt;br /&gt;
== Exernal Receiver ==&lt;br /&gt;
&lt;br /&gt;
A long range telemetry can be connected to the USB bus via e.g. a USBtoSerial board. One needs to install drivers for this on the disco. A complete page is on the Bebop part of the  wiki.&lt;br /&gt;
&lt;br /&gt;
== 4G connection ==&lt;br /&gt;
&lt;br /&gt;
A 4G to the USB can be used for telemetry over cellular network&lt;br /&gt;
&lt;br /&gt;
== Satcom ==&lt;br /&gt;
&lt;br /&gt;
A small iridium sat transeiver can be used.&lt;br /&gt;
&lt;br /&gt;
== RTK GPS ==&lt;br /&gt;
&lt;br /&gt;
The GPS module can be desoldered and replaced with a M8P in case one wants to use RTK.&lt;br /&gt;
&lt;br /&gt;
Real-time kinematic positioning is a GPS system which uses to GPS modules in order to improve GPS accuracy. The 'base station' is located at a precisely known location. The coordinates of the base station are used in order to derive the propagation errors at the current location. The errors are then send to the 'rover station' in order to improve accuracy up to centimeter-level. &lt;br /&gt;
&lt;br /&gt;
In order to use a RTK positioning system both rover- and base station have to be set up. Both base and rover board are identical, they only differ by their configuration. This tutorial explains how to set up the Parrot Disco for RTK usage in case a u-blox C94-M8P module is used.&lt;br /&gt;
&lt;br /&gt;
=== Necessary software ===&lt;br /&gt;
&lt;br /&gt;
In order configure both base and rover station, first you have to download u-center from their [https://www.u-blox.com/en/product/u-center website]. [https://vitux.com/how-to-install-wine-on-ubuntu/ Wine] will be needed as well to run u-center on Ubuntu. Start u-center using Wine and connect the base station via USB. While wine is able to configure the rtk messages and the setup, it should be noted that updating the GPS software using wine was not possible. &lt;br /&gt;
&lt;br /&gt;
Note: In case you can not change the settings in the U-center, probably the receiver is polling the current setting to often. Turn off auto-poll with the buttons on the bottom left corner of the configuration window. &lt;br /&gt;
&lt;br /&gt;
Note2: Each time you change the settings in the U-center you have to send the data to the board using the send button in the bottom left corner of the configuration view. Then go to UBX-CFG-CFG and chose all 4 devices to save the configuration too. &lt;br /&gt;
&lt;br /&gt;
===Setup of Ground station===&lt;br /&gt;
&lt;br /&gt;
First you find out the port that your GPS module is connected to using dmesg after the device has been connected. The figure gives an example where the modem has been connected to /dev/ttyACM0. &lt;br /&gt;
    &lt;br /&gt;
[[File:Dmesg port.png|500px|GPS module has been connected to /dev/ttyACM0]]&lt;br /&gt;
&lt;br /&gt;
Link the corresponding port to a wine com port using: &lt;br /&gt;
&lt;br /&gt;
    $ cd ~/.wine/dosdevices&lt;br /&gt;
    $ ln -sf /dev/ttyACM0 ./com32&lt;br /&gt;
&lt;br /&gt;
If you open U-center now you should be able to connect to COM port 32 (as seen in the Figure).&lt;br /&gt;
&lt;br /&gt;
[[File:COM-port-connection.png|500px|Connect to a COM port in U-center]]&lt;br /&gt;
&lt;br /&gt;
To setup the ground station for RTK usage, then go the 'Message View' from the 'View' hotbar. Scroll down until you find the MSG (UBX-CFG-MSG) menu. Check the USB output on the RTCM 1005 (Station coordinates) message and click the send button on the lower left corner. This step must be repeated for the RTCM 1077 (GPS Observations), RTCM 1087 (GLONASS observations) and the RTCM 1230 (GLONASS code-phase biases) , RTCM 1097 (GALILEO observations) message (don`t forget to hit the send button each time or your changes won`t be saved).&lt;br /&gt;
&lt;br /&gt;
[[File:Port-base.png|500px|Configuration for ground station output]]&lt;br /&gt;
&lt;br /&gt;
Next you have chose how the base station calculated it`s position. This can be done in TMODE3 (UBX-CFG-TMODE3). You will have 2 choices: Survey-in (if you don`t know the exact position) and Fixed (if you know the exact position). Don`t forget to click the send button after chosing your configuration. In case you selected the Survey-In mode, you can go to UBX-NAV-SVIN to see the status of the survey. &lt;br /&gt;
&lt;br /&gt;
[[File:TMODE3.png|500px|Configuration for ground station position]]&lt;br /&gt;
&lt;br /&gt;
Finally, the rate has to be set to the same measurement period and navigation rate as in the rover station. It is recommended to just start paparazzi with all the required modules and then see the configured rates on the Disco itself. The reason for this is that several paparazzi modules might change the ublox configuration at startup. (In the case of the Dezember 2019 master version, the navigational rate is set to 1 cyc and the measurement period to 250 ms in case the ubx_ucenter module is used for configuration).&lt;br /&gt;
&lt;br /&gt;
After having configured both the rates and the ports, you just have to specify which messages will be send. Go to the MSG (Messages) menu again and disable all NMEA messages. Then enable NAV-POS-LLH, NAV-STATUS NAV-SOL and NAV-VELNED. These are required to obtain positional information, however not in case only RTK is used. Hit send after each change. &lt;br /&gt;
&lt;br /&gt;
The last step is to save the whole configuration. Go to the Configuration menu (UBX-CFG-CFG), select all 4 devices and click send. You have now successfully configured your base. &lt;br /&gt;
&lt;br /&gt;
=== Setup of Rover station === &lt;br /&gt;
&lt;br /&gt;
The rover is the module that receives RTCM messages. It will automatically go into RTK operational mode as soon as a RCTM message is received and thus only the radio link has to be configured correctly. &lt;br /&gt;
&lt;br /&gt;
In order to setup the rover stations first a [[Bebop#Serial_bidirectional_teminal_access|serial bidirectional terminal access]] has to be obtained. &lt;br /&gt;
&lt;br /&gt;
After coupling the GPS module of the drone to the wine com port, U-center should be able to connect to the rover module.&lt;br /&gt;
&lt;br /&gt;
Go to the Message View from the View hotbar again and scroll down until you find the PRT (Port) section (UBX-CFG-PRT). Enter your autopilot`s GPS port`s baudrate to allow it to communicate correctly. This is necessary as the GPS connection is serial and thus the baudrate is not controlled by any other protocol. Click the send button in the lower left corner. &lt;br /&gt;
&lt;br /&gt;
Then you have to modify the frequency of the chip. Go to the RATE (Rates) menu (UDX-CFG-RATE) and change the Measurement period to the same period you have set on the base station. Press the send button again. Note, it might be possible that either paparazzi or your own board autopilot (Parrot for example) overwrite this change at each startup. In order to overcome this problem simply change the Rate on your ground station instead of on the Drone.&lt;br /&gt;
&lt;br /&gt;
Finally, save the configuration from the CFG (Configuration) menu (UDX-CFG-CFG). Select all four devices and click send. You have successfully set up your rover station. &lt;br /&gt;
&lt;br /&gt;
[[File:Radio-link-rover.png|500px|Configuration for Rover output]]&lt;br /&gt;
&lt;br /&gt;
=== Moving baseline rtk ===&lt;br /&gt;
&lt;br /&gt;
In case the ground station is not staying at a fixed position and moving (on a boat/car for example), the base station has to be set up for moving baseline. &lt;br /&gt;
&lt;br /&gt;
For this, nearly the same step as in the [[Disco#Setup_of_Ground_station|rover station setup]] has to be performed. In addition to this, message 4072 has to be enabled for the USB output. This will automatically disable message 1005. Furthermore, TMODE3 has to be set to Disabled instead of Survey-In or Fixed.&lt;br /&gt;
&lt;br /&gt;
The setup of the rover station is equivalent. &lt;br /&gt;
&lt;br /&gt;
In order to allow moving baseline operation, a firmware upgrade on the NEO M8P module towards firmware 1.40 is required. Upgrading the firmware on wine under Ubuntu was not possible and a direct link between the GPS module and a Windows computer running the newest version (19.12) of u-center was required as well. The ground station can thus simply be upgraded using a standart usb cable connected to it. For the reference module in the Parrot Disco itself, the GPS module had to be desoldered and soldered on a USB connector. The firmware update then had to be performed from this connector after which the module could be soldered again into the Disco. &lt;br /&gt;
&lt;br /&gt;
=== Direkt Ground Station to Rover Debugging ===&lt;br /&gt;
&lt;br /&gt;
In case you are trying to debug messages and see whether the actual RTK setup is set correctly, it is also possible to send the data from the ground station to the Disco directly. A couple of steps are required in order to do so: &lt;br /&gt;
&lt;br /&gt;
First, connect to the Disco and upload the paparazzi autopilot to it. Telnet into the Disco and kill the autopilot process using&lt;br /&gt;
&lt;br /&gt;
    $ killall ap.elf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After this, you are required to set up a [[Bebop#Serial_bidirectional_teminal_access|serial bidirectional terminal access]] for the Disco and simply connect your ground station to a serial device as well. You should now have a serial device connected to the ground station and one to the rover. The last step is to combine these to serial devices using: &lt;br /&gt;
&lt;br /&gt;
    $ socat /dev/ttyACM0,raw,echo=0,crnl /dev/pts/6,raw,echo=0,crnl&lt;br /&gt;
&lt;br /&gt;
where /dev/tty/ACM0 is your ground station device and /dev/pts/6 is your serial bidirectional terminal access. All the RTCM messages from the ground station are now send to the Disco and vice versa. In U-center you can connect to both the Disco and ground station and debug using Packet Console etc.&lt;br /&gt;
&lt;br /&gt;
== Alternative servo ==&lt;br /&gt;
&lt;br /&gt;
If your servo is broken one an use a Hitec Digital 5055MG as a direct fit replacement&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Autopilots]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Modems/xbee&amp;diff=30497</id>
		<title>Modems/xbee</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Modems/xbee&amp;diff=30497"/>
		<updated>2025-09-16T12:31:22Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* XBee Pro DigiMesh / 802.15.4 (&amp;quot;Series 1&amp;quot;) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paparazzi supports the following modem protocols:&lt;br /&gt;
* Standard transparent serial (pprz protocol, AT mode) - compatible with all modems and can be used to connect the autopilot directly to a PC for testing without a modem.&lt;br /&gt;
* Digi (formerly Maxstream) API protocol (xbee) - compatible with all Digi modems including the 9XTend and Zigbee. This protocol enables hardware addressing through API mode, allowing multiple aircraft to be managed from a single ground modem.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
=== Installation of X-CTU ===&lt;br /&gt;
The simplest way to configure the XBee modems is to use the [http://www.digi.com/support/productdetail?pid=3352 X-CTU] software from Digi. It runs natively under MacOS X, Windows and Linux.&lt;br /&gt;
To use versions before X-CTU 6 under Linux, use Wine.&lt;br /&gt;
&lt;br /&gt;
==== Installation using Wine ====&lt;br /&gt;
'''X-CTU versions 6 and up are available natively for Linux''', so using Wine is only needed for older versions.&lt;br /&gt;
&lt;br /&gt;
Under Wine make sure you have the USB serial link connecting to XBee mapped to a com port (please consult [[Installation/Linux/udev | paparazzi linux device naming]]):&lt;br /&gt;
&lt;br /&gt;
* First of all you should install wine.&lt;br /&gt;
* Then install winetricks (X-CTU requires MS Visual C++ Redistributable package so winetricks will make things much easier to get installed).&lt;br /&gt;
* Then ('''!important''') run wine configuration before doing something else, so wine can create ~/.wine&lt;br /&gt;
* Make symlink to your modem device.&lt;br /&gt;
&lt;br /&gt;
 $ sudo ln -s /dev/paparazzi/xbee ~/.wine/dosdevices/com4&lt;br /&gt;
&lt;br /&gt;
* Set permissions for COM port (if you are not root):&lt;br /&gt;
 &lt;br /&gt;
 $ sudo ls -l /dev/paparazzi/xbee&lt;br /&gt;
 lrwxrwxrwx 1 root root 10 june 14 19:00 /dev/paparazzi/xbee -&amp;gt; /dev/ttyUSB0&lt;br /&gt;
 $ sudo chown &amp;lt;your_user_name_here&amp;gt; /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
* Run X-CTU setup and install it.&lt;br /&gt;
* Then run installed application. When window opens switch to &amp;quot;User Com Ports&amp;quot; tab and add com port &amp;quot;COM4. Note: This procedure have to be made every time you start X-CTU on Linux.&lt;br /&gt;
* Click &amp;quot;Test/Query&amp;quot; button. If you get some modem information (like serial, etc.) after a little time, then you have modem link established.&lt;br /&gt;
&lt;br /&gt;
If X-CTU complains on com port connectivity, try adding these strings to ~/.wine/system.reg&lt;br /&gt;
 [hardware\\DEVICEMAP\\SERIALCOMM]&lt;br /&gt;
 &amp;quot;COM1&amp;quot;=&amp;quot;COM1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If your X-CTU does not update its firmware correctly from the web, follow the steps described in the chapter &amp;quot;Manually Update the X-CTU firmware files&amp;quot; of [http://wiki.openpilot.org/display/Doc/Configure+Xbee+via+Linux this page].&lt;br /&gt;
&lt;br /&gt;
=== Configuring XBee AT mode using X-CTU ===&lt;br /&gt;
This is the recommended way to start. With this firmware the modems basically act as a serial link replacement and don't do any mesh networking. The pprz protocol is based on this mode.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Basic approach:&lt;br /&gt;
# Connect your XBee to your PC. There are several vendors of [[Modems#GCS_Adaptation|USB boards]].&lt;br /&gt;
# Start the X-CTU program and go to the modem configuration.&lt;br /&gt;
# Click on READ&lt;br /&gt;
# Select the appropriate function set with AT command set.&lt;br /&gt;
# set PAN ID, etc... depending on which XBee you use&lt;br /&gt;
# Set the baudrate you want to use. 57600 is the maximum baudrate setting for bidirectional transfers to work correctly. At a higher baudrate setting, transmission can only be done in one direction.&lt;br /&gt;
# Then write the firmware to the module.&lt;br /&gt;
If X-CTU asks you to reset the XBee, you have to connect the RST pin (5) to the GND pin (10) of the XBee. You can do this manually using tweezers or a short wire.&lt;br /&gt;
&lt;br /&gt;
=== Configuring XBee using a terminal emulator ===&lt;br /&gt;
&lt;br /&gt;
Alternatively you can configure your XBee using a text-based modem control and terminal emulation program, such as [http://en.wikipedia.org/wiki/Minicom Minicom] for Linux or [http://freeware.the-meiers.org CoolTerm] for Linux, Mac OSX, or Windows.&lt;br /&gt;
&lt;br /&gt;
The xBee modules can be set to the following baud rates:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;  cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align:center&amp;quot; cellpadding=&amp;quot;6&amp;quot;&lt;br /&gt;
!''Baud Code''!!''Baud Rate''!!''Notes''&lt;br /&gt;
|-&lt;br /&gt;
|0||1200||&lt;br /&gt;
|-&lt;br /&gt;
|1||2400||&lt;br /&gt;
|-&lt;br /&gt;
|2||4800||&lt;br /&gt;
|-&lt;br /&gt;
|3||9600||&lt;br /&gt;
|-&lt;br /&gt;
|4||19200|| Use with fixedwing aircraft and their GCSs&lt;br /&gt;
|-&lt;br /&gt;
|5||38400||&lt;br /&gt;
|-&lt;br /&gt;
|6||57600|| Use with rotorcraft or transitioning aircraft and their GCSs&lt;br /&gt;
|-&lt;br /&gt;
|7||115200||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Quick, I'm in a rush''':&lt;br /&gt;
 $ sudo screen /dev/ttyUSB0 9600&lt;br /&gt;
 +++&lt;br /&gt;
 ATBD6&amp;lt;enter&amp;gt;&lt;br /&gt;
 ATAP1&amp;lt;enter&amp;gt;&lt;br /&gt;
 ATWR&amp;lt;enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Minicom Instructions''':&lt;br /&gt;
* Connect XBee to your computer&lt;br /&gt;
* Setup minicom (by default XBee modems come set up for 9600 baud) 8-N-1 &lt;br /&gt;
* Type Ctrl-A A in minicom this will set it up to add linefeeds to the stream&lt;br /&gt;
* Type three '+' in quick succession resulting in &amp;quot;+++&amp;quot; string (you have 10s to type your next command otherwise the modem will revert back to transparent mode). Do NOT press enter.&lt;br /&gt;
** you get a confirmation: 'OK'&lt;br /&gt;
* Type &amp;quot;AT&amp;lt;enter&amp;gt;&amp;quot;&lt;br /&gt;
** you get a confirmation: 'OK'&lt;br /&gt;
* Type &amp;quot;ATBD&amp;lt;enter&amp;gt;&amp;quot;&lt;br /&gt;
** you get the current baudrate code: '3'&lt;br /&gt;
* To set another baudrate select one from the above table and type &amp;quot;ATBD &amp;lt;baud code&amp;gt;&amp;lt;enter&amp;gt;&amp;quot;:&lt;br /&gt;
* Type &amp;quot;ATAP 0 or 1 for API mode or not&amp;lt;enter&amp;gt;&amp;quot;&lt;br /&gt;
* To store the new baudrate in the rom type &amp;quot;ATWR&amp;lt;enter&amp;gt;&amp;quot;&lt;br /&gt;
* Now you can close minicom&lt;br /&gt;
* Reconnect modem&lt;br /&gt;
* Restart minicom with the new baudrate&lt;br /&gt;
* Test that the modem is setup correctly by typing &amp;quot;+++&amp;quot; and getting &amp;quot;OK&amp;quot; confirmation&lt;br /&gt;
&lt;br /&gt;
'''CoolTerm Instructions''':&lt;br /&gt;
* Connect xBee to your computer&lt;br /&gt;
* Open CoolTerm and click 'Options.' From the 'Serial Port' tab select:&lt;br /&gt;
**Port: USB Serial (or as appropriate for your xBee carrier board)&lt;br /&gt;
**Baudrate: 9600&lt;br /&gt;
**Data Bits: 8&lt;br /&gt;
**Parity: None&lt;br /&gt;
**Stop Bits 1&lt;br /&gt;
*From the 'Terminal' tab enable Local Echo&lt;br /&gt;
*Click OK&lt;br /&gt;
*Click Connect&lt;br /&gt;
* Type three '+' in quick succession resulting in &amp;quot;+++&amp;quot; string (you have 10s to type your next command otherwise the modem will revert back to transparent mode). Do NOT press enter.&lt;br /&gt;
** you get a confirmation: 'OK'&lt;br /&gt;
* Type &amp;quot;AT&amp;lt;enter&amp;gt;&amp;quot;&lt;br /&gt;
** you get a confirmation: 'OK'&lt;br /&gt;
* Type &amp;quot;ATBD&amp;lt;enter&amp;gt;&amp;quot;&lt;br /&gt;
** you get the current baudrate code: '3'&lt;br /&gt;
* To set another baudrate select one from the above table and type &amp;quot;ATBD &amp;lt;baud code&amp;gt;&amp;lt;enter&amp;gt;&amp;quot;:&lt;br /&gt;
* To store the new baudrate in the rom type &amp;quot;ATWR&amp;lt;enter&amp;gt;&amp;quot;&lt;br /&gt;
* Now you can close CoolTerm.&lt;br /&gt;
* Reconnect modem&lt;br /&gt;
* Restart CoolTerm, change options to new baudrate, and connect&lt;br /&gt;
* Test that the modem is setup correctly by typing &amp;quot;+++&amp;quot; and getting &amp;quot;OK&amp;quot; confirmation&lt;br /&gt;
&lt;br /&gt;
== XBee Pro ZB (AT command set) ==&lt;br /&gt;
This 2.4GHz modem uses ZigBee PRO Feature Set and is compatible with devices from other vendors using the ZigBee PRO Feature Set.&lt;br /&gt;
&lt;br /&gt;
=== Flashing the airborne module ===&lt;br /&gt;
# Connect your XBee, start X-CTU, click READ&lt;br /&gt;
# Select the function set '''ZIGBEE END DEVICE AT''' (or ZIGBEE ROUTER AT).&lt;br /&gt;
# Set the PAN ID to any number, must be the same as the pan id of the coordinator (Ground Station).&lt;br /&gt;
# Set the Node Identifier (NI) to your aircraft name or any other appropriate name.&lt;br /&gt;
# Set the baudrate you want to use. 57600 is the maximum baudrate setting for bidirectional transfers to work correctly.&lt;br /&gt;
# Then write the firmware to the module.&lt;br /&gt;
&lt;br /&gt;
=== Flashing the ground station module ===&lt;br /&gt;
# Connect your XBee, start X-CTU, click READ&lt;br /&gt;
# Select the function set '''ZIGBEE COORDINATOR AT'''.&lt;br /&gt;
# Set the PAN ID to any number, must be the same as the pan id of the end device (aircraft).&lt;br /&gt;
# Set the Node Identifier (NI) to PPRZ_GROUND or any other appropriate name.&lt;br /&gt;
# Set the baudrate you want to use. 57600 is the maximum baudrate setting for bidirectional transfers to work correctly.&lt;br /&gt;
# Then write the firmware to the module.&lt;br /&gt;
&lt;br /&gt;
=== Pairing your Modems ===&lt;br /&gt;
&lt;br /&gt;
For maximum performance you can pair the ground modem to the airborne modem. Set the &amp;quot;DH - Destination Address High&amp;quot; and &amp;quot;DL - Destination Address Low&amp;quot; to the unique serial number &amp;quot;SH - Serial Number High&amp;quot; and &amp;quot;SL - Serial Number Low&amp;quot; of the other modem. Do so both on the ground modem and on the airborne modem. Failing to properly pair your modems will likely result in poor throughput and data loss between your airframe and your ground control station. If this is the case you may see errors on the Paparazzi Center console like &amp;lt;tt&amp;gt;Failure(&amp;quot;Pprz.values_of_payload, wrong argument: 00 08 &amp;quot;)&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;Failure(&amp;quot;Pprz.values_of_payload, too many bytes in message PONG: 00 03 02 2a 00 00 00 00 00 00 00 00 00 00 00 00 &amp;quot;)&amp;lt;/tt&amp;gt;. Pairing does help and the error messages will disappear. &lt;br /&gt;
&lt;br /&gt;
=== Reviving a non-responding Xbee Pro ===&lt;br /&gt;
&lt;br /&gt;
To bring an apparently dead XBee Pro Series 2 back to life, do the following:&lt;br /&gt;
&lt;br /&gt;
#Connect the USB device that holds the XBee to your laptop/desktop (without the XBee connected).&lt;br /&gt;
#Open X-CTU.&lt;br /&gt;
#In the tab used to program the device, select the proper modem (normally you would do a READ to get the values).&lt;br /&gt;
#Choose the option you want to program (i.e., &amp;quot;END DEVICE&amp;quot; or &amp;quot;COORDINATOR&amp;quot;) as if you were programming it.&lt;br /&gt;
#With the XBee not in the device, click &amp;quot;WRITE&amp;quot;. It will hang, timeout, and bring up a dialog box.&lt;br /&gt;
#Before you click OK to the dialog box, plug in the XBee module (carefully).&lt;br /&gt;
#Click OK to clear the message and it should start programming automatically.&lt;br /&gt;
&lt;br /&gt;
=== Other tutorials ===&lt;br /&gt;
&lt;br /&gt;
[http://pixhawk.ethz.ch/tutorials/how_to_configure_xbee PixHawk: HowTo configure XBee]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.openpilot.org/display/Doc/Configure+Xbee+via+Linux openpilot: XBee RF modems]&lt;br /&gt;
&lt;br /&gt;
== XBee Pro ZNet 2.5 (AT command set) ==&lt;br /&gt;
These are legacy modems and not recommended/sold by Digi anymore.&lt;br /&gt;
It is recommended to upgrade these to XBee Pro ZB with the [ftp://ftp1.digi.com/support/images/ZNet%202.5%20to%20ZB%20Conversion%20Kit.zip ZNet 2.5 to ZB Conversion Kit] from Digi.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
If you want to use ZNet 2.5 feature set nevertheless, here is how to configure it:&lt;br /&gt;
&lt;br /&gt;
=== Flashing the airborne module ===&lt;br /&gt;
# Connect your XBee, start X-CTU, click READ&lt;br /&gt;
# Select the function set '''ZNET 2.5 ROUTER/END DEVICE AT'''.&lt;br /&gt;
# Set the PAN ID to any number, must be the same as the pan id of the coordinator (Ground Station).&lt;br /&gt;
# Set the Node Identifier (NI) to your aircraft name or any other appropriate name.&lt;br /&gt;
# Set the baudrate you want to use. 57600 is the maximum baudrate setting for bidirectional transfers to work correctly.&lt;br /&gt;
# Then write the firmware to the module.&lt;br /&gt;
&lt;br /&gt;
=== Flashing the ground station module ===&lt;br /&gt;
# Connect your XBee, start X-CTU, click READ&lt;br /&gt;
# Select the function set '''ZNET 2.5 COORDINATOR DEVICE AT'''.&lt;br /&gt;
# Set the Destination Address Low (DL) to FFFF.&lt;br /&gt;
# Set the PAN ID to any number, must be the same as the pan id of the end device (aircraft).&lt;br /&gt;
# Set the Node Identifier (NI) to PPRZ_GROUND or any other appropriate name.&lt;br /&gt;
# Set the baudrate you want to use. 57600 is the maximum baudrate setting for bidirectional transfers to work correctly.&lt;br /&gt;
# Then write the firmware to the module.&lt;br /&gt;
&lt;br /&gt;
=== Setup ===&lt;br /&gt;
&lt;br /&gt;
For the ZigBee ZNet 2.5 and ZB modules to work one of the modules has to be flashed with the coordinator firmware. All the others in the same PAN can either run as routers or end-devices.&lt;br /&gt;
* Flash one module (ground station) with the coordinator AT firmware&lt;br /&gt;
* Flash aircraft module with router or end-device AT firmware&lt;br /&gt;
To allow modules to join any PAN set the PAN ID to zero (default setting). Then the coordinator will generate a random PAN ID and routers and end-devices will join the first PAN they find.&lt;br /&gt;
&lt;br /&gt;
If you operate in an environment with multiple zigbee PANs it is recommended to set the PAN ID explicitly:&lt;br /&gt;
* Set PAN ID to some unique (but same) ID on both modules&lt;br /&gt;
* Set a Node Identifier for each module (e.g. ground, aircraft)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== XBee S1 (Pro) with 802.15.4 Firmware ==&lt;br /&gt;
&lt;br /&gt;
=== Flashing the airborne module ===&lt;br /&gt;
&lt;br /&gt;
# Connect your XBee, start X-CTU, click READ&lt;br /&gt;
# Leave the function set on '''XBEE PRO 802.15.4'''.&lt;br /&gt;
# Set the PAN ID to any number, must be the same as the pan id of the coordinator (Ground Station).&lt;br /&gt;
# Set the Node Identifier (NI) to your aircraft name or any other appropriate name.&lt;br /&gt;
# Set the baudrate you want to use. 57600 is the maximum baudrate setting for bidirectional transfers to work correctly.&lt;br /&gt;
# Then write the firmware to the module.&lt;br /&gt;
&lt;br /&gt;
=== Flashing the ground station module ===&lt;br /&gt;
# Connect your XBee, start X-CTU, click READ&lt;br /&gt;
# Leave the function set on '''XBEE PRO 802.15.4'''.&lt;br /&gt;
# '''Set Coordinator Enable to &amp;quot;1 - COORDINATOR&amp;quot;.'''&lt;br /&gt;
# Set the PAN ID to any number, must be the same as the pan id of the end device (aircraft).&lt;br /&gt;
# Set the Node Identifier (NI) to PPRZ_GROUND or any other appropriate name.&lt;br /&gt;
# Set the baudrate you want to use. 57600 is the maximum baudrate setting for bidirectional transfers to work correctly.&lt;br /&gt;
# Then write the firmware to the module.&lt;br /&gt;
&lt;br /&gt;
Successfully tested with XBP24 Firmware version '''10EF'''  and Paparazzi-link (PPRZLink)&lt;br /&gt;
&lt;br /&gt;
== XBee S1 (Pro) with DigiMesh Firmware ==&lt;br /&gt;
&lt;br /&gt;
Using Digimesh, Paparazzi based UAS inter-communicate via generate a real mesh network, so all aircraft can reach all other aircraft even wen the GCS cannot be reached. &lt;br /&gt;
Also the GCS can reach all aircraft even if not in range directly.&lt;br /&gt;
&lt;br /&gt;
Advised for a XBee S1 (Pro) module to use Firmware version '''8073''' - XBP24_DM (XBee Pro 2.4 Ghz on DigiMesh ) &lt;br /&gt;
&lt;br /&gt;
This is firmware is the latest, and also the only version, we tested and works well with multiple airborne vehicles.&lt;br /&gt;
The firmware update procedure is almost the same as described above. The settings can be the default of the Firmware.&lt;br /&gt;
&lt;br /&gt;
== XBee Pro 868 MHZ ==&lt;br /&gt;
&lt;br /&gt;
=== Getting Them Working ===&lt;br /&gt;
Even with the xbee868.xml telemetry file, XBee868s will not last over 6 minutes. There is a special 868 build flag (in slayer1.xml), and matching option for the datalink but I could not get this to work. Eventually, I got them to work for about 20 minutes, which happily is the flight endurance of a heavily overloaded GWS Formosa.&lt;br /&gt;
&lt;br /&gt;
I did this using a command window, but you could use X-CTU if you are a wuss or have Windows handy.&lt;br /&gt;
&lt;br /&gt;
#Attach Xbee and start serial comm program (I use &amp;lt;code&amp;gt;screen /dev/ttyUSB0 &amp;amp;lt;baud rate, just a number, no angled brackets&amp;amp;gt;&amp;lt;/code&amp;gt;, you can also use pico- or microcom)&lt;br /&gt;
#Type AT and enter. You should get an OK back.&lt;br /&gt;
#ATMT and enter. You should get a number&amp;amp;mdash;this represents the number of extra times each packet will be broadcast. We now need to change this to zero.&lt;br /&gt;
#ATMT0 and enter =&amp;gt; OK&lt;br /&gt;
#ATRR and enter. This number is the number of retries that will be sent if an ACK is not received. Disabling this will also have the side effect of disabling ACKs, giving us more packets to play with.&lt;br /&gt;
#ATRR0 and enter =&amp;gt; OK&lt;br /&gt;
#Type ATWR to store the new stuff in the firmware. You should get an OK.&lt;br /&gt;
#Set the datalink to transparent mode both in your airframe file and on the datalink.&lt;br /&gt;
&lt;br /&gt;
You may also want to drop the power level to 1mW for testing, or it won't actually work - they are just too damn powerful to talk to each other at a range of a couple of feet. I also used 1mW for flying - never lost the link, even after a mile. Didn't get round to range testing them though. &lt;br /&gt;
&lt;br /&gt;
You probably want to do this to both XBees (at least I did). I personally had the baud rate at 57600 for legacy reasons, but it should work just as well at any other baud rate. '''Thanks to CheBuzz for this info''', and for helping me work all this out at 11pm the night before EMAV09.&lt;br /&gt;
&lt;br /&gt;
== XBee 868LF ==&lt;br /&gt;
&lt;br /&gt;
These relatively new modems use the whole spectrum allowed in your country to avoid Duty Cycle restrictions.&lt;br /&gt;
&lt;br /&gt;
== XBee Pro XSC (900MHZ) ==&lt;br /&gt;
&lt;br /&gt;
== Configuring XBee API mode (xbee protocol) ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]] [[Category:User_Documentation]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=MultiUAV&amp;diff=26222</id>
		<title>MultiUAV</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=MultiUAV&amp;diff=26222"/>
		<updated>2024-09-19T10:41:48Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Activate TCAS service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''WARNING:''' the functionalities described in this section are experimental and have never been fully tested. Use with care !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TCAS ==&lt;br /&gt;
&lt;br /&gt;
=== Principle ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Tcas_GE.jpg|thumb|400px|Trajectories of 2 UAVs using the TCAS system]]&lt;br /&gt;
&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Traffic_Collision_Avoidance_System TCAS] (Traffic Collision Avoidance System) is used on civil aircraft to reduce the incidence of mid-air collisions. The principle is to monitor the airspace around the aircraft, warn the pilot and provide conflict resolution indication. For the Paparazzi system, a light version of a TCAS-inspired system has been implemented. It can send warning to the ground station and if nothing is done, it takes control of the vertical loop in order to have a minimum vertical separation. This TCAS monitors all the aircrafts based on the traffic information send by the Server and it resolve conflicts only with one aircraft at a time.&lt;br /&gt;
&lt;br /&gt;
When the system detects a possible collision, the TCAS logic follows the rules:&lt;br /&gt;
* '''if''' other_AC_alt &amp;gt; AC_alt + alt_limit '''then''' the AC goes down (alt_setpoint = MIN(nav_alt, other_AC_alt - alt_limit))&lt;br /&gt;
* '''if''' other_AC_alt &amp;lt; AC_alt - alt_limit '''then''' the AC goes up (alt_setpoint = MAX(nav_alt, other_AC_alt + alt_limit))&lt;br /&gt;
* '''else''' the AC with the smallest ID goes down&lt;br /&gt;
* alt_setpoint is bounded by (ground_alt + security_height)&lt;br /&gt;
The control of the TCAS will be active until the conflict is solved, no longer exist or a timeout occurs.&lt;br /&gt;
&lt;br /&gt;
On top of this, the resolution is sent to the conflicting UAV (relayed by the ground). In case of conflict on the first resolution (ex: the 2 UAVs are climbing), one of them will decide to change its decision.&lt;br /&gt;
&lt;br /&gt;
[[File:tcas_nego.png]]&lt;br /&gt;
&lt;br /&gt;
=== Activate TCAS service ===&lt;br /&gt;
&lt;br /&gt;
The ¨traffic_info¨ service must be activated with a specific TCAS compile flag; '''TRAFFIC_INFO'''  This service is activated by default for fixed wing aircraft and is not implemented yet on rotorcraft.&lt;br /&gt;
&lt;br /&gt;
The TCAS is activated by adding the appropriate module in the '''modules''' section (see [[Modules]] page):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;tcas.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
&lt;br /&gt;
* The TCAS system is operational '''only''' in '''AUTO2''' and in '''altitude mode'''. &lt;br /&gt;
* The system is '''inhibited under the security height'''.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
Add a Configuration block like this in all your airframe configuration XML document&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;TCAS&amp;quot; prefix=&amp;quot;TCAS_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TAU_TA&amp;quot; value=&amp;quot;10.&amp;quot; unit=&amp;quot;s&amp;quot;/&amp;gt; &amp;lt;!-- Traffic Advisory --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TAU_RA&amp;quot; value=&amp;quot;6.&amp;quot; unit=&amp;quot;s&amp;quot;/&amp;gt; &amp;lt;!-- Resolution Advisory --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALIM&amp;quot; value=&amp;quot;15.&amp;quot; unit=&amp;quot;m&amp;quot;/&amp;gt; &amp;lt;!-- Altitude LIMit --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;DMOD&amp;quot; value=&amp;quot;10.&amp;quot; unit=&amp;quot;m&amp;quot;/&amp;gt; &amp;lt;!-- Distance MODification --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;DT_MAX&amp;quot; value=&amp;quot;2000&amp;quot; unit=&amp;quot;ms&amp;quot;/&amp;gt; &amp;lt;!-- DelTa MAXimum of lost comms or timeout --&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation of parameters:&lt;br /&gt;
&lt;br /&gt;
* '''TAU_TA''': traffic advisory in second. A warning message is send to the ground and displayed in the alert page of the GCS if the estimated time before a collision is below TAU_TA. Default = 2*CARROT.&lt;br /&gt;
* '''TAU_RA''': resolution advisory in second. A warning message is send to the ground (+ display in GCS) and the system takes control over the altitude setpoint of the vertical loop if the estimated time before a collision is below TAU_RA. Default = CARROT.&lt;br /&gt;
* '''ALIM''': altitude limit in meters. The minimum vertical separation between two aircraft. Default = 10.&lt;br /&gt;
* '''DMOD''': distance modification in meters. The distance below which RA are triggered (avoid to have two aircraft getting really close because their relative speed is too small to trigger alarms). Default = 10.&lt;br /&gt;
* '''DT_MAX''': lost comm or timeout in ms. Timeout to interrupt a TA or an RA if data are not received. Default = 1500.&lt;br /&gt;
&lt;br /&gt;
== Formation Flight ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Multi_uav_gcs.png|thumb|400px|Trajectories of 2 UAVs using the TCAS system]]&lt;br /&gt;
&lt;br /&gt;
A basic formation flight control can be activated by load the appropriate module&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;formation_flight.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This service can be used together with the [[MultiUAV#TCAS|TCAS]] service (unless you are very confident with your control gains...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;FORMATION&amp;quot; prefix=&amp;quot;FORM_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;CARROT&amp;quot; value=&amp;quot;3.&amp;quot; unit=&amp;quot;s&amp;quot;/&amp;gt; &amp;lt;!-- carrot distance for followers --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;POS_PGAIN&amp;quot; value=&amp;quot;0.02&amp;quot;/&amp;gt; &amp;lt;!-- coef on position error --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SPEED_PGAIN&amp;quot; value=&amp;quot;0.4&amp;quot;/&amp;gt; &amp;lt;!-- coef on speed error --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;COURSE_PGAIN&amp;quot; value=&amp;quot;0.8&amp;quot;/&amp;gt; &amp;lt;!-- coef on course error (override course pgain for followers) --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALTITUDE_PGAIN&amp;quot; value=&amp;quot;0.1&amp;quot;/&amp;gt; &amp;lt;!-- coef on altitude error --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PROX&amp;quot; value=&amp;quot;60.&amp;quot; unit=&amp;quot;m&amp;quot;/&amp;gt; &amp;lt;!-- proximity distance --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MODE&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt; &amp;lt;!-- mode 0 = global, 1 = local --&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''CARROT''': Default = 0.&lt;br /&gt;
* '''POS_PGAIN''': Default = 0.&lt;br /&gt;
* '''SPEED_PGAIN''': Default = 0.&lt;br /&gt;
* '''COURSE_PGAIN''': UNUSED&lt;br /&gt;
* '''ALTITUDE_PGAIN''': Default = 0.&lt;br /&gt;
* '''PROX''': only A/C at the same level are taken into account. Default = 20.&lt;br /&gt;
* '''MODE''': positions are global (earth frame) or local (leader frame). Default = GLOBAL&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
&lt;br /&gt;
A setting file can be added to change dynamically the above parameters: conf/settings/formation.xml&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;dl_settings name=&amp;quot;formation&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;24&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;1&amp;quot; VAR=&amp;quot;leader_id&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_pos&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_speed&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_course&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_alt&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;1&amp;quot; VAR=&amp;quot;form_mode&amp;quot; module=&amp;quot;multi/formation&amp;quot; values=&amp;quot;GLOBAL|LOCAL&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dl_settings&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flight plan ===&lt;br /&gt;
&lt;br /&gt;
The formation flight service is used with proper function calls in the [[Flight_Plans|flight plan]]. Examples can be found in conf/flight_plans/form_leader.xml and conf/flight_plans/form_follow.xml&lt;br /&gt;
&lt;br /&gt;
The leader is in charge of the global trajectory of the formation, while the followers are only following the leader.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:Projects]] [[Category:Modules]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=MultiUAV&amp;diff=26221</id>
		<title>MultiUAV</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=MultiUAV&amp;diff=26221"/>
		<updated>2024-09-19T10:40:47Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Formation Flight */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''WARNING:''' the functionalities described in this section are experimental and have never been fully tested. Use with care !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TCAS ==&lt;br /&gt;
&lt;br /&gt;
=== Principle ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Tcas_GE.jpg|thumb|400px|Trajectories of 2 UAVs using the TCAS system]]&lt;br /&gt;
&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Traffic_Collision_Avoidance_System TCAS] (Traffic Collision Avoidance System) is used on civil aircraft to reduce the incidence of mid-air collisions. The principle is to monitor the airspace around the aircraft, warn the pilot and provide conflict resolution indication. For the Paparazzi system, a light version of a TCAS-inspired system has been implemented. It can send warning to the ground station and if nothing is done, it takes control of the vertical loop in order to have a minimum vertical separation. This TCAS monitors all the aircrafts based on the traffic information send by the Server and it resolve conflicts only with one aircraft at a time.&lt;br /&gt;
&lt;br /&gt;
When the system detects a possible collision, the TCAS logic follows the rules:&lt;br /&gt;
* '''if''' other_AC_alt &amp;gt; AC_alt + alt_limit '''then''' the AC goes down (alt_setpoint = MIN(nav_alt, other_AC_alt - alt_limit))&lt;br /&gt;
* '''if''' other_AC_alt &amp;lt; AC_alt - alt_limit '''then''' the AC goes up (alt_setpoint = MAX(nav_alt, other_AC_alt + alt_limit))&lt;br /&gt;
* '''else''' the AC with the smallest ID goes down&lt;br /&gt;
* alt_setpoint is bounded by (ground_alt + security_height)&lt;br /&gt;
The control of the TCAS will be active until the conflict is solved, no longer exist or a timeout occurs.&lt;br /&gt;
&lt;br /&gt;
On top of this, the resolution is sent to the conflicting UAV (relayed by the ground). In case of conflict on the first resolution (ex: the 2 UAVs are climbing), one of them will decide to change its decision.&lt;br /&gt;
&lt;br /&gt;
[[File:tcas_nego.png]]&lt;br /&gt;
&lt;br /&gt;
=== Activate TCAS service ===&lt;br /&gt;
&lt;br /&gt;
The ¨traffic_info¨ service must be activated with a specific TCAS compile flag; '''TRAFFIC_INFO'''  This service is activated by default for fixed wing aircraft and is not implemented yet on rotorcraft.&lt;br /&gt;
&lt;br /&gt;
The TCAS is activated by loading the appropriate module in the '''modules''' section (see [[Modules]] page):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;tcas.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
&lt;br /&gt;
* The TCAS system is operational '''only''' in '''AUTO2''' and in '''altitude mode'''. &lt;br /&gt;
* The system is '''inhibited under the security height'''.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
Add a Configuration block like this in all your airframe configuration XML document&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;TCAS&amp;quot; prefix=&amp;quot;TCAS_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TAU_TA&amp;quot; value=&amp;quot;10.&amp;quot; unit=&amp;quot;s&amp;quot;/&amp;gt; &amp;lt;!-- Traffic Advisory --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TAU_RA&amp;quot; value=&amp;quot;6.&amp;quot; unit=&amp;quot;s&amp;quot;/&amp;gt; &amp;lt;!-- Resolution Advisory --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALIM&amp;quot; value=&amp;quot;15.&amp;quot; unit=&amp;quot;m&amp;quot;/&amp;gt; &amp;lt;!-- Altitude LIMit --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;DMOD&amp;quot; value=&amp;quot;10.&amp;quot; unit=&amp;quot;m&amp;quot;/&amp;gt; &amp;lt;!-- Distance MODification --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;DT_MAX&amp;quot; value=&amp;quot;2000&amp;quot; unit=&amp;quot;ms&amp;quot;/&amp;gt; &amp;lt;!-- DelTa MAXimum of lost comms or timeout --&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation of parameters:&lt;br /&gt;
&lt;br /&gt;
* '''TAU_TA''': traffic advisory in second. A warning message is send to the ground and displayed in the alert page of the GCS if the estimated time before a collision is below TAU_TA. Default = 2*CARROT.&lt;br /&gt;
* '''TAU_RA''': resolution advisory in second. A warning message is send to the ground (+ display in GCS) and the system takes control over the altitude setpoint of the vertical loop if the estimated time before a collision is below TAU_RA. Default = CARROT.&lt;br /&gt;
* '''ALIM''': altitude limit in meters. The minimum vertical separation between two aircraft. Default = 10.&lt;br /&gt;
* '''DMOD''': distance modification in meters. The distance below which RA are triggered (avoid to have two aircraft getting really close because their relative speed is too small to trigger alarms). Default = 10.&lt;br /&gt;
* '''DT_MAX''': lost comm or timeout in ms. Timeout to interrupt a TA or an RA if data are not received. Default = 1500.&lt;br /&gt;
&lt;br /&gt;
== Formation Flight ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Multi_uav_gcs.png|thumb|400px|Trajectories of 2 UAVs using the TCAS system]]&lt;br /&gt;
&lt;br /&gt;
A basic formation flight control can be activated by load the appropriate module&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;formation_flight.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This service can be used together with the [[MultiUAV#TCAS|TCAS]] service (unless you are very confident with your control gains...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;FORMATION&amp;quot; prefix=&amp;quot;FORM_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;CARROT&amp;quot; value=&amp;quot;3.&amp;quot; unit=&amp;quot;s&amp;quot;/&amp;gt; &amp;lt;!-- carrot distance for followers --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;POS_PGAIN&amp;quot; value=&amp;quot;0.02&amp;quot;/&amp;gt; &amp;lt;!-- coef on position error --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SPEED_PGAIN&amp;quot; value=&amp;quot;0.4&amp;quot;/&amp;gt; &amp;lt;!-- coef on speed error --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;COURSE_PGAIN&amp;quot; value=&amp;quot;0.8&amp;quot;/&amp;gt; &amp;lt;!-- coef on course error (override course pgain for followers) --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALTITUDE_PGAIN&amp;quot; value=&amp;quot;0.1&amp;quot;/&amp;gt; &amp;lt;!-- coef on altitude error --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PROX&amp;quot; value=&amp;quot;60.&amp;quot; unit=&amp;quot;m&amp;quot;/&amp;gt; &amp;lt;!-- proximity distance --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MODE&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt; &amp;lt;!-- mode 0 = global, 1 = local --&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''CARROT''': Default = 0.&lt;br /&gt;
* '''POS_PGAIN''': Default = 0.&lt;br /&gt;
* '''SPEED_PGAIN''': Default = 0.&lt;br /&gt;
* '''COURSE_PGAIN''': UNUSED&lt;br /&gt;
* '''ALTITUDE_PGAIN''': Default = 0.&lt;br /&gt;
* '''PROX''': only A/C at the same level are taken into account. Default = 20.&lt;br /&gt;
* '''MODE''': positions are global (earth frame) or local (leader frame). Default = GLOBAL&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
&lt;br /&gt;
A setting file can be added to change dynamically the above parameters: conf/settings/formation.xml&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;dl_settings name=&amp;quot;formation&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;24&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;1&amp;quot; VAR=&amp;quot;leader_id&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_pos&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_speed&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_course&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_alt&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;1&amp;quot; VAR=&amp;quot;form_mode&amp;quot; module=&amp;quot;multi/formation&amp;quot; values=&amp;quot;GLOBAL|LOCAL&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dl_settings&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flight plan ===&lt;br /&gt;
&lt;br /&gt;
The formation flight service is used with proper function calls in the [[Flight_Plans|flight plan]]. Examples can be found in conf/flight_plans/form_leader.xml and conf/flight_plans/form_follow.xml&lt;br /&gt;
&lt;br /&gt;
The leader is in charge of the global trajectory of the formation, while the followers are only following the leader.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:Projects]] [[Category:Modules]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=MultiUAV&amp;diff=26220</id>
		<title>MultiUAV</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=MultiUAV&amp;diff=26220"/>
		<updated>2024-09-19T10:40:21Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Activate TCAS service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''WARNING:''' the functionalities described in this section are experimental and have never been fully tested. Use with care !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TCAS ==&lt;br /&gt;
&lt;br /&gt;
=== Principle ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Tcas_GE.jpg|thumb|400px|Trajectories of 2 UAVs using the TCAS system]]&lt;br /&gt;
&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Traffic_Collision_Avoidance_System TCAS] (Traffic Collision Avoidance System) is used on civil aircraft to reduce the incidence of mid-air collisions. The principle is to monitor the airspace around the aircraft, warn the pilot and provide conflict resolution indication. For the Paparazzi system, a light version of a TCAS-inspired system has been implemented. It can send warning to the ground station and if nothing is done, it takes control of the vertical loop in order to have a minimum vertical separation. This TCAS monitors all the aircrafts based on the traffic information send by the Server and it resolve conflicts only with one aircraft at a time.&lt;br /&gt;
&lt;br /&gt;
When the system detects a possible collision, the TCAS logic follows the rules:&lt;br /&gt;
* '''if''' other_AC_alt &amp;gt; AC_alt + alt_limit '''then''' the AC goes down (alt_setpoint = MIN(nav_alt, other_AC_alt - alt_limit))&lt;br /&gt;
* '''if''' other_AC_alt &amp;lt; AC_alt - alt_limit '''then''' the AC goes up (alt_setpoint = MAX(nav_alt, other_AC_alt + alt_limit))&lt;br /&gt;
* '''else''' the AC with the smallest ID goes down&lt;br /&gt;
* alt_setpoint is bounded by (ground_alt + security_height)&lt;br /&gt;
The control of the TCAS will be active until the conflict is solved, no longer exist or a timeout occurs.&lt;br /&gt;
&lt;br /&gt;
On top of this, the resolution is sent to the conflicting UAV (relayed by the ground). In case of conflict on the first resolution (ex: the 2 UAVs are climbing), one of them will decide to change its decision.&lt;br /&gt;
&lt;br /&gt;
[[File:tcas_nego.png]]&lt;br /&gt;
&lt;br /&gt;
=== Activate TCAS service ===&lt;br /&gt;
&lt;br /&gt;
The ¨traffic_info¨ service must be activated with a specific TCAS compile flag; '''TRAFFIC_INFO'''  This service is activated by default for fixed wing aircraft and is not implemented yet on rotorcraft.&lt;br /&gt;
&lt;br /&gt;
The TCAS is activated by loading the appropriate module in the '''modules''' section (see [[Modules]] page):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;tcas.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
&lt;br /&gt;
* The TCAS system is operational '''only''' in '''AUTO2''' and in '''altitude mode'''. &lt;br /&gt;
* The system is '''inhibited under the security height'''.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
Add a Configuration block like this in all your airframe configuration XML document&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;TCAS&amp;quot; prefix=&amp;quot;TCAS_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TAU_TA&amp;quot; value=&amp;quot;10.&amp;quot; unit=&amp;quot;s&amp;quot;/&amp;gt; &amp;lt;!-- Traffic Advisory --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TAU_RA&amp;quot; value=&amp;quot;6.&amp;quot; unit=&amp;quot;s&amp;quot;/&amp;gt; &amp;lt;!-- Resolution Advisory --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALIM&amp;quot; value=&amp;quot;15.&amp;quot; unit=&amp;quot;m&amp;quot;/&amp;gt; &amp;lt;!-- Altitude LIMit --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;DMOD&amp;quot; value=&amp;quot;10.&amp;quot; unit=&amp;quot;m&amp;quot;/&amp;gt; &amp;lt;!-- Distance MODification --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;DT_MAX&amp;quot; value=&amp;quot;2000&amp;quot; unit=&amp;quot;ms&amp;quot;/&amp;gt; &amp;lt;!-- DelTa MAXimum of lost comms or timeout --&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation of parameters:&lt;br /&gt;
&lt;br /&gt;
* '''TAU_TA''': traffic advisory in second. A warning message is send to the ground and displayed in the alert page of the GCS if the estimated time before a collision is below TAU_TA. Default = 2*CARROT.&lt;br /&gt;
* '''TAU_RA''': resolution advisory in second. A warning message is send to the ground (+ display in GCS) and the system takes control over the altitude setpoint of the vertical loop if the estimated time before a collision is below TAU_RA. Default = CARROT.&lt;br /&gt;
* '''ALIM''': altitude limit in meters. The minimum vertical separation between two aircraft. Default = 10.&lt;br /&gt;
* '''DMOD''': distance modification in meters. The distance below which RA are triggered (avoid to have two aircraft getting really close because their relative speed is too small to trigger alarms). Default = 10.&lt;br /&gt;
* '''DT_MAX''': lost comm or timeout in ms. Timeout to interrupt a TA or an RA if data are not received. Default = 1500.&lt;br /&gt;
&lt;br /&gt;
== Formation Flight ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Multi_uav_gcs.png|thumb|400px|Trajectories of 2 UAVs using the TCAS system]]&lt;br /&gt;
&lt;br /&gt;
A basic formation flight control can be activated by load the appropriate module&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;load name=&amp;quot;formation_flight.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This service can be used together with the [[MultiUAV#TCAS|TCAS]] service (unless you are very confident with your control gains...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;FORMATION&amp;quot; prefix=&amp;quot;FORM_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;CARROT&amp;quot; value=&amp;quot;3.&amp;quot; unit=&amp;quot;s&amp;quot;/&amp;gt; &amp;lt;!-- carrot distance for followers --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;POS_PGAIN&amp;quot; value=&amp;quot;0.02&amp;quot;/&amp;gt; &amp;lt;!-- coef on position error --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SPEED_PGAIN&amp;quot; value=&amp;quot;0.4&amp;quot;/&amp;gt; &amp;lt;!-- coef on speed error --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;COURSE_PGAIN&amp;quot; value=&amp;quot;0.8&amp;quot;/&amp;gt; &amp;lt;!-- coef on course error (override course pgain for followers) --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALTITUDE_PGAIN&amp;quot; value=&amp;quot;0.1&amp;quot;/&amp;gt; &amp;lt;!-- coef on altitude error --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PROX&amp;quot; value=&amp;quot;60.&amp;quot; unit=&amp;quot;m&amp;quot;/&amp;gt; &amp;lt;!-- proximity distance --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MODE&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt; &amp;lt;!-- mode 0 = global, 1 = local --&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''CARROT''': Default = 0.&lt;br /&gt;
* '''POS_PGAIN''': Default = 0.&lt;br /&gt;
* '''SPEED_PGAIN''': Default = 0.&lt;br /&gt;
* '''COURSE_PGAIN''': UNUSED&lt;br /&gt;
* '''ALTITUDE_PGAIN''': Default = 0.&lt;br /&gt;
* '''PROX''': only A/C at the same level are taken into account. Default = 20.&lt;br /&gt;
* '''MODE''': positions are global (earth frame) or local (leader frame). Default = GLOBAL&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
&lt;br /&gt;
A setting file can be added to change dynamically the above parameters: conf/settings/formation.xml&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;dl_settings name=&amp;quot;formation&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;24&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;1&amp;quot; VAR=&amp;quot;leader_id&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_pos&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_speed&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_course&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_alt&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;1&amp;quot; VAR=&amp;quot;form_mode&amp;quot; module=&amp;quot;multi/formation&amp;quot; values=&amp;quot;GLOBAL|LOCAL&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dl_settings&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flight plan ===&lt;br /&gt;
&lt;br /&gt;
The formation flight service is used with proper function calls in the [[Flight_Plans|flight plan]]. Examples can be found in conf/flight_plans/form_leader.xml and conf/flight_plans/form_follow.xml&lt;br /&gt;
&lt;br /&gt;
The leader is in charge of the global trajectory of the formation, while the followers are only following the leader.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:Projects]] [[Category:Modules]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=MultiUAV&amp;diff=26219</id>
		<title>MultiUAV</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=MultiUAV&amp;diff=26219"/>
		<updated>2024-09-19T10:39:11Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''WARNING:''' the functionalities described in this section are experimental and have never been fully tested. Use with care !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TCAS ==&lt;br /&gt;
&lt;br /&gt;
=== Principle ===&lt;br /&gt;
&lt;br /&gt;
[[Image:Tcas_GE.jpg|thumb|400px|Trajectories of 2 UAVs using the TCAS system]]&lt;br /&gt;
&lt;br /&gt;
The [http://en.wikipedia.org/wiki/Traffic_Collision_Avoidance_System TCAS] (Traffic Collision Avoidance System) is used on civil aircraft to reduce the incidence of mid-air collisions. The principle is to monitor the airspace around the aircraft, warn the pilot and provide conflict resolution indication. For the Paparazzi system, a light version of a TCAS-inspired system has been implemented. It can send warning to the ground station and if nothing is done, it takes control of the vertical loop in order to have a minimum vertical separation. This TCAS monitors all the aircrafts based on the traffic information send by the Server and it resolve conflicts only with one aircraft at a time.&lt;br /&gt;
&lt;br /&gt;
When the system detects a possible collision, the TCAS logic follows the rules:&lt;br /&gt;
* '''if''' other_AC_alt &amp;gt; AC_alt + alt_limit '''then''' the AC goes down (alt_setpoint = MIN(nav_alt, other_AC_alt - alt_limit))&lt;br /&gt;
* '''if''' other_AC_alt &amp;lt; AC_alt - alt_limit '''then''' the AC goes up (alt_setpoint = MAX(nav_alt, other_AC_alt + alt_limit))&lt;br /&gt;
* '''else''' the AC with the smallest ID goes down&lt;br /&gt;
* alt_setpoint is bounded by (ground_alt + security_height)&lt;br /&gt;
The control of the TCAS will be active until the conflict is solved, no longer exist or a timeout occurs.&lt;br /&gt;
&lt;br /&gt;
On top of this, the resolution is sent to the conflicting UAV (relayed by the ground). In case of conflict on the first resolution (ex: the 2 UAVs are climbing), one of them will decide to change its decision.&lt;br /&gt;
&lt;br /&gt;
[[File:tcas_nego.png]]&lt;br /&gt;
&lt;br /&gt;
=== Activate TCAS service ===&lt;br /&gt;
&lt;br /&gt;
The ¨traffic_info¨ service must be activated with a specific TCAS compile flag; '''TRAFFIC_INFO'''  This service is activated by default for fixed wing aircraft and is not implemented yet on rotorcraft.&lt;br /&gt;
&lt;br /&gt;
The TCAS is activated by loading the appropriate module in the '''modules''' section (see [[Modules]] page):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;load name=&amp;quot;tcas.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
&lt;br /&gt;
* The TCAS system is operational '''only''' in '''AUTO2''' and in '''altitude mode'''. &lt;br /&gt;
* The system is '''inhibited under the security height'''.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
Add a Configuration block like this in all your airframe configuration XML document&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;TCAS&amp;quot; prefix=&amp;quot;TCAS_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TAU_TA&amp;quot; value=&amp;quot;10.&amp;quot; unit=&amp;quot;s&amp;quot;/&amp;gt; &amp;lt;!-- Traffic Advisory --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TAU_RA&amp;quot; value=&amp;quot;6.&amp;quot; unit=&amp;quot;s&amp;quot;/&amp;gt; &amp;lt;!-- Resolution Advisory --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALIM&amp;quot; value=&amp;quot;15.&amp;quot; unit=&amp;quot;m&amp;quot;/&amp;gt; &amp;lt;!-- Altitude LIMit --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;DMOD&amp;quot; value=&amp;quot;10.&amp;quot; unit=&amp;quot;m&amp;quot;/&amp;gt; &amp;lt;!-- Distance MODification --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;DT_MAX&amp;quot; value=&amp;quot;2000&amp;quot; unit=&amp;quot;ms&amp;quot;/&amp;gt; &amp;lt;!-- DelTa MAXimum of lost comms or timeout --&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explanation of parameters:&lt;br /&gt;
&lt;br /&gt;
* '''TAU_TA''': traffic advisory in second. A warning message is send to the ground and displayed in the alert page of the GCS if the estimated time before a collision is below TAU_TA. Default = 2*CARROT.&lt;br /&gt;
* '''TAU_RA''': resolution advisory in second. A warning message is send to the ground (+ display in GCS) and the system takes control over the altitude setpoint of the vertical loop if the estimated time before a collision is below TAU_RA. Default = CARROT.&lt;br /&gt;
* '''ALIM''': altitude limit in meters. The minimum vertical separation between two aircraft. Default = 10.&lt;br /&gt;
* '''DMOD''': distance modification in meters. The distance below which RA are triggered (avoid to have two aircraft getting really close because their relative speed is too small to trigger alarms). Default = 10.&lt;br /&gt;
* '''DT_MAX''': lost comm or timeout in ms. Timeout to interrupt a TA or an RA if data are not received. Default = 1500.&lt;br /&gt;
&lt;br /&gt;
== Formation Flight ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Multi_uav_gcs.png|thumb|400px|Trajectories of 2 UAVs using the TCAS system]]&lt;br /&gt;
&lt;br /&gt;
A basic formation flight control can be activated by load the appropriate module&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;load name=&amp;quot;formation_flight.xml&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This service can be used together with the [[MultiUAV#TCAS|TCAS]] service (unless you are very confident with your control gains...)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;FORMATION&amp;quot; prefix=&amp;quot;FORM_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;CARROT&amp;quot; value=&amp;quot;3.&amp;quot; unit=&amp;quot;s&amp;quot;/&amp;gt; &amp;lt;!-- carrot distance for followers --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;POS_PGAIN&amp;quot; value=&amp;quot;0.02&amp;quot;/&amp;gt; &amp;lt;!-- coef on position error --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SPEED_PGAIN&amp;quot; value=&amp;quot;0.4&amp;quot;/&amp;gt; &amp;lt;!-- coef on speed error --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;COURSE_PGAIN&amp;quot; value=&amp;quot;0.8&amp;quot;/&amp;gt; &amp;lt;!-- coef on course error (override course pgain for followers) --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALTITUDE_PGAIN&amp;quot; value=&amp;quot;0.1&amp;quot;/&amp;gt; &amp;lt;!-- coef on altitude error --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PROX&amp;quot; value=&amp;quot;60.&amp;quot; unit=&amp;quot;m&amp;quot;/&amp;gt; &amp;lt;!-- proximity distance --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MODE&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt; &amp;lt;!-- mode 0 = global, 1 = local --&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''CARROT''': Default = 0.&lt;br /&gt;
* '''POS_PGAIN''': Default = 0.&lt;br /&gt;
* '''SPEED_PGAIN''': Default = 0.&lt;br /&gt;
* '''COURSE_PGAIN''': UNUSED&lt;br /&gt;
* '''ALTITUDE_PGAIN''': Default = 0.&lt;br /&gt;
* '''PROX''': only A/C at the same level are taken into account. Default = 20.&lt;br /&gt;
* '''MODE''': positions are global (earth frame) or local (leader frame). Default = GLOBAL&lt;br /&gt;
&lt;br /&gt;
=== Settings ===&lt;br /&gt;
&lt;br /&gt;
A setting file can be added to change dynamically the above parameters: conf/settings/formation.xml&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;dl_settings name=&amp;quot;formation&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;24&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;1&amp;quot; VAR=&amp;quot;leader_id&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_pos&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_speed&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_course&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;0.01&amp;quot; VAR=&amp;quot;coef_form_alt&amp;quot; module=&amp;quot;multi/formation&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;dl_setting MAX=&amp;quot;1&amp;quot; MIN=&amp;quot;0&amp;quot; STEP=&amp;quot;1&amp;quot; VAR=&amp;quot;form_mode&amp;quot; module=&amp;quot;multi/formation&amp;quot; values=&amp;quot;GLOBAL|LOCAL&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/dl_settings&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flight plan ===&lt;br /&gt;
&lt;br /&gt;
The formation flight service is used with proper function calls in the [[Flight_Plans|flight plan]]. Examples can be found in conf/flight_plans/form_leader.xml and conf/flight_plans/form_follow.xml&lt;br /&gt;
&lt;br /&gt;
The leader is in charge of the global trajectory of the formation, while the followers are only following the leader.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:Projects]] [[Category:Modules]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Module/Airspeed_ETS&amp;diff=26150</id>
		<title>Module/Airspeed ETS</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Module/Airspeed_ETS&amp;diff=26150"/>
		<updated>2023-11-08T14:00:37Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
[[Image:Ets_airspeed_v3.jpg|thumb|right|Eagletree Airspeed v3]]&lt;br /&gt;
&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Modules&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The EagleTree Airspeed Sensor is a low cost module and comes with a good [http://en.wikipedia.org/wiki/Pitot_tube pitot tube] (Prandtl style, pitot-static tube) that includes static and dynamic ports. It has an I²C interface that connects directly to the Autopilot I²C port.&lt;br /&gt;
&lt;br /&gt;
NOTE: the sensor has two operating modes which determine what value is sent to the autopilot. In the default mode the pressure diference between the 2 ends of the pitot is sent. Supposedly this could be used to calculate airspeed but in reality temperature must also be taken into account. The rest of this page assumes that a temperature reading is not needed and the usefullness is in question. Do not use it for any serious stuff.&amp;lt;BR&amp;gt;&lt;br /&gt;
In the other mode, called &amp;quot;third party mode&amp;quot;, the actual speed value is sent as shown in the sensor. The sensor is said by the manufacturer to take temperature into account to arrive at this value so this should be used as the correct speed. Unfortunately the Paparazzi code does not work in this mode and additional hardware (an EagleTree elogger) is needed to put the sensor in this mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||Module name||sensors/airspeed_ets&lt;br /&gt;
|-&lt;br /&gt;
|Sensor type&lt;br /&gt;
|air speed&lt;br /&gt;
|-&lt;br /&gt;
|Range&lt;br /&gt;
|4m/s .. 150m/s&lt;br /&gt;
|-&lt;br /&gt;
|Resolution&lt;br /&gt;
|0.3m/s&lt;br /&gt;
|-&lt;br /&gt;
|Refresh rate&lt;br /&gt;
|10Hz&lt;br /&gt;
|-&lt;br /&gt;
|I2C address&lt;br /&gt;
|0xEA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[http://www.eagletreesystems.com/Support/manuals/airspeed-v3.pdf Product data sheet]&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The sensor can directly be connected to an I2C port of and autopilot. The + supply voltage can be between 3V and 16V. &lt;br /&gt;
&lt;br /&gt;
When you buy the airspeed sensor it is set to operate in the default mode. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Caution!'''&amp;lt;/span&amp;gt; Make sure you did not set it somehow to 3rd party mode.&lt;br /&gt;
&lt;br /&gt;
== Wiring ==&lt;br /&gt;
&lt;br /&gt;
The ETS Airspeed sensor has an I2C cable with the following layout:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||'''Tiny/TWOG I2C pin'''||'''Autopilot I2C'''||'''ETS Airspeed wire colour'''&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|white&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
| +5V&lt;br /&gt;
|red&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
| +3.3V&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|SDA&lt;br /&gt;
|yellow&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|SCL&lt;br /&gt;
|brown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Please refer to your boards documentation to find out the correct pinout on your board (which cable to connect to which pin). &lt;br /&gt;
As an example the correct pinout for the TWOG v1.0 and Tiny has been given in the table above.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
'''Please refer to the generated docs for the exact configuration options of the version you are using!'''&lt;br /&gt;
http://docs.paparazziuav.org/latest/module__airspeed_ets.html&lt;br /&gt;
&lt;br /&gt;
To use it load the ''airspeed_ets'' module:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
     &amp;lt;module name=&amp;quot;airspeed_ets&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
For versions older than v5.8&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;For versions older than v5.8, also define the used I2C device:&lt;br /&gt;
Depending on your board and the I2C interface you are using, you may need to&lt;br /&gt;
enable I2CX, where X is 0,1,2,etc., if you are not using it already:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;firmware&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C0&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C0 --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C1&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C1 --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C2&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C2 --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C3&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C3 --&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
You can also set some '''optional parameters to change the default configuration'''. &lt;br /&gt;
For example to use I2C1 instead of I2C0, a scale of 1.44 (default is 1.8) and offset of 50 (default is 0) is needed:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;airspeed_ets&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Applies if another I2C interface than IC20 is used --&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;AIRSPEED_ETS_SCALE&amp;quot;   value=&amp;quot;1.44&amp;quot;/&amp;gt; &lt;br /&gt;
      &amp;lt;define name=&amp;quot;AIRSPEED_ETS_OFFSET&amp;quot;  value=&amp;quot;50&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;AIRSPEED_ETS_I2C_DEV&amp;quot; value=&amp;quot;i2c1&amp;quot;/&amp;gt; &lt;br /&gt;
    &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Usage as sensor for speed control ==&lt;br /&gt;
&lt;br /&gt;
To use the sensor to control the speed of your aircraft add the aggressive climb flag, define which I2C device you are enabling and enable airspeed control:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;px4fmu_4.0_chibios&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AGR_CLIMB&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_AIRSPEED&amp;quot;/&amp;gt; &amp;lt;!-- Use the airspeed sensor in the control loop --&amp;gt;&lt;br /&gt;
  &amp;lt;/target&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Where ofcourse the board value is just an example here, use the name of the hardware you use.&lt;br /&gt;
&lt;br /&gt;
=== Airframe configuration ===&lt;br /&gt;
 &lt;br /&gt;
Now to use real airspeed values for adjusting your aircraft autopilot behavior there are several way to accomplish this. A simple classic way is to add the following to the end of the &amp;quot;VERTICAL CONTROL&amp;quot; section of your airframe file:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;VERTICAL_CONTROL&amp;quot; prefix=&amp;quot;V_CTL_&amp;quot;&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;!-- auto airspeed and altitude inner loop (for airspeed sensor) --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_AIRSPEED_SETPOINT&amp;quot; value=&amp;quot;13.0&amp;quot;  unit=&amp;quot;m/s&amp;quot; /&amp;gt; &amp;lt;!-- SETPOINT values may need to be adjusted to suit your aircraft --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_AIRSPEED_PGAIN&amp;quot;    value=&amp;quot;0.060&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_AIRSPEED_IGAIN&amp;quot;    value=&amp;quot;0.050&amp;quot; /&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_GROUNDSPEED_SETPOINT&amp;quot; value=&amp;quot;7.0&amp;quot;  unit=&amp;quot;m/s&amp;quot; /&amp;gt; &amp;lt;!-- SETPOINT values may need to be adjusted to suit your aircraft --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_GROUNDSPEED_PGAIN&amp;quot;    value=&amp;quot;0.75&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_GROUNDSPEED_IGAIN&amp;quot;    value=&amp;quot;0.25&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
  &lt;br /&gt;
Note that the SETPOINT values may need to be adjusted to suit your aircraft.&lt;br /&gt;
&lt;br /&gt;
Note that depending on whether you set the AIRSPEED setpoint or the GROUNDSPEED setpoint higher, either constant airspeed or constant groundspeed, respectively, will be the goal of the controller.&lt;br /&gt;
&lt;br /&gt;
See paparazzi/conf/airframes/easystar_ets_example.xml for an example airframe configuration.&lt;br /&gt;
&lt;br /&gt;
Better even is to start using ETECS, '''E'''nhanced '''T'''otal '''E'''nergy '''C'''ontrol '''S'''ystem&lt;br /&gt;
&lt;br /&gt;
Take a look at See ~/paparazzi/conf/airframes/examples/MentorEnergy.xml for an example airframe configuration.&lt;br /&gt;
&lt;br /&gt;
=== Debugging and logging the airspeed values ===&lt;br /&gt;
&lt;br /&gt;
To debug or log the raw values from the ETS airspeed sensor define AIRSPEED_ETS_SYNC_SEND in your airframe file to send the message AIRSPEED_ETS on every sensor reading. &lt;br /&gt;
Note that defining this sends the AIRSPEED_ETS message at the sensor read rate as defined in conf/modules/airspeed_ets.xml. &lt;br /&gt;
This does not have any bearing on the AIRSPEED message (if both AIRSPEED_ETS_SYNC_SEND and USE_AIRSPEED are defined, then both messages are sent). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Caution!'''&amp;lt;/span&amp;gt; ''Please note: if you are using and old branch of before July 16, 2013, please replace AIRSPEED_ETS_SYNC_SEND with SENSOR_SYNC_SEND''&lt;br /&gt;
&lt;br /&gt;
Also note that as of 15 Oct 2023 the default debug message is no longer available in the PPRZlink messages.xml file.&lt;br /&gt;
Therefore to determine your possible sensor offset add this temporary debug message to the ~/paparazzi/sw/ext/pprzlink/message_definitions/v1.0/messages.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;message name=&amp;quot;AIRSPEED_ETS&amp;quot; id=&amp;quot;57&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;adc&amp;quot; type=&amp;quot;uint16&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;offset&amp;quot; type=&amp;quot;uint16&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;scaled&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After adding that don't forget that this is needed before you upload you firmware to the flightcontroller to make sure changes are included:&lt;br /&gt;
&lt;br /&gt;
 make clean &amp;amp;&amp;amp; make&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      ...&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;module name=&amp;quot;airspeed_ets&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;configure name=&amp;quot;AIRSPEED_ETS_I2C_DEV&amp;quot; value=&amp;quot;i2c1&amp;quot;/&amp;gt;       &lt;br /&gt;
        &amp;lt;define name=&amp;quot;AIRSPEED_ETS_START_DELAY&amp;quot; value=&amp;quot;0.7&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;define name=&amp;quot;AIRSPEED_ETS_SCALE&amp;quot; value=&amp;quot;1.76&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;define name=&amp;quot;AIRSPEED_ETS_OFFSET&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;--&amp;gt;&lt;br /&gt;
        &amp;lt;define name=&amp;quot;AIRSPEED_ETS_3RD_PARTY_MODE&amp;quot; value=&amp;quot;FALSE&amp;quot;/&amp;gt;&amp;lt;!-- The default out of the box is ETS mode--&amp;gt;&lt;br /&gt;
        &amp;lt;define name=&amp;quot;AIRSPEED_ETS_USE_FILTER&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt; &lt;br /&gt;
        &amp;lt;define name=&amp;quot;AIRSPEED_ETS_LOWPASS_TAU&amp;quot; value=&amp;quot;.20&amp;quot;/&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;define name=&amp;quot;AIRSPEED_ETS_SYNC_SEND&amp;quot;/&amp;gt; &amp;lt;!-- Can be disabled after full validation after testflight --&amp;gt;&lt;br /&gt;
      &amp;lt;/module&amp;gt;&lt;br /&gt;
&lt;br /&gt;
     ...&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The general airspeed can be displayed in the Messages tool by adding the AIRSPEED message to the telemetry file as follows:&lt;br /&gt;
{{Box Code|conf/telemetry/default.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;process name=&amp;quot;Ap&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;mode name=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;AIRSPEED&amp;quot; period=&amp;quot;1.0&amp;quot;/&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The AIRSPEED_ETS message does NOT need to be added to the telemetry configuration since it is sent directly by the module if AIRSPEED_ETS_SYNC_SEND is defined.&lt;br /&gt;
&lt;br /&gt;
=== NOTES ===&lt;br /&gt;
# In the GCS, the strip displays ground speed and '''not''' airspeed by default. In order to display airspeed, drag-and-drop the airspeed message field from the Messages tool onto the 2D map of the GCS. &lt;br /&gt;
# The telemetry name AIRSPEED&amp;quot;  should actually be called SPEED and contains Groundspeed and airspeed return values.&lt;br /&gt;
&lt;br /&gt;
== Measurement only ==&lt;br /&gt;
&lt;br /&gt;
To use the  sensor for airspeed measurement is also possible. This Measurement only mode does thus not input to the control loops to have effect to the aircraft behavior.&lt;br /&gt;
&lt;br /&gt;
To see the sensors data in the log file set the SENSOR_SYNC_SEND in your airframe file. Every time new data is available it will be sent directly.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
     &amp;lt;module name=&amp;quot;airspeed_ets&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;AIRSPEED_ETS_SYNC_SEND&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Caution!'''&amp;lt;/span&amp;gt;''Please note: if you are using and old branch of before July 16, 2013, please replace AIRSPEED_ETS_SYNC_SEND with SENSOR_SYNC_SEND''&lt;br /&gt;
&lt;br /&gt;
===Result message===&lt;br /&gt;
&lt;br /&gt;
The raw data (adc), estimated offset at init time (offset) and the converted result (scaled) is written to the log file.&lt;br /&gt;
{{Box Code|conf/messages.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;message name=&amp;quot;AIRSPEED_ETS&amp;quot; id=&amp;quot;57&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;field name=&amp;quot;adc&amp;quot;    type=&amp;quot;uint16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;field name=&amp;quot;offset&amp;quot; type=&amp;quot;uint16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;field name=&amp;quot;scaled&amp;quot; type=&amp;quot;float&amp;quot;  /&amp;gt;&lt;br /&gt;
 &amp;lt;/message&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample log file lines&lt;br /&gt;
 149.529 123 AIRSPEED_ETS 1626 1606 8.024844&lt;br /&gt;
 149.633 123 AIRSPEED_ETS 1626 1606 8.024844&lt;br /&gt;
 149.730 123 AIRSPEED_ETS 1627 1606 7.942226&lt;br /&gt;
 149.841 123 AIRSPEED_ETS 1628 1606 7.942226&lt;br /&gt;
&lt;br /&gt;
=Issues= &lt;br /&gt;
&lt;br /&gt;
Some people report that the sensor only works after a fresh upload, not after a regular power on. Adding a AIRSPEED_ETS_START_DELAY setting could help getting it to work. For this to work need at least version 5.2 of Paparazzi.&lt;br /&gt;
&lt;br /&gt;
Add the following to your module part in your airframe XML document. Where ''value'' can be anything from 0.01 to 4seconds. Some users report that a value of 1 fixes the issue for them.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;airspeed_ets&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AIRSPEED_ETS_START_DELAY&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/module&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:User_Documentation]] [[Category:Modules]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Module/Airspeed_ETS&amp;diff=26149</id>
		<title>Module/Airspeed ETS</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Module/Airspeed_ETS&amp;diff=26149"/>
		<updated>2023-11-08T13:39:48Z</updated>

		<summary type="html">&lt;p&gt;Openuas: Add explanation on how to add debug message again&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
[[Image:Ets_airspeed_v3.jpg|thumb|right|Eagletree Airspeed v3]]&lt;br /&gt;
&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Modules&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The EagleTree Airspeed Sensor is a low cost module and comes with a good [http://en.wikipedia.org/wiki/Pitot_tube pitot tube] (Prandtl style, pitot-static tube) that includes static and dynamic ports. It has an I²C interface that connects directly to the Autopilot I²C port.&lt;br /&gt;
&lt;br /&gt;
NOTE: the sensor has two operating modes which determine what value is sent to the autopilot. In the default mode the pressure diference between the 2 ends of the pitot is sent. Supposedly this could be used to calculate airspeed but in reality temperature must also be taken into account. The rest of this page assumes that a temperature reading is not needed and the usefullness is in question. Do not use it for any serious stuff.&amp;lt;BR&amp;gt;&lt;br /&gt;
In the other mode, called &amp;quot;third party mode&amp;quot;, the actual speed value is sent as shown in the sensor. The sensor is said by the manufacturer to take temperature into account to arrive at this value so this should be used as the correct speed. Unfortunately the Paparazzi code does not work in this mode and additional hardware (an EagleTree elogger) is needed to put the sensor in this mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||Module name||sensors/airspeed_ets&lt;br /&gt;
|-&lt;br /&gt;
|Sensor type&lt;br /&gt;
|air speed&lt;br /&gt;
|-&lt;br /&gt;
|Range&lt;br /&gt;
|4m/s .. 150m/s&lt;br /&gt;
|-&lt;br /&gt;
|Resolution&lt;br /&gt;
|0.3m/s&lt;br /&gt;
|-&lt;br /&gt;
|Refresh rate&lt;br /&gt;
|10Hz&lt;br /&gt;
|-&lt;br /&gt;
|I2C address&lt;br /&gt;
|0xEA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[http://www.eagletreesystems.com/Support/manuals/airspeed-v3.pdf Product data sheet]&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The sensor can directly be connected to an I2C port of and autopilot. The + supply voltage can be between 3V and 16V. &lt;br /&gt;
&lt;br /&gt;
When you buy the airspeed sensor it is set to operate in the default mode. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Caution!'''&amp;lt;/span&amp;gt; Make sure you did not set it somehow to 3rd party mode.&lt;br /&gt;
&lt;br /&gt;
== Wiring ==&lt;br /&gt;
&lt;br /&gt;
The ETS Airspeed sensor has an I2C cable with the following layout:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||'''Tiny/TWOG I2C pin'''||'''Autopilot I2C'''||'''ETS Airspeed wire colour'''&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|white&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
| +5V&lt;br /&gt;
|red&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
| +3.3V&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|SDA&lt;br /&gt;
|yellow&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|SCL&lt;br /&gt;
|brown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Please refer to your boards documentation to find out the correct pinout on your board (which cable to connect to which pin). &lt;br /&gt;
As an example the correct pinout for the TWOG v1.0 and Tiny has been given in the table above.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
'''Please refer to the generated docs for the exact configuration options of the version you are using!'''&lt;br /&gt;
http://docs.paparazziuav.org/latest/module__airspeed_ets.html&lt;br /&gt;
&lt;br /&gt;
To use it load the ''airspeed_ets'' module:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot; /&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
For versions older than v5.8&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;For versions older than v5.8, also define the used I2C device:&lt;br /&gt;
Depending on your board and the I2C interface you are using, you may need to&lt;br /&gt;
enable I2CX, where X is 0,1,2,etc., if you are not using it already:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;firmware&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C0&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C0 --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C1&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C1 --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C2&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C2 --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C3&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C3 --&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
You can also set some '''optional parameters to change the default configuration'''. &lt;br /&gt;
For example to use I2C1 instead of I2C0, a scale of 1.44 (default is 1.8) and offset of 50 (default is 0) is needed:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Applies if another I2C interface than IC20 is used --&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;AIRSPEED_ETS_SCALE&amp;quot;   value=&amp;quot;1.44&amp;quot;/&amp;gt; &lt;br /&gt;
      &amp;lt;define name=&amp;quot;AIRSPEED_ETS_OFFSET&amp;quot;  value=&amp;quot;50&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;AIRSPEED_ETS_I2C_DEV&amp;quot; value=&amp;quot;i2c1&amp;quot;/&amp;gt; &lt;br /&gt;
    &amp;lt;/load&amp;gt;&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Usage as sensor for speed control ==&lt;br /&gt;
&lt;br /&gt;
To use the sensor to control the speed of your aircraft add the aggressive climb flag, define which I2C device you are enabling and enable airspeed control:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;twog_1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AGR_CLIMB&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_AIRSPEED&amp;quot;/&amp;gt; &amp;lt;!-- Use the airspeed sensor in the control loop --&amp;gt;&lt;br /&gt;
  &amp;lt;/target&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Airframe configuration ===&lt;br /&gt;
 &lt;br /&gt;
Now to use real airspeed values for adjusting your aircrafts autopilot behavior there are several way to accomplish this. A simple classic way is to add the following to the end of the &amp;quot;VERTICAL CONTROL&amp;quot; section of your airframe file:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;VERTICAL_CONTROL&amp;quot; prefix=&amp;quot;V_CTL_&amp;quot;&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;!-- auto airspeed and altitude inner loop (for airspeed sensor) --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_AIRSPEED_SETPOINT&amp;quot; value=&amp;quot;13.0&amp;quot;  unit=&amp;quot;m/s&amp;quot; /&amp;gt; &amp;lt;!-- SETPOINT values may need to be adjusted to suit your aircraft --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_AIRSPEED_PGAIN&amp;quot;    value=&amp;quot;0.060&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_AIRSPEED_IGAIN&amp;quot;    value=&amp;quot;0.050&amp;quot; /&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_GROUNDSPEED_SETPOINT&amp;quot; value=&amp;quot;7.0&amp;quot;  unit=&amp;quot;m/s&amp;quot; /&amp;gt; &amp;lt;!-- SETPOINT values may need to be adjusted to suit your aircraft --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_GROUNDSPEED_PGAIN&amp;quot;    value=&amp;quot;0.75&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_GROUNDSPEED_IGAIN&amp;quot;    value=&amp;quot;0.25&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
  &lt;br /&gt;
Note that the SETPOINT values may need to be adjusted to suit your aircraft.&lt;br /&gt;
&lt;br /&gt;
Note that depending on whether you set the AIRSPEED setpoint or the GROUNDSPEED setpoint higher, either constant airspeed or constant groundspeed, respectively, will be the goal of the controller.&lt;br /&gt;
&lt;br /&gt;
See paparazzi/conf/airframes/easystar_ets_example.xml for an example airframe configuration.&lt;br /&gt;
&lt;br /&gt;
Better even is to start using ETECS, '''E'''nhanced '''T'''otal '''E'''nergy '''C'''ontrol '''S'''ystem&lt;br /&gt;
&lt;br /&gt;
Take a look at See paparazzi/conf/airframes/MentorEnergy.xml for an example airframe configuration.&lt;br /&gt;
&lt;br /&gt;
=== Debugging and logging the airspeed values ===&lt;br /&gt;
&lt;br /&gt;
To debug or log the raw values from the ETS airspeed sensor define AIRSPEED_ETS_SYNC_SEND in your airframe file to send the message AIRSPEED_ETS on every sensor reading. &lt;br /&gt;
Note that defining this sends the AIRSPEED_ETS message at the sensor read rate as defined in conf/modules/airspeed_ets.xml. &lt;br /&gt;
This does not have any bearing on the AIRSPEED message (if both AIRSPEED_ETS_SYNC_SEND and USE_AIRSPEED are defined, then both messages are sent). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Caution!'''&amp;lt;/span&amp;gt; ''Please note: if you are using and old branch of before July 16, 2013, please replace AIRSPEED_ETS_SYNC_SEND with SENSOR_SYNC_SEND''&lt;br /&gt;
&lt;br /&gt;
Also note that as of 15 Oct 2023 the default debug message is no longer available in the PPRZlink messages.xml file.&lt;br /&gt;
Therefore to determine your possible sensor offset add this temporary debug message to the ~/paparazzi/sw/ext/pprzlink/message_definitions/v1.0/messages.xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;message name=&amp;quot;AIRSPEED_ETS&amp;quot; id=&amp;quot;57&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;adc&amp;quot; type=&amp;quot;uint16&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;offset&amp;quot; type=&amp;quot;uint16&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;field name=&amp;quot;scaled&amp;quot; type=&amp;quot;float&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After adding that don't forget that this is needed before you upload you firmware to the flightcontroller to make sure changes are included:&lt;br /&gt;
&lt;br /&gt;
 make clean &amp;amp;&amp;amp; make&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;module name=&amp;quot;airspeed_ets&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;configure name=&amp;quot;AIRSPEED_ETS_I2C_DEV&amp;quot; value=&amp;quot;i2c1&amp;quot;/&amp;gt;       &lt;br /&gt;
        &amp;lt;define name=&amp;quot;AIRSPEED_ETS_START_DELAY&amp;quot; value=&amp;quot;0.7&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;define name=&amp;quot;AIRSPEED_ETS_SCALE&amp;quot; value=&amp;quot;1.76&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;!--&amp;lt;define name=&amp;quot;AIRSPEED_ETS_OFFSET&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;--&amp;gt;&lt;br /&gt;
        &amp;lt;define name=&amp;quot;AIRSPEED_ETS_3RD_PARTY_MODE&amp;quot; value=&amp;quot;FALSE&amp;quot;/&amp;gt;&amp;lt;!-- The default out of the box is ETS mode--&amp;gt;&lt;br /&gt;
        &amp;lt;define name=&amp;quot;AIRSPEED_ETS_USE_FILTER&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt; &lt;br /&gt;
        &amp;lt;define name=&amp;quot;AIRSPEED_ETS_LOWPASS_TAU&amp;quot; value=&amp;quot;.20&amp;quot;/&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;define name=&amp;quot;AIRSPEED_ETS_SYNC_SEND&amp;quot;/&amp;gt; &amp;lt;!-- Can be disabled after full validation after testflight --&amp;gt;&lt;br /&gt;
      &amp;lt;/module&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The general airspeed can be displayed in the Messages tool by adding the AIRSPEED message to the telemetry file as follows:&lt;br /&gt;
{{Box Code|conf/telemetry/default.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;process name=&amp;quot;Ap&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;mode name=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;AIRSPEED&amp;quot; period=&amp;quot;1.0&amp;quot;/&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The AIRSPEED_ETS message does NOT need to be added to the telemetry configuration since it is sent directly by the module if AIRSPEED_ETS_SYNC_SEND is defined.&lt;br /&gt;
&lt;br /&gt;
=== NOTES ===&lt;br /&gt;
# In the GCS, the strip displays ground speed and '''not''' airspeed by default. In order to display airspeed, drag-and-drop the airspeed message field from the Messages tool onto the 2D map of the GCS. &lt;br /&gt;
# The telemetry name AIRSPEED&amp;quot;  should actually be called SPEED and contains Groundspeed and airspeed return values.&lt;br /&gt;
&lt;br /&gt;
== Measurement only ==&lt;br /&gt;
&lt;br /&gt;
To use the  sensor for airspeed measurement is also possible. This Measurement only mode does thus not imput to the control loops to have effect to the aircraft behaviour.&lt;br /&gt;
&lt;br /&gt;
To see the sensors data in the log file set the SENSOR_SYNC_SEND in your airframe file. Every time new data is available it will be sent directly.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;SENSOR_SYNC_SEND&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/load&amp;gt;&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Caution!'''&amp;lt;/span&amp;gt; ''Please note: if you are using the master branch and have merged commits on or later than July 16, 2013, please replace SENSOR_SYNC_SEND with AIRSPEED_ETS_SYNC_SEND''&lt;br /&gt;
&lt;br /&gt;
===Result message===&lt;br /&gt;
&lt;br /&gt;
The raw data (adc), estimated offset at init time (offset) and the converted result (scaled) is written to the log file.&lt;br /&gt;
{{Box Code|conf/messages.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;message name=&amp;quot;AIRSPEED_ETS&amp;quot; id=&amp;quot;57&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;field name=&amp;quot;adc&amp;quot;    type=&amp;quot;uint16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;field name=&amp;quot;offset&amp;quot; type=&amp;quot;uint16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;field name=&amp;quot;scaled&amp;quot; type=&amp;quot;float&amp;quot;  /&amp;gt;&lt;br /&gt;
 &amp;lt;/message&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample log file lines&lt;br /&gt;
 149.529 123 AIRSPEED_ETS 1626 1606 8.024844&lt;br /&gt;
 149.633 123 AIRSPEED_ETS 1626 1606 8.024844&lt;br /&gt;
 149.730 123 AIRSPEED_ETS 1627 1606 7.942226&lt;br /&gt;
 149.841 123 AIRSPEED_ETS 1628 1606 7.942226&lt;br /&gt;
&lt;br /&gt;
=Issues= &lt;br /&gt;
&lt;br /&gt;
Some people report that the sensor only works after a fresh upload, not after a regular power on. Adding a AIRSPEED_ETS_START_DELAY setting could help getting it to work. For this to work need at least version 5.2 of Paparazzi.&lt;br /&gt;
&lt;br /&gt;
Add the following to your module part in your airframe XML document. Where ''value'' can be anything from 0.01 to 4seconds. Some users report that a value of 1 fixes the issue for them.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot;&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AIRSPEED_ETS_START_DELAY&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/load&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:User_Documentation]] [[Category:Modules]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=26145</id>
		<title>Multiple Parrot Drones as Swarm via WiFi Router</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=26145"/>
		<updated>2023-06-21T17:31:06Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Network */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Multiple Parrot Drones as Swarm via WiFi Router=&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
&lt;br /&gt;
If you are eager to try and fly multiple Bebop or Discos at the same time and communicate to each-other, this is the page to read on how to get that to work&lt;br /&gt;
&lt;br /&gt;
=What your need=&lt;br /&gt;
&lt;br /&gt;
* 2x Bebop&lt;br /&gt;
* 1x Router&lt;br /&gt;
* Your Fieldlaptop&lt;br /&gt;
&lt;br /&gt;
=Network=&lt;br /&gt;
&lt;br /&gt;
First all your Bebops need to be configured. Switch on the first one... Repeat all those steps for all your Bebops you are going to use in your swarm.&lt;br /&gt;
&lt;br /&gt;
There is a configuration to make. Here are some examples as a start:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed dhcp&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey none none&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or if you have WPA2 and  fixed IP's and do not have set the MAC of your Bebop in your DHCP for a static lease. IP is an example, your router could be on a different subnet.&lt;br /&gt;
Ofcourse change the YOURROUTERSSID and YOURKEY to the SSID of your router end the password of your network.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed 192.168.1.44&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey wpa2 YOURKEY&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=IVY Bus=&lt;br /&gt;
&lt;br /&gt;
 ~/paparazzi/sw/ground_segment/tmtc/link -udp -udp_broadcast&lt;br /&gt;
&lt;br /&gt;
=Airframe=&lt;br /&gt;
&lt;br /&gt;
In Paparazzi-center make four (4x) an airframe configuration, you can use the same airframe file for all since AC_ID makes the difference&lt;br /&gt;
&lt;br /&gt;
To be able to cross-communicate via UDP a additional setting to the Bebop airframe file needs to be added:&lt;br /&gt;
&lt;br /&gt;
If your router has e.g. IP 192.168.209.1 then add this to your airframe in the target section:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;HOST&amp;quot; value=&amp;quot;192.168.209.$(AC_ID)&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;MODEM_HOST&amp;quot; value=&amp;quot;192.168.209.255&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;MODEM_BROADCAST&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the IP number according to your setup&lt;br /&gt;
&lt;br /&gt;
=Tips=&lt;br /&gt;
&lt;br /&gt;
* To make things manageable, one could also resort to local name resolving where the last part name of the device is the  aircraft ID.&lt;br /&gt;
* Or set the last part of a static IP number to the Aircraft ID of your airframes&lt;br /&gt;
&lt;br /&gt;
=TIPS=&lt;br /&gt;
&lt;br /&gt;
Press and hold the Powerbutton for 10seconds in a row until the light turns red, that is a factory reset.&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=ImuCalibration&amp;diff=26144</id>
		<title>ImuCalibration</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=ImuCalibration&amp;diff=26144"/>
		<updated>2023-03-26T18:50:53Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* How It Works */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Theory ==&lt;br /&gt;
&lt;br /&gt;
Accelerometer and Magnetometer calibration is critical to AHRS performance and can be performed using no special hardware. For Gyrometer calibration you need a very good turnable. For the magnetometer, it is very important that the calibration be performed in the fully assembled vehicle, with all systems powered on. This is called hard-iron calibration and will allow us to compensate for any constant parasitic magnetic fields generated by the vehicle.&lt;br /&gt;
The calibration process consists of finding a set of neutrals and scale factors for each sensor, such as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{pmatrix}physical\_value_x\\physical\_value_y\\physical\_value_z\end{pmatrix} = \begin{pmatrix}sf_x&amp;amp;0&amp;amp;0\\0&amp;amp;sf_y&amp;amp;0\\0&amp;amp;0&amp;amp;sf_z\end{pmatrix} * (\begin{pmatrix}sensor_x\\sensor_y\\sensor_z\end{pmatrix}-\begin{pmatrix}n_x\\n_y\\n_z\end{pmatrix})&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The principle of the calibration is the following: an accelerometer, on a vehicle at rest, measures a constant vector (the opposite of gravity) in the earth frame, expressed in the vehicle frame.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
DCM * \begin{pmatrix}0\\0\\-9.81\end{pmatrix} = &lt;br /&gt;
\begin{pmatrix}sf_x&amp;amp;0&amp;amp;0\\0&amp;amp;sf_y&amp;amp;0\\0&amp;amp;0&amp;amp;sf_z\end{pmatrix} * (\begin{pmatrix}sensor_x\\sensor_y\\sensor_z\end{pmatrix}-\begin{pmatrix}n_x\\n_y\\n_z\end{pmatrix})&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DCM is a rotation matrix that converts between earth frame and body frame. It will change when we change the orientation of the vehicle. Nevertheless, a rotation conserves the norm of a vector. We can thus obtain the following scalar equation that doesn't depend on the vehicle orientation :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 9.81^2 = ( sf_x(sensor_x-n_x) )^2 +  (sf_y(sensor_y-n_y) )^2 +  (sf_z(sensor_z-n_z) )^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where 9.81 is earths average gravity value&lt;br /&gt;
&lt;br /&gt;
We can then record an important number of measurements in different orientations and find the set of scale factors and neutrals giving the norm closest to the average gravity value&lt;br /&gt;
&lt;br /&gt;
=== How It Works ===&lt;br /&gt;
&lt;br /&gt;
* It first makes an initial guess using min and max, i.e. for each axis&lt;br /&gt;
** neutral = 0.5 * (max + min)&lt;br /&gt;
** sensitivity = 0.5*(max - min)&lt;br /&gt;
&lt;br /&gt;
*It then uses a data fitting algorithm to optimize the initial guess.&lt;br /&gt;
&lt;br /&gt;
Screenshot of Scilab version.&lt;br /&gt;
[[Image:calibAccel.png|240px]]&lt;br /&gt;
&lt;br /&gt;
'''But before any calibration it is of utmost importance the signs and the axis of your sensors are correct!'''. Therefore make sure and adjust where needed the axis signs of your IMU are correct. To do so, the steps outline in &amp;quot;Finding and Checking Signs&amp;quot; are needed first.&lt;br /&gt;
&lt;br /&gt;
== Finding and Checking Signs ==&lt;br /&gt;
&lt;br /&gt;
'''For [[Subsystem/imu|supported IMUs]], the correct default signs are already defined in the code.'''&lt;br /&gt;
&lt;br /&gt;
If using a new IMU or sign for yours are not in the code yet, here is the way to find them.&lt;br /&gt;
&lt;br /&gt;
We're calibrating everything relative to the IMU frame - Paparazzi has a parameter to define the orientation of the IMU with respect to the body of the vehicle that we'll use later, once you'll have decided of a good mechanical mounting.&lt;br /&gt;
&lt;br /&gt;
Paparazzi uses North East Down (NED) frame, that is positive x is pointing to the front, positive y to the right and positive z down.&lt;br /&gt;
&lt;br /&gt;
===Accelerometer:===&lt;br /&gt;
&lt;br /&gt;
An accelerometer measures the non gravitational acceleration, that is &amp;lt;math&amp;gt;\ddot{x} - g&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; is pointing down, so &amp;lt;math&amp;gt;-g&amp;lt;/math&amp;gt; is pointing up. So stop moving, disregard earth rotation and you'll measure &amp;lt;math&amp;gt;-g&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*When your IMU is level you should see x=0 y=0 z=-9.81&lt;br /&gt;
*When pitching up -g is aligning with x, so you should see  x&amp;gt;0, y=0 and z&amp;lt;0&lt;br /&gt;
*When banking left -g is aligning with y, so you should see x=0, y&amp;gt;0 and z&amp;lt;0&lt;br /&gt;
&lt;br /&gt;
===Magnetometer:===&lt;br /&gt;
A magnetometer measures the Earth's magnetic field. In the northern hemisphere, this points north and down and in  the Southern hemisphere north and up.&lt;br /&gt;
&lt;br /&gt;
Thus in the northern hemisphere:&lt;br /&gt;
*When you align your IMU with the direction of north, you should see x&amp;gt;0, y=0, z&amp;gt;0.&lt;br /&gt;
*When pitching the IMU down, the magnetic vector is aligning with x, so x should increase and z should decrease to zero.&lt;br /&gt;
*If yawing your IMU to the left, the magnetic vector is aligning with y, so y should be positive, x should decrease to zero and z stay positive.&lt;br /&gt;
&lt;br /&gt;
And in the southern hemisphere:&lt;br /&gt;
*When you align your IMU with the direction of north, you should see x&amp;gt;0, y=0, z&amp;lt;0&lt;br /&gt;
*When pitching the IMU up, the magnetic vector is aligning with x, so x should increase and z should increase towards zero.&lt;br /&gt;
*If yawing your IMU to the left, the magnetic vector is aligning with y, so y should be positive, x should decrease to zero and z stay negative.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This also means that after calibration, your mag should report the same values as your [[Subsystem/ahrs#Local_Magnetic_Field|normalized local magnetic field]] when placed horizontally and pointing north.&lt;br /&gt;
&lt;br /&gt;
===Gyrometer:===&lt;br /&gt;
You need some turntable to calibrate the scale factors of your gyros. For signs, the definition of the frame gives the following properties:&lt;br /&gt;
&lt;br /&gt;
*When rolling right, &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; should be positive.&lt;br /&gt;
*When pitching up, &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; should be positive.&lt;br /&gt;
*When yawing to the right, &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; should be positive.&lt;br /&gt;
&lt;br /&gt;
===Verification:===&lt;br /&gt;
Switch to AHRS telemetry mode and look for the fields that are prefixed with imu_&lt;br /&gt;
&lt;br /&gt;
*Bank right should give positive phi &lt;br /&gt;
*Pitch up should give positive theta&lt;br /&gt;
*Yaw right should give increasing psi&lt;br /&gt;
&lt;br /&gt;
*The value you'll see after letting the IMU rest will end up being the &amp;quot;measure&amp;quot; (that is accelerometer and magnetometer.) If those are wrong, the problem is in the calibration of your sensors.&lt;br /&gt;
*The values you get while moving the IMU are influenced by the gyros. If what you see is the value going crazy when you move and then stabilizing to something good after you stop moving, the problem is in your gyros.&lt;br /&gt;
&lt;br /&gt;
If all is done for the axis and coreect signs, one can proceed to the calibration steps.&lt;br /&gt;
&lt;br /&gt;
== Calibration Script Installation==&lt;br /&gt;
&lt;br /&gt;
Vital scripts and places:&lt;br /&gt;
&lt;br /&gt;
# Python script to calibrate the accelerometers and magnetometer. The application can be found in the Paparazzi directory under: sw/tools/calibration/calibrate.py &lt;br /&gt;
# Before you start calibrating one could clear log directory (PAPARAZZI_HOME/var/logs), it can greatly simplify log file search process. However an ll command will per default show a list of log file in date order, where the last one is mostly the file you need for the calculation process.&lt;br /&gt;
&lt;br /&gt;
Also for the calibration helper application to work, you need additional Python libraries. If you already have the package '''paparazzi-dev''' installed, the needed libraries were already installed as dependencies.&lt;br /&gt;
If this is not the case you need to install '''python-scipy''' and '''python-matplotlib'''. This can be done via Synaptic Package Manager or via the command-line of Ubuntu.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install python-scipy&lt;br /&gt;
 $ sudo apt-get install python-matplotlib&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to Calibrate Your IMU ==&lt;br /&gt;
&lt;br /&gt;
Basic procedure:&lt;br /&gt;
&lt;br /&gt;
# Flash the board with your normal AP firmware if you did not already did that before.&lt;br /&gt;
# Switch to the &amp;quot;raw sensors&amp;quot; telemetry mode via ''[[GCS#Settings|GCS-&amp;gt;Settings]]-&amp;gt;Telemetry'' and launch &amp;quot;server&amp;quot; to record a [[Logs|log]].[[Image:MakeSureToSetRAWsensors.jpg|right|Set RAW Messages]]&lt;br /&gt;
# Rotate your IMU/airframe into different attitudes to record relevant measurements for each axis.&lt;br /&gt;
## It is important that you get the min/max sensor values on each axis!&lt;br /&gt;
# Stop the server application after you are done with callibrating, it will write the [[Logs|log file]] buffer (to ''var/logs'').&lt;br /&gt;
# Run the Python script on it to get your calibration coefficients &lt;br /&gt;
# Add the on screen displayed values to your airframe file, one can also use a copy/paste.&lt;br /&gt;
#* See details/examples for specific sensors below.&lt;br /&gt;
#* If you have data from more than one aircraft in your logfile, you will need to specify the aircraft id via the ''--id'' option.&amp;lt;br/&amp;gt;It can be found in the [[Paparazzi_Center|Paparazzi Center]] upper left side. (first comes A/C name, and then id value)&lt;br /&gt;
&lt;br /&gt;
'''Run the script with ''--help'' to list available options:'''&lt;br /&gt;
 ''sw/tools/calibration/calibrate.py --help&lt;br /&gt;
&lt;br /&gt;
=== Calibrating the Accelerometers ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 500px; overflow: hidden&amp;quot;&amp;gt;&amp;lt;gallery widths=200px heigths=200px&amp;gt;&lt;br /&gt;
Image:Aspirin_imu_front_small.jpg|The front of IMU is marked as X axis. Warning! Aspirin 1.5 has x and y silkscreen swapped.&lt;br /&gt;
Image:Acc_cailbration.jpg|Orientations during accelerometer calibration&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TIP: Since accelerometers are very sensitive to vibration distortions, strap your IMU board tight to some heavy object like a big battery. It will help keep the board steady while rotating.&lt;br /&gt;
&lt;br /&gt;
Once your decided to calibrate; take the steps with great care. If not done as precise as you possibly can, than factory calibration values are even better than a poorly calibrated accelerometer.&lt;br /&gt;
&lt;br /&gt;
Here you start to calibrate the accelerometers:&lt;br /&gt;
&lt;br /&gt;
turn and hold the IMU on all six sides of the 'cube' for 10 seconds per IMU axis:&lt;br /&gt;
&lt;br /&gt;
# upright&lt;br /&gt;
# inverted&lt;br /&gt;
# on the nose&lt;br /&gt;
# on the tail&lt;br /&gt;
# on the right side&lt;br /&gt;
# on the left side&lt;br /&gt;
&lt;br /&gt;
Please note that we talk about the '''IMU axes''' here, and '''not''' the '''airframe axes'''.&amp;lt;br&amp;gt;So if you have your IMU mounted under a specific angle in your aircraft; make very sure you align the axis of the IMU and '''not''' the '''aircraft axes''' with earth's gravity. Also for the accelerometer calibration the '''IMU can, but does not need to be mounted inside the airframe. Only the calibration of a magnetometer must be performed while in your aircraft.'''&lt;br /&gt;
&lt;br /&gt;
You can also take some measurements banking 45 degrees.&amp;lt;br&amp;gt;Try to get a homogeneous distribution of your measurements. It is better to let the aircraft rest while measuring an axis to avoid inaccuracies from shaking the IMU in your hand.&lt;br /&gt;
&lt;br /&gt;
Then stop the server so it will write the log file which must containing the needed '''IMU_ACCEL_RAW''' message values. Then run the Python script using the just newly generated log data as the source to get your calibration coefficients: &lt;br /&gt;
&lt;br /&gt;
Open a terminal window and run:&lt;br /&gt;
&lt;br /&gt;
 ''&amp;lt;nowiki&amp;gt;sw/tools/calibration/calibrate.py -s ACCEL var/logs/YY_MM_DD__hh_mm_ss.data&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
Where YY_MM_DD__hh_mm_ss.data is the name of the log data file that was just generated.&lt;br /&gt;
&lt;br /&gt;
Add the resulting output values from this script to the airframe file in the section IMU, for ''example'':&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;section name=&amp;quot;IMU&amp;quot; prefix=&amp;quot;IMU_&amp;quot;&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACCEL_X_NEUTRAL&amp;quot; value=&amp;quot;46&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACCEL_Y_NEUTRAL&amp;quot; value=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACCEL_Z_NEUTRAL&amp;quot; value=&amp;quot;175&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACCEL_X_SENS&amp;quot; value=&amp;quot;4.90862760829&amp;quot; integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACCEL_Y_SENS&amp;quot; value=&amp;quot;4.9043976463&amp;quot;  integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACCEL_Z_SENS&amp;quot; value=&amp;quot;4.82837916573&amp;quot; integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Calibrating the Magnetometer ===&lt;br /&gt;
First of all it is important to know that all ferromagnetic materials near the magnetometer distort the measurements. So preferably you do the magnetometer calibration with the magnetometer and autopilot mounted fixed in your airframe. Also keep your airframe as far away from metal and magnets as possible.&lt;br /&gt;
&lt;br /&gt;
==== Calibrating for the Earth magnetic field ====&lt;br /&gt;
&lt;br /&gt;
The most crucial part for the magnetometer calibration:&lt;br /&gt;
&lt;br /&gt;
'''Steps:'''&lt;br /&gt;
&lt;br /&gt;
# Slowly spin your aircraft around all axes&lt;br /&gt;
&lt;br /&gt;
Ideally you would '''spin''' it '''around all axes''' until you have densely covered the '''whole sphere''' with magnetometer measurements. Take a look at figure MAG2 on how that would look like.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Optional method''' &lt;br /&gt;
If this rotation of your whole airframe is to hard to do: One could also just make sure to really get the min/max on each axis by aligning the magnetometer axes along the local magnetic field vector:&lt;br /&gt;
# Calculate the inclination and declination of the magnetic field where you live that can be looked up [http://www.ngdc.noaa.gov/geomag-web/#igrfwmm here]. Just put in zip/country+city/coordinates &amp;amp; date to get proper degrees. See MAG1 figure.&lt;br /&gt;
# Now point the each mag axis in the direction you got from previous step.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heigths=200px&amp;gt;&lt;br /&gt;
Image:Mag_london_inc-dec.jpg|fig. MAG1 - An example for London&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TIP:&lt;br /&gt;
It can also be convenient to [[RTPlotter|plot]] the ''IMU_MAG_RAW'' values to see when you get the maximum on each axis.&lt;br /&gt;
# Launch [[Paparazzi_Center|Paparazzi Center]]-&amp;gt;Tools-&amp;gt;Realtime_Plotter and Tools-&amp;gt;Messages&lt;br /&gt;
# Drag&amp;amp;Drop each axis of the ''IMU_MAG_RAW'' message to the Plotter canvas.&lt;br /&gt;
&lt;br /&gt;
After you took all measurements, stop the server so it will write the log file and run the Python script on it to get your calibration coefficients:&lt;br /&gt;
 ''&amp;lt;nowiki&amp;gt;sw/tools/calibration/calibrate.py -s MAG var/logs/YY_MM_DD__hh_mm_ss.data -vp&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
Where YY_MM_DD__hh_mm_ss.data is the name of the log data file that was just generated. &lt;br /&gt;
&lt;br /&gt;
The ''-v'' parameter turns on verbose mode, ''-p'' turns on 3D plotting of the results. You can omit them if you don't want this.&lt;br /&gt;
&lt;br /&gt;
This basically does a hard-iron (i.e. offset of the sphere) and soft-iron (i.e. distortion to an ellipsoid) calibration. You can see an example result in Figure MAG2.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heigths=200px&amp;gt;&lt;br /&gt;
Image:Mag_fit_3d.png|fig. MAG2 - Measurements fitted to ellipsoid&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The magnetic field strength and axis are different depending on where you are in the world, because of this you have to [[Subsystem/ahrs#Local_Magnetic_Field|set the local magnetic field]] of the location you intend to fly. Only if you are using the [[Subsystem/ahrs#Complementary_Euler_.28fixed_point.29|older euler filter]] you have to recalibrate your magnetometer to fly somewhere else on the planet.&lt;br /&gt;
&lt;br /&gt;
==== Calibrating for Current ====&lt;br /&gt;
&lt;br /&gt;
When your aircraft flies, currents are flowing through all the electrical wires in your aircraft. These '''currents induce a magnetic field'''. This can create an offset in the measurement of the magnetic north. That is not what we like to have. Luckily we can compensate for this unwanted side-effect by adding current compensation values to the airframe file. This calibration is mainly interesting if you have an aircraft with electric engine.&lt;br /&gt;
&lt;br /&gt;
TIP: This interference effect can also be reduced by putting the magnetometer somewhere away from power wires and by twisting power wires together. &lt;br /&gt;
&lt;br /&gt;
Before doing this calibration, it is important to disengage any autopilot autonomous control and put it in RC control only mode.&lt;br /&gt;
&lt;br /&gt;
'''Steps:'''&lt;br /&gt;
# Set up a current sensor in Paparazzi, or define MILLIAMP_AT_FULL_THROTTLE in your airframe file to enable a current estimation.&lt;br /&gt;
# Load the [http://docs.paparazziuav.org/latest/module__send_imu_mag_current.html send_imu_mag_current.xml] [[Modules|module]].&lt;br /&gt;
# Start the '''send_imu_mag_current''' module via settings [[Image:Send_imu_mag_current.png|500px|right|Start the module for magneto current calibration]]&lt;br /&gt;
# Put your aircraft on the ground and make very sure to hold it steady, movement will mess up the calibration&lt;br /&gt;
# Slowly ramp up the throttle&lt;br /&gt;
# Stop the server&lt;br /&gt;
&lt;br /&gt;
Now the log data is written to log file and we need to do something with it&lt;br /&gt;
&lt;br /&gt;
Open a terminal and just run the script by entering:&lt;br /&gt;
&lt;br /&gt;
 ''&amp;lt;nowiki&amp;gt;sw/tools/calibration/calibrate_mag_current.py var/logs/YY_MM_DD__hh_mm_ss.data&amp;lt;/nowiki&amp;gt;'' &lt;br /&gt;
&lt;br /&gt;
Add the resulting output values from this script to the airframe file in the section IMU, for ''example'':&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;section name=&amp;quot;IMU&amp;quot; prefix=&amp;quot;IMU_&amp;quot;&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;define name= &amp;quot;MAG_X_CURRENT_COEF&amp;quot; value=&amp;quot;0.0591913538739&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name= &amp;quot;MAG_Y_CURRENT_COEF&amp;quot; value=&amp;quot;-0.132912120794&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name= &amp;quot;MAG_Z_CURRENT_COEF&amp;quot; value=&amp;quot;-0.0724604582039&amp;quot;/&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Re-compile and upload your airframe again.&lt;br /&gt;
&lt;br /&gt;
You can check if the calibration worked by watching the psi angle as you ramp up the motors while holding your UA steady. Be sure to do this without the control system active.&lt;br /&gt;
&lt;br /&gt;
Note that a '''change''' in you airframe '''configuration''', e.g. other gains make the motors spin faster, or the '''wiring''' will require a full new '''current calibration'''!&lt;br /&gt;
&lt;br /&gt;
=== Calibrating the Gyrometer ===&lt;br /&gt;
To [[ImuCalibration/Gyroscopes|calibrate the gyrometer]] you '''need''' a '''turntable''', [[ImuCalibration/Gyroscopes| take a look here]] to see how such a setup would look like and which steps are involved. There is a [[ImuCalibration/Gyroscopes| dedicated page]] for this procedure since the steps are not trivial to perform.&lt;br /&gt;
&lt;br /&gt;
Note that gyrometer neutrals a.k.a. ''bias'', are usually not a problem, since they are set by the AHRS aligner at each startup and some [[Subsystem/ahrs|AHRS algorithms]] continuously estimate the bias during flight.&lt;br /&gt;
&lt;br /&gt;
=== Calibrating Infrared Sensors ===&lt;br /&gt;
&lt;br /&gt;
Just in case you still use IR piles for attitude estimation, which is not so common in the days of cheap and available MEMS sensors the steps below will clarify:&lt;br /&gt;
&lt;br /&gt;
Put the aircraft in a styrofoam container or completely seal the IR sensors with styrofoam or similar blocks and get a reading of the neutrals for each axis.  Also take the gyro neutrals at this time.  Update your airframe file, flash the AP and re-check the neutrals.&lt;br /&gt;
&lt;br /&gt;
Using the roll gyro as a worked example: Run up your GCS and ensure it &lt;br /&gt;
is communicating with your airframe. Make sure your airframe is roughly &lt;br /&gt;
level and that it cannot move. Now run the Messages Tool and the [[RTPlotter|real time plotter]] tool. The messages tool will have lots of flashing lights &lt;br /&gt;
indicating when it receives various telemetry packets.  In the Messages &lt;br /&gt;
tool, Click on Gyro Rates and you should see a list of variables.  Click &lt;br /&gt;
on Roll_ADC and drag and drop in onto the main window of the Real Time plotter.  Now give it a while to build a stable graph.&lt;br /&gt;
&lt;br /&gt;
Once things have been running this way for a while, in the Real Time &lt;br /&gt;
Plotter, click on Curves in the menu and select the &lt;br /&gt;
1:telemetry:GYRO_RATES:Roll_ADC entry.  As you select it, you should see &lt;br /&gt;
the average and standard deviation values.  We need the average value.  &lt;br /&gt;
Jot down the number you have.  I have -24.536.&lt;br /&gt;
&lt;br /&gt;
Now go edit your airframe file and look for the ADC_ROLL_NEUTRAL value. &lt;br /&gt;
In my airframe file the value is 520.  As my average value from the Plotter is a &lt;br /&gt;
negative figure, it indicates that the roll Neutral is too high, subtract the average value from the present setting. So I edited my airframe file to be 495.464 (520-24.536).&lt;br /&gt;
&lt;br /&gt;
Recompile and reflash (Don't worry about restarting the GCS, The &lt;br /&gt;
messages program or the other running processes - they will catch up just &lt;br /&gt;
fine after flashing).  Once the Board is back up and the plotter continues, reset it from the menu to get rid of the average. Watch it for a while and check that the line and acculmulated average is on or around 0. You are done.  Use the same process for the IR sensors!&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:User_Documentation]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=ImuCalibration&amp;diff=26143</id>
		<title>ImuCalibration</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=ImuCalibration&amp;diff=26143"/>
		<updated>2023-03-26T18:50:11Z</updated>

		<summary type="html">&lt;p&gt;Openuas: bit better order of steps and clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Theory ==&lt;br /&gt;
&lt;br /&gt;
Accelerometer and Magnetometer calibration is critical to AHRS performance and can be performed using no special hardware. For Gyrometer calibration you need a very good turnable. For the magnetometer, it is very important that the calibration be performed in the fully assembled vehicle, with all systems powered on. This is called hard-iron calibration and will allow us to compensate for any constant parasitic magnetic fields generated by the vehicle.&lt;br /&gt;
The calibration process consists of finding a set of neutrals and scale factors for each sensor, such as &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{pmatrix}physical\_value_x\\physical\_value_y\\physical\_value_z\end{pmatrix} = \begin{pmatrix}sf_x&amp;amp;0&amp;amp;0\\0&amp;amp;sf_y&amp;amp;0\\0&amp;amp;0&amp;amp;sf_z\end{pmatrix} * (\begin{pmatrix}sensor_x\\sensor_y\\sensor_z\end{pmatrix}-\begin{pmatrix}n_x\\n_y\\n_z\end{pmatrix})&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The principle of the calibration is the following: an accelerometer, on a vehicle at rest, measures a constant vector (the opposite of gravity) in the earth frame, expressed in the vehicle frame.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
DCM * \begin{pmatrix}0\\0\\-9.81\end{pmatrix} = &lt;br /&gt;
\begin{pmatrix}sf_x&amp;amp;0&amp;amp;0\\0&amp;amp;sf_y&amp;amp;0\\0&amp;amp;0&amp;amp;sf_z\end{pmatrix} * (\begin{pmatrix}sensor_x\\sensor_y\\sensor_z\end{pmatrix}-\begin{pmatrix}n_x\\n_y\\n_z\end{pmatrix})&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DCM is a rotation matrix that converts between earth frame and body frame. It will change when we change the orientation of the vehicle. Nevertheless, a rotation conserves the norm of a vector. We can thus obtain the following scalar equation that doesn't depend on the vehicle orientation :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 9.81^2 = ( sf_x(sensor_x-n_x) )^2 +  (sf_y(sensor_y-n_y) )^2 +  (sf_z(sensor_z-n_z) )^2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where 9.81 is earths average gravity value&lt;br /&gt;
&lt;br /&gt;
We can then record an important number of measurements in different orientations and find the set of scale factors and neutrals giving the norm closest to the average gravity value&lt;br /&gt;
&lt;br /&gt;
=== How It Works ===&lt;br /&gt;
&lt;br /&gt;
* It first makes an initial guess using min and max, i.e. for each axis&lt;br /&gt;
** neutral = 0.5 * (max + min)&lt;br /&gt;
** sensitivity = 0.5*(max - min)&lt;br /&gt;
&lt;br /&gt;
*It then uses a data fitting algorithm to optimize the initial guess.&lt;br /&gt;
&lt;br /&gt;
Screenshot of Scilab version.&lt;br /&gt;
[[Image:calibAccel.png|240px]]&lt;br /&gt;
&lt;br /&gt;
But before any calibration it is of utmost importance the signs and the axis of your sensors are correct!. Therefore make sure and adjust where needed the axis signs of your IMU are correct. To do so, the steps outline in &amp;quot;Finding and Checking Signs&amp;quot; are needed first.&lt;br /&gt;
&lt;br /&gt;
== Finding and Checking Signs ==&lt;br /&gt;
&lt;br /&gt;
'''For [[Subsystem/imu|supported IMUs]], the correct default signs are already defined in the code.'''&lt;br /&gt;
&lt;br /&gt;
If using a new IMU or sign for yours are not in the code yet, here is the way to find them.&lt;br /&gt;
&lt;br /&gt;
We're calibrating everything relative to the IMU frame - Paparazzi has a parameter to define the orientation of the IMU with respect to the body of the vehicle that we'll use later, once you'll have decided of a good mechanical mounting.&lt;br /&gt;
&lt;br /&gt;
Paparazzi uses North East Down (NED) frame, that is positive x is pointing to the front, positive y to the right and positive z down.&lt;br /&gt;
&lt;br /&gt;
===Accelerometer:===&lt;br /&gt;
&lt;br /&gt;
An accelerometer measures the non gravitational acceleration, that is &amp;lt;math&amp;gt;\ddot{x} - g&amp;lt;/math&amp;gt;. &amp;lt;math&amp;gt;g&amp;lt;/math&amp;gt; is pointing down, so &amp;lt;math&amp;gt;-g&amp;lt;/math&amp;gt; is pointing up. So stop moving, disregard earth rotation and you'll measure &amp;lt;math&amp;gt;-g&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*When your IMU is level you should see x=0 y=0 z=-9.81&lt;br /&gt;
*When pitching up -g is aligning with x, so you should see  x&amp;gt;0, y=0 and z&amp;lt;0&lt;br /&gt;
*When banking left -g is aligning with y, so you should see x=0, y&amp;gt;0 and z&amp;lt;0&lt;br /&gt;
&lt;br /&gt;
===Magnetometer:===&lt;br /&gt;
A magnetometer measures the Earth's magnetic field. In the northern hemisphere, this points north and down and in  the Southern hemisphere north and up.&lt;br /&gt;
&lt;br /&gt;
Thus in the northern hemisphere:&lt;br /&gt;
*When you align your IMU with the direction of north, you should see x&amp;gt;0, y=0, z&amp;gt;0.&lt;br /&gt;
*When pitching the IMU down, the magnetic vector is aligning with x, so x should increase and z should decrease to zero.&lt;br /&gt;
*If yawing your IMU to the left, the magnetic vector is aligning with y, so y should be positive, x should decrease to zero and z stay positive.&lt;br /&gt;
&lt;br /&gt;
And in the southern hemisphere:&lt;br /&gt;
*When you align your IMU with the direction of north, you should see x&amp;gt;0, y=0, z&amp;lt;0&lt;br /&gt;
*When pitching the IMU up, the magnetic vector is aligning with x, so x should increase and z should increase towards zero.&lt;br /&gt;
*If yawing your IMU to the left, the magnetic vector is aligning with y, so y should be positive, x should decrease to zero and z stay negative.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This also means that after calibration, your mag should report the same values as your [[Subsystem/ahrs#Local_Magnetic_Field|normalized local magnetic field]] when placed horizontally and pointing north.&lt;br /&gt;
&lt;br /&gt;
===Gyrometer:===&lt;br /&gt;
You need some turntable to calibrate the scale factors of your gyros. For signs, the definition of the frame gives the following properties:&lt;br /&gt;
&lt;br /&gt;
*When rolling right, &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; should be positive.&lt;br /&gt;
*When pitching up, &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; should be positive.&lt;br /&gt;
*When yawing to the right, &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; should be positive.&lt;br /&gt;
&lt;br /&gt;
===Verification:===&lt;br /&gt;
Switch to AHRS telemetry mode and look for the fields that are prefixed with imu_&lt;br /&gt;
&lt;br /&gt;
*Bank right should give positive phi &lt;br /&gt;
*Pitch up should give positive theta&lt;br /&gt;
*Yaw right should give increasing psi&lt;br /&gt;
&lt;br /&gt;
*The value you'll see after letting the IMU rest will end up being the &amp;quot;measure&amp;quot; (that is accelerometer and magnetometer.) If those are wrong, the problem is in the calibration of your sensors.&lt;br /&gt;
*The values you get while moving the IMU are influenced by the gyros. If what you see is the value going crazy when you move and then stabilizing to something good after you stop moving, the problem is in your gyros.&lt;br /&gt;
&lt;br /&gt;
If all is done for the axis and coreect signs, one can proceed to the calibration steps.&lt;br /&gt;
&lt;br /&gt;
== Calibration Script Installation==&lt;br /&gt;
&lt;br /&gt;
Vital scripts and places:&lt;br /&gt;
&lt;br /&gt;
# Python script to calibrate the accelerometers and magnetometer. The application can be found in the Paparazzi directory under: sw/tools/calibration/calibrate.py &lt;br /&gt;
# Before you start calibrating one could clear log directory (PAPARAZZI_HOME/var/logs), it can greatly simplify log file search process. However an ll command will per default show a list of log file in date order, where the last one is mostly the file you need for the calculation process.&lt;br /&gt;
&lt;br /&gt;
Also for the calibration helper application to work, you need additional Python libraries. If you already have the package '''paparazzi-dev''' installed, the needed libraries were already installed as dependencies.&lt;br /&gt;
If this is not the case you need to install '''python-scipy''' and '''python-matplotlib'''. This can be done via Synaptic Package Manager or via the command-line of Ubuntu.&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install python-scipy&lt;br /&gt;
 $ sudo apt-get install python-matplotlib&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to Calibrate Your IMU ==&lt;br /&gt;
&lt;br /&gt;
Basic procedure:&lt;br /&gt;
&lt;br /&gt;
# Flash the board with your normal AP firmware if you did not already did that before.&lt;br /&gt;
# Switch to the &amp;quot;raw sensors&amp;quot; telemetry mode via ''[[GCS#Settings|GCS-&amp;gt;Settings]]-&amp;gt;Telemetry'' and launch &amp;quot;server&amp;quot; to record a [[Logs|log]].[[Image:MakeSureToSetRAWsensors.jpg|right|Set RAW Messages]]&lt;br /&gt;
# Rotate your IMU/airframe into different attitudes to record relevant measurements for each axis.&lt;br /&gt;
## It is important that you get the min/max sensor values on each axis!&lt;br /&gt;
# Stop the server application after you are done with callibrating, it will write the [[Logs|log file]] buffer (to ''var/logs'').&lt;br /&gt;
# Run the Python script on it to get your calibration coefficients &lt;br /&gt;
# Add the on screen displayed values to your airframe file, one can also use a copy/paste.&lt;br /&gt;
#* See details/examples for specific sensors below.&lt;br /&gt;
#* If you have data from more than one aircraft in your logfile, you will need to specify the aircraft id via the ''--id'' option.&amp;lt;br/&amp;gt;It can be found in the [[Paparazzi_Center|Paparazzi Center]] upper left side. (first comes A/C name, and then id value)&lt;br /&gt;
&lt;br /&gt;
'''Run the script with ''--help'' to list available options:'''&lt;br /&gt;
 ''sw/tools/calibration/calibrate.py --help&lt;br /&gt;
&lt;br /&gt;
=== Calibrating the Accelerometers ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 500px; overflow: hidden&amp;quot;&amp;gt;&amp;lt;gallery widths=200px heigths=200px&amp;gt;&lt;br /&gt;
Image:Aspirin_imu_front_small.jpg|The front of IMU is marked as X axis. Warning! Aspirin 1.5 has x and y silkscreen swapped.&lt;br /&gt;
Image:Acc_cailbration.jpg|Orientations during accelerometer calibration&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TIP: Since accelerometers are very sensitive to vibration distortions, strap your IMU board tight to some heavy object like a big battery. It will help keep the board steady while rotating.&lt;br /&gt;
&lt;br /&gt;
Once your decided to calibrate; take the steps with great care. If not done as precise as you possibly can, than factory calibration values are even better than a poorly calibrated accelerometer.&lt;br /&gt;
&lt;br /&gt;
Here you start to calibrate the accelerometers:&lt;br /&gt;
&lt;br /&gt;
turn and hold the IMU on all six sides of the 'cube' for 10 seconds per IMU axis:&lt;br /&gt;
&lt;br /&gt;
# upright&lt;br /&gt;
# inverted&lt;br /&gt;
# on the nose&lt;br /&gt;
# on the tail&lt;br /&gt;
# on the right side&lt;br /&gt;
# on the left side&lt;br /&gt;
&lt;br /&gt;
Please note that we talk about the '''IMU axes''' here, and '''not''' the '''airframe axes'''.&amp;lt;br&amp;gt;So if you have your IMU mounted under a specific angle in your aircraft; make very sure you align the axis of the IMU and '''not''' the '''aircraft axes''' with earth's gravity. Also for the accelerometer calibration the '''IMU can, but does not need to be mounted inside the airframe. Only the calibration of a magnetometer must be performed while in your aircraft.'''&lt;br /&gt;
&lt;br /&gt;
You can also take some measurements banking 45 degrees.&amp;lt;br&amp;gt;Try to get a homogeneous distribution of your measurements. It is better to let the aircraft rest while measuring an axis to avoid inaccuracies from shaking the IMU in your hand.&lt;br /&gt;
&lt;br /&gt;
Then stop the server so it will write the log file which must containing the needed '''IMU_ACCEL_RAW''' message values. Then run the Python script using the just newly generated log data as the source to get your calibration coefficients: &lt;br /&gt;
&lt;br /&gt;
Open a terminal window and run:&lt;br /&gt;
&lt;br /&gt;
 ''&amp;lt;nowiki&amp;gt;sw/tools/calibration/calibrate.py -s ACCEL var/logs/YY_MM_DD__hh_mm_ss.data&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
Where YY_MM_DD__hh_mm_ss.data is the name of the log data file that was just generated.&lt;br /&gt;
&lt;br /&gt;
Add the resulting output values from this script to the airframe file in the section IMU, for ''example'':&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;section name=&amp;quot;IMU&amp;quot; prefix=&amp;quot;IMU_&amp;quot;&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACCEL_X_NEUTRAL&amp;quot; value=&amp;quot;46&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACCEL_Y_NEUTRAL&amp;quot; value=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACCEL_Z_NEUTRAL&amp;quot; value=&amp;quot;175&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACCEL_X_SENS&amp;quot; value=&amp;quot;4.90862760829&amp;quot; integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACCEL_Y_SENS&amp;quot; value=&amp;quot;4.9043976463&amp;quot;  integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ACCEL_Z_SENS&amp;quot; value=&amp;quot;4.82837916573&amp;quot; integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Calibrating the Magnetometer ===&lt;br /&gt;
First of all it is important to know that all ferromagnetic materials near the magnetometer distort the measurements. So preferably you do the magnetometer calibration with the magnetometer and autopilot mounted fixed in your airframe. Also keep your airframe as far away from metal and magnets as possible.&lt;br /&gt;
&lt;br /&gt;
==== Calibrating for the Earth magnetic field ====&lt;br /&gt;
&lt;br /&gt;
The most crucial part for the magnetometer calibration:&lt;br /&gt;
&lt;br /&gt;
'''Steps:'''&lt;br /&gt;
&lt;br /&gt;
# Slowly spin your aircraft around all axes&lt;br /&gt;
&lt;br /&gt;
Ideally you would '''spin''' it '''around all axes''' until you have densely covered the '''whole sphere''' with magnetometer measurements. Take a look at figure MAG2 on how that would look like.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Optional method''' &lt;br /&gt;
If this rotation of your whole airframe is to hard to do: One could also just make sure to really get the min/max on each axis by aligning the magnetometer axes along the local magnetic field vector:&lt;br /&gt;
# Calculate the inclination and declination of the magnetic field where you live that can be looked up [http://www.ngdc.noaa.gov/geomag-web/#igrfwmm here]. Just put in zip/country+city/coordinates &amp;amp; date to get proper degrees. See MAG1 figure.&lt;br /&gt;
# Now point the each mag axis in the direction you got from previous step.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heigths=200px&amp;gt;&lt;br /&gt;
Image:Mag_london_inc-dec.jpg|fig. MAG1 - An example for London&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TIP:&lt;br /&gt;
It can also be convenient to [[RTPlotter|plot]] the ''IMU_MAG_RAW'' values to see when you get the maximum on each axis.&lt;br /&gt;
# Launch [[Paparazzi_Center|Paparazzi Center]]-&amp;gt;Tools-&amp;gt;Realtime_Plotter and Tools-&amp;gt;Messages&lt;br /&gt;
# Drag&amp;amp;Drop each axis of the ''IMU_MAG_RAW'' message to the Plotter canvas.&lt;br /&gt;
&lt;br /&gt;
After you took all measurements, stop the server so it will write the log file and run the Python script on it to get your calibration coefficients:&lt;br /&gt;
 ''&amp;lt;nowiki&amp;gt;sw/tools/calibration/calibrate.py -s MAG var/logs/YY_MM_DD__hh_mm_ss.data -vp&amp;lt;/nowiki&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
Where YY_MM_DD__hh_mm_ss.data is the name of the log data file that was just generated. &lt;br /&gt;
&lt;br /&gt;
The ''-v'' parameter turns on verbose mode, ''-p'' turns on 3D plotting of the results. You can omit them if you don't want this.&lt;br /&gt;
&lt;br /&gt;
This basically does a hard-iron (i.e. offset of the sphere) and soft-iron (i.e. distortion to an ellipsoid) calibration. You can see an example result in Figure MAG2.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=200px heigths=200px&amp;gt;&lt;br /&gt;
Image:Mag_fit_3d.png|fig. MAG2 - Measurements fitted to ellipsoid&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The magnetic field strength and axis are different depending on where you are in the world, because of this you have to [[Subsystem/ahrs#Local_Magnetic_Field|set the local magnetic field]] of the location you intend to fly. Only if you are using the [[Subsystem/ahrs#Complementary_Euler_.28fixed_point.29|older euler filter]] you have to recalibrate your magnetometer to fly somewhere else on the planet.&lt;br /&gt;
&lt;br /&gt;
==== Calibrating for Current ====&lt;br /&gt;
&lt;br /&gt;
When your aircraft flies, currents are flowing through all the electrical wires in your aircraft. These '''currents induce a magnetic field'''. This can create an offset in the measurement of the magnetic north. That is not what we like to have. Luckily we can compensate for this unwanted side-effect by adding current compensation values to the airframe file. This calibration is mainly interesting if you have an aircraft with electric engine.&lt;br /&gt;
&lt;br /&gt;
TIP: This interference effect can also be reduced by putting the magnetometer somewhere away from power wires and by twisting power wires together. &lt;br /&gt;
&lt;br /&gt;
Before doing this calibration, it is important to disengage any autopilot autonomous control and put it in RC control only mode.&lt;br /&gt;
&lt;br /&gt;
'''Steps:'''&lt;br /&gt;
# Set up a current sensor in Paparazzi, or define MILLIAMP_AT_FULL_THROTTLE in your airframe file to enable a current estimation.&lt;br /&gt;
# Load the [http://docs.paparazziuav.org/latest/module__send_imu_mag_current.html send_imu_mag_current.xml] [[Modules|module]].&lt;br /&gt;
# Start the '''send_imu_mag_current''' module via settings [[Image:Send_imu_mag_current.png|500px|right|Start the module for magneto current calibration]]&lt;br /&gt;
# Put your aircraft on the ground and make very sure to hold it steady, movement will mess up the calibration&lt;br /&gt;
# Slowly ramp up the throttle&lt;br /&gt;
# Stop the server&lt;br /&gt;
&lt;br /&gt;
Now the log data is written to log file and we need to do something with it&lt;br /&gt;
&lt;br /&gt;
Open a terminal and just run the script by entering:&lt;br /&gt;
&lt;br /&gt;
 ''&amp;lt;nowiki&amp;gt;sw/tools/calibration/calibrate_mag_current.py var/logs/YY_MM_DD__hh_mm_ss.data&amp;lt;/nowiki&amp;gt;'' &lt;br /&gt;
&lt;br /&gt;
Add the resulting output values from this script to the airframe file in the section IMU, for ''example'':&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;section name=&amp;quot;IMU&amp;quot; prefix=&amp;quot;IMU_&amp;quot;&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;define name= &amp;quot;MAG_X_CURRENT_COEF&amp;quot; value=&amp;quot;0.0591913538739&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name= &amp;quot;MAG_Y_CURRENT_COEF&amp;quot; value=&amp;quot;-0.132912120794&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name= &amp;quot;MAG_Z_CURRENT_COEF&amp;quot; value=&amp;quot;-0.0724604582039&amp;quot;/&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Re-compile and upload your airframe again.&lt;br /&gt;
&lt;br /&gt;
You can check if the calibration worked by watching the psi angle as you ramp up the motors while holding your UA steady. Be sure to do this without the control system active.&lt;br /&gt;
&lt;br /&gt;
Note that a '''change''' in you airframe '''configuration''', e.g. other gains make the motors spin faster, or the '''wiring''' will require a full new '''current calibration'''!&lt;br /&gt;
&lt;br /&gt;
=== Calibrating the Gyrometer ===&lt;br /&gt;
To [[ImuCalibration/Gyroscopes|calibrate the gyrometer]] you '''need''' a '''turntable''', [[ImuCalibration/Gyroscopes| take a look here]] to see how such a setup would look like and which steps are involved. There is a [[ImuCalibration/Gyroscopes| dedicated page]] for this procedure since the steps are not trivial to perform.&lt;br /&gt;
&lt;br /&gt;
Note that gyrometer neutrals a.k.a. ''bias'', are usually not a problem, since they are set by the AHRS aligner at each startup and some [[Subsystem/ahrs|AHRS algorithms]] continuously estimate the bias during flight.&lt;br /&gt;
&lt;br /&gt;
=== Calibrating Infrared Sensors ===&lt;br /&gt;
&lt;br /&gt;
Just in case you still use IR piles for attitude estimation, which is not so common in the days of cheap and available MEMS sensors the steps below will clarify:&lt;br /&gt;
&lt;br /&gt;
Put the aircraft in a styrofoam container or completely seal the IR sensors with styrofoam or similar blocks and get a reading of the neutrals for each axis.  Also take the gyro neutrals at this time.  Update your airframe file, flash the AP and re-check the neutrals.&lt;br /&gt;
&lt;br /&gt;
Using the roll gyro as a worked example: Run up your GCS and ensure it &lt;br /&gt;
is communicating with your airframe. Make sure your airframe is roughly &lt;br /&gt;
level and that it cannot move. Now run the Messages Tool and the [[RTPlotter|real time plotter]] tool. The messages tool will have lots of flashing lights &lt;br /&gt;
indicating when it receives various telemetry packets.  In the Messages &lt;br /&gt;
tool, Click on Gyro Rates and you should see a list of variables.  Click &lt;br /&gt;
on Roll_ADC and drag and drop in onto the main window of the Real Time plotter.  Now give it a while to build a stable graph.&lt;br /&gt;
&lt;br /&gt;
Once things have been running this way for a while, in the Real Time &lt;br /&gt;
Plotter, click on Curves in the menu and select the &lt;br /&gt;
1:telemetry:GYRO_RATES:Roll_ADC entry.  As you select it, you should see &lt;br /&gt;
the average and standard deviation values.  We need the average value.  &lt;br /&gt;
Jot down the number you have.  I have -24.536.&lt;br /&gt;
&lt;br /&gt;
Now go edit your airframe file and look for the ADC_ROLL_NEUTRAL value. &lt;br /&gt;
In my airframe file the value is 520.  As my average value from the Plotter is a &lt;br /&gt;
negative figure, it indicates that the roll Neutral is too high, subtract the average value from the present setting. So I edited my airframe file to be 495.464 (520-24.536).&lt;br /&gt;
&lt;br /&gt;
Recompile and reflash (Don't worry about restarting the GCS, The &lt;br /&gt;
messages program or the other running processes - they will catch up just &lt;br /&gt;
fine after flashing).  Once the Board is back up and the plotter continues, reset it from the menu to get rid of the average. Watch it for a while and check that the line and acculmulated average is on or around 0. You are done.  Use the same process for the IR sensors!&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:User_Documentation]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Lisa/MXS_v1.0&amp;diff=26141</id>
		<title>Lisa/MXS v1.0</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Lisa/MXS_v1.0&amp;diff=26141"/>
		<updated>2023-02-10T12:39:00Z</updated>

		<summary type="html">&lt;p&gt;Openuas: Fix link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lisa/MX-'''S'''mall is a smaller version of [[Lisa/MX]] but still equipped with  the same STM32F4 processor with a weight of only 1.45 gram. Take a look on the [[Lisa/MX]] page for more in depth information. Go to [https://github.com/paparazzi/paparazzi-hardware/blob/master/controller/lisa_s/lisa_mx_s/v1.0/lisa_mx_s_v1_0.PDF Github Paparazzi - Hardware Lisa MXS] for schematics.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:Lisa mx s v1 0.png|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the default mode, only 4 UART, 1 SPI, 1 I2C, 3 ADC and 6 servos are available. But since the F4 has massive alternate functions, more options are possible.&lt;br /&gt;
&lt;br /&gt;
 - if you need 8 PWM outputs, then I2C1 can become output for servo 7 and 8&lt;br /&gt;
 - if you need 5 UART's, servo 1 and 2 can become UART6 TX/RX&lt;br /&gt;
 - if you need more ADC's then servo 5 and 6 can become ADC's&lt;br /&gt;
 - if you need to use a tiny RC receiver with PPM output, then servo 6 can become the PPM input&lt;br /&gt;
 - if you need hardware flow control, UART2 RTS and CTS are on servo 5 and 6&lt;br /&gt;
 - if you need more than 8 servos, then nearly every UART and SPI can become extra PWM (except SPI-SS)&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Lisa/MXS_v1.0&amp;diff=26140</id>
		<title>Lisa/MXS v1.0</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Lisa/MXS_v1.0&amp;diff=26140"/>
		<updated>2023-02-10T12:37:50Z</updated>

		<summary type="html">&lt;p&gt;Openuas: A bit more accurate info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lisa/MX-'''S'''mall is a smaller version of [[/Lisa/MX]] but still equipped with  the same STM32F4 processor with a weight of only 1.45 gram. Take a look on the [[/Lisa/MX]] page for more in depth information. Go to [https://github.com/paparazzi/paparazzi-hardware/blob/master/controller/lisa_s/lisa_mx_s/v1.0/lisa_mx_s_v1_0.PDF Github Paparazzi - Hardware Lisa MXS] for schematics.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:Lisa mx s v1 0.png|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the default mode, only 4 UART, 1 SPI, 1 I2C, 3 ADC and 6 servos are available. But since the F4 has massive alternate functions, more options are possible.&lt;br /&gt;
&lt;br /&gt;
 - if you need 8 PWM outputs, then I2C1 can become output for servo 7 and 8&lt;br /&gt;
 - if you need 5 UART's, servo 1 and 2 can become UART6 TX/RX&lt;br /&gt;
 - if you need more ADC's then servo 5 and 6 can become ADC's&lt;br /&gt;
 - if you need to use a tiny RC receiver with PPM output, then servo 6 can become the PPM input&lt;br /&gt;
 - if you need hardware flow control, UART2 RTS and CTS are on servo 5 and 6&lt;br /&gt;
 - if you need more than 8 servos, then nearly every UART and SPI can become extra PWM (except SPI-SS)&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Lisa/MXS_v1.0&amp;diff=26137</id>
		<title>Lisa/MXS v1.0</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Lisa/MXS_v1.0&amp;diff=26137"/>
		<updated>2022-11-17T20:38:15Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lisa/Mx-Small is a smaller version of [[Lisa/M]] with an STM32F4 processor for only 1.45 gram. See Lisa-Mx for more information. See [https://github.com/paparazzi/paparazzi-hardware/blob/master/controller/lisa_s/lisa_mx_s/v1.0/lisa_mx_s_v1_0.PDF Github Paparazzi - Hardware Lisa MXS] for schematics.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 100%&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:Lisa mx s v1 0.png|500px]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the default mode, only 4 UART, 1 SPI, 1 I2C, 3 ADC and 6 servos are available. But since the F4 has massive alternate functions, more options are possible.&lt;br /&gt;
&lt;br /&gt;
 - if you need 8 PWM outputs, then I2C1 can become output for servo 7 and 8&lt;br /&gt;
 - if you need 5 UART's, servo 1 and 2 can become UART6 TX/RX&lt;br /&gt;
 - if you need more ADC's then servo 5 and 6 can become ADC's&lt;br /&gt;
 - if you need to use a tiny RC receiver with PPM output, then servo 6 can become the PPM input&lt;br /&gt;
 - if you need hardware flow control, UART2 RTS and CTS are on servo 5 and 6&lt;br /&gt;
 - if you need more than 8 servos, then nearly every UART and SPI can become extra PWM (except SPI-SS)&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Bebop&amp;diff=26134</id>
		<title>Bebop</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Bebop&amp;diff=26134"/>
		<updated>2022-09-28T17:25:30Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Factory Reset */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; width: 15%&amp;quot;&amp;gt;&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Autopilots&amp;lt;/categorytree&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 45%; overflow: hidden&amp;quot;&amp;gt;[[Image:Parrot-bebop-drone-new-03.jpeg|right|500px|Parrot Bebop]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: right; width: 40%&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
By default the [http://www.parrot.com/usa/products/bebop-drone/ Bebop] from [http://www.parrot.com/ Parrot] is a Wifi controlled flying quadrotor, designed to be controlled with an Android or iOS device. &lt;br /&gt;
&lt;br /&gt;
'''No more restrictions''' as from now; with a few simple clicks you can '''run Paparazzi on the Bebop''' and have full autonomous flight and much more!&lt;br /&gt;
&lt;br /&gt;
= Getting started =&lt;br /&gt;
&lt;br /&gt;
== What you need==&lt;br /&gt;
# A Bebop or Bebop 2 updated to at least firmware v3.3.0&lt;br /&gt;
# A joystick, for example [http://www.hobbyking.com/hobbyking/store/__20951__Hobbyking_6CH_RC_Flight_Simulator_System_Mode_2_.html this one]&lt;br /&gt;
# A laptop with Ubuntu installed&lt;br /&gt;
&lt;br /&gt;
Steps to follow: &lt;br /&gt;
# Install Paparazzi via [http://wiki.paparazziuav.org/wiki/Installation the one liner to be found here]. Just Cut 'n Paste (CTRL+C from webbrowser then CTRL+SHIFT+V in your Linux terminal) and press ENTER&lt;br /&gt;
# Start Paparazzi Center with the default configuration&lt;br /&gt;
# Power up your Bebop&lt;br /&gt;
# Press the '''on/off button four times''' short fast half a second clicks '''after''' the bebop is fully powerd up, notice the solid green light on Bebop and solid Red on Bebop 2&lt;br /&gt;
# Make a Wifi connection with your PC and the Bebop &lt;br /&gt;
# In the Paparazzi center choose &amp;quot;Bebop&amp;quot; Or &amp;quot;Bebop2&amp;quot; in the airframe dropdown menu&lt;br /&gt;
# Press the &amp;quot;Upload&amp;quot; button in the Paparazzi Center, wait...&lt;br /&gt;
# Select Flight UDP/Wifi in the session menu&lt;br /&gt;
# Press execute&lt;br /&gt;
&lt;br /&gt;
Voila, you will get telemetry from your Bebop. Now it is up to you how and where to fly.&lt;br /&gt;
&lt;br /&gt;
==Instruction Video==&lt;br /&gt;
TIP: Good [https://www.youtube.com/watch?v=eojAPZvT1Ck video series to watch]. Although it is made for the ARDrone 2, the steps are very similar for the Bebop drone. &lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
== Connectivity ==&lt;br /&gt;
* Wi-Fi antennas: MIMO dual-band with 2 double-set of dipole antennas for 2.4 and 5 GHz&lt;br /&gt;
* Sending power: Up to 26 dBm&lt;br /&gt;
* Signal range: N/A&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
* 4 Brushless Outrunner motors&lt;br /&gt;
* Glass fiber reinforced (15%) ABS structure&lt;br /&gt;
* High-resistance EPP outdoor hull: Clip and unclip easily to adapt to indoor and outdoor flight, protects the propellers against potential bumps, can be removed to reduce wind factor&lt;br /&gt;
* Three-blade auto-block propellers in Polycarbonate with fast disassembly system&lt;br /&gt;
* Anti-vibration bumpers&lt;br /&gt;
&lt;br /&gt;
=== Full Motor details ===&lt;br /&gt;
&lt;br /&gt;
Handy in case for a simulator motor model&lt;br /&gt;
&lt;br /&gt;
====Bebop====&lt;br /&gt;
* Magnets: 12&lt;br /&gt;
* Stators: 9&lt;br /&gt;
* Layers of stator metal: 15&lt;br /&gt;
&lt;br /&gt;
* Copper windings: 34&lt;br /&gt;
* Copper diameter: 0.29mm&lt;br /&gt;
* Copper resistance: over 50 cm wire ~0.3 ohm&lt;br /&gt;
&lt;br /&gt;
Dimentions:&lt;br /&gt;
* Flange height 7.67mm&lt;br /&gt;
* Flange dia22.7mm&lt;br /&gt;
* Axis length 19.4mm&lt;br /&gt;
* Axis dia 1.9 mm&lt;br /&gt;
* Statorheight 5.55mm&lt;br /&gt;
* Stator diam 18.33mm&lt;br /&gt;
&lt;br /&gt;
Weight:&lt;br /&gt;
* Flange weight 3.05g&lt;br /&gt;
* Flange and magnets 5.15g (Magnet ~ 1.5mm thick on a Flange dia22.7mm)&lt;br /&gt;
* Magnet only (and the glue) 2.1g&lt;br /&gt;
&lt;br /&gt;
====Bebop 2====&lt;br /&gt;
* No dat (yet) It ould be nice if you could demolish on of your Bebop 2 motors or a spare one and add your data here.&lt;br /&gt;
&lt;br /&gt;
== Camera ==&lt;br /&gt;
* Camera with &amp;quot;Fisheye&amp;quot; lens 180° 1/2,3&amp;quot;: 6 optical elements and 14 Mega pixels sensor&lt;br /&gt;
* Video stabilization: Digital on 3-axes&lt;br /&gt;
* Video definition: 1920x1080p (30fps)&lt;br /&gt;
* Photo definition: 3800x3188 pixels&lt;br /&gt;
* Video encoding: H264&lt;br /&gt;
* Photo file format: RAW, DNG&lt;br /&gt;
* Internal memory: Flash 8 GB&lt;br /&gt;
* Extended memory: Micro USB&lt;br /&gt;
&lt;br /&gt;
== Battery ==&lt;br /&gt;
&lt;br /&gt;
Bebop 1&lt;br /&gt;
* Lithium Polymer 1200 mAh&lt;br /&gt;
* Flight time: Around 12 minutes&lt;br /&gt;
&lt;br /&gt;
Bebop 2&lt;br /&gt;
* Lithium Ion Polymer 2700 mAh&lt;br /&gt;
* Flight time: Around 22 minutes&lt;br /&gt;
* Max discharge rate 21.5A &lt;br /&gt;
* Max charge rate 3.5A&lt;br /&gt;
&lt;br /&gt;
== Processor ==&lt;br /&gt;
* Motherboard:&lt;br /&gt;
** Parrot P7 dual-core CPU Cortex A9&lt;br /&gt;
** Quad core GPU&lt;br /&gt;
** 8Gb flash memory&lt;br /&gt;
* All fixed on a magnesium shelf that acts as electromagnetic shielding and in the same run as a heat sink for heat dissipation and cooling of the all the onboard processors&lt;br /&gt;
&lt;br /&gt;
== Sensors ==&lt;br /&gt;
* 3-axes magnetometer (AKM 8963)&lt;br /&gt;
* 3-axes gyroscope (MPU 6050)&lt;br /&gt;
* 3-axes accelerometer (MPU 6050)&lt;br /&gt;
* Optical-flow sensor (Fig.8): Vertical stabilization camera (Every 16 milliseconds, an image of the ground is taken and compared to the previous one to determine the speed of the Bebop Drone)&lt;br /&gt;
* Ultrasound sensor (Analyzes the flight altitude up to 8 meters)&lt;br /&gt;
* Pressure sensor (MS 5607)&lt;br /&gt;
&lt;br /&gt;
== Geo-location ==&lt;br /&gt;
* Bebop 1: GNSS (GPS + GLONASS + Galileo, [http://www.furuno.com/en/products/gnss-module/GN-87 Furuno GN-87F])&lt;br /&gt;
* Bebop 2: GNSS (GPS + GLONASS + Galileo, Baidu, [https://www.u-blox.com/en/product/neo-m8-series])&lt;br /&gt;
&lt;br /&gt;
== Dimensions ==&lt;br /&gt;
* 28x32x3.6cm without the hull&lt;br /&gt;
* 33x38x3.6cm with the hull&lt;br /&gt;
&lt;br /&gt;
== Weight ==&lt;br /&gt;
&lt;br /&gt;
=== Bebop 1 ===&lt;br /&gt;
* 380g without the hull&lt;br /&gt;
* 400g with the hull&lt;br /&gt;
&lt;br /&gt;
=== Bebop 2 ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! component&lt;br /&gt;
! weight&lt;br /&gt;
! quantity&lt;br /&gt;
! &lt;br /&gt;
! notes&lt;br /&gt;
|-&lt;br /&gt;
| motor&lt;br /&gt;
| 16.5&lt;br /&gt;
| 4&lt;br /&gt;
| 66&lt;br /&gt;
| with screws mounting motors&lt;br /&gt;
|-&lt;br /&gt;
| landing gear&lt;br /&gt;
| 2.4&lt;br /&gt;
| 4&lt;br /&gt;
| 9.6&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| frame&lt;br /&gt;
| 49.5&lt;br /&gt;
| 1&lt;br /&gt;
| 49.5&lt;br /&gt;
| with legs&lt;br /&gt;
|-&lt;br /&gt;
| rotor&lt;br /&gt;
| 5.0&lt;br /&gt;
| 4&lt;br /&gt;
| 20&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| battery&lt;br /&gt;
| 196.0&lt;br /&gt;
| 1&lt;br /&gt;
| 196&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| camera magnesium frame&lt;br /&gt;
| 7.3&lt;br /&gt;
| 1&lt;br /&gt;
| 7.3&lt;br /&gt;
| with all screws on it&lt;br /&gt;
|-&lt;br /&gt;
| camera&lt;br /&gt;
| 14.7&lt;br /&gt;
| 1&lt;br /&gt;
| 14.7&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| camera protector&lt;br /&gt;
| 9.0&lt;br /&gt;
| 1&lt;br /&gt;
| 9&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| GPS sensor module&lt;br /&gt;
| 16.0&lt;br /&gt;
| 1&lt;br /&gt;
| 16&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| foam cover&lt;br /&gt;
| 7.2&lt;br /&gt;
| 1&lt;br /&gt;
| 7.2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| main board&lt;br /&gt;
| 107.0&lt;br /&gt;
| 1&lt;br /&gt;
| 107&lt;br /&gt;
| measured with all wires on it&lt;br /&gt;
|-&lt;br /&gt;
| Dampers&lt;br /&gt;
| 2.1&lt;br /&gt;
| 4&lt;br /&gt;
| 8.4&lt;br /&gt;
| dampers plus screws&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Total&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 510.7&lt;br /&gt;
| (511,91 measured for another BB2)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OS/Software ==&lt;br /&gt;
* Operating system: Linux (kernel 3.4.11 #3 SMP PREEMPT)&lt;br /&gt;
* glibc: (Sourcery CodeBench Lite 2012.03-57) 2.15&lt;br /&gt;
* libstdc++: GLIBCXX_3.4 - GLIBCXX_3.4.16&lt;br /&gt;
&lt;br /&gt;
= Pinout =&lt;br /&gt;
== GPIO ==&lt;br /&gt;
* 6			Fans Enable&lt;br /&gt;
* 9			WiFi Reset&lt;br /&gt;
* 73			P7MU IRQ&lt;br /&gt;
* 81			GPS Power Enable&lt;br /&gt;
* 85			Fan Enable&lt;br /&gt;
* 89			VCAM FSYNC gyro&lt;br /&gt;
* 90			HCAM FSYNC gyro&lt;br /&gt;
* 91			DRDY MPU6050&lt;br /&gt;
* 124			Magneto interrupt&lt;br /&gt;
* 128			(video) Slew rate??&lt;br /&gt;
* 129		VCAM enable&lt;br /&gt;
* 130			(video) Slew rate??&lt;br /&gt;
* 132		HCAM enable&lt;br /&gt;
* 199		BLDC micro-controller reset (forces it into bootloader) ON/OFF&lt;br /&gt;
* 200		US Pulse level&lt;br /&gt;
* 201		On/Off button (default monitor to files running: /bin/onoffbutton)&lt;br /&gt;
* 202		USB Host mode pin 3V3 (HOST_MODE_3V3)&lt;br /&gt;
* 203		USB Host mode on&lt;br /&gt;
* 204		USB0 OC&lt;br /&gt;
&lt;br /&gt;
== PWM ==&lt;br /&gt;
* 6			Heating resistor for warming IMU sensors (125000ns period, 0ns duty)&lt;br /&gt;
* 8			MPU6050 clock (31510ns period, 15258ns duty) Desired frequency is 32768kHz with 50% duty cycle (period=30517us). Period was set empirically to 31517 to get a 5ms data ready period. Desired frequency is slightly modified to synchronize camera and IMU&lt;br /&gt;
* 9			Vertical camera clock (23ns period = 43MHz)&lt;br /&gt;
* 11			Horizontal camera lock (77ns period = 13MHz)&lt;br /&gt;
&lt;br /&gt;
== I2C ==&lt;br /&gt;
* I2C-0&lt;br /&gt;
** FPGA&lt;br /&gt;
** P7MU          &lt;br /&gt;
** EEPROM     Unknown EEPROM for Front camera calibration (addr 0x55)&lt;br /&gt;
** MT9f002      CMOS Digital Image Sensor (1/2.3 inch 14Mp, front camera) [http://www.onsemi.com/PowerSolutions/product.do?id=MT9F002 MT9f002] (addr 0x10)&lt;br /&gt;
** MT9v117     CMOS Digital Image Sensor (1/6 inch VGA, bottom camera) [http://www.aptina.com/assets/downloadDocument.do?id=553 MT9v117] (addr 0x5d)&lt;br /&gt;
* I2C-1&lt;br /&gt;
** Cypress       Motor Controller (Parrot BLDC) [[Bebop/BLDC]] (addr 0x08)&lt;br /&gt;
** AKM8963    Magnetometer [http://www.akm.com/akm/en/file/datasheet/AK8963.pdf AK8963]&lt;br /&gt;
** MS5607      Barometer [http://meas-spec.com/product/pressure/MS5607-02BA03.aspx MS5607]&lt;br /&gt;
* I2C-2&lt;br /&gt;
** MPU6050    Gyro + Accel [http://invensense.com/mems/gyro/documents/RM-MPU-6000A.pdf MPU6050] (rotation changed in version 2)&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
* spidev1.0 Sonar (Only data pin connected for generating pulses)&lt;br /&gt;
&lt;br /&gt;
== UART ==&lt;br /&gt;
* ttyPA1          GPS (Furuno GN-87F on v1 and Ublox Neo M8N on v2)&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
* /dev/hx280 Hantro (On2) Video encoder. Hantro chip video encoder used for the HCAM.&lt;br /&gt;
* /sys/bus/iio/devices/iio:device0 (p7mu-adc_2) Sonar ADC&lt;br /&gt;
&lt;br /&gt;
== Serial console ==&lt;br /&gt;
A physical serial port is accessible under the front cover. You can remove it properly by removing the 2 screws holding it and then cutting the glue between the foam and the main body with a thin blade.&lt;br /&gt;
See [https://ardupilot.org/dev/docs/building-for-bebop-on-linux.html] for pictures.&lt;br /&gt;
&lt;br /&gt;
The serial port on Bebop side is &amp;lt;code&amp;gt;/dev/ttyPA0&amp;lt;/code&amp;gt; at 115200 bauds.&lt;br /&gt;
If you can see the console output from an external terminal but don't get the prompt to type command, log with telnet and add the following line to the &amp;lt;code&amp;gt;/etc/init.d/rcS&amp;lt;/code&amp;gt; file:&lt;br /&gt;
&lt;br /&gt;
  sh --login &amp;lt; /dev/ttyPA0 &amp;gt; /dev/ttyPA0 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
=  Actuators =&lt;br /&gt;
The Bebop has 4 Brushless motors, which are controlled by the cypress chip on I2C-1. This Cypress chip contains custom made firmware(BLDC) by Parrot, which can be automatically updated using a bootloader in the ESC part of the mainboard.&lt;br /&gt;
The firmware from Parrot contains a nice closed loop RPM control, which is automatically tuned inside the factory. &lt;br /&gt;
Since version 2 Parrot changed the order and rotation direction of the motors.&lt;br /&gt;
&lt;br /&gt;
For more information about how to communicate with the BLDC look at [[Bebop/BLDC]]. Or take a look at the &amp;quot;bebop&amp;quot; actuator inside the &amp;lt;code&amp;gt;airborne/boards/bebop/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
= Onboard applications =&lt;br /&gt;
&lt;br /&gt;
The original programs on the Bebop&lt;br /&gt;
&lt;br /&gt;
* /usr/bin/dragon-prog		Main program that controls the drone&lt;br /&gt;
* /bin/watchdog.sh			Checks if Dragon is still running and reboots dragon-prog if it somehow would not be running anymore &lt;br /&gt;
&lt;br /&gt;
* BLDC_Test_Bench				Controls the Brushless Motor Controllers for testing and playing sounds etc.&lt;br /&gt;
* bcmwl						Everything with wifi&lt;br /&gt;
* diagnostic					Outputs sensor diagnostic&lt;br /&gt;
* mk3_camera_eeprom                     Reads the front camera EEPROM&lt;br /&gt;
* config_mt9v117                              Configure the bottom camera&lt;br /&gt;
&lt;br /&gt;
= Cross compiler =&lt;br /&gt;
For the Bebop you need to use a recent version GNU gcc-arm-linux-gnueabi (Ubuntu/Linaro 4.7.4-2ubuntu1) 4.7.4 provided with Ubuntu since 14.04 LTS.&lt;br /&gt;
&lt;br /&gt;
[http://electronics.stackexchange.com/questions/21594/is-code-sourcery-g-lite-still-a-viable-projectIn the past you could also crosscompile with Sourcery CodeBench Lite 2012.03-57 for ARM GNU/Linux from &amp;lt;s&amp;gt;Greedy&amp;lt;/s&amp;gt; Mentor Graphics, previously called codesourcery. However the open'ness there is nowhere to be found anymore, so we'll say &amp;quot;No thanks&amp;quot; to Codesourcery ,now &amp;lt;s&amp;gt;Greedy&amp;lt;/s&amp;gt; Mentor&amp;quot;]&lt;br /&gt;
but if you [https://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2012.03-57-arm-none-linux-gnueabi.bin insist] , feel &amp;lt;s&amp;gt;free&amp;lt;/s&amp;gt; restricted.&lt;br /&gt;
&lt;br /&gt;
If you somehow need to compile kernel driver files to run on your Parrot Bebop, well, yes, you must use [https://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2012.03-57-arm-none-linux-gnueabi.bin that exact compiler...]&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
Make sure the [http://docs.paparazziuav.org/latest/module__video_rtp_stream.html video_rtp_stream.xml] module enabled in the airframe. &lt;br /&gt;
Receive a video stream with e.g. avplay, vlc or a python app:	&lt;br /&gt;
 $ avplay -loglevel quiet -max_delay 50 -fflags nobuffer rtp://192.168.42.1:5000&lt;br /&gt;
or&lt;br /&gt;
 $ vlc ~/paparazzi/var/sdp_tmp/192.168.42.1/stream.sdp&lt;br /&gt;
or&lt;br /&gt;
 $ ~/paparazzi/sw/tools/rtp_viewer/rtp_viewer.py&lt;br /&gt;
&lt;br /&gt;
== Factory Reset ==&lt;br /&gt;
You can reset the Parrot Bebop Drone to factory settings. You '''will''' loose all your photos and movies recorded on your Bebop.&lt;br /&gt;
To do this you need to press and hold the power button for 10 seconds. The LED will blink green and orange for a while, then green and the drone will shutdown. For Bebop2 the Red LED will blink. Bebop2 Power the Blue LED will blink.&lt;br /&gt;
&lt;br /&gt;
== Getting rid of 4x buttonpress ==&lt;br /&gt;
&lt;br /&gt;
Per default with latest frimware telnet access over Wifi is blocked. To reanable this there is a PPRZ configuration script work together with pprz.conf on your drone&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
Although Paparazzi volunteers test flew the Bebop with old Firmware v1.98.11 and v2.0.57, v3.0, v3.2, v3.3, v3.9 Use the latest firmware available for your Parrot. As a bonus With the latest firmware one gets better video imagery among all other improvements. &lt;br /&gt;
&lt;br /&gt;
* v4.0.6 is the latest firmware for Bebop 1. &lt;br /&gt;
* v4.7.1 is the latest firmware for Bebop 2 &lt;br /&gt;
&lt;br /&gt;
Since Parrot stopped producing Bebop's, those firmware version will be the ultimate final firmwares to exist.&lt;br /&gt;
&lt;br /&gt;
== Damper ==&lt;br /&gt;
The original Bebop2 damper are very soft and can cause oscillations around roll. You can print harder dampers from [http://www.thingiverse.com/thing:2135529 Thingiverse] yourself that will degrade the video quality but remove these oscillations. Use the _nodamp airframe files in that case.&lt;br /&gt;
&lt;br /&gt;
Or just add a 3mm thick plastic washer inbetween top nut and the body, don't forget put some 243 locktite on the nut again, else it '''will''' vibrate off&lt;br /&gt;
&lt;br /&gt;
== Serial bidirectional teminal access ==&lt;br /&gt;
&lt;br /&gt;
This is handy if one e.g want to dump and set the build in GPS with software like uCenter on a PC. uCenter also run under Wine.&lt;br /&gt;
&lt;br /&gt;
To do so you first have to set up a connection between U-center and the drone. This done by forwarding the GPS data from the drone to your laptop using a TCP connection. From your laptop this TCP connection is then forwarded to a wine COM port in order to make it readable for U-center. &lt;br /&gt;
&lt;br /&gt;
First open a terminal and listen on your laptop for incoming TCP connections on port 12345. &lt;br /&gt;
&lt;br /&gt;
    $ socat -d -dd pty,raw,echo=0 tcp-listen:12345&lt;br /&gt;
&lt;br /&gt;
Then open a telnet session (while connected to the wifi of the drone) using: &lt;br /&gt;
&lt;br /&gt;
    $ telnet 192.168.42.1&lt;br /&gt;
&lt;br /&gt;
and forward the GPS data to the server you just created (in the telnet session): &lt;br /&gt;
    $ nc &amp;lt;your_ip_address&amp;gt; 12345 &amp;lt;/dev/ttyPA1 &amp;gt;/dev/ttyPA1&lt;br /&gt;
&lt;br /&gt;
Switch back to the terminal in which you started listening to the tcp port. You should see that an incoming connection has been accepted. The port to which the connection is transferred to is also shown (see Figure). &lt;br /&gt;
&lt;br /&gt;
[[File:Socat accepted the connection.png|500px|Socat accepted the connection]]&lt;br /&gt;
&lt;br /&gt;
The next step is to link this port to a wine COM port. In the following example port /dev/pts/4 is linked to ./com32. &lt;br /&gt;
&lt;br /&gt;
    $ cd ~/.wine/dosdevices&lt;br /&gt;
    $ ln -sf /dev/pts/4 ./com32&lt;br /&gt;
&lt;br /&gt;
You should now be able to read the GPS data from u-center under the specified com port.&lt;br /&gt;
&lt;br /&gt;
= Using the MicroUSB for serial data =&lt;br /&gt;
&lt;br /&gt;
The Parrot Bebop, as well as the Parrot Disco have a micro USB connector on the main control board. This USB connector can be used to connect 3rd party equipment. For example with help of a USB to Serial conversion board, bidirectional serial communication to another serial device.&lt;br /&gt;
To use the driver in current firmware OTG serving should be off. [[use_the_USB_port_on_Parrot_Drones|Take a look here for more information, photos, connection examples, sourecode and real life examples]] of how to use this port.&lt;br /&gt;
&lt;br /&gt;
= Swarm of Bebops =&lt;br /&gt;
&lt;br /&gt;
[[Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router| Multiple Parrot Drones as Swarm via WiFi Router]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Autopilots]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Ivy&amp;diff=26133</id>
		<title>Ivy</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Ivy&amp;diff=26133"/>
		<updated>2022-06-20T05:58:39Z</updated>

		<summary type="html">&lt;p&gt;Openuas: Cena has not implemented http to https autoforwarding, thus adjusted this wikipage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ivy is a [https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern Publish-Subscribe (or pub/sub)] bus used in Paparazzi to link the different components of the ground network together.  See [[Overview#System_Architecture|System Architecture]] and [[DevGuide/Server_GCS_com]] for a general overview of its role in the Paparazzi UAS.&lt;br /&gt;
&lt;br /&gt;
Ivy is text-based (ASCII) and features [https://en.wikipedia.org/wiki/Regular_expression regular expression] based message subscription.  Software applications employing Ivy announce their presence on the local network by UDP broadcast and share subscriptions.  All messages are communicated thereafter via direct TCP connections.  While the traffic is TCP, the use of UDP protocol for broadcast announcements requires that peers reside within the same network subnet.&lt;br /&gt;
&lt;br /&gt;
Paparazzi software applications default to binding to locahost and thus unable to communicate with peers residing elsewhere on the local area network.  Ivy and subsequently the paparazzi software applications can be directed to bind to a local network interface instead, thereby permitting LAN communication with peers by simply supplying a bus designation command-line argument shown below.  These can be saved in a Paparazzi Center session for persistence.&lt;br /&gt;
&lt;br /&gt;
Including the libivy headers and library and using a predefined set of messages, it is possible for any software component to take part in communication in a Paparazzi biotope.  Ivy, the protocol itself is developed independently of the Paparazzi project and can be obtained along with examples and documentation from https://www.eei.cena.fr/products/ivy/ .&lt;br /&gt;
&lt;br /&gt;
== Ivy Networks ==&lt;br /&gt;
&lt;br /&gt;
=== Binding Ivy Networks ===&lt;br /&gt;
&lt;br /&gt;
Ivy defaults to UDP port 2010 if a port is not specified.  Port is specified by '':PORTNUMBER'' suffix on network.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
192.168.0.0/24 (192.168.0.x network) UDP/2010; The following are all valid:&lt;br /&gt;
&lt;br /&gt;
 program -b 192.168.0.255&lt;br /&gt;
 program -b 192.168.0.255:2010&lt;br /&gt;
 program -b 192.168.0&lt;br /&gt;
 program -b 192.168.0:2010&lt;br /&gt;
&lt;br /&gt;
10.0.0.0/8 (10.x.x.x or 10.255.255.255); The following are all valid:&lt;br /&gt;
&lt;br /&gt;
 program -b 10&lt;br /&gt;
 program -b 10:2010&lt;br /&gt;
 program -b 10.255.255.255&lt;br /&gt;
 program -b 10.255.255.255:2010&lt;br /&gt;
&lt;br /&gt;
=== Extending Ivy Networks ===&lt;br /&gt;
&lt;br /&gt;
Ivy requires that all peers in the network reside within the same local area network (it does not support routing).  This can be solved by two different approaches.&lt;br /&gt;
&lt;br /&gt;
==== 1 - Virtual Private Network (VPN) ====&lt;br /&gt;
&lt;br /&gt;
By employing a standard IP VPN, remote hosts may communicate within the Ivy network permitting the VPN configuration is BRIDGED and not ROUTED.  Many (routed) VPN configurations provide a network subnet for VPN clients and then route the traffic to the remote network.  While this is approach is inline with best practices for IT systems, it does not permit Ivy to operate.&lt;br /&gt;
&lt;br /&gt;
==== 2 - Ivy Network Bridging ====&lt;br /&gt;
&lt;br /&gt;
[[TCP_Aircraft_Server|TCP Aircraft Server]]&lt;br /&gt;
&lt;br /&gt;
-- looking for more information&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Ivyprobe ===&lt;br /&gt;
&lt;br /&gt;
Ivyprobe is a command-line tool for sending and receiving messages on the Ivy bus.  This tool is useful for monitoring and troubleshooting an Ivy bus in the same way an Ivy client would behave, with custom regexp match filters.&lt;br /&gt;
&lt;br /&gt;
Run it with the '''-h''' option to display the help:&lt;br /&gt;
 $ ivyprobe -h&lt;br /&gt;
&lt;br /&gt;
E.g. to simply display all messages:&lt;br /&gt;
 $ ivyprobe '(.*)'&lt;br /&gt;
&lt;br /&gt;
[[Category:Communication]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Use_the_USB_port_on_Parrot_Drones&amp;diff=26131</id>
		<title>Use the USB port on Parrot Drones</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Use_the_USB_port_on_Parrot_Drones&amp;diff=26131"/>
		<updated>2022-05-18T13:48:29Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Add modules to modules.dep */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Outcome ==&lt;br /&gt;
&lt;br /&gt;
Outcome: Be able to USE USB port on Parrot Drones for external devices&lt;br /&gt;
&lt;br /&gt;
There are many use cases for one to be able to use the USB port on a Parrot Drone. The first kick-off on this page is about using ''serial devices via USB'', the most common scenario. Ofcourse there are more, feel free to add you solutions on this page&lt;br /&gt;
&lt;br /&gt;
== Serial modem on Parrot ==&lt;br /&gt;
&lt;br /&gt;
Add a external modem ARdrone2, Bebop, Bebop 2 or Disco and maybe even others...&lt;br /&gt;
&lt;br /&gt;
=== Beware ===&lt;br /&gt;
&lt;br /&gt;
Wherever you read '''/lib/modules/3.4.11\+/''' is for a Bebop '''/lib/modules/3.4.11/''', mind the plus.&lt;br /&gt;
If you read Bebop it might as well be Disco, although on the MTP there are some differences. And in the rare case you have an ARdrone2, well it will be '''/lib/modules/2.6.32.9-g980dab2/'''&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
A 20Km telemetry connection with the [[UAS.Bebop | Parrot Bebop]] by means of a RFD868 modem or some other modem that does the trick&lt;br /&gt;
&lt;br /&gt;
== Needs ==&lt;br /&gt;
&lt;br /&gt;
Somehow send and receive bytes to the RFD868 modem, be it serial or otherwise.&lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
If you just want to know the step to install serial driver and not interested in the background jump to the '''Step By Step for USB Serial Drivers''' instruction&lt;br /&gt;
&lt;br /&gt;
== Works for ==&lt;br /&gt;
&lt;br /&gt;
Tested and works on Disco Firmware 1.7.1, Bebop Firmware 4.0.6 and Bebop2 with Firmware 4.7.1. And on an ARdrone2 ? We someone working on it...&lt;br /&gt;
&lt;br /&gt;
=== Strategy ===&lt;br /&gt;
&lt;br /&gt;
Use the USB port on the backside of the AP mainboard. The USB is by default on Bebop hooked to the MTP media transfer protocol server... let's stop this service so it will not interfere with our datastream wishes.&lt;br /&gt;
&lt;br /&gt;
==== Stop MTP service ====&lt;br /&gt;
&lt;br /&gt;
Log into your Bebop, make a WiFi connection then &lt;br /&gt;
 &lt;br /&gt;
 $ telnet 192.168.42.1&lt;br /&gt;
mount -o remount,rw /&lt;br /&gt;
So in the Bebop console we are root, yeah...OK stop the service via:&lt;br /&gt;
&lt;br /&gt;
 **# /bin/sh /bin/mtp_server.sh stop**&lt;br /&gt;
&lt;br /&gt;
=== First tryout, USB plug convertor ===&lt;br /&gt;
&lt;br /&gt;
Plug in a OTG micro converter to USB Serial device [[http://www.banggood.com/DM-Micro-USB-to-USB-Flash-Drive-OTG-Adapter-for-U-Disk-Xiaomi-HTC-Samsung-HuaWei-Tablet-PC-p-999105.html | like this one]]&lt;br /&gt;
&lt;br /&gt;
So plugh in a 3v3 FTDI USB cable &lt;br /&gt;
&lt;br /&gt;
 # dmesg &lt;br /&gt;
&lt;br /&gt;
gives:&lt;br /&gt;
&lt;br /&gt;
 usb 2-1: new full-speed USB device number 2 using ci_hdrc&lt;br /&gt;
&lt;br /&gt;
Sadly no default FTDI suppoert on the Bebop, lets fix this...&lt;br /&gt;
&lt;br /&gt;
== Add serial hardware driver ==&lt;br /&gt;
&lt;br /&gt;
 # find -iname *ko&lt;br /&gt;
&lt;br /&gt;
on the Parrot bebop we find:&lt;br /&gt;
&lt;br /&gt;
 ./data/ftp/usbserial.ko&lt;br /&gt;
 ./data/ftp/internal_000/usbserial.ko&lt;br /&gt;
 ./data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
...lucky us ;), let's go and interrogate them, see what we have here via:&lt;br /&gt;
&lt;br /&gt;
[[howto.crosscompile_for_parrot_drones | If your are not so lucky you have to go to this page to build them]]&lt;br /&gt;
&lt;br /&gt;
 # modinfo usbserial.ko &amp;amp;&amp;amp; modinfo ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
that is just dandy , let's add them to this file ''/lib/modules/3.4.11/modules.dep''&lt;br /&gt;
&lt;br /&gt;
First we need to be able to Write change on the Drone main storage medium, let make it happen via:&lt;br /&gt;
&lt;br /&gt;
 # mount -o remount,rw /&lt;br /&gt;
&lt;br /&gt;
we start up an editor on the device call &amp;quot;VI&amp;quot; via:&lt;br /&gt;
&lt;br /&gt;
 # vi /lib/modules/3.4.11\+/modules.dep&lt;br /&gt;
&lt;br /&gt;
VI quick 'n dirty:&lt;br /&gt;
Go to edit mode with&lt;br /&gt;
&lt;br /&gt;
 :e[ENTER]&lt;br /&gt;
&lt;br /&gt;
Then go to a line where you want to insert the lines and press &lt;br /&gt;
&lt;br /&gt;
 i+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Sometimes even this works:&lt;br /&gt;
== Step By Step for USB Serial Drivers ==&lt;br /&gt;
 [SHIFT]+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Then copy this line below from this text:&lt;br /&gt;
 &lt;br /&gt;
 /data/ftp/internal_000/usbserial.ko&lt;br /&gt;
&lt;br /&gt;
Paste it via &lt;br /&gt;
&lt;br /&gt;
 [CTRL]+[SHIFT]+[V]&lt;br /&gt;
 &lt;br /&gt;
and again new empty line via a &lt;br /&gt;
&lt;br /&gt;
 [SHIFT]+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Copy this line&lt;br /&gt;
&lt;br /&gt;
 /data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
Paste it again via&lt;br /&gt;
&lt;br /&gt;
  [CTRL]+[SHIFT]+[V]&lt;br /&gt;
&lt;br /&gt;
Press [ESC]&lt;br /&gt;
&lt;br /&gt;
Then let's write the file via:&lt;br /&gt;
&lt;br /&gt;
 :w[ENTER]&lt;br /&gt;
&lt;br /&gt;
Now active the driver, manually first,  and one can autostart it automate it later after the proof of concept works...&lt;br /&gt;
&lt;br /&gt;
 # insmod /data/ftp/internal_000/usbserial.ko &lt;br /&gt;
 # insmod /data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
 # cd /data/ftp/internal_000/&lt;br /&gt;
&lt;br /&gt;
 # modprobe usbserial.ko&lt;br /&gt;
 # modprobe ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
on to some testing... conect whatever serial devec that outputs stuff to the FTDI cable, e.g. and GPS receiver, then draw in the serial garbage via: &lt;br /&gt;
&lt;br /&gt;
 # cat /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
== Improvement on the theme ==&lt;br /&gt;
&lt;br /&gt;
=== Autostart ===&lt;br /&gt;
&lt;br /&gt;
== Step By Step for USB Serial Drivers ==&lt;br /&gt;
&lt;br /&gt;
A serial port on Bebop(2) or Disco at startup of aircraft&lt;br /&gt;
&lt;br /&gt;
=== Disable MTP autostart ===&lt;br /&gt;
&lt;br /&gt;
Changed, as dirty as we are, the mtp_server.sh script and renamed the mtp_prog name to use to something non existing... thus MTP server program would not be found so not started&lt;br /&gt;
&lt;br /&gt;
=== Transfer Drivers via FTP to Drone ===&lt;br /&gt;
&lt;br /&gt;
Make sure you have space left on you Parrot Drone internal storage, if needed move  some of your video recordings to your PC.&lt;br /&gt;
&lt;br /&gt;
The easy way:&lt;br /&gt;
&lt;br /&gt;
# Connect to you Parrot Drone via Wifi&lt;br /&gt;
# FTP the files with your your FTP method of choice. A good start for a GUI FTP client is Filezilla. Open 192.168.42.1 with your FTP client and drag and drop the .ko file into the storage on your Drone ( /data/ftp/internal_000 )&lt;br /&gt;
&lt;br /&gt;
=== Move kernel modules to system ===&lt;br /&gt;
&lt;br /&gt;
==== Where ====&lt;br /&gt;
&lt;br /&gt;
Where to move your .ko driver files? The /lib/modules/3.4.11/kernel/drivers/usb/serial/ looks like a good spot to us&lt;br /&gt;
&lt;br /&gt;
==== How ====&lt;br /&gt;
&lt;br /&gt;
After 4 time shortpress on powerbutton, Telnet into your Parrot Drone via:&lt;br /&gt;
&lt;br /&gt;
 Telnet 192.168.42.1 &lt;br /&gt;
&lt;br /&gt;
Once in the Telnet shell, to be able to write onto the system storage space we have to make the storage space writable, per default it is not. Do it via:&lt;br /&gt;
&lt;br /&gt;
 # mount -o remount,rw /&lt;br /&gt;
&lt;br /&gt;
Make a directory of where to store, '''must''' be called serial, do via:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
Move the previous uploaded .ko driver files...&lt;br /&gt;
&lt;br /&gt;
Note: The directory could as well be '''without a''' + on your '''Bebop 1''' or even a /lib/modules/2.6.36-102952-g6aedf2e9100/kernel/drivers/usb/serial on a Mambo... anyhow move via:&lt;br /&gt;
&lt;br /&gt;
 # mv /data/ftp/internal_000/usbserial.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/option.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/usb_wwan.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/ftdi_sio.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/cp210x.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/pl2303.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/ch341.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
(''Optionally'' quicker if you are sure there are only the serial KO files uploaded via:)&lt;br /&gt;
&lt;br /&gt;
 # mv -v /data/ftp/internal_000/*.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
=== Add modules to modules.dep ===&lt;br /&gt;
&lt;br /&gt;
Maybe it is good to read a bit about :e :w :q  etc. of VI the editor you are going to use on this ''Busybox'' Linux based ''OS'', the OS the Parrot drone uses.&lt;br /&gt;
&lt;br /&gt;
If you are sure how VI editor works, go ahead then;&lt;br /&gt;
&lt;br /&gt;
 # vi /lib/modules/3.4.11\+/modules.dep&lt;br /&gt;
&lt;br /&gt;
Add these lines '''in between''' {STARTHERE} {ENDHERE} but do NOT add the {STARTHERE} {ENDHERE}  nor the ... ! , somewhere like so:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 kernel/drivers/parrot/iio/adc/p7temp.ko: kernel/drivers/iio/industrialio.ko&lt;br /&gt;
 {STARTHERE}&lt;br /&gt;
 kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 kernel/drivers/usb/serial/option.ko&lt;br /&gt;
 kernel/drivers/usb/serial/usb_wwan.ko&lt;br /&gt;
 kernel/drivers/usb/serial/ftdi_sio.ko &lt;br /&gt;
 kernel/drivers/usb/serial/cp210x.ko&lt;br /&gt;
 kernel/drivers/usb/serial/pl2303.ko&lt;br /&gt;
 kernel/drivers/usb/serial/ch341.ko&lt;br /&gt;
 {ENDHERE}&lt;br /&gt;
 kernel/arch/arm/oprofile/oprofile.ko&lt;br /&gt;
 kernel/net/wireless/lib80211.ko:&lt;br /&gt;
 kernel/net/wireless/lib80211_crypt_wep.ko: kernel/net/wireless/lib80211.ko&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
To save these changes in the file press [ESC]  than :w+[ENTER] then :q+[ENTER]&lt;br /&gt;
&lt;br /&gt;
== Quicktest ==&lt;br /&gt;
&lt;br /&gt;
Add to system instantly in this order, do this:&lt;br /&gt;
&lt;br /&gt;
 # insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 # insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
=== Start kernel module USBSerial and FTDI ===&lt;br /&gt;
&lt;br /&gt;
Add modprobe somewhere e.g /etc/init.d/rcS&lt;br /&gt;
&lt;br /&gt;
 # vi /etc/init.d/rcS&lt;br /&gt;
&lt;br /&gt;
Look for other modprobes ones then add these there:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 #/sbin/sysmon.sh &amp;amp;                                                        &lt;br /&gt;
 {HERE}                                                                                      &lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/option.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usb_wwan.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ftdi_sio.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/cp210x.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/pl2303.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ch341.ko&lt;br /&gt;
 {ENDHERE}                                                                     &lt;br /&gt;
 ulogi &amp;quot;rcS init script done&amp;quot;&lt;br /&gt;
                                                                                       &lt;br /&gt;
 exit 0 &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Time to reboot to test via&lt;br /&gt;
&lt;br /&gt;
 # reboot now&lt;br /&gt;
&lt;br /&gt;
=== Make a better custom cable: ===&lt;br /&gt;
&lt;br /&gt;
# Get a 3V# FTDI Real FTDI to USB small PCB&lt;br /&gt;
# Desolder the USB plug&lt;br /&gt;
# Get a microUSB cable an cut it and solder to USB side of FTDI PCB&lt;br /&gt;
&lt;br /&gt;
{TODO Photo}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Separate Power ==&lt;br /&gt;
&lt;br /&gt;
At a 1W setting it is not possible to draw power from the USB so a separate powersource must be found or create.&lt;br /&gt;
There is none, so one can add a '''BEC''' that can give 5V at least 5A continuous and is wel shielded to the drone...&lt;br /&gt;
&lt;br /&gt;
BEC to Bebop Howto and where&lt;br /&gt;
&lt;br /&gt;
# At the base where the Power goes to the Bobop Board pull a little on red and black silicone shield &lt;br /&gt;
# Fux and solder on base of wire a bit&lt;br /&gt;
# solder CC BEC RED to RED Black to Black on Base&lt;br /&gt;
{TODO} Photo&lt;br /&gt;
# Add a dot of Hotglue to isolate an get mechanical strength for cables not to break off there&lt;br /&gt;
# Plugh in Bebop Battery, measure voltage from BEC , should be 5V &lt;br /&gt;
&lt;br /&gt;
== Alternative idea ==&lt;br /&gt;
&lt;br /&gt;
Serial Data in and out via the console port, why not...&lt;br /&gt;
&lt;br /&gt;
First there is the serial port used as shell access. see also http://forum.parrot.com/usa/viewtopic.php?id=30330&lt;br /&gt;
&lt;br /&gt;
=== Disable serial shell ===&lt;br /&gt;
&lt;br /&gt;
In the /etc/inittab we find:&lt;br /&gt;
 ...&lt;br /&gt;
 # Put a an on-demand shell on first serial port with outputs redirected to&lt;br /&gt;
 # zprint. Note: force interactive shell since zprint is not a tty...&lt;br /&gt;
 ttyPA0::askfirst:-/bin/sh -l&lt;br /&gt;
 tty1::askfirst:-/bin/sh&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
So let's disable it and start using the serial port for other nifty stuff...&lt;br /&gt;
&lt;br /&gt;
== Howza ==&lt;br /&gt;
&lt;br /&gt;
look for serial console info&lt;br /&gt;
&lt;br /&gt;
 $ cat /var/log/messages&lt;br /&gt;
&lt;br /&gt;
Gives&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 Jan  1 00:00:07 (none) user.info broadcom_setup.sh: (insmod) : CURRENT_TTY = /dev/console&lt;br /&gt;
 Jan  1 00:00:07 (none) user.info broadcom_setup.sh: Load Modules :&lt;br /&gt;
 Jan  1 00:00:08 (none) user.info broadcom_setup.sh: (create_net_interface) : CURRENT_TTY = /dev/console&lt;br /&gt;
&lt;br /&gt;
== Using the serial link ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/cucx/bebop  some hacking tips&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Use_the_USB_port_on_Parrot_Drones&amp;diff=26130</id>
		<title>Use the USB port on Parrot Drones</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Use_the_USB_port_on_Parrot_Drones&amp;diff=26130"/>
		<updated>2022-05-18T13:42:39Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Outcome ==&lt;br /&gt;
&lt;br /&gt;
Outcome: Be able to USE USB port on Parrot Drones for external devices&lt;br /&gt;
&lt;br /&gt;
There are many use cases for one to be able to use the USB port on a Parrot Drone. The first kick-off on this page is about using ''serial devices via USB'', the most common scenario. Ofcourse there are more, feel free to add you solutions on this page&lt;br /&gt;
&lt;br /&gt;
== Serial modem on Parrot ==&lt;br /&gt;
&lt;br /&gt;
Add a external modem ARdrone2, Bebop, Bebop 2 or Disco and maybe even others...&lt;br /&gt;
&lt;br /&gt;
=== Beware ===&lt;br /&gt;
&lt;br /&gt;
Wherever you read '''/lib/modules/3.4.11\+/''' is for a Bebop '''/lib/modules/3.4.11/''', mind the plus.&lt;br /&gt;
If you read Bebop it might as well be Disco, although on the MTP there are some differences. And in the rare case you have an ARdrone2, well it will be '''/lib/modules/2.6.32.9-g980dab2/'''&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
A 20Km telemetry connection with the [[UAS.Bebop | Parrot Bebop]] by means of a RFD868 modem or some other modem that does the trick&lt;br /&gt;
&lt;br /&gt;
== Needs ==&lt;br /&gt;
&lt;br /&gt;
Somehow send and receive bytes to the RFD868 modem, be it serial or otherwise.&lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
If you just want to know the step to install serial driver and not interested in the background jump to the '''Step By Step for USB Serial Drivers''' instruction&lt;br /&gt;
&lt;br /&gt;
== Works for ==&lt;br /&gt;
&lt;br /&gt;
Tested and works on Disco Firmware 1.7.1, Bebop Firmware 4.0.6 and Bebop2 with Firmware 4.7.1. And on an ARdrone2 ? We someone working on it...&lt;br /&gt;
&lt;br /&gt;
=== Strategy ===&lt;br /&gt;
&lt;br /&gt;
Use the USB port on the backside of the AP mainboard. The USB is by default on Bebop hooked to the MTP media transfer protocol server... let's stop this service so it will not interfere with our datastream wishes.&lt;br /&gt;
&lt;br /&gt;
==== Stop MTP service ====&lt;br /&gt;
&lt;br /&gt;
Log into your Bebop, make a WiFi connection then &lt;br /&gt;
 &lt;br /&gt;
 $ telnet 192.168.42.1&lt;br /&gt;
mount -o remount,rw /&lt;br /&gt;
So in the Bebop console we are root, yeah...OK stop the service via:&lt;br /&gt;
&lt;br /&gt;
 **# /bin/sh /bin/mtp_server.sh stop**&lt;br /&gt;
&lt;br /&gt;
=== First tryout, USB plug convertor ===&lt;br /&gt;
&lt;br /&gt;
Plug in a OTG micro converter to USB Serial device [[http://www.banggood.com/DM-Micro-USB-to-USB-Flash-Drive-OTG-Adapter-for-U-Disk-Xiaomi-HTC-Samsung-HuaWei-Tablet-PC-p-999105.html | like this one]]&lt;br /&gt;
&lt;br /&gt;
So plugh in a 3v3 FTDI USB cable &lt;br /&gt;
&lt;br /&gt;
 # dmesg &lt;br /&gt;
&lt;br /&gt;
gives:&lt;br /&gt;
&lt;br /&gt;
 usb 2-1: new full-speed USB device number 2 using ci_hdrc&lt;br /&gt;
&lt;br /&gt;
Sadly no default FTDI suppoert on the Bebop, lets fix this...&lt;br /&gt;
&lt;br /&gt;
== Add serial hardware driver ==&lt;br /&gt;
&lt;br /&gt;
 # find -iname *ko&lt;br /&gt;
&lt;br /&gt;
on the Parrot bebop we find:&lt;br /&gt;
&lt;br /&gt;
 ./data/ftp/usbserial.ko&lt;br /&gt;
 ./data/ftp/internal_000/usbserial.ko&lt;br /&gt;
 ./data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
...lucky us ;), let's go and interrogate them, see what we have here via:&lt;br /&gt;
&lt;br /&gt;
[[howto.crosscompile_for_parrot_drones | If your are not so lucky you have to go to this page to build them]]&lt;br /&gt;
&lt;br /&gt;
 # modinfo usbserial.ko &amp;amp;&amp;amp; modinfo ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
that is just dandy , let's add them to this file ''/lib/modules/3.4.11/modules.dep''&lt;br /&gt;
&lt;br /&gt;
First we need to be able to Write change on the Drone main storage medium, let make it happen via:&lt;br /&gt;
&lt;br /&gt;
 # mount -o remount,rw /&lt;br /&gt;
&lt;br /&gt;
we start up an editor on the device call &amp;quot;VI&amp;quot; via:&lt;br /&gt;
&lt;br /&gt;
 # vi /lib/modules/3.4.11\+/modules.dep&lt;br /&gt;
&lt;br /&gt;
VI quick 'n dirty:&lt;br /&gt;
Go to edit mode with&lt;br /&gt;
&lt;br /&gt;
 :e[ENTER]&lt;br /&gt;
&lt;br /&gt;
Then go to a line where you want to insert the lines and press &lt;br /&gt;
&lt;br /&gt;
 i+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Sometimes even this works:&lt;br /&gt;
== Step By Step for USB Serial Drivers ==&lt;br /&gt;
 [SHIFT]+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Then copy this line below from this text:&lt;br /&gt;
 &lt;br /&gt;
 /data/ftp/internal_000/usbserial.ko&lt;br /&gt;
&lt;br /&gt;
Paste it via &lt;br /&gt;
&lt;br /&gt;
 [CTRL]+[SHIFT]+[V]&lt;br /&gt;
 &lt;br /&gt;
and again new empty line via a &lt;br /&gt;
&lt;br /&gt;
 [SHIFT]+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Copy this line&lt;br /&gt;
&lt;br /&gt;
 /data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
Paste it again via&lt;br /&gt;
&lt;br /&gt;
  [CTRL]+[SHIFT]+[V]&lt;br /&gt;
&lt;br /&gt;
Press [ESC]&lt;br /&gt;
&lt;br /&gt;
Then let's write the file via:&lt;br /&gt;
&lt;br /&gt;
 :w[ENTER]&lt;br /&gt;
&lt;br /&gt;
Now active the driver, manually first,  and one can autostart it automate it later after the proof of concept works...&lt;br /&gt;
&lt;br /&gt;
 # insmod /data/ftp/internal_000/usbserial.ko &lt;br /&gt;
 # insmod /data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
 # cd /data/ftp/internal_000/&lt;br /&gt;
&lt;br /&gt;
 # modprobe usbserial.ko&lt;br /&gt;
 # modprobe ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
on to some testing... conect whatever serial devec that outputs stuff to the FTDI cable, e.g. and GPS receiver, then draw in the serial garbage via: &lt;br /&gt;
&lt;br /&gt;
 # cat /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
== Improvement on the theme ==&lt;br /&gt;
&lt;br /&gt;
=== Autostart ===&lt;br /&gt;
&lt;br /&gt;
== Step By Step for USB Serial Drivers ==&lt;br /&gt;
&lt;br /&gt;
A serial port on Bebop(2) or Disco at startup of aircraft&lt;br /&gt;
&lt;br /&gt;
=== Disable MTP autostart ===&lt;br /&gt;
&lt;br /&gt;
Changed, as dirty as we are, the mtp_server.sh script and renamed the mtp_prog name to use to something non existing... thus MTP server program would not be found so not started&lt;br /&gt;
&lt;br /&gt;
=== Transfer Drivers via FTP to Drone ===&lt;br /&gt;
&lt;br /&gt;
Make sure you have space left on you Parrot Drone internal storage, if needed move  some of your video recordings to your PC.&lt;br /&gt;
&lt;br /&gt;
The easy way:&lt;br /&gt;
&lt;br /&gt;
# Connect to you Parrot Drone via Wifi&lt;br /&gt;
# FTP the files with your your FTP method of choice. A good start for a GUI FTP client is Filezilla. Open 192.168.42.1 with your FTP client and drag and drop the .ko file into the storage on your Drone ( /data/ftp/internal_000 )&lt;br /&gt;
&lt;br /&gt;
=== Move kernel modules to system ===&lt;br /&gt;
&lt;br /&gt;
==== Where ====&lt;br /&gt;
&lt;br /&gt;
Where to move your .ko driver files? The /lib/modules/3.4.11/kernel/drivers/usb/serial/ looks like a good spot to us&lt;br /&gt;
&lt;br /&gt;
==== How ====&lt;br /&gt;
&lt;br /&gt;
After 4 time shortpress on powerbutton, Telnet into your Parrot Drone via:&lt;br /&gt;
&lt;br /&gt;
 Telnet 192.168.42.1 &lt;br /&gt;
&lt;br /&gt;
Once in the Telnet shell, to be able to write onto the system storage space we have to make the storage space writable, per default it is not. Do it via:&lt;br /&gt;
&lt;br /&gt;
 # mount -o remount,rw /&lt;br /&gt;
&lt;br /&gt;
Make a directory of where to store, '''must''' be called serial, do via:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
Move the previous uploaded .ko driver files...&lt;br /&gt;
&lt;br /&gt;
Note: The directory could as well be '''without a''' + on your '''Bebop 1''' or even a /lib/modules/2.6.36-102952-g6aedf2e9100/kernel/drivers/usb/serial on a Mambo... anyhow move via:&lt;br /&gt;
&lt;br /&gt;
 # mv /data/ftp/internal_000/usbserial.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/option.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/usb_wwan.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/ftdi_sio.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/cp210x.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/pl2303.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/ch341.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
(''Optionally'' quicker if you are sure there are only the serial KO files uploaded via:)&lt;br /&gt;
&lt;br /&gt;
 # mv -v /data/ftp/internal_000/*.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
=== Add modules to modules.dep ===&lt;br /&gt;
&lt;br /&gt;
Maybe it is good to read a bit about :e :w :q  etc. of VI the editor you are going to use on this ''Busybox'' Linux based ''OS'', the OS the Parrot drone uses.&lt;br /&gt;
&lt;br /&gt;
If you are sure how VI editor works, go ahead then;&lt;br /&gt;
&lt;br /&gt;
 # vi /lib/modules/3.4.11\+/modules.dep&lt;br /&gt;
&lt;br /&gt;
Add these lines in between somewhere like so:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 kernel/drivers/parrot/iio/adc/p7temp.ko: kernel/drivers/iio/industrialio.ko&lt;br /&gt;
 {STARTHERE}&lt;br /&gt;
 kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 kernel/drivers/usb/serial/option.ko&lt;br /&gt;
 kernel/drivers/usb/serial/usb_wwan.ko&lt;br /&gt;
 kernel/drivers/usb/serial/ftdi_sio.ko &lt;br /&gt;
 kernel/drivers/usb/serial/cp210x.ko&lt;br /&gt;
 kernel/drivers/usb/serial/pl2303.ko&lt;br /&gt;
 kernel/drivers/usb/serial/ch341.ko&lt;br /&gt;
 {ENDHERE}&lt;br /&gt;
 kernel/arch/arm/oprofile/oprofile.ko&lt;br /&gt;
 kernel/net/wireless/lib80211.ko:&lt;br /&gt;
 kernel/net/wireless/lib80211_crypt_wep.ko: kernel/net/wireless/lib80211.ko&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To save these changes in the file press [ESC]  than :w+[ENTER] then :q+[ENTER]&lt;br /&gt;
&lt;br /&gt;
== Quicktest ==&lt;br /&gt;
&lt;br /&gt;
Add to system instantly in this order, do this:&lt;br /&gt;
&lt;br /&gt;
 # insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 # insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
=== Start kernel module USBSerial and FTDI ===&lt;br /&gt;
&lt;br /&gt;
Add modprobe somewhere e.g /etc/init.d/rcS&lt;br /&gt;
&lt;br /&gt;
 # vi /etc/init.d/rcS&lt;br /&gt;
&lt;br /&gt;
Look for other modprobes ones then add these there:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 #/sbin/sysmon.sh &amp;amp;                                                        &lt;br /&gt;
 {HERE}                                                                                      &lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/option.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usb_wwan.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ftdi_sio.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/cp210x.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/pl2303.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ch341.ko&lt;br /&gt;
 {ENDHERE}                                                                     &lt;br /&gt;
 ulogi &amp;quot;rcS init script done&amp;quot;&lt;br /&gt;
                                                                                       &lt;br /&gt;
 exit 0 &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Time to reboot to test via&lt;br /&gt;
&lt;br /&gt;
 # reboot now&lt;br /&gt;
&lt;br /&gt;
=== Make a better custom cable: ===&lt;br /&gt;
&lt;br /&gt;
# Get a 3V# FTDI Real FTDI to USB small PCB&lt;br /&gt;
# Desolder the USB plug&lt;br /&gt;
# Get a microUSB cable an cut it and solder to USB side of FTDI PCB&lt;br /&gt;
&lt;br /&gt;
{TODO Photo}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Separate Power ==&lt;br /&gt;
&lt;br /&gt;
At a 1W setting it is not possible to draw power from the USB so a separate powersource must be found or create.&lt;br /&gt;
There is none, so one can add a '''BEC''' that can give 5V at least 5A continuous and is wel shielded to the drone...&lt;br /&gt;
&lt;br /&gt;
BEC to Bebop Howto and where&lt;br /&gt;
&lt;br /&gt;
# At the base where the Power goes to the Bobop Board pull a little on red and black silicone shield &lt;br /&gt;
# Fux and solder on base of wire a bit&lt;br /&gt;
# solder CC BEC RED to RED Black to Black on Base&lt;br /&gt;
{TODO} Photo&lt;br /&gt;
# Add a dot of Hotglue to isolate an get mechanical strength for cables not to break off there&lt;br /&gt;
# Plugh in Bebop Battery, measure voltage from BEC , should be 5V &lt;br /&gt;
&lt;br /&gt;
== Alternative idea ==&lt;br /&gt;
&lt;br /&gt;
Serial Data in and out via the console port, why not...&lt;br /&gt;
&lt;br /&gt;
First there is the serial port used as shell access. see also http://forum.parrot.com/usa/viewtopic.php?id=30330&lt;br /&gt;
&lt;br /&gt;
=== Disable serial shell ===&lt;br /&gt;
&lt;br /&gt;
In the /etc/inittab we find:&lt;br /&gt;
 ...&lt;br /&gt;
 # Put a an on-demand shell on first serial port with outputs redirected to&lt;br /&gt;
 # zprint. Note: force interactive shell since zprint is not a tty...&lt;br /&gt;
 ttyPA0::askfirst:-/bin/sh -l&lt;br /&gt;
 tty1::askfirst:-/bin/sh&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
So let's disable it and start using the serial port for other nifty stuff...&lt;br /&gt;
&lt;br /&gt;
== Howza ==&lt;br /&gt;
&lt;br /&gt;
look for serial console info&lt;br /&gt;
&lt;br /&gt;
 $ cat /var/log/messages&lt;br /&gt;
&lt;br /&gt;
Gives&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 Jan  1 00:00:07 (none) user.info broadcom_setup.sh: (insmod) : CURRENT_TTY = /dev/console&lt;br /&gt;
 Jan  1 00:00:07 (none) user.info broadcom_setup.sh: Load Modules :&lt;br /&gt;
 Jan  1 00:00:08 (none) user.info broadcom_setup.sh: (create_net_interface) : CURRENT_TTY = /dev/console&lt;br /&gt;
&lt;br /&gt;
== Using the serial link ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/cucx/bebop  some hacking tips&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Use_the_USB_port_on_Parrot_Drones&amp;diff=26129</id>
		<title>Use the USB port on Parrot Drones</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Use_the_USB_port_on_Parrot_Drones&amp;diff=26129"/>
		<updated>2022-05-18T13:38:33Z</updated>

		<summary type="html">&lt;p&gt;Openuas: clarify a bit more&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== USE USB port on Parrot Drones ==&lt;br /&gt;
&lt;br /&gt;
There are many use cases for one to be able to use the USB port on a Parrot Drone. The first kick-off on this page is about using serial devices via USB, the most common scenario. Ofcourse there are more, feel free to add you solutions on this page&lt;br /&gt;
&lt;br /&gt;
== Serial modem on Parrot ==&lt;br /&gt;
&lt;br /&gt;
Add a external modem ARdrone2, Bebop, Bebop 2 or Disco and maybe even others...&lt;br /&gt;
&lt;br /&gt;
=== Beware ===&lt;br /&gt;
&lt;br /&gt;
Wherever you read '''/lib/modules/3.4.11\+/''' is for a Bebop '''/lib/modules/3.4.11/''', mind the plus.&lt;br /&gt;
If you read Bebop it might as well be Disco, although on the MTP there are some differences. And in the rare case you have an ARdrone2, well it will be '''/lib/modules/2.6.32.9-g980dab2/'''&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
A 20Km telemetry connection with the [[UAS.Bebop | Parrot Bebop]] by means of a RFD868 modem or some other modem that does the trick&lt;br /&gt;
&lt;br /&gt;
== Needs ==&lt;br /&gt;
&lt;br /&gt;
Somehow send and receive bytes to the RFD868 modem, be it serial or otherwise.&lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
If you just want to know the step to install serial driver and not interested in the background jump to&lt;br /&gt;
&lt;br /&gt;
== Works for ==&lt;br /&gt;
&lt;br /&gt;
Tested and works on Disco Firmware 1.7.1, Bebop Firmware 4.0.6 and Bebop2 with Firmware 4.7.1. And on an ARdrone2 ? We someone working on it...&lt;br /&gt;
&lt;br /&gt;
=== Strategy ===&lt;br /&gt;
&lt;br /&gt;
Use the USB port on the backside of the AP mainboard. The USB is by default on Bebop hooked to the MTP media transfer protocol server... let's stop this service so it will not interfere with our datastream wishes.&lt;br /&gt;
&lt;br /&gt;
==== Stop MTP service ====&lt;br /&gt;
&lt;br /&gt;
Log into your Bebop, make a WiFi connection then &lt;br /&gt;
 &lt;br /&gt;
 $ telnet 192.168.42.1&lt;br /&gt;
&lt;br /&gt;
So in the Bebop console we are root, yeah...OK stop the service via:&lt;br /&gt;
&lt;br /&gt;
 **# /bin/sh /bin/mtp_server.sh stop**&lt;br /&gt;
&lt;br /&gt;
=== First tryout, USB plug convertor ===&lt;br /&gt;
&lt;br /&gt;
Plug in a OTG micro converter to USB Serial device [[http://www.banggood.com/DM-Micro-USB-to-USB-Flash-Drive-OTG-Adapter-for-U-Disk-Xiaomi-HTC-Samsung-HuaWei-Tablet-PC-p-999105.html | like this one]]&lt;br /&gt;
&lt;br /&gt;
So plugh in a 3v3 FTDI USB cable &lt;br /&gt;
&lt;br /&gt;
 # dmesg &lt;br /&gt;
&lt;br /&gt;
gives:&lt;br /&gt;
&lt;br /&gt;
 usb 2-1: new full-speed USB device number 2 using ci_hdrc&lt;br /&gt;
&lt;br /&gt;
Sadly no default FTDI suppoert on the Bebop, lets fix this...&lt;br /&gt;
&lt;br /&gt;
== Add serial hardware driver ==&lt;br /&gt;
&lt;br /&gt;
 # find -iname *ko&lt;br /&gt;
&lt;br /&gt;
on the Parrot bebop we find:&lt;br /&gt;
&lt;br /&gt;
 ./data/ftp/usbserial.ko&lt;br /&gt;
 ./data/ftp/internal_000/usbserial.ko&lt;br /&gt;
 ./data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
...lucky us ;), let's go and interrogate them, see what we have here via:&lt;br /&gt;
&lt;br /&gt;
[[howto.crosscompile_for_parrot_drones | If your are not so lucky you have to go to this page to build them]]&lt;br /&gt;
&lt;br /&gt;
 # modinfo usbserial.ko &amp;amp;&amp;amp; modinfo ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
that is just dandy , let's add them to this file ''/lib/modules/3.4.11/modules.dep''&lt;br /&gt;
&lt;br /&gt;
First we need to be able to Write change on the Drone main storage medium, let make it happen via:&lt;br /&gt;
&lt;br /&gt;
 # mount -o remount,rw /&lt;br /&gt;
&lt;br /&gt;
we start up an editor on the device call &amp;quot;VI&amp;quot; via:&lt;br /&gt;
&lt;br /&gt;
 # vi /lib/modules/3.4.11\+/modules.dep&lt;br /&gt;
&lt;br /&gt;
VI quick 'n dirty:&lt;br /&gt;
Go to edit mode with&lt;br /&gt;
&lt;br /&gt;
 :e[ENTER]&lt;br /&gt;
&lt;br /&gt;
Then go to a line where you want to insert the lines and press &lt;br /&gt;
&lt;br /&gt;
 i+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Sometimes even this works:&lt;br /&gt;
&lt;br /&gt;
 [SHIFT]+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Then copy this line below from this text:&lt;br /&gt;
 &lt;br /&gt;
 /data/ftp/internal_000/usbserial.ko&lt;br /&gt;
&lt;br /&gt;
Paste it via &lt;br /&gt;
&lt;br /&gt;
 [CTRL]+[SHIFT]+[V]&lt;br /&gt;
 &lt;br /&gt;
and again new empty line via a &lt;br /&gt;
&lt;br /&gt;
 [SHIFT]+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Copy this line&lt;br /&gt;
&lt;br /&gt;
 /data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
Paste it again via&lt;br /&gt;
&lt;br /&gt;
  [CTRL]+[SHIFT]+[V]&lt;br /&gt;
&lt;br /&gt;
Press [ESC]&lt;br /&gt;
&lt;br /&gt;
Then let's write the file via:&lt;br /&gt;
&lt;br /&gt;
 :w[ENTER]&lt;br /&gt;
&lt;br /&gt;
Now active the driver, manually first,  and one can autostart it automate it later after the proof of concept works...&lt;br /&gt;
&lt;br /&gt;
 # insmod /data/ftp/internal_000/usbserial.ko &lt;br /&gt;
 # insmod /data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
 # cd /data/ftp/internal_000/&lt;br /&gt;
&lt;br /&gt;
 # modprobe usbserial.ko&lt;br /&gt;
 # modprobe ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
on to some testing... conect whatever serial devec that outputs stuff to the FTDI cable, e.g. and GPS receiver, then draw in the serial garbage via: &lt;br /&gt;
&lt;br /&gt;
 # cat /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
== Improvement on the theme ==&lt;br /&gt;
&lt;br /&gt;
=== Autostart ===&lt;br /&gt;
&lt;br /&gt;
== Outcome ==&lt;br /&gt;
&lt;br /&gt;
A serial port on Bebop(2) or Disco at startup of aircraft&lt;br /&gt;
&lt;br /&gt;
=== Disable MTP autostart ===&lt;br /&gt;
&lt;br /&gt;
Changed, as dirty as we are, the mtp_server.sh script and renamed the mtp_prog name to use to something non existing... thus MTP server program would not be found so not started&lt;br /&gt;
&lt;br /&gt;
=== Transfer Drivers via FTP to Drone ===&lt;br /&gt;
&lt;br /&gt;
Make sure you have space left on you Parrot Drone internal storage, if needed move  some of your video recordings to your PC.&lt;br /&gt;
&lt;br /&gt;
The easy way:&lt;br /&gt;
&lt;br /&gt;
# Connect to you Parrot Drone via Wifi&lt;br /&gt;
# FTP the files with your your FTP method of choice. A good start for a GUI FTP client is Filezilla. Open 192.168.42.1 with your FTP client and drag and drop the .ko file into the storage on your Drone ( /data/ftp/internal_000 )&lt;br /&gt;
&lt;br /&gt;
=== Move kernel modules to system ===&lt;br /&gt;
&lt;br /&gt;
==== Where ====&lt;br /&gt;
&lt;br /&gt;
Where to move your .ko driver files? The /lib/modules/3.4.11/kernel/drivers/usb/serial/ looks like a good spot to us&lt;br /&gt;
&lt;br /&gt;
==== How ====&lt;br /&gt;
&lt;br /&gt;
After 4 time shortpress on powerbutton, Telnet into your Parrot Drone via:&lt;br /&gt;
&lt;br /&gt;
 Telnet 192.168.42.1 &lt;br /&gt;
&lt;br /&gt;
Once in the Telnet shell, to be able to write onto the system storage space we have to make the storage space writable, per default it is not. Do it via:&lt;br /&gt;
&lt;br /&gt;
 # mount -o remount,rw /&lt;br /&gt;
&lt;br /&gt;
Make a directory of where to store, '''must''' be called serial, do via:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
Move the previous uploaded .ko driver files...&lt;br /&gt;
&lt;br /&gt;
Note: The directory could as well be '''without a''' + on your '''Bebop 1''' or even a /lib/modules/2.6.36-102952-g6aedf2e9100/kernel/drivers/usb/serial on a Mambo... anyhow move via:&lt;br /&gt;
&lt;br /&gt;
 # mv /data/ftp/internal_000/usbserial.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/option.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/usb_wwan.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/ftdi_sio.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/cp210x.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/pl2303.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/ch341.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
(''Optionally'' quicker if you are sure there are only the serial KO files uploaded via:)&lt;br /&gt;
&lt;br /&gt;
 # mv -v /data/ftp/internal_000/*.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
=== Add modules to modules.dep ===&lt;br /&gt;
&lt;br /&gt;
Maybe it is good to read a bit about :e :w :q  etc. of VI the editor you are going to use on this ''Busybox'' Linux based ''OS'', the OS the Parrot drone uses.&lt;br /&gt;
&lt;br /&gt;
If you are sure how VI editor works, go ahead then;&lt;br /&gt;
&lt;br /&gt;
 # vi /lib/modules/3.4.11\+/modules.dep&lt;br /&gt;
&lt;br /&gt;
Add these lines in between somewhere like so:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 kernel/drivers/parrot/iio/adc/p7temp.ko: kernel/drivers/iio/industrialio.ko&lt;br /&gt;
 {STARTHERE}&lt;br /&gt;
 kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 kernel/drivers/usb/serial/option.ko&lt;br /&gt;
 kernel/drivers/usb/serial/usb_wwan.ko&lt;br /&gt;
 kernel/drivers/usb/serial/ftdi_sio.ko &lt;br /&gt;
 kernel/drivers/usb/serial/cp210x.ko&lt;br /&gt;
 kernel/drivers/usb/serial/pl2303.ko&lt;br /&gt;
 kernel/drivers/usb/serial/ch341.ko&lt;br /&gt;
 {ENDHERE}&lt;br /&gt;
 kernel/arch/arm/oprofile/oprofile.ko&lt;br /&gt;
 kernel/net/wireless/lib80211.ko:&lt;br /&gt;
 kernel/net/wireless/lib80211_crypt_wep.ko: kernel/net/wireless/lib80211.ko&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To save these changes in the file press [ESC]  than :w+[ENTER] then :q+[ENTER]&lt;br /&gt;
&lt;br /&gt;
== Quicktest ==&lt;br /&gt;
&lt;br /&gt;
Add to system instantly in this order, do this:&lt;br /&gt;
&lt;br /&gt;
 # insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 # insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
=== Start kernel module USBSerial and FTDI ===&lt;br /&gt;
&lt;br /&gt;
Add modprobe somewhere e.g /etc/init.d/rcS&lt;br /&gt;
&lt;br /&gt;
 # vi /etc/init.d/rcS&lt;br /&gt;
&lt;br /&gt;
Look for other modprobes ones then add these there:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 #/sbin/sysmon.sh &amp;amp;                                                        &lt;br /&gt;
 {HERE}                                                                                      &lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/option.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usb_wwan.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ftdi_sio.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/cp210x.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/pl2303.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ch341.ko&lt;br /&gt;
 {ENDHERE}                                                                     &lt;br /&gt;
 ulogi &amp;quot;rcS init script done&amp;quot;&lt;br /&gt;
                                                                                       &lt;br /&gt;
 exit 0 &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Time to reboot to test via&lt;br /&gt;
&lt;br /&gt;
 # reboot now&lt;br /&gt;
&lt;br /&gt;
=== Make a better custom cable: ===&lt;br /&gt;
&lt;br /&gt;
# Get a 3V# FTDI Real FTDI to USB small PCB&lt;br /&gt;
# Desolder the USB plug&lt;br /&gt;
# Get a microUSB cable an cut it and solder to USB side of FTDI PCB&lt;br /&gt;
&lt;br /&gt;
{TODO Photo}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Separate Power ==&lt;br /&gt;
&lt;br /&gt;
At a 1W setting it is not possible to draw power from the USB so a separate powersource must be found or create.&lt;br /&gt;
There is none, so one can add a '''BEC''' that can give 5V at least 5A continuous and is wel shielded to the drone...&lt;br /&gt;
&lt;br /&gt;
BEC to Bebop Howto and where&lt;br /&gt;
&lt;br /&gt;
# At the base where the Power goes to the Bobop Board pull a little on red and black silicone shield &lt;br /&gt;
# Fux and solder on base of wire a bit&lt;br /&gt;
# solder CC BEC RED to RED Black to Black on Base&lt;br /&gt;
{TODO} Photo&lt;br /&gt;
# Add a dot of Hotglue to isolate an get mechanical strength for cables not to break off there&lt;br /&gt;
# Plugh in Bebop Battery, measure voltage from BEC , should be 5V &lt;br /&gt;
&lt;br /&gt;
== Alternative idea ==&lt;br /&gt;
&lt;br /&gt;
Serial Data in and out via the console port, why not...&lt;br /&gt;
&lt;br /&gt;
First there is the serial port used as shell access. see also http://forum.parrot.com/usa/viewtopic.php?id=30330&lt;br /&gt;
&lt;br /&gt;
=== Disable serial shell ===&lt;br /&gt;
&lt;br /&gt;
In the /etc/inittab we find:&lt;br /&gt;
 ...&lt;br /&gt;
 # Put a an on-demand shell on first serial port with outputs redirected to&lt;br /&gt;
 # zprint. Note: force interactive shell since zprint is not a tty...&lt;br /&gt;
 ttyPA0::askfirst:-/bin/sh -l&lt;br /&gt;
 tty1::askfirst:-/bin/sh&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
So let's disable it and start using the serial port for other nifty stuff...&lt;br /&gt;
&lt;br /&gt;
== Howza ==&lt;br /&gt;
&lt;br /&gt;
look for serial console info&lt;br /&gt;
&lt;br /&gt;
 $ cat /var/log/messages&lt;br /&gt;
&lt;br /&gt;
Gives&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 Jan  1 00:00:07 (none) user.info broadcom_setup.sh: (insmod) : CURRENT_TTY = /dev/console&lt;br /&gt;
 Jan  1 00:00:07 (none) user.info broadcom_setup.sh: Load Modules :&lt;br /&gt;
 Jan  1 00:00:08 (none) user.info broadcom_setup.sh: (create_net_interface) : CURRENT_TTY = /dev/console&lt;br /&gt;
&lt;br /&gt;
== Using the serial link ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/cucx/bebop  some hacking tips&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Use_the_USB_port_on_Parrot_Drones&amp;diff=26128</id>
		<title>Use the USB port on Parrot Drones</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Use_the_USB_port_on_Parrot_Drones&amp;diff=26128"/>
		<updated>2022-05-18T13:18:28Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Works for */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== USE USB port on Parrot Drones ==&lt;br /&gt;
&lt;br /&gt;
There are many use cases for one to be able to use the USB port on a Parrot Drone. The first kick-off on this page is about using serial devices via USB, the most common scenario. Ofcourse there are more, feel free to add you solutions on this page&lt;br /&gt;
&lt;br /&gt;
== Serial modem on Parrot ==&lt;br /&gt;
&lt;br /&gt;
Add a external modem ARdrone2, Bebop, Bebop 2 or Disco and maybe even others...&lt;br /&gt;
&lt;br /&gt;
=== Beware ===&lt;br /&gt;
&lt;br /&gt;
Wherever you read '''/lib/modules/3.4.11\+/''' is for a Bebop '''/lib/modules/3.4.11/''', mind the plus.&lt;br /&gt;
If you read Bebop it might as well be Disco, although on the MTP there are some differences. And in the rare case you have an ARdrone2, well it will be '''/lib/modules/2.6.32.9-g980dab2/'''&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
A 20Km telemetry connection with the [[UAS.Bebop | Parrot Bebop]] by means of a RFD868 modem or some other modem that does the trick&lt;br /&gt;
&lt;br /&gt;
== Needs ==&lt;br /&gt;
&lt;br /&gt;
Somehow send and receive bytes to the RFD868 modem, be it serial or otherwise.&lt;br /&gt;
&lt;br /&gt;
== Intro ==&lt;br /&gt;
&lt;br /&gt;
If you just want to know the step to install serial driver and not interested in the background jump to&lt;br /&gt;
&lt;br /&gt;
== Works for ==&lt;br /&gt;
&lt;br /&gt;
Tested and works on Disco Firmware 1.7.1, Bebop Firmware 4.0.6 and Bebop2 with Firmware 4.7.1. And on an ARdrone2 ? We someone working on it...&lt;br /&gt;
&lt;br /&gt;
=== Strategy ===&lt;br /&gt;
&lt;br /&gt;
Use the USB port on the backside of the AP mainboard. The USB is by default on Bebop hooked to the MTP media transfer protocol server... let's stop this service so it will not interfere with our datastream wishes.&lt;br /&gt;
&lt;br /&gt;
==== Stop MTP service ====&lt;br /&gt;
&lt;br /&gt;
Log into your Bebop, make a WiFi connection then &lt;br /&gt;
 &lt;br /&gt;
 $ telnet 192.168.42.1&lt;br /&gt;
&lt;br /&gt;
So in the Bebop console we are root, yeah...OK stop the service via:&lt;br /&gt;
&lt;br /&gt;
 **# /bin/sh /bin/mtp_server.sh stop**&lt;br /&gt;
&lt;br /&gt;
=== First tryout, USB plug convertor ===&lt;br /&gt;
&lt;br /&gt;
Plug in a OTG micro converter to USB Serial device [[http://www.banggood.com/DM-Micro-USB-to-USB-Flash-Drive-OTG-Adapter-for-U-Disk-Xiaomi-HTC-Samsung-HuaWei-Tablet-PC-p-999105.html | like this one]]&lt;br /&gt;
&lt;br /&gt;
So plugh in a 3v3 FTDI USB cable &lt;br /&gt;
&lt;br /&gt;
 # dmesg &lt;br /&gt;
&lt;br /&gt;
gives:&lt;br /&gt;
&lt;br /&gt;
 usb 2-1: new full-speed USB device number 2 using ci_hdrc&lt;br /&gt;
&lt;br /&gt;
Sadly no default FTDI suppoert on the Bebop, lets fix this...&lt;br /&gt;
&lt;br /&gt;
== Add serial hardware driver ==&lt;br /&gt;
&lt;br /&gt;
 # find -iname *ko&lt;br /&gt;
&lt;br /&gt;
on the Parrot bebop we find:&lt;br /&gt;
&lt;br /&gt;
 ./data/ftp/usbserial.ko&lt;br /&gt;
 ./data/ftp/internal_000/usbserial.ko&lt;br /&gt;
 ./data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
...lucky us ;), let's go and interrogate them, see what we have here via:&lt;br /&gt;
&lt;br /&gt;
[[howto.crosscompile_for_parrot_drones | If your are not so lucky you have to go to this page to build them]]&lt;br /&gt;
&lt;br /&gt;
 # modinfo usbserial.ko &amp;amp;&amp;amp; modinfo ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
that is just dandy , let's add them to this file ''/lib/modules/3.4.11/modules.dep''&lt;br /&gt;
&lt;br /&gt;
First we need to be able to Write change on the Drone main storage medium, let make it happen via:&lt;br /&gt;
&lt;br /&gt;
 # mount -o remount,rw /&lt;br /&gt;
&lt;br /&gt;
we start up an editor on the device call &amp;quot;VI&amp;quot; via:&lt;br /&gt;
&lt;br /&gt;
 # vi /lib/modules/3.4.11\+/modules.dep&lt;br /&gt;
&lt;br /&gt;
VI quick 'n dirty:&lt;br /&gt;
Go to edit mode with&lt;br /&gt;
&lt;br /&gt;
 :e[ENTER]&lt;br /&gt;
&lt;br /&gt;
Then go to a line where you want to insert the lines and press &lt;br /&gt;
&lt;br /&gt;
 i+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Sometimes even this works:&lt;br /&gt;
&lt;br /&gt;
 [SHIFT]+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Then copy this line below from this text:&lt;br /&gt;
 &lt;br /&gt;
 /data/ftp/internal_000/usbserial.ko&lt;br /&gt;
&lt;br /&gt;
Paste it via &lt;br /&gt;
&lt;br /&gt;
 [CTRL]+[SHIFT]+[V]&lt;br /&gt;
 &lt;br /&gt;
and again new empty line via a &lt;br /&gt;
&lt;br /&gt;
 [SHIFT]+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Copy this line&lt;br /&gt;
&lt;br /&gt;
 /data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
Paste it again via&lt;br /&gt;
&lt;br /&gt;
  [CTRL]+[SHIFT]+[V]&lt;br /&gt;
&lt;br /&gt;
Press [ESC]&lt;br /&gt;
&lt;br /&gt;
Then let's write the file via:&lt;br /&gt;
&lt;br /&gt;
 :w[ENTER]&lt;br /&gt;
&lt;br /&gt;
Now active the driver, manually first,  and one can autostart it automate it later after the proof of concept works...&lt;br /&gt;
&lt;br /&gt;
 # insmod /data/ftp/internal_000/usbserial.ko &lt;br /&gt;
 # insmod /data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
 # cd /data/ftp/internal_000/&lt;br /&gt;
&lt;br /&gt;
 # modprobe usbserial.ko&lt;br /&gt;
 # modprobe ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
on to some testing... conect whatever serial devec that outputs stuff to the FTDI cable, e.g. and GPS receiver, then draw in the serial garbage via: &lt;br /&gt;
&lt;br /&gt;
 # cat /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
== Improvement on the theme ==&lt;br /&gt;
&lt;br /&gt;
=== Autostart ===&lt;br /&gt;
&lt;br /&gt;
== Outcome ==&lt;br /&gt;
&lt;br /&gt;
A serial port on Bebop(2) or Disco at startup of aircraft&lt;br /&gt;
&lt;br /&gt;
=== Disable MTP autostart ===&lt;br /&gt;
&lt;br /&gt;
Changed, as dirty as we are, the mtp_server.sh script and renamed the mtp_prog name to use to something non existing... thus MTP server program would not be found so not started&lt;br /&gt;
&lt;br /&gt;
=== Copy modules to system ===&lt;br /&gt;
&lt;br /&gt;
==== Where ====&lt;br /&gt;
&lt;br /&gt;
The /lib/modules/3.4.11/kernel/drivers/usb/serial/ looks like a good spot to us&lt;br /&gt;
&lt;br /&gt;
==== How ====&lt;br /&gt;
&lt;br /&gt;
Make the storage space writable&lt;br /&gt;
&lt;br /&gt;
 # mount -o remount,rw /&lt;br /&gt;
&lt;br /&gt;
Upload the driver files wia FTP then telnet into an move e.m&lt;br /&gt;
&lt;br /&gt;
 # mkdir /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
Note: The directory could as well be without a + on your Bebop 1 or even a /lib/modules/2.6.36-102952-g6aedf2e9100/kernel/drivers/usb/serial on a Mambo...&lt;br /&gt;
&lt;br /&gt;
 # mv /data/ftp/internal_000/usbserial.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/option.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/usb_wwan.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/ftdi_sio.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/cp210x.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/pl2303.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/ch341.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
(Or quicker if you are sure there are only the serial KO files uploaded via:)&lt;br /&gt;
&lt;br /&gt;
 # mv -v /data/ftp/internal_000/*.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
=== Add modules to modules.dep ===&lt;br /&gt;
&lt;br /&gt;
Maybe it is good to read a bit about :e :w :q  etc. of VI the editor you are going to use on this Busybox based OS&lt;br /&gt;
&lt;br /&gt;
If you are sure how VI editor works, go ahead then;&lt;br /&gt;
&lt;br /&gt;
 vi /lib/modules/3.4.11\+/modules.dep&lt;br /&gt;
&lt;br /&gt;
Add these lines in between somewhere like so:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 kernel/drivers/parrot/iio/adc/p7temp.ko: kernel/drivers/iio/industrialio.ko&lt;br /&gt;
 {STARTHERE}&lt;br /&gt;
 kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 kernel/drivers/usb/serial/option.ko&lt;br /&gt;
 kernel/drivers/usb/serial/usb_wwan.ko&lt;br /&gt;
 kernel/drivers/usb/serial/ftdi_sio.ko &lt;br /&gt;
 kernel/drivers/usb/serial/cp210x.ko&lt;br /&gt;
 kernel/drivers/usb/serial/pl2303.ko&lt;br /&gt;
 kernel/drivers/usb/serial/ch341.ko&lt;br /&gt;
 {ENDHERE}&lt;br /&gt;
 kernel/arch/arm/oprofile/oprofile.ko&lt;br /&gt;
 kernel/net/wireless/lib80211.ko:&lt;br /&gt;
 kernel/net/wireless/lib80211_crypt_wep.ko: kernel/net/wireless/lib80211.ko&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To save these changes in the file press [ESC]  than :w+[ENTER] then :q+[ENTER]&lt;br /&gt;
&lt;br /&gt;
== Quicktest ==&lt;br /&gt;
&lt;br /&gt;
Add to system instantly in this order, do this:&lt;br /&gt;
&lt;br /&gt;
 # insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 # insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
=== Start kernel module USBSerial and FTDI ===&lt;br /&gt;
&lt;br /&gt;
Add modprobe somewhere e.g /etc/init.d/rcS&lt;br /&gt;
&lt;br /&gt;
 # vi /etc/init.d/rcS&lt;br /&gt;
&lt;br /&gt;
Look for other modprobes ones then add these there:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 #/sbin/sysmon.sh &amp;amp;                                                        &lt;br /&gt;
 {HERE}                                                                                      &lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/option.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usb_wwan.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ftdi_sio.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/cp210x.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/pl2303.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ch341.ko&lt;br /&gt;
 {ENDHERE}                                                                     &lt;br /&gt;
 ulogi &amp;quot;rcS init script done&amp;quot;&lt;br /&gt;
                                                                                       &lt;br /&gt;
 exit 0 &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Time to reboot to test via&lt;br /&gt;
&lt;br /&gt;
 # reboot now&lt;br /&gt;
&lt;br /&gt;
=== Make a better custom cable: ===&lt;br /&gt;
&lt;br /&gt;
# Get a 3V# FTDI Real FTDI to USB small PCB&lt;br /&gt;
# Desolder the USB plug&lt;br /&gt;
# Get a microUSB cable an cut it and solder to USB side of FTDI PCB&lt;br /&gt;
&lt;br /&gt;
{TODO Photo}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Separate Power ==&lt;br /&gt;
&lt;br /&gt;
At a 1W setting it is not possible to draw power from the USB so a separate powersource must be found or create.&lt;br /&gt;
There is none, so one can add a '''BEC''' that can give 5V at least 5A continuous and is wel shielded to the drone...&lt;br /&gt;
&lt;br /&gt;
BEC to Bebop Howto and where&lt;br /&gt;
&lt;br /&gt;
# At the base where the Power goes to the Bobop Board pull a little on red and black silicone shield &lt;br /&gt;
# Fux and solder on base of wire a bit&lt;br /&gt;
# solder CC BEC RED to RED Black to Black on Base&lt;br /&gt;
{TODO} Photo&lt;br /&gt;
# Add a dot of Hotglue to isolate an get mechanical strength for cables not to break off there&lt;br /&gt;
# Plugh in Bebop Battery, measure voltage from BEC , should be 5V &lt;br /&gt;
&lt;br /&gt;
== Alternative idea ==&lt;br /&gt;
&lt;br /&gt;
Serial Data in and out via the console port, why not...&lt;br /&gt;
&lt;br /&gt;
First there is the serial port used as shell access. see also http://forum.parrot.com/usa/viewtopic.php?id=30330&lt;br /&gt;
&lt;br /&gt;
=== Disable serial shell ===&lt;br /&gt;
&lt;br /&gt;
In the /etc/inittab we find:&lt;br /&gt;
 ...&lt;br /&gt;
 # Put a an on-demand shell on first serial port with outputs redirected to&lt;br /&gt;
 # zprint. Note: force interactive shell since zprint is not a tty...&lt;br /&gt;
 ttyPA0::askfirst:-/bin/sh -l&lt;br /&gt;
 tty1::askfirst:-/bin/sh&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
So let's disable it and start using the serial port for other nifty stuff...&lt;br /&gt;
&lt;br /&gt;
== Howza ==&lt;br /&gt;
&lt;br /&gt;
look for serial console info&lt;br /&gt;
&lt;br /&gt;
 $ cat /var/log/messages&lt;br /&gt;
&lt;br /&gt;
Gives&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 Jan  1 00:00:07 (none) user.info broadcom_setup.sh: (insmod) : CURRENT_TTY = /dev/console&lt;br /&gt;
 Jan  1 00:00:07 (none) user.info broadcom_setup.sh: Load Modules :&lt;br /&gt;
 Jan  1 00:00:08 (none) user.info broadcom_setup.sh: (create_net_interface) : CURRENT_TTY = /dev/console&lt;br /&gt;
&lt;br /&gt;
== Using the serial link ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/cucx/bebop  some hacking tips&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Use_the_USB_port_on_Parrot_Drones&amp;diff=26127</id>
		<title>Use the USB port on Parrot Drones</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Use_the_USB_port_on_Parrot_Drones&amp;diff=26127"/>
		<updated>2022-05-18T13:15:37Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* USE USB port on Parrot Drones */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== USE USB port on Parrot Drones ==&lt;br /&gt;
&lt;br /&gt;
There are many use cases for one to be able to use the USB port on a Parrot Drone. The first kick-off on this page is about using serial devices via USB, the most common scenario. Ofcourse there are more, feel free to add you solutions on this page&lt;br /&gt;
&lt;br /&gt;
== Serial modem on Parrot ==&lt;br /&gt;
&lt;br /&gt;
Add a external modem ARdrone2, Bebop, Bebop 2 or Disco and maybe even others...&lt;br /&gt;
&lt;br /&gt;
=== Beware ===&lt;br /&gt;
&lt;br /&gt;
Wherever you read '''/lib/modules/3.4.11\+/''' is for a Bebop '''/lib/modules/3.4.11/''', mind the plus.&lt;br /&gt;
If you read Bebop it might as well be Disco, although on the MTP there are some differences. And in the rare case you have an ARdrone2, well it will be '''/lib/modules/2.6.32.9-g980dab2/'''&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
A 20Km telemetry connection with the [[UAS.Bebop | Parrot Bebop]] by means of a RFD868 modem or some other modem that does the trick&lt;br /&gt;
&lt;br /&gt;
== Needs ==&lt;br /&gt;
&lt;br /&gt;
Somehow send and receive bytes to the RFD868 modem, be it serial or otherwise.&lt;br /&gt;
&lt;br /&gt;
== Works for ==&lt;br /&gt;
&lt;br /&gt;
Tested and works on Disco Firmware 1.7.1, Bebop Firmware 1.98, 2.0.57 and 4.0.6, it also work fine on a Bebop2. And on an ARdrone2 ? we are working on it...&lt;br /&gt;
&lt;br /&gt;
=== Strategy ===&lt;br /&gt;
&lt;br /&gt;
Use the USB port on the backside of the AP mainboard. The USB is by default on Bebop hooked to the MTP media transfer protocol server... let's stop this service so it will not interfere with our datastream wishes.&lt;br /&gt;
&lt;br /&gt;
==== Stop MTP service ====&lt;br /&gt;
&lt;br /&gt;
Log into your Bebop, make a WiFi connection then &lt;br /&gt;
 &lt;br /&gt;
 $ telnet 192.168.42.1&lt;br /&gt;
&lt;br /&gt;
So in the Bebop console we are root, yeah...OK stop the service via:&lt;br /&gt;
&lt;br /&gt;
 **# /bin/sh /bin/mtp_server.sh stop**&lt;br /&gt;
&lt;br /&gt;
=== First tryout, USB plug convertor ===&lt;br /&gt;
&lt;br /&gt;
Plug in a OTG micro converter to USB Serial device [[http://www.banggood.com/DM-Micro-USB-to-USB-Flash-Drive-OTG-Adapter-for-U-Disk-Xiaomi-HTC-Samsung-HuaWei-Tablet-PC-p-999105.html | like this one]]&lt;br /&gt;
&lt;br /&gt;
So plugh in a 3v3 FTDI USB cable &lt;br /&gt;
&lt;br /&gt;
 # dmesg &lt;br /&gt;
&lt;br /&gt;
gives:&lt;br /&gt;
&lt;br /&gt;
 usb 2-1: new full-speed USB device number 2 using ci_hdrc&lt;br /&gt;
&lt;br /&gt;
Sadly no default FTDI suppoert on the Bebop, lets fix this...&lt;br /&gt;
&lt;br /&gt;
== Add serial hardware driver ==&lt;br /&gt;
&lt;br /&gt;
 # find -iname *ko&lt;br /&gt;
&lt;br /&gt;
on the Parrot bebop we find:&lt;br /&gt;
&lt;br /&gt;
 ./data/ftp/usbserial.ko&lt;br /&gt;
 ./data/ftp/internal_000/usbserial.ko&lt;br /&gt;
 ./data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
...lucky us ;), let's go and interrogate them, see what we have here via:&lt;br /&gt;
&lt;br /&gt;
[[howto.crosscompile_for_parrot_drones | If your are not so lucky you have to go to this page to build them]]&lt;br /&gt;
&lt;br /&gt;
 # modinfo usbserial.ko &amp;amp;&amp;amp; modinfo ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
that is just dandy , let's add them to this file ''/lib/modules/3.4.11/modules.dep''&lt;br /&gt;
&lt;br /&gt;
First we need to be able to Write change on the Drone main storage medium, let make it happen via:&lt;br /&gt;
&lt;br /&gt;
 # mount -o remount,rw /&lt;br /&gt;
&lt;br /&gt;
we start up an editor on the device call &amp;quot;VI&amp;quot; via:&lt;br /&gt;
&lt;br /&gt;
 # vi /lib/modules/3.4.11\+/modules.dep&lt;br /&gt;
&lt;br /&gt;
VI quick 'n dirty:&lt;br /&gt;
Go to edit mode with&lt;br /&gt;
&lt;br /&gt;
 :e[ENTER]&lt;br /&gt;
&lt;br /&gt;
Then go to a line where you want to insert the lines and press &lt;br /&gt;
&lt;br /&gt;
 i+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Sometimes even this works:&lt;br /&gt;
&lt;br /&gt;
 [SHIFT]+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Then copy this line below from this text:&lt;br /&gt;
 &lt;br /&gt;
 /data/ftp/internal_000/usbserial.ko&lt;br /&gt;
&lt;br /&gt;
Paste it via &lt;br /&gt;
&lt;br /&gt;
 [CTRL]+[SHIFT]+[V]&lt;br /&gt;
 &lt;br /&gt;
and again new empty line via a &lt;br /&gt;
&lt;br /&gt;
 [SHIFT]+[ENTER]&lt;br /&gt;
&lt;br /&gt;
Copy this line&lt;br /&gt;
&lt;br /&gt;
 /data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
Paste it again via&lt;br /&gt;
&lt;br /&gt;
  [CTRL]+[SHIFT]+[V]&lt;br /&gt;
&lt;br /&gt;
Press [ESC]&lt;br /&gt;
&lt;br /&gt;
Then let's write the file via:&lt;br /&gt;
&lt;br /&gt;
 :w[ENTER]&lt;br /&gt;
&lt;br /&gt;
Now active the driver, manually first,  and one can autostart it automate it later after the proof of concept works...&lt;br /&gt;
&lt;br /&gt;
 # insmod /data/ftp/internal_000/usbserial.ko &lt;br /&gt;
 # insmod /data/ftp/internal_000/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
 # cd /data/ftp/internal_000/&lt;br /&gt;
&lt;br /&gt;
 # modprobe usbserial.ko&lt;br /&gt;
 # modprobe ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
on to some testing... conect whatever serial devec that outputs stuff to the FTDI cable, e.g. and GPS receiver, then draw in the serial garbage via: &lt;br /&gt;
&lt;br /&gt;
 # cat /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
== Improvement on the theme ==&lt;br /&gt;
&lt;br /&gt;
=== Autostart ===&lt;br /&gt;
&lt;br /&gt;
== Outcome ==&lt;br /&gt;
&lt;br /&gt;
A serial port on Bebop(2) or Disco at startup of aircraft&lt;br /&gt;
&lt;br /&gt;
=== Disable MTP autostart ===&lt;br /&gt;
&lt;br /&gt;
Changed, as dirty as we are, the mtp_server.sh script and renamed the mtp_prog name to use to something non existing... thus MTP server program would not be found so not started&lt;br /&gt;
&lt;br /&gt;
=== Copy modules to system ===&lt;br /&gt;
&lt;br /&gt;
==== Where ====&lt;br /&gt;
&lt;br /&gt;
The /lib/modules/3.4.11/kernel/drivers/usb/serial/ looks like a good spot to us&lt;br /&gt;
&lt;br /&gt;
==== How ====&lt;br /&gt;
&lt;br /&gt;
Make the storage space writable&lt;br /&gt;
&lt;br /&gt;
 # mount -o remount,rw /&lt;br /&gt;
&lt;br /&gt;
Upload the driver files wia FTP then telnet into an move e.m&lt;br /&gt;
&lt;br /&gt;
 # mkdir /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
Note: The directory could as well be without a + on your Bebop 1 or even a /lib/modules/2.6.36-102952-g6aedf2e9100/kernel/drivers/usb/serial on a Mambo...&lt;br /&gt;
&lt;br /&gt;
 # mv /data/ftp/internal_000/usbserial.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/option.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/usb_wwan.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/ftdi_sio.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/cp210x.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/pl2303.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
 # mv /data/ftp/internal_000/ch341.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
(Or quicker if you are sure there are only the serial KO files uploaded via:)&lt;br /&gt;
&lt;br /&gt;
 # mv -v /data/ftp/internal_000/*.ko /lib/modules/3.4.11\+/kernel/drivers/usb/serial&lt;br /&gt;
&lt;br /&gt;
=== Add modules to modules.dep ===&lt;br /&gt;
&lt;br /&gt;
Maybe it is good to read a bit about :e :w :q  etc. of VI the editor you are going to use on this Busybox based OS&lt;br /&gt;
&lt;br /&gt;
If you are sure how VI editor works, go ahead then;&lt;br /&gt;
&lt;br /&gt;
 vi /lib/modules/3.4.11\+/modules.dep&lt;br /&gt;
&lt;br /&gt;
Add these lines in between somewhere like so:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 kernel/drivers/parrot/iio/adc/p7temp.ko: kernel/drivers/iio/industrialio.ko&lt;br /&gt;
 {STARTHERE}&lt;br /&gt;
 kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 kernel/drivers/usb/serial/option.ko&lt;br /&gt;
 kernel/drivers/usb/serial/usb_wwan.ko&lt;br /&gt;
 kernel/drivers/usb/serial/ftdi_sio.ko &lt;br /&gt;
 kernel/drivers/usb/serial/cp210x.ko&lt;br /&gt;
 kernel/drivers/usb/serial/pl2303.ko&lt;br /&gt;
 kernel/drivers/usb/serial/ch341.ko&lt;br /&gt;
 {ENDHERE}&lt;br /&gt;
 kernel/arch/arm/oprofile/oprofile.ko&lt;br /&gt;
 kernel/net/wireless/lib80211.ko:&lt;br /&gt;
 kernel/net/wireless/lib80211_crypt_wep.ko: kernel/net/wireless/lib80211.ko&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To save these changes in the file press [ESC]  than :w+[ENTER] then :q+[ENTER]&lt;br /&gt;
&lt;br /&gt;
== Quicktest ==&lt;br /&gt;
&lt;br /&gt;
Add to system instantly in this order, do this:&lt;br /&gt;
&lt;br /&gt;
 # insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 # insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ftdi_sio.ko&lt;br /&gt;
&lt;br /&gt;
=== Start kernel module USBSerial and FTDI ===&lt;br /&gt;
&lt;br /&gt;
Add modprobe somewhere e.g /etc/init.d/rcS&lt;br /&gt;
&lt;br /&gt;
 # vi /etc/init.d/rcS&lt;br /&gt;
&lt;br /&gt;
Look for other modprobes ones then add these there:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 #/sbin/sysmon.sh &amp;amp;                                                        &lt;br /&gt;
 {HERE}                                                                                      &lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usbserial.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/option.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/usb_wwan.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ftdi_sio.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/cp210x.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/pl2303.ko&lt;br /&gt;
 insmod /lib/modules/3.4.11\+/kernel/drivers/usb/serial/ch341.ko&lt;br /&gt;
 {ENDHERE}                                                                     &lt;br /&gt;
 ulogi &amp;quot;rcS init script done&amp;quot;&lt;br /&gt;
                                                                                       &lt;br /&gt;
 exit 0 &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Time to reboot to test via&lt;br /&gt;
&lt;br /&gt;
 # reboot now&lt;br /&gt;
&lt;br /&gt;
=== Make a better custom cable: ===&lt;br /&gt;
&lt;br /&gt;
# Get a 3V# FTDI Real FTDI to USB small PCB&lt;br /&gt;
# Desolder the USB plug&lt;br /&gt;
# Get a microUSB cable an cut it and solder to USB side of FTDI PCB&lt;br /&gt;
&lt;br /&gt;
{TODO Photo}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Separate Power ==&lt;br /&gt;
&lt;br /&gt;
At a 1W setting it is not possible to draw power from the USB so a separate powersource must be found or create.&lt;br /&gt;
There is none, so one can add a '''BEC''' that can give 5V at least 5A continuous and is wel shielded to the drone...&lt;br /&gt;
&lt;br /&gt;
BEC to Bebop Howto and where&lt;br /&gt;
&lt;br /&gt;
# At the base where the Power goes to the Bobop Board pull a little on red and black silicone shield &lt;br /&gt;
# Fux and solder on base of wire a bit&lt;br /&gt;
# solder CC BEC RED to RED Black to Black on Base&lt;br /&gt;
{TODO} Photo&lt;br /&gt;
# Add a dot of Hotglue to isolate an get mechanical strength for cables not to break off there&lt;br /&gt;
# Plugh in Bebop Battery, measure voltage from BEC , should be 5V &lt;br /&gt;
&lt;br /&gt;
== Alternative idea ==&lt;br /&gt;
&lt;br /&gt;
Serial Data in and out via the console port, why not...&lt;br /&gt;
&lt;br /&gt;
First there is the serial port used as shell access. see also http://forum.parrot.com/usa/viewtopic.php?id=30330&lt;br /&gt;
&lt;br /&gt;
=== Disable serial shell ===&lt;br /&gt;
&lt;br /&gt;
In the /etc/inittab we find:&lt;br /&gt;
 ...&lt;br /&gt;
 # Put a an on-demand shell on first serial port with outputs redirected to&lt;br /&gt;
 # zprint. Note: force interactive shell since zprint is not a tty...&lt;br /&gt;
 ttyPA0::askfirst:-/bin/sh -l&lt;br /&gt;
 tty1::askfirst:-/bin/sh&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
So let's disable it and start using the serial port for other nifty stuff...&lt;br /&gt;
&lt;br /&gt;
== Howza ==&lt;br /&gt;
&lt;br /&gt;
look for serial console info&lt;br /&gt;
&lt;br /&gt;
 $ cat /var/log/messages&lt;br /&gt;
&lt;br /&gt;
Gives&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 Jan  1 00:00:07 (none) user.info broadcom_setup.sh: (insmod) : CURRENT_TTY = /dev/console&lt;br /&gt;
 Jan  1 00:00:07 (none) user.info broadcom_setup.sh: Load Modules :&lt;br /&gt;
 Jan  1 00:00:08 (none) user.info broadcom_setup.sh: (create_net_interface) : CURRENT_TTY = /dev/console&lt;br /&gt;
&lt;br /&gt;
== Using the serial link ==&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
* https://github.com/cucx/bebop  some hacking tips&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Installation&amp;diff=26116</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Installation&amp;diff=26116"/>
		<updated>2022-02-16T12:39:13Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Installation&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Paparazzi is very easily installed on any laptop or workstation running the [http://www.ubuntu.com/ Ubuntu Linux OS] or virtually any [http://www.debian.org/ Debian] based [http://en.wikipedia.org/wiki/Linux Linux] or Apple Macintosh running [http://en.wikipedia.org/wiki/OS_X Mac OS X]. After Microsoft introduced Ubuntu on Windows, now it is possible to run Paparazzi on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]. There is also another work being done to port Paparazzi to Windows with a different approach to work on all versions of Windows.&lt;br /&gt;
&lt;br /&gt;
The steps required to install the software needed to be able to let your UAS fly are:&lt;br /&gt;
&lt;br /&gt;
# Install tools and prerequisites needed by Paparazzi.&lt;br /&gt;
# Download the source code from the source repository.&lt;br /&gt;
# Compile the Paparazzi software from sourcecode&lt;br /&gt;
# Complete any final configuration&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Ubuntu users ==&lt;br /&gt;
Love one-liners? To get the latest Paparazzi up and running on your '''Ubuntu 16.04 or Ubuntu 18.04''', make sure you have a working internet connection and the '''universe''' packages activated in 'Software &amp;amp; Updates', then just copy and paste the text below into your terminal and press [enter] ... and wait a while...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sudo add-apt-repository -y ppa:paparazzi-uav/ppa &amp;amp;&amp;amp; sudo add-apt-repository -y ppa:team-gcc-arm-embedded/ppa &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -f -y install paparazzi-dev paparazzi-jsbsim gcc-arm-embedded dfu-util &amp;amp;&amp;amp; cd ~ &amp;amp;&amp;amp; git clone --origin upstream https://github.com/paparazzi/paparazzi.git &amp;amp;&amp;amp; cd ~/paparazzi &amp;amp;&amp;amp; git remote update -p &amp;amp;&amp;amp; git checkout -b v6.1 upstream/v6.1 &amp;amp;&amp;amp; sudo cp conf/system/udev/rules/*.rules /etc/udev/rules.d/ &amp;amp;&amp;amp; sudo udevadm control --reload-rules &amp;amp;&amp;amp; make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On '''Ubuntu 20.04 ?''', only then use the one below:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sudo add-apt-repository -y ppa:paparazzi-uav/ppa &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -f -y install paparazzi-dev paparazzi-jsbsim python-is-python3 python3-serial gcc-arm-none-eabi gdb-multiarch dfu-util &amp;amp;&amp;amp; cd ~ &amp;amp;&amp;amp; git clone --origin upstream https://github.com/paparazzi/paparazzi.git &amp;amp;&amp;amp; cd ~/paparazzi &amp;amp;&amp;amp; git remote update -p &amp;amp;&amp;amp; git checkout -b v6.1 upstream/v6.1 &amp;amp;&amp;amp; sudo cp conf/system/udev/rules/*.rules /etc/udev/rules.d/ &amp;amp;&amp;amp; sudo udevadm control --reload-rules &amp;amp;&amp;amp; make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                [[File:Done.jpg|frameless|center|Done!]]&lt;br /&gt;
If all went well the Paparazzi Center should now be running... '''skip the rest of instructions on this page''' and go fly! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are new you'll need to do some more things before you go fly like configuring your XML definition file detailing your airframe configuration. There is help here for that: [[Airframe_Configuration]]&lt;br /&gt;
&lt;br /&gt;
In case you have no autopilot hardware yet, no problem, you can get hardware [[Get_Hardware|here]] or just buy a ready to fly aircraft that can run Paparazzi Software like the Parrot Drones [http://www.parrot.com/products/bebop-drone/ Parrot Bebop] and run Paparazzi on your Parrot [[AR_Drone_2|ARDRone2]], [[Bebop|Bebop]] and Bebop2 (soon the Disco drone).&lt;br /&gt;
&lt;br /&gt;
== OS Specific Instructions ==&lt;br /&gt;
&lt;br /&gt;
For Linux an instructional video explaining it all in detail can be found here https://www.youtube.com/watch?v=eW0PCSjrP78&lt;br /&gt;
&lt;br /&gt;
The process of installing the prerequisite tools and dependencies needed by Paparazzi is specific to the operating system you are using. For detailed installation instructions, please see the following pages:&lt;br /&gt;
*[[Installation/Linux|Installing prerequisites tools on Linux]]&lt;br /&gt;
*[[Installation/MacOSX|Installing prerequisites tools on Mac OS X]]&lt;br /&gt;
*[[Installation/RaspberryPi|Installing prerequisites tools on the RaspberryPi (Raspbian)]]&lt;br /&gt;
&lt;br /&gt;
For more advanced installation information or developers, please see the following pages:&lt;br /&gt;
*[[Installation/FromScratch|Installing everything from scratch]] For non Debian based Linux distributions or if one just wants to be able to use all the latest and greatest compilers, or source code of everything to improve something. Then there is no other way than to install from scratch.&lt;br /&gt;
*[[Installation/Windows|Installing prerequisite tools on Windows]] Note that this is '''a work in progress, and not finished yet'''. It would be fantastic if you are interested in running Paparazzi on this OS to help out with the porting. Being able to help is one of opensource software main features. If your skill- set is not so good in this area, but you still insist using Windows OS, then it is best to install a VirtualMachine from within Windows where you run the free Ubuntu OS of choice.&lt;br /&gt;
&lt;br /&gt;
=== Virtual Machines ===&lt;br /&gt;
&lt;br /&gt;
It is also possible to have your Debian/Ubuntu running in a virtual machine, for instance with [http://www.virtualbox.org/ VirtualBox]. This requires minimal changes to your computer setup, as you can run the VM from all common platforms (Windows, OS X, Linux). The virtual machine image can easily be transferred between different laptops, giving greater flexibility. Unfortunately, the Open-Source Edition of VirtualBox doesn't include the necessary USB support, so you'll need to get the regular version from the website.&lt;br /&gt;
&lt;br /&gt;
If you are new and this is your first time installing it is suggested you keep it simple. Use the standard Linux or OS X install. Select a system you can dedicate to the Linux installation. No VMs or dual boot configurations. The idea is do a very simple generic installation that is certain to have no issues. This reassures you that the installation process works and you can see and use a working Paparazzi install for some time before you try a more complicated install. The install is well documented and certain to succeed if followed exactly. Most issues arise when someone unfamiliar with Paparazzi or their OS tries a non-standard install that requires special steps that are not documented. Generally, commands can be copied and pasted for easy, step-by-step installation.&lt;br /&gt;
&lt;br /&gt;
== Getting the Source Code ==&lt;br /&gt;
The Paparazzi source code is hosted on [https://github.com/paparazzi/paparazzi Github]. While you can download it as a tarball from https://github.com/paparazzi/paparazzi/releases, it is recommended to clone the repository with [[git]].&lt;br /&gt;
&lt;br /&gt;
From the directory of your choice type:&lt;br /&gt;
 git clone --origin upstream https://github.com/paparazzi/paparazzi.git&lt;br /&gt;
Check out the released stable version branch:&lt;br /&gt;
 cd paparazzi&lt;br /&gt;
 git checkout v6.1&lt;br /&gt;
&lt;br /&gt;
'''If this whole &amp;quot;Git&amp;quot; thing is new to you, more options and information can be found on the [[git|Git page]].'''&lt;br /&gt;
&lt;br /&gt;
== Launching the Software ==&lt;br /&gt;
Make sure you have installed the &amp;lt;tt&amp;gt;paparazzi-dev&amp;lt;/tt&amp;gt; package as described above. Without these you will not be able to compile the sourcecode.&lt;br /&gt;
The first step is to compile. From the &amp;lt;tt&amp;gt;paparazzi&amp;lt;/tt&amp;gt; directory (&amp;lt;tt&amp;gt;cd ~/paparazzi&amp;lt;/tt&amp;gt;), run&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
You will have to run this command after each update of the source (&amp;lt;tt&amp;gt;git pull&amp;lt;/tt&amp;gt; command).&lt;br /&gt;
Launch the software from the &amp;lt;tt&amp;gt;paparazzi&amp;lt;/tt&amp;gt; directory with&lt;br /&gt;
&lt;br /&gt;
 ./paparazzi&lt;br /&gt;
&lt;br /&gt;
From the [[Paparazzi_Center|Paparazzi Center]] interface, select the ''Microjet'' aircraft, select the ''sim'' target and ''Build'' it. Then ''Execute'' the ''Simulation'' session. The procedure is detailed in the [[Simulation]] page.&lt;br /&gt;
&lt;br /&gt;
=== Environment Variables ===&lt;br /&gt;
&lt;br /&gt;
If ('''and only if''') you want to directly launch some Paparazzi agents (the ''Tools'' of the [[Paparazzi_Center|Paparazzi Center]]) from the command line, without using the Paparazzi Center, you must have the Paparazzi source and home environment variables set correctly in your shell. These variables can be automatically set in your shell by adding the following lines to your .bashrc file:&lt;br /&gt;
{{Box Code|~/.bashrc|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PAPARAZZI_HOME=''your paparazzi software directory''&lt;br /&gt;
export PAPARAZZI_SRC=''your paparazzi software directory''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Verify that your variables are set correctly with the following command:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;env | grep PAPARAZZI&amp;lt;/source&amp;gt;&lt;br /&gt;
which should return the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PAPARAZZI_HOME=''your paparazzi software directory''&lt;br /&gt;
PAPARAZZI_SRC=''your paparazzi software directory''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to manually set the env variables (i.e. when compiling a backup copy of your code in a different folder) execute the following command from the folder you wish to set as your active paparazzi folder:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;export PAPARAZZI_HOME=`pwd`;export PAPARAZZI_SRC=`pwd`&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case you obtain an error indicating that your environmental variables are not set up correctly (for example 'ocamlfind: Package `pprz.xlib' not found') it should be noted that some shells or versions of make can not handle the '~/paparazzi' path. Try setting it to '/home/username/paparazzi' instead. &lt;br /&gt;
&lt;br /&gt;
== Software Updates ==&lt;br /&gt;
'''We manage the software with the git version control system. Learn it! If you are new to it, see the [[Git|Git wiki page]].'''&lt;br /&gt;
&lt;br /&gt;
Paparazzi is a very rapidly evolving project and as such you might want to update your software regularly. See the [[RepositoryStructure|branching model and release process page]].&lt;br /&gt;
&lt;br /&gt;
Any new files you created will not be lost/overwritten when updating (like your own airframe file). Nevertheless, as with all things, backups are advised.&lt;br /&gt;
If you modified source code, the best way is of course to use the version control system [[Git]] to commit your changes. Otherwise at least use the brute force method and save everything in another directory.&lt;br /&gt;
&lt;br /&gt;
Update your software with care and caution, and always test the functionality on the ground and in the air as some updates will affect tuning parameters. You might need to update your airframe file as well. The compiler will usually complain if there is a problem, at which point you can look at the [[Airframe_Configuration|Airframe Configuration wiki page]] again, look on the [[Contact#Mailing_List|mailing list]] or some of the most recent airframe files on git to find the proper syntax.&lt;br /&gt;
&lt;br /&gt;
'''See also the [[Release Upgrades]] page for information on how to update your configuration from one release to the next.'''&lt;br /&gt;
&lt;br /&gt;
=== Quick'n dirty description ===&lt;br /&gt;
&lt;br /&gt;
To download and automatically merge any updated source files, run the following command from your Paparazzi directory&lt;br /&gt;
 git pull&lt;br /&gt;
&lt;br /&gt;
After any git update or source code modification the code can be recompiled from ''your paparazzi software directory'' with the following command:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
The ''make'' command will only recompile portions of the software where changed have been detected.&lt;br /&gt;
If it does not behave as expected you can delete all compiled files and recompile from scratch with the following commands:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
If you'd like to check that the code compiles all example airframes then you can run the test suite using the command&lt;br /&gt;
&lt;br /&gt;
 make test&lt;br /&gt;
&lt;br /&gt;
For more details see the [[Builds/Tests|tests page]].&lt;br /&gt;
&lt;br /&gt;
== Using the Virtual Machine image ==&lt;br /&gt;
&lt;br /&gt;
Virtual machine image based on [https://www.vmware.com/products/workstation-player.html VMWare Player]  Available at [http://data.recherche.enac.fr/drones/Paparazzi/ http://data.recherche.enac.fr/drones/Paparazzi/]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:User_Documentation]] [[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Installation&amp;diff=26115</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Installation&amp;diff=26115"/>
		<updated>2022-02-16T12:38:03Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Installation&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Paparazzi is very easily installed on any laptop or workstation running the [http://www.ubuntu.com/ Ubuntu Linux OS] or virtually any [http://www.debian.org/ Debian] based [http://en.wikipedia.org/wiki/Linux Linux] or Apple Macintosh running [http://en.wikipedia.org/wiki/OS_X Mac OS X]. After Microsoft introduced Ubuntu on Windows, now it is possible to run Paparazzi on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]. There is also another work being done to port Paparazzi to Windows with a different approach to work on all versions of Windows.&lt;br /&gt;
&lt;br /&gt;
The steps required to install the software needed to be able to let your UAS fly are:&lt;br /&gt;
&lt;br /&gt;
# Install tools and prerequisites needed by Paparazzi.&lt;br /&gt;
# Download the source code from the source repository.&lt;br /&gt;
# Compile the Paparazzi software from sourcecode&lt;br /&gt;
# Complete any final configuration&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Ubuntu users ==&lt;br /&gt;
Love one-liners? To get the latest Paparazzi up and running on your '''Ubuntu 16.04 or Ubuntu 18.04''', make sure you have a working internet connection and the '''universe''' packages activated in 'Software &amp;amp; Updates', then just copy and paste the text below into your terminal and press [enter] ... and wait a while...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sudo add-apt-repository -y ppa:paparazzi-uav/ppa &amp;amp;&amp;amp; sudo add-apt-repository -y ppa:team-gcc-arm-embedded/ppa &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -f -y install paparazzi-dev paparazzi-jsbsim gcc-arm-embedded dfu-util &amp;amp;&amp;amp; cd ~ &amp;amp;&amp;amp; git clone --origin upstream https://github.com/paparazzi/paparazzi.git &amp;amp;&amp;amp; cd ~/paparazzi &amp;amp;&amp;amp; git remote update -p &amp;amp;&amp;amp; git checkout -b v6.1 upstream/v6.1 &amp;amp;&amp;amp; sudo cp conf/system/udev/rules/*.rules /etc/udev/rules.d/ &amp;amp;&amp;amp; sudo udevadm control --reload-rules &amp;amp;&amp;amp; make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On '''Ubuntu 20.04 ?''', only then use the one below:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sudo add-apt-repository -y ppa:paparazzi-uav/ppa &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -f -y install paparazzi-dev paparazzi-jsbsim python-is-python3 python3-serial gcc-arm-none-eabi gdb-multiarch dfu-util &amp;amp;&amp;amp; cd ~ &amp;amp;&amp;amp; git clone --origin upstream https://github.com/paparazzi/paparazzi.git &amp;amp;&amp;amp; cd ~/paparazzi &amp;amp;&amp;amp; git remote update -p &amp;amp;&amp;amp; git checkout -b v6.1 upstream/v6.1 &amp;amp;&amp;amp; sudo cp conf/system/udev/rules/*.rules /etc/udev/rules.d/ &amp;amp;&amp;amp; sudo udevadm control --reload-rules &amp;amp;&amp;amp; make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                [[File:Done.jpg|frameless|center|Done!]]&lt;br /&gt;
If all went well the Paparazzi Center should now be running... '''skip''' the rest of this page and go fly! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you are new you'll need to do some more things before you go fly like configuring your XML definition file detailing your airframe configuration. There is help here for that: [[Airframe_Configuration]]&lt;br /&gt;
&lt;br /&gt;
In case you have no autopilot hardware yet, no problem, you can get hardware [[Get_Hardware|here]] or just buy a ready to fly aircraft that can run Paparazzi Software like the Parrot Drones [http://www.parrot.com/products/bebop-drone/ Parrot Bebop] and run Paparazzi on your Parrot [[AR_Drone_2|ARDRone2]], [[Bebop|Bebop]] and Bebop2 (soon the Disco drone).&lt;br /&gt;
&lt;br /&gt;
== OS Specific Instructions ==&lt;br /&gt;
&lt;br /&gt;
For Linux an instructional video explaining it all in detail can be found here https://www.youtube.com/watch?v=eW0PCSjrP78&lt;br /&gt;
&lt;br /&gt;
The process of installing the prerequisite tools and dependencies needed by Paparazzi is specific to the operating system you are using. For detailed installation instructions, please see the following pages:&lt;br /&gt;
*[[Installation/Linux|Installing prerequisites tools on Linux]]&lt;br /&gt;
*[[Installation/MacOSX|Installing prerequisites tools on Mac OS X]]&lt;br /&gt;
*[[Installation/RaspberryPi|Installing prerequisites tools on the RaspberryPi (Raspbian)]]&lt;br /&gt;
&lt;br /&gt;
For more advanced installation information or developers, please see the following pages:&lt;br /&gt;
*[[Installation/FromScratch|Installing everything from scratch]] For non Debian based Linux distributions or if one just wants to be able to use all the latest and greatest compilers, or source code of everything to improve something. Then there is no other way than to install from scratch.&lt;br /&gt;
*[[Installation/Windows|Installing prerequisite tools on Windows]] Note that this is '''a work in progress, and not finished yet'''. It would be fantastic if you are interested in running Paparazzi on this OS to help out with the porting. Being able to help is one of opensource software main features. If your skill- set is not so good in this area, but you still insist using Windows OS, then it is best to install a VirtualMachine from within Windows where you run the free Ubuntu OS of choice.&lt;br /&gt;
&lt;br /&gt;
=== Virtual Machines ===&lt;br /&gt;
&lt;br /&gt;
It is also possible to have your Debian/Ubuntu running in a virtual machine, for instance with [http://www.virtualbox.org/ VirtualBox]. This requires minimal changes to your computer setup, as you can run the VM from all common platforms (Windows, OS X, Linux). The virtual machine image can easily be transferred between different laptops, giving greater flexibility. Unfortunately, the Open-Source Edition of VirtualBox doesn't include the necessary USB support, so you'll need to get the regular version from the website.&lt;br /&gt;
&lt;br /&gt;
If you are new and this is your first time installing it is suggested you keep it simple. Use the standard Linux or OS X install. Select a system you can dedicate to the Linux installation. No VMs or dual boot configurations. The idea is do a very simple generic installation that is certain to have no issues. This reassures you that the installation process works and you can see and use a working Paparazzi install for some time before you try a more complicated install. The install is well documented and certain to succeed if followed exactly. Most issues arise when someone unfamiliar with Paparazzi or their OS tries a non-standard install that requires special steps that are not documented. Generally, commands can be copied and pasted for easy, step-by-step installation.&lt;br /&gt;
&lt;br /&gt;
== Getting the Source Code ==&lt;br /&gt;
The Paparazzi source code is hosted on [https://github.com/paparazzi/paparazzi Github]. While you can download it as a tarball from https://github.com/paparazzi/paparazzi/releases, it is recommended to clone the repository with [[git]].&lt;br /&gt;
&lt;br /&gt;
From the directory of your choice type:&lt;br /&gt;
 git clone --origin upstream https://github.com/paparazzi/paparazzi.git&lt;br /&gt;
Check out the released stable version branch:&lt;br /&gt;
 cd paparazzi&lt;br /&gt;
 git checkout v6.1&lt;br /&gt;
&lt;br /&gt;
'''If this whole &amp;quot;Git&amp;quot; thing is new to you, more options and information can be found on the [[git|Git page]].'''&lt;br /&gt;
&lt;br /&gt;
== Launching the Software ==&lt;br /&gt;
Make sure you have installed the &amp;lt;tt&amp;gt;paparazzi-dev&amp;lt;/tt&amp;gt; package as described above. Without these you will not be able to compile the sourcecode.&lt;br /&gt;
The first step is to compile. From the &amp;lt;tt&amp;gt;paparazzi&amp;lt;/tt&amp;gt; directory (&amp;lt;tt&amp;gt;cd ~/paparazzi&amp;lt;/tt&amp;gt;), run&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
You will have to run this command after each update of the source (&amp;lt;tt&amp;gt;git pull&amp;lt;/tt&amp;gt; command).&lt;br /&gt;
Launch the software from the &amp;lt;tt&amp;gt;paparazzi&amp;lt;/tt&amp;gt; directory with&lt;br /&gt;
&lt;br /&gt;
 ./paparazzi&lt;br /&gt;
&lt;br /&gt;
From the [[Paparazzi_Center|Paparazzi Center]] interface, select the ''Microjet'' aircraft, select the ''sim'' target and ''Build'' it. Then ''Execute'' the ''Simulation'' session. The procedure is detailed in the [[Simulation]] page.&lt;br /&gt;
&lt;br /&gt;
=== Environment Variables ===&lt;br /&gt;
&lt;br /&gt;
If ('''and only if''') you want to directly launch some Paparazzi agents (the ''Tools'' of the [[Paparazzi_Center|Paparazzi Center]]) from the command line, without using the Paparazzi Center, you must have the Paparazzi source and home environment variables set correctly in your shell. These variables can be automatically set in your shell by adding the following lines to your .bashrc file:&lt;br /&gt;
{{Box Code|~/.bashrc|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PAPARAZZI_HOME=''your paparazzi software directory''&lt;br /&gt;
export PAPARAZZI_SRC=''your paparazzi software directory''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Verify that your variables are set correctly with the following command:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;env | grep PAPARAZZI&amp;lt;/source&amp;gt;&lt;br /&gt;
which should return the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PAPARAZZI_HOME=''your paparazzi software directory''&lt;br /&gt;
PAPARAZZI_SRC=''your paparazzi software directory''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to manually set the env variables (i.e. when compiling a backup copy of your code in a different folder) execute the following command from the folder you wish to set as your active paparazzi folder:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;export PAPARAZZI_HOME=`pwd`;export PAPARAZZI_SRC=`pwd`&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case you obtain an error indicating that your environmental variables are not set up correctly (for example 'ocamlfind: Package `pprz.xlib' not found') it should be noted that some shells or versions of make can not handle the '~/paparazzi' path. Try setting it to '/home/username/paparazzi' instead. &lt;br /&gt;
&lt;br /&gt;
== Software Updates ==&lt;br /&gt;
'''We manage the software with the git version control system. Learn it! If you are new to it, see the [[Git|Git wiki page]].'''&lt;br /&gt;
&lt;br /&gt;
Paparazzi is a very rapidly evolving project and as such you might want to update your software regularly. See the [[RepositoryStructure|branching model and release process page]].&lt;br /&gt;
&lt;br /&gt;
Any new files you created will not be lost/overwritten when updating (like your own airframe file). Nevertheless, as with all things, backups are advised.&lt;br /&gt;
If you modified source code, the best way is of course to use the version control system [[Git]] to commit your changes. Otherwise at least use the brute force method and save everything in another directory.&lt;br /&gt;
&lt;br /&gt;
Update your software with care and caution, and always test the functionality on the ground and in the air as some updates will affect tuning parameters. You might need to update your airframe file as well. The compiler will usually complain if there is a problem, at which point you can look at the [[Airframe_Configuration|Airframe Configuration wiki page]] again, look on the [[Contact#Mailing_List|mailing list]] or some of the most recent airframe files on git to find the proper syntax.&lt;br /&gt;
&lt;br /&gt;
'''See also the [[Release Upgrades]] page for information on how to update your configuration from one release to the next.'''&lt;br /&gt;
&lt;br /&gt;
=== Quick'n dirty description ===&lt;br /&gt;
&lt;br /&gt;
To download and automatically merge any updated source files, run the following command from your Paparazzi directory&lt;br /&gt;
 git pull&lt;br /&gt;
&lt;br /&gt;
After any git update or source code modification the code can be recompiled from ''your paparazzi software directory'' with the following command:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
The ''make'' command will only recompile portions of the software where changed have been detected.&lt;br /&gt;
If it does not behave as expected you can delete all compiled files and recompile from scratch with the following commands:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
If you'd like to check that the code compiles all example airframes then you can run the test suite using the command&lt;br /&gt;
&lt;br /&gt;
 make test&lt;br /&gt;
&lt;br /&gt;
For more details see the [[Builds/Tests|tests page]].&lt;br /&gt;
&lt;br /&gt;
== Using the Virtual Machine image ==&lt;br /&gt;
&lt;br /&gt;
Virtual machine image based on [https://www.vmware.com/products/workstation-player.html VMWare Player]  Available at [http://data.recherche.enac.fr/drones/Paparazzi/ http://data.recherche.enac.fr/drones/Paparazzi/]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:User_Documentation]] [[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Installation&amp;diff=26114</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Installation&amp;diff=26114"/>
		<updated>2022-02-16T12:36:23Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Quickstart for Ubuntu users */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Installation&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Paparazzi is very easily installed on any laptop or workstation running the [http://www.ubuntu.com/ Ubuntu Linux OS] or virtually any [http://www.debian.org/ Debian] based [http://en.wikipedia.org/wiki/Linux Linux] or Apple Macintosh running [http://en.wikipedia.org/wiki/OS_X Mac OS X]. After Microsoft introduced Ubuntu on Windows, now it is possible to run Paparazzi on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]. There is also another work being done to port Paparazzi to Windows with a different approach to work on all versions of Windows.&lt;br /&gt;
&lt;br /&gt;
The steps required to install the software needed to be able to let your UAS fly are:&lt;br /&gt;
&lt;br /&gt;
# Install tools and prerequisites needed by Paparazzi.&lt;br /&gt;
# Download the source code from the source repository.&lt;br /&gt;
# Compile the Paparazzi software from sourcecode&lt;br /&gt;
# Complete any final configuration&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Ubuntu users ==&lt;br /&gt;
Love one-liners? To get the latest Paparazzi up and running on your '''Ubuntu 16.04 or Ubuntu 18.04''', make sure you have a working internet connection and the '''universe''' packages activated in 'Software &amp;amp; Updates', then just copy and paste the text below into your terminal and press [enter] ... and wait a while...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sudo add-apt-repository -y ppa:paparazzi-uav/ppa &amp;amp;&amp;amp; sudo add-apt-repository -y ppa:team-gcc-arm-embedded/ppa &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -f -y install paparazzi-dev paparazzi-jsbsim gcc-arm-embedded dfu-util &amp;amp;&amp;amp; cd ~ &amp;amp;&amp;amp; git clone --origin upstream https://github.com/paparazzi/paparazzi.git &amp;amp;&amp;amp; cd ~/paparazzi &amp;amp;&amp;amp; git remote update -p &amp;amp;&amp;amp; git checkout -b v6.1 upstream/v6.1 &amp;amp;&amp;amp; sudo cp conf/system/udev/rules/*.rules /etc/udev/rules.d/ &amp;amp;&amp;amp; sudo udevadm control --reload-rules &amp;amp;&amp;amp; make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On '''Ubuntu 20.04 ?''', only then use the one below:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sudo add-apt-repository -y ppa:paparazzi-uav/ppa &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -f -y install paparazzi-dev paparazzi-jsbsim python-is-python3 python3-serial gcc-arm-none-eabi gdb-multiarch dfu-util &amp;amp;&amp;amp; cd ~ &amp;amp;&amp;amp; git clone --origin upstream https://github.com/paparazzi/paparazzi.git &amp;amp;&amp;amp; cd ~/paparazzi &amp;amp;&amp;amp; git remote update -p &amp;amp;&amp;amp; git checkout -b v6.1 upstream/v6.1 &amp;amp;&amp;amp; sudo cp conf/system/udev/rules/*.rules /etc/udev/rules.d/ &amp;amp;&amp;amp; sudo udevadm control --reload-rules &amp;amp;&amp;amp; make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                [[File:Done.jpg|frameless|center|Done!]]&lt;br /&gt;
If all went well the Paparazzi Center should now be running... '''skip''' the rest of this page and go fly! &lt;br /&gt;
&lt;br /&gt;
If you are new you'll need to do some more things before you go fly like configuring your XML definition file detailing your airframe configuration. There is help here for that: [[Airframe_Configuration]]&lt;br /&gt;
&lt;br /&gt;
In case you have no autopilot hardware yet, no problem, you can get hardware [[Get_Hardware|here]] or just buy a ready to fly aircraft that can run Paparazzi Software like the Parrot Drones [http://www.parrot.com/products/bebop-drone/ Parrot Bebop] and run Paparazzi on your Parrot [[AR_Drone_2|ARDRone2]], [[Bebop|Bebop]] and Bebop2 (soon the Disco drone).&lt;br /&gt;
&lt;br /&gt;
== OS Specific Instructions ==&lt;br /&gt;
&lt;br /&gt;
For Linux an instructional video explaining it all in detail can be found here https://www.youtube.com/watch?v=eW0PCSjrP78&lt;br /&gt;
&lt;br /&gt;
The process of installing the prerequisite tools and dependencies needed by Paparazzi is specific to the operating system you are using. For detailed installation instructions, please see the following pages:&lt;br /&gt;
*[[Installation/Linux|Installing prerequisites tools on Linux]]&lt;br /&gt;
*[[Installation/MacOSX|Installing prerequisites tools on Mac OS X]]&lt;br /&gt;
*[[Installation/RaspberryPi|Installing prerequisites tools on the RaspberryPi (Raspbian)]]&lt;br /&gt;
&lt;br /&gt;
For more advanced installation information or developers, please see the following pages:&lt;br /&gt;
*[[Installation/FromScratch|Installing everything from scratch]] For non Debian based Linux distributions or if one just wants to be able to use all the latest and greatest compilers, or source code of everything to improve something. Then there is no other way than to install from scratch.&lt;br /&gt;
*[[Installation/Windows|Installing prerequisite tools on Windows]] Note that this is '''a work in progress, and not finished yet'''. It would be fantastic if you are interested in running Paparazzi on this OS to help out with the porting. Being able to help is one of opensource software main features. If your skill- set is not so good in this area, but you still insist using Windows OS, then it is best to install a VirtualMachine from within Windows where you run the free Ubuntu OS of choice.&lt;br /&gt;
&lt;br /&gt;
=== Virtual Machines ===&lt;br /&gt;
&lt;br /&gt;
It is also possible to have your Debian/Ubuntu running in a virtual machine, for instance with [http://www.virtualbox.org/ VirtualBox]. This requires minimal changes to your computer setup, as you can run the VM from all common platforms (Windows, OS X, Linux). The virtual machine image can easily be transferred between different laptops, giving greater flexibility. Unfortunately, the Open-Source Edition of VirtualBox doesn't include the necessary USB support, so you'll need to get the regular version from the website.&lt;br /&gt;
&lt;br /&gt;
If you are new and this is your first time installing it is suggested you keep it simple. Use the standard Linux or OS X install. Select a system you can dedicate to the Linux installation. No VMs or dual boot configurations. The idea is do a very simple generic installation that is certain to have no issues. This reassures you that the installation process works and you can see and use a working Paparazzi install for some time before you try a more complicated install. The install is well documented and certain to succeed if followed exactly. Most issues arise when someone unfamiliar with Paparazzi or their OS tries a non-standard install that requires special steps that are not documented. Generally, commands can be copied and pasted for easy, step-by-step installation.&lt;br /&gt;
&lt;br /&gt;
== Getting the Source Code ==&lt;br /&gt;
The Paparazzi source code is hosted on [https://github.com/paparazzi/paparazzi Github]. While you can download it as a tarball from https://github.com/paparazzi/paparazzi/releases, it is recommended to clone the repository with [[git]].&lt;br /&gt;
&lt;br /&gt;
From the directory of your choice type:&lt;br /&gt;
 git clone --origin upstream https://github.com/paparazzi/paparazzi.git&lt;br /&gt;
Check out the released stable version branch:&lt;br /&gt;
 cd paparazzi&lt;br /&gt;
 git checkout v6.1&lt;br /&gt;
&lt;br /&gt;
'''If this whole &amp;quot;Git&amp;quot; thing is new to you, more options and information can be found on the [[git|Git page]].'''&lt;br /&gt;
&lt;br /&gt;
== Launching the Software ==&lt;br /&gt;
Make sure you have installed the &amp;lt;tt&amp;gt;paparazzi-dev&amp;lt;/tt&amp;gt; package as described above. Without these you will not be able to compile the sourcecode.&lt;br /&gt;
The first step is to compile. From the &amp;lt;tt&amp;gt;paparazzi&amp;lt;/tt&amp;gt; directory (&amp;lt;tt&amp;gt;cd ~/paparazzi&amp;lt;/tt&amp;gt;), run&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
You will have to run this command after each update of the source (&amp;lt;tt&amp;gt;git pull&amp;lt;/tt&amp;gt; command).&lt;br /&gt;
Launch the software from the &amp;lt;tt&amp;gt;paparazzi&amp;lt;/tt&amp;gt; directory with&lt;br /&gt;
&lt;br /&gt;
 ./paparazzi&lt;br /&gt;
&lt;br /&gt;
From the [[Paparazzi_Center|Paparazzi Center]] interface, select the ''Microjet'' aircraft, select the ''sim'' target and ''Build'' it. Then ''Execute'' the ''Simulation'' session. The procedure is detailed in the [[Simulation]] page.&lt;br /&gt;
&lt;br /&gt;
=== Environment Variables ===&lt;br /&gt;
&lt;br /&gt;
If ('''and only if''') you want to directly launch some Paparazzi agents (the ''Tools'' of the [[Paparazzi_Center|Paparazzi Center]]) from the command line, without using the Paparazzi Center, you must have the Paparazzi source and home environment variables set correctly in your shell. These variables can be automatically set in your shell by adding the following lines to your .bashrc file:&lt;br /&gt;
{{Box Code|~/.bashrc|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PAPARAZZI_HOME=''your paparazzi software directory''&lt;br /&gt;
export PAPARAZZI_SRC=''your paparazzi software directory''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Verify that your variables are set correctly with the following command:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;env | grep PAPARAZZI&amp;lt;/source&amp;gt;&lt;br /&gt;
which should return the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PAPARAZZI_HOME=''your paparazzi software directory''&lt;br /&gt;
PAPARAZZI_SRC=''your paparazzi software directory''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to manually set the env variables (i.e. when compiling a backup copy of your code in a different folder) execute the following command from the folder you wish to set as your active paparazzi folder:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;export PAPARAZZI_HOME=`pwd`;export PAPARAZZI_SRC=`pwd`&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case you obtain an error indicating that your environmental variables are not set up correctly (for example 'ocamlfind: Package `pprz.xlib' not found') it should be noted that some shells or versions of make can not handle the '~/paparazzi' path. Try setting it to '/home/username/paparazzi' instead. &lt;br /&gt;
&lt;br /&gt;
== Software Updates ==&lt;br /&gt;
'''We manage the software with the git version control system. Learn it! If you are new to it, see the [[Git|Git wiki page]].'''&lt;br /&gt;
&lt;br /&gt;
Paparazzi is a very rapidly evolving project and as such you might want to update your software regularly. See the [[RepositoryStructure|branching model and release process page]].&lt;br /&gt;
&lt;br /&gt;
Any new files you created will not be lost/overwritten when updating (like your own airframe file). Nevertheless, as with all things, backups are advised.&lt;br /&gt;
If you modified source code, the best way is of course to use the version control system [[Git]] to commit your changes. Otherwise at least use the brute force method and save everything in another directory.&lt;br /&gt;
&lt;br /&gt;
Update your software with care and caution, and always test the functionality on the ground and in the air as some updates will affect tuning parameters. You might need to update your airframe file as well. The compiler will usually complain if there is a problem, at which point you can look at the [[Airframe_Configuration|Airframe Configuration wiki page]] again, look on the [[Contact#Mailing_List|mailing list]] or some of the most recent airframe files on git to find the proper syntax.&lt;br /&gt;
&lt;br /&gt;
'''See also the [[Release Upgrades]] page for information on how to update your configuration from one release to the next.'''&lt;br /&gt;
&lt;br /&gt;
=== Quick'n dirty description ===&lt;br /&gt;
&lt;br /&gt;
To download and automatically merge any updated source files, run the following command from your Paparazzi directory&lt;br /&gt;
 git pull&lt;br /&gt;
&lt;br /&gt;
After any git update or source code modification the code can be recompiled from ''your paparazzi software directory'' with the following command:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
The ''make'' command will only recompile portions of the software where changed have been detected.&lt;br /&gt;
If it does not behave as expected you can delete all compiled files and recompile from scratch with the following commands:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
If you'd like to check that the code compiles all example airframes then you can run the test suite using the command&lt;br /&gt;
&lt;br /&gt;
 make test&lt;br /&gt;
&lt;br /&gt;
For more details see the [[Builds/Tests|tests page]].&lt;br /&gt;
&lt;br /&gt;
== Using the Virtual Machine image ==&lt;br /&gt;
&lt;br /&gt;
Virtual machine image based on [https://www.vmware.com/products/workstation-player.html VMWare Player]  Available at [http://data.recherche.enac.fr/drones/Paparazzi/ http://data.recherche.enac.fr/drones/Paparazzi/]&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:User_Documentation]] [[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Installation/Windows10&amp;diff=26113</id>
		<title>Installation/Windows10</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Installation/Windows10&amp;diff=26113"/>
		<updated>2022-02-16T09:43:06Z</updated>

		<summary type="html">&lt;p&gt;Openuas: Added tips for using MS terminal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Installation&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Intro=&lt;br /&gt;
[[File:Win+papa.jpg|250px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
This page describes the installation of paparazzi on Microsoft Windows10.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are many Windows users who like to use paparazzi on this popular OS. Be-aware it's '''less efficient''' to use paparazzi on Windows OS but it could be helpful in some cases.&amp;lt;br /&amp;gt;&lt;br /&gt;
Since Microsoft introduced the possibility of installing Ubuntu on windows 10, you can run Paparazzi on it with some little efforts.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Installing Ubuntu on windows=&lt;br /&gt;
First you need to install Ubuntu on Windows 10. (Ensure you are using a '''64-bit''' version of windows 10, since it cannot be run on a 32-bit version.&lt;br /&gt;
Go to “''Control Panel-&amp;gt; Programs-&amp;gt; Turn Windows Feature On or Off''”.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable the “''Windows Subsystem for Linux''” option in the list, and then click OK button. &lt;br /&gt;
Click “Restart Now” when you are prompted to restart your computer. The feature won’t work until you reboot.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Or''',Instead of the above steps, you can setup your system by executing the following command in the Administrator PowerShell prompt:&lt;br /&gt;
 Enable-WindowsOptionalFeature –Online –FeatureName Microsoft-Windows-Subsystem-Linux&lt;br /&gt;
After that, Ubuntu can be installed from the Microsoft Store:&lt;br /&gt;
# Use the Start menu to launch the Microsoft Store application.&lt;br /&gt;
# Search for Ubuntu and select the result with, ‘Ubuntu 20.04', published by Canonical Group Limited.&lt;br /&gt;
# Click on the Install button.&lt;br /&gt;
&lt;br /&gt;
Ubuntu will be downloaded and installed automatically. Progress will be reported within the Microsoft Store application.&lt;br /&gt;
&lt;br /&gt;
[[File:Microsoft store.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=First launch=&lt;br /&gt;
Ubuntu can now be launched in the same way as any other Windows 10 application, such as searching for and selecting Ubuntu in the Start menu.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When launched for the first time, Ubuntu will inform you that it's ‘Installing' and you'll need to wait a few moments.&lt;br /&gt;
&lt;br /&gt;
[[File:Installing.png|450px]]&lt;br /&gt;
&lt;br /&gt;
When complete, you'll be asked for a username and password specific to your Ubuntu installation. These don't need to be the same as your Windows 10 credentials. &lt;br /&gt;
&lt;br /&gt;
[[File:New user.png|450px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this step complete, you'll find yourself at the Ubuntu bash command line.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After installing Ubuntu, you need to install Paparazzi. The quickest way is to add the Paparazzi repositories, update, and then install the required software.&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
You can add the repository and install with these commands(it's like usual [[Installation#Quickstart_for_Ubuntu_users|ubuntu installation command]]):&lt;br /&gt;
&lt;br /&gt;
You can just copy the lines [CTRL+C] and paste it in the Ubuntu command prompt via mouse right click.. then press [enter]&lt;br /&gt;
&lt;br /&gt;
 sudo add-apt-repository -y ppa:paparazzi-uav/ppa &amp;amp;&amp;amp; sudo add-apt-repository -y ppa:team-gcc-arm-embedded/ppa &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -f -y install paparazzi-dev paparazzi-jsbsim gcc-arm-embedded &amp;amp;&amp;amp; cd ~ &amp;amp;&amp;amp; git clone --origin upstream https://github.com/paparazzi/paparazzi.git &amp;amp;&amp;amp; cd ~/paparazzi &amp;amp;&amp;amp; git remote update -p &amp;amp;&amp;amp; git checkout -b v5.14 upstream/v5.14 &amp;amp;&amp;amp; sudo cp conf/system/udev/rules/*.rules /etc/udev/rules.d/ &amp;amp;&amp;amp; sudo udevadm control --reload-rules &amp;amp;&amp;amp; make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&lt;br /&gt;
Depending on you internet connection this step can take quite a while.... be patient, just let it do it's thing....In some cases even so long that you need to run again&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&lt;br /&gt;
Ubuntu on windows 10 is only command line and there is no GUI. So after finishing this step, you likly get an error like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Fatal error: exception Gtk.Error(“GtkMain.init: initialization failed\nml_gtk_init: initialization falied”)&lt;br /&gt;
[[File:Gtk error.png|450px]]&lt;br /&gt;
&lt;br /&gt;
It is because it wants to run the graphical Paparazzi Center, but there is no GUI on the Ubuntu for Windows at that moment. Lucky us, there is a way to have Graphical interface non the less.&lt;br /&gt;
&lt;br /&gt;
=Graphical Interface=&lt;br /&gt;
* '''Step One: Install an X server'''&lt;br /&gt;
&lt;br /&gt;
There are several different X servers you could install on Windows, [https://sourceforge.net/projects/xming/ Xming] and [https://sourceforge.net/projects/vcxsrv/ vcxsrv] are both recommended. Download it and install it on your Windows 10 PC.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The installation process is simple, You can just accept the default settings. It will then automatically launch and run in your system tray, waiting for you to run graphical programs.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Xming windows.png|300px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Hint:'''&amp;lt;/span&amp;gt; Every time you want to run a graphical interface from Ubuntu, make sure that Xming is running. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Step Two: Set Your Display Environment Variable'''&lt;br /&gt;
Now, you’ll need to set the “DISPLAY” environment variable to point at the X server running on your Windows 10 PC. If you don’t do this, graphical applications will simply fail to launch.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To do this, run the following command in the Bash environment:&lt;br /&gt;
 export DISPLAY=:0&lt;br /&gt;
&lt;br /&gt;
This setting only applies to your current Bash session. If you close the window, Bash will forget it. You’ll have to run this command each time you reopen Bash and want to run a graphical application.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also install [https://wiki.gnome.org/Apps/Gedit gedit], to be able to edit your aircraft files (airframe, flight plan, etc) from within the center, since it is the default app that Paparazzi center uses.&lt;br /&gt;
 sudo apt-get install gedit&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
After that you can launch Paparazzi. (Or use the [[Paparazzi_Center/Evolutions#New_Paparazzi_Center|new Paparazzi center]] which works seamless on windows) &lt;br /&gt;
 cd ~/paparazzi &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paparazzi on windows.png|700px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Right now you can use Paparazzi for Simulation.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Simulation windows.png|700px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you build for an aircraft, the processes will end, but it may not automatically remove the indicator. You may need to press “''Stop/Remove All Processes''” button.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Stop windows.png|700px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Programming Autopilot=&lt;br /&gt;
Right now, to program the autopilot, you should copy the HEX/BIN file manually to your windows OS, You can find your ubuntu home directory files in the following directory:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 C:\Users\NAME\AppData\Local\Packages\DISTRO_FOLDER\LocalState\rootfs&lt;br /&gt;
&lt;br /&gt;
'''DISTRO_FOLDER''' for Ubuntu is:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc&lt;br /&gt;
&lt;br /&gt;
Then use a windows program to upload firmware to the autopilot&amp;lt;br /&amp;gt;&lt;br /&gt;
(For example [https://www.st.com/en/development-tools/stsw-stm32080.html DfuSe] or STM32 [https://www.st.com/en/development-tools/stsw-link004.html ST-LINK Utility] for ST microcontrollers)&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
DfuSE.PNG|DfuSE &lt;br /&gt;
ST-Link Utility.png|ST-Link Utility&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= A Better Terminal =&lt;br /&gt;
&lt;br /&gt;
The opensource Terminal application for Microsoft one can have multiple tabs and easily switch between Bash, Powershell and CMD, '''very useful''' great terminal.&lt;br /&gt;
&lt;br /&gt;
Find it here https://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701&lt;br /&gt;
&lt;br /&gt;
=Using Telemetry=&lt;br /&gt;
After you connect your telemetry device to the PC, usually it's recognized under COMx in Windows. Find the port number first.&amp;lt;br /&amp;gt;&lt;br /&gt;
In the Ubuntu, you can access it by &amp;quot;''/dev/ttySx''&amp;quot;. For example, COM15 on windows can be accessed on &amp;quot;''/dev/ttyS15''&amp;quot; on Ubuntu.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First you need to give it the proper permissions. Run this command&lt;br /&gt;
 sudo chmod 666 /dev/ttyS15&lt;br /&gt;
Replacing 15 with the correct number. Now in the Paparazzi center you can use this port to connect to the aircraft using Paparazzi link application.&lt;br /&gt;
 sw/ground_segment/tmtc/link -d /dev/ttyS15&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:User_Documentation]] [[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Installation/Windows10&amp;diff=26112</id>
		<title>Installation/Windows10</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Installation/Windows10&amp;diff=26112"/>
		<updated>2022-02-16T09:38:38Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Installing Ubuntu on windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Installation&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Intro=&lt;br /&gt;
[[File:Win+papa.jpg|250px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
This page describes the installation of paparazzi on Microsoft Windows10.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are many Windows users who like to use paparazzi on this popular OS. Be-aware it's '''less efficient''' to use paparazzi on Windows OS but it could be helpful in some cases.&amp;lt;br /&amp;gt;&lt;br /&gt;
Since Microsoft introduced the possibility of installing Ubuntu on windows 10, you can run Paparazzi on it with some little efforts.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Installing Ubuntu on windows=&lt;br /&gt;
First you need to install Ubuntu on Windows 10. (Ensure you are using a '''64-bit''' version of windows 10, since it cannot be run on a 32-bit version.&lt;br /&gt;
Go to “''Control Panel-&amp;gt; Programs-&amp;gt; Turn Windows Feature On or Off''”.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable the “''Windows Subsystem for Linux''” option in the list, and then click OK button. &lt;br /&gt;
Click “Restart Now” when you are prompted to restart your computer. The feature won’t work until you reboot.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Or''',Instead of the above steps, you can setup your system by executing the following command in the Administrator PowerShell prompt:&lt;br /&gt;
 Enable-WindowsOptionalFeature –Online –FeatureName Microsoft-Windows-Subsystem-Linux&lt;br /&gt;
After that, Ubuntu can be installed from the Microsoft Store:&lt;br /&gt;
# Use the Start menu to launch the Microsoft Store application.&lt;br /&gt;
# Search for Ubuntu and select the result with, ‘Ubuntu 20.04', published by Canonical Group Limited.&lt;br /&gt;
# Click on the Install button.&lt;br /&gt;
&lt;br /&gt;
Ubuntu will be downloaded and installed automatically. Progress will be reported within the Microsoft Store application.&lt;br /&gt;
&lt;br /&gt;
[[File:Microsoft store.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=First launch=&lt;br /&gt;
Ubuntu can now be launched in the same way as any other Windows 10 application, such as searching for and selecting Ubuntu in the Start menu.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When launched for the first time, Ubuntu will inform you that it's ‘Installing' and you'll need to wait a few moments.&lt;br /&gt;
&lt;br /&gt;
[[File:Installing.png|450px]]&lt;br /&gt;
&lt;br /&gt;
When complete, you'll be asked for a username and password specific to your Ubuntu installation. These don't need to be the same as your Windows 10 credentials. &lt;br /&gt;
&lt;br /&gt;
[[File:New user.png|450px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this step complete, you'll find yourself at the Ubuntu bash command line.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After installing Ubuntu, you need to install Paparazzi. The quickest way is to add the Paparazzi repositories, update, and then install the required software.&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
You can add the repository and install with these commands(it's like usual [[Installation#Quickstart_for_Ubuntu_users|ubuntu installation command]]):&lt;br /&gt;
&lt;br /&gt;
You can just copy the lines [CTRL+C] and paste it in the Ubuntu command prompt via mouse right click.. then press [enter]&lt;br /&gt;
&lt;br /&gt;
 sudo add-apt-repository -y ppa:paparazzi-uav/ppa &amp;amp;&amp;amp; sudo add-apt-repository -y ppa:team-gcc-arm-embedded/ppa &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -f -y install paparazzi-dev paparazzi-jsbsim gcc-arm-embedded &amp;amp;&amp;amp; cd ~ &amp;amp;&amp;amp; git clone --origin upstream https://github.com/paparazzi/paparazzi.git &amp;amp;&amp;amp; cd ~/paparazzi &amp;amp;&amp;amp; git remote update -p &amp;amp;&amp;amp; git checkout -b v5.14 upstream/v5.14 &amp;amp;&amp;amp; sudo cp conf/system/udev/rules/*.rules /etc/udev/rules.d/ &amp;amp;&amp;amp; sudo udevadm control --reload-rules &amp;amp;&amp;amp; make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&lt;br /&gt;
Depending on you internet connection this step can take quite a while.... be patient, just let it do it's thing....In some cases even so long that you need to run again&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&lt;br /&gt;
Ubuntu on windows 10 is only command line and there is no GUI. So after finishing this step, you likly get an error like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Fatal error: exception Gtk.Error(“GtkMain.init: initialization failed\nml_gtk_init: initialization falied”)&lt;br /&gt;
[[File:Gtk error.png|450px]]&lt;br /&gt;
&lt;br /&gt;
It is because it wants to run the graphical Paparazzi Center, but there is no GUI on the Ubuntu for Windows at that moment. Lucky us, there is a way to have Graphical interface non the less.&lt;br /&gt;
&lt;br /&gt;
=Graphical Interface=&lt;br /&gt;
* '''Step One: Install an X server'''&lt;br /&gt;
&lt;br /&gt;
There are several different X servers you could install on Windows, [https://sourceforge.net/projects/xming/ Xming] and [https://sourceforge.net/projects/vcxsrv/ vcxsrv] are both recommended. Download it and install it on your Windows 10 PC.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The installation process is simple, You can just accept the default settings. It will then automatically launch and run in your system tray, waiting for you to run graphical programs.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Xming windows.png|300px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Hint:'''&amp;lt;/span&amp;gt; Every time you want to run a graphical interface from Ubuntu, make sure that Xming is running. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Step Two: Set Your Display Environment Variable'''&lt;br /&gt;
Now, you’ll need to set the “DISPLAY” environment variable to point at the X server running on your Windows 10 PC. If you don’t do this, graphical applications will simply fail to launch.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To do this, run the following command in the Bash environment:&lt;br /&gt;
 export DISPLAY=:0&lt;br /&gt;
&lt;br /&gt;
This setting only applies to your current Bash session. If you close the window, Bash will forget it. You’ll have to run this command each time you reopen Bash and want to run a graphical application.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also install [https://wiki.gnome.org/Apps/Gedit gedit], to be able to edit your aircraft files (airframe, flight plan, etc) from within the center, since it is the default app that Paparazzi center uses.&lt;br /&gt;
 sudo apt-get install gedit&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
After that you can launch Paparazzi. (Or use the [[Paparazzi_Center/Evolutions#New_Paparazzi_Center|new Paparazzi center]] which works seamless on windows) &lt;br /&gt;
 cd ~/paparazzi &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paparazzi on windows.png|700px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Right now you can use Paparazzi for Simulation.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Simulation windows.png|700px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you build for an aircraft, the processes will end, but it may not automatically remove the indicator. You may need to press “''Stop/Remove All Processes''” button.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Stop windows.png|700px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Programming Autopilot=&lt;br /&gt;
Right now, to program the autopilot, you should copy the HEX/BIN file manually to your windows OS, You can find your ubuntu home directory files in the following directory:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 C:\Users\NAME\AppData\Local\Packages\DISTRO_FOLDER\LocalState\rootfs&lt;br /&gt;
&lt;br /&gt;
'''DISTRO_FOLDER''' for Ubuntu is:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc&lt;br /&gt;
&lt;br /&gt;
Then use a windows program to upload firmware to the autopilot&amp;lt;br /&amp;gt;&lt;br /&gt;
(For example [https://www.st.com/en/development-tools/stsw-stm32080.html DfuSe] or STM32 [https://www.st.com/en/development-tools/stsw-link004.html ST-LINK Utility] for ST microcontrollers)&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
DfuSE.PNG|DfuSE &lt;br /&gt;
ST-Link Utility.png|ST-Link Utility&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Using Telemetry=&lt;br /&gt;
After you connect your telemetry device to the PC, usually it's recognized under COMx in Windows. Find the port number first.&amp;lt;br /&amp;gt;&lt;br /&gt;
In the Ubuntu, you can access it by &amp;quot;''/dev/ttySx''&amp;quot;. For example, COM15 on windows can be accessed on &amp;quot;''/dev/ttyS15''&amp;quot; on Ubuntu.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First you need to give it the proper permissions. Run this command&lt;br /&gt;
 sudo chmod 666 /dev/ttyS15&lt;br /&gt;
Replacing 15 with the correct number. Now in the Paparazzi center you can use this port to connect to the aircraft using Paparazzi link application.&lt;br /&gt;
 sw/ground_segment/tmtc/link -d /dev/ttyS15&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:User_Documentation]] [[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Installation/Windows10&amp;diff=26111</id>
		<title>Installation/Windows10</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Installation/Windows10&amp;diff=26111"/>
		<updated>2022-02-16T09:37:54Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Intro */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Installation&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=Intro=&lt;br /&gt;
[[File:Win+papa.jpg|250px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
This page describes the installation of paparazzi on Microsoft Windows10.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are many Windows users who like to use paparazzi on this popular OS. Be-aware it's '''less efficient''' to use paparazzi on Windows OS but it could be helpful in some cases.&amp;lt;br /&amp;gt;&lt;br /&gt;
Since Microsoft introduced the possibility of installing Ubuntu on windows 10, you can run Paparazzi on it with some little efforts.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Installing Ubuntu on windows=&lt;br /&gt;
First you need to install Ubuntu on Windows 10. (Ensure you are using a '''64-bit''' version of windows 10, since it cannot be run on a 32-bit version.&lt;br /&gt;
Go to “''Control Panel-&amp;gt; Programs-&amp;gt; Turn Windows Feature On or Off''”.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enable the “''Windows Subsystem for Linux''” option in the list, and then click OK button. &lt;br /&gt;
Click “Restart Now” when you are prompted to restart your computer. The feature won’t work until you reboot.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Or''',Instead of the above steps, you can setup your system by executing the following command in the Administrator PowerShell prompt:&lt;br /&gt;
 Enable-WindowsOptionalFeature –Online –FeatureName Microsoft-Windows-Subsystem-Linux&lt;br /&gt;
After that, Ubuntu can be installed from the Microsoft Store:&lt;br /&gt;
# Use the Start menu to launch the Microsoft Store application.&lt;br /&gt;
# Search for Ubuntu and select the first result, ‘Ubuntu', published by Canonical Group Limited.&lt;br /&gt;
# Click on the Install button.&lt;br /&gt;
&lt;br /&gt;
Ubuntu will be downloaded and installed automatically. Progress will be reported within the Microsoft Store application.&lt;br /&gt;
&lt;br /&gt;
[[File:Microsoft store.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=First launch=&lt;br /&gt;
Ubuntu can now be launched in the same way as any other Windows 10 application, such as searching for and selecting Ubuntu in the Start menu.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When launched for the first time, Ubuntu will inform you that it's ‘Installing' and you'll need to wait a few moments.&lt;br /&gt;
&lt;br /&gt;
[[File:Installing.png|450px]]&lt;br /&gt;
&lt;br /&gt;
When complete, you'll be asked for a username and password specific to your Ubuntu installation. These don't need to be the same as your Windows 10 credentials. &lt;br /&gt;
&lt;br /&gt;
[[File:New user.png|450px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this step complete, you'll find yourself at the Ubuntu bash command line.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After installing Ubuntu, you need to install Paparazzi. The quickest way is to add the Paparazzi repositories, update, and then install the required software.&amp;lt;br /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
You can add the repository and install with these commands(it's like usual [[Installation#Quickstart_for_Ubuntu_users|ubuntu installation command]]):&lt;br /&gt;
&lt;br /&gt;
You can just copy the lines [CTRL+C] and paste it in the Ubuntu command prompt via mouse right click.. then press [enter]&lt;br /&gt;
&lt;br /&gt;
 sudo add-apt-repository -y ppa:paparazzi-uav/ppa &amp;amp;&amp;amp; sudo add-apt-repository -y ppa:team-gcc-arm-embedded/ppa &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -f -y install paparazzi-dev paparazzi-jsbsim gcc-arm-embedded &amp;amp;&amp;amp; cd ~ &amp;amp;&amp;amp; git clone --origin upstream https://github.com/paparazzi/paparazzi.git &amp;amp;&amp;amp; cd ~/paparazzi &amp;amp;&amp;amp; git remote update -p &amp;amp;&amp;amp; git checkout -b v5.14 upstream/v5.14 &amp;amp;&amp;amp; sudo cp conf/system/udev/rules/*.rules /etc/udev/rules.d/ &amp;amp;&amp;amp; sudo udevadm control --reload-rules &amp;amp;&amp;amp; make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&lt;br /&gt;
Depending on you internet connection this step can take quite a while.... be patient, just let it do it's thing....In some cases even so long that you need to run again&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&lt;br /&gt;
Ubuntu on windows 10 is only command line and there is no GUI. So after finishing this step, you likly get an error like this:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Fatal error: exception Gtk.Error(“GtkMain.init: initialization failed\nml_gtk_init: initialization falied”)&lt;br /&gt;
[[File:Gtk error.png|450px]]&lt;br /&gt;
&lt;br /&gt;
It is because it wants to run the graphical Paparazzi Center, but there is no GUI on the Ubuntu for Windows at that moment. Lucky us, there is a way to have Graphical interface non the less.&lt;br /&gt;
&lt;br /&gt;
=Graphical Interface=&lt;br /&gt;
* '''Step One: Install an X server'''&lt;br /&gt;
&lt;br /&gt;
There are several different X servers you could install on Windows, [https://sourceforge.net/projects/xming/ Xming] and [https://sourceforge.net/projects/vcxsrv/ vcxsrv] are both recommended. Download it and install it on your Windows 10 PC.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The installation process is simple, You can just accept the default settings. It will then automatically launch and run in your system tray, waiting for you to run graphical programs.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Xming windows.png|300px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Hint:'''&amp;lt;/span&amp;gt; Every time you want to run a graphical interface from Ubuntu, make sure that Xming is running. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Step Two: Set Your Display Environment Variable'''&lt;br /&gt;
Now, you’ll need to set the “DISPLAY” environment variable to point at the X server running on your Windows 10 PC. If you don’t do this, graphical applications will simply fail to launch.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To do this, run the following command in the Bash environment:&lt;br /&gt;
 export DISPLAY=:0&lt;br /&gt;
&lt;br /&gt;
This setting only applies to your current Bash session. If you close the window, Bash will forget it. You’ll have to run this command each time you reopen Bash and want to run a graphical application.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also install [https://wiki.gnome.org/Apps/Gedit gedit], to be able to edit your aircraft files (airframe, flight plan, etc) from within the center, since it is the default app that Paparazzi center uses.&lt;br /&gt;
 sudo apt-get install gedit&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
After that you can launch Paparazzi. (Or use the [[Paparazzi_Center/Evolutions#New_Paparazzi_Center|new Paparazzi center]] which works seamless on windows) &lt;br /&gt;
 cd ~/paparazzi &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Paparazzi on windows.png|700px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Right now you can use Paparazzi for Simulation.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Simulation windows.png|700px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you build for an aircraft, the processes will end, but it may not automatically remove the indicator. You may need to press “''Stop/Remove All Processes''” button.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Stop windows.png|700px]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Programming Autopilot=&lt;br /&gt;
Right now, to program the autopilot, you should copy the HEX/BIN file manually to your windows OS, You can find your ubuntu home directory files in the following directory:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 C:\Users\NAME\AppData\Local\Packages\DISTRO_FOLDER\LocalState\rootfs&lt;br /&gt;
&lt;br /&gt;
'''DISTRO_FOLDER''' for Ubuntu is:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc&lt;br /&gt;
&lt;br /&gt;
Then use a windows program to upload firmware to the autopilot&amp;lt;br /&amp;gt;&lt;br /&gt;
(For example [https://www.st.com/en/development-tools/stsw-stm32080.html DfuSe] or STM32 [https://www.st.com/en/development-tools/stsw-link004.html ST-LINK Utility] for ST microcontrollers)&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
DfuSE.PNG|DfuSE &lt;br /&gt;
ST-Link Utility.png|ST-Link Utility&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Using Telemetry=&lt;br /&gt;
After you connect your telemetry device to the PC, usually it's recognized under COMx in Windows. Find the port number first.&amp;lt;br /&amp;gt;&lt;br /&gt;
In the Ubuntu, you can access it by &amp;quot;''/dev/ttySx''&amp;quot;. For example, COM15 on windows can be accessed on &amp;quot;''/dev/ttyS15''&amp;quot; on Ubuntu.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First you need to give it the proper permissions. Run this command&lt;br /&gt;
 sudo chmod 666 /dev/ttyS15&lt;br /&gt;
Replacing 15 with the correct number. Now in the Paparazzi center you can use this port to connect to the aircraft using Paparazzi link application.&lt;br /&gt;
 sw/ground_segment/tmtc/link -d /dev/ttyS15&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:User_Documentation]] [[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Gazebo&amp;diff=26095</id>
		<title>Gazebo</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Gazebo&amp;diff=26095"/>
		<updated>2021-12-03T15:59:32Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Gazebo Installation= */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Gazebo=&lt;br /&gt;
&lt;br /&gt;
The nice sim framework Gazebo from here http://gazebosim.org/ can now be use from within Paparazzi. Are you doing work on UAS in combination with e.g. Vision based navigation check it out. I might make testing your new work so much simpler.&lt;br /&gt;
&lt;br /&gt;
Be warned, using it can be highly addictive, and might tempt you into buying a new computer with high specifications. To be able to use Gazebo a very good Video card is needed, consider upgrading you hardware if everything runs slowly.&lt;br /&gt;
&lt;br /&gt;
Note that from stable version 5.14 onwards, only version 8 and 9 of Gazebo work in Paparazzi on Ubuntu 16.04 or higher.&lt;br /&gt;
&lt;br /&gt;
Gazebo back-end for NPS [[NPS]] simulator&lt;br /&gt;
&lt;br /&gt;
{TODO: Animated GIF here}}&lt;br /&gt;
&lt;br /&gt;
=Why=&lt;br /&gt;
&lt;br /&gt;
What is the use of this all.&lt;br /&gt;
&lt;br /&gt;
Well... to be able to test your routines before you get cold, or to warm flying your aircraft for real outside and save some travelling time in the same run.&lt;br /&gt;
Of course there should be a much better text here.. It's  wiki, so please add it, and remove what you see fit.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
We assume you already have Paparazzi installed via the One liner. If Not install Paparazzi first please. If that all worked, come back to this page.&lt;br /&gt;
&lt;br /&gt;
==Gazebo Installation==&lt;br /&gt;
&lt;br /&gt;
Steps to install Gazebo&lt;br /&gt;
&lt;br /&gt;
1. Make sure Gazebo is installed, version 9 if you are on Ubuntu 18 and higher&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt install gazebo9 libgazebo9-dev&lt;br /&gt;
&lt;br /&gt;
If for some reason this doesn't work, you can find some additional instructions here: http://gazebosim.org/tutorials?cat=install&amp;amp;tut=install_ubuntu&amp;amp;ver=9.0&lt;br /&gt;
&lt;br /&gt;
===Model===&lt;br /&gt;
&lt;br /&gt;
Prepare your Gazebo aircraft model (example see conf/simulator/gazebo/models/ardrone/):&lt;br /&gt;
&lt;br /&gt;
Place the aircraft model in the conf/simulator/gazebo/models/ folder, this folder is added to the search path of Gazebo when NPS is launched.&lt;br /&gt;
Gazebo uses a Front, Left, Up coordinate system for aircraft, so make sure the +x axis points forwards.&lt;br /&gt;
The model should include a link for each motor with the same names as those listed in NPS_ACTUATOR_NAMES (see below), e.g. &amp;amp;apos;nw_motor&amp;amp;apos;. Camera links should have the name specified in .dev_name in the&lt;br /&gt;
 corresponding video_config_t struct, see '''sw/airborne/boards/pc_sim.h''' and '''sw/airborne/modules/computer_vision/video_thread_nps.c'''&lt;br /&gt;
&lt;br /&gt;
Additional models can be found in the sw/ext/tudelft_gazebo_models. You will have to run git submodule init, git submodule update to pull in the models.&lt;br /&gt;
&lt;br /&gt;
===World===&lt;br /&gt;
&lt;br /&gt;
Prepare the world (see conf/simulator/gazebo/worlds/ardrone.world or any other world file you might find there). &lt;br /&gt;
&lt;br /&gt;
NOTE: Pay attention to the following:&lt;br /&gt;
&lt;br /&gt;
The real-time update rate should be set to zero, as the simulation back-end is already handled by Paparazzi:&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;physics type=&amp;amp;quot;ode&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;max_step_size&amp;amp;gt;0.001&amp;amp;lt;/max_step_size&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;real_time_update_rate&amp;amp;gt;0&amp;amp;lt;/real_time_update_rate&amp;amp;gt;&amp;amp;lt;!-- Handled by Paparazzi! --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;/physics&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Spherical coordinates should be provided for navigation. At this moment, there is an issue where Gazebo incorrectly uses a WSU coordinate system instead of ENU. This can be fixed by setting the heading to 180 degrees as shown below:&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;spherical_coordinates&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;surface_model&amp;amp;gt;EARTH_WGS84&amp;amp;lt;/surface_model&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;latitude_deg&amp;amp;gt;51.9906&amp;amp;lt;/latitude_deg&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;longitude_deg&amp;amp;gt;4.37679&amp;amp;lt;/longitude_deg&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;elevation&amp;amp;gt;0&amp;amp;lt;/elevation&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;heading_deg&amp;amp;gt;180&amp;amp;lt;/heading_deg&amp;amp;gt;&amp;amp;lt;!-- Temporary fix for issue https://bitbucket.org/osrf/gazebo/issues/2022/default-sphericalcoordinates-frame-should --&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;/spherical_coordinates&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additional world models can be found in the sw/ext/tudelft_gazebo_models. You will have to run git submodule init, git submodule update to pull in the models.&lt;br /&gt;
&lt;br /&gt;
===Airframe===&lt;br /&gt;
&lt;br /&gt;
Enhance your Paparzazzi airframe file to be able to use Gazebo (see examples/ardrone2_gazebo.xml):&lt;br /&gt;
&lt;br /&gt;
Select Gazebo as the '''FDM''' ('''F'''light '''D'''ynamics '''M'''odel) by adding it to the aircraft file&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;target name=&amp;amp;quot;nps&amp;amp;quot; board=&amp;amp;quot;pc&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;module name=&amp;amp;quot;fdm&amp;amp;quot; type=&amp;amp;quot;gazebo&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;/target&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add actuator thrusts and torques to the SIMULATOR section:&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;section name=&amp;amp;quot;SIMULATOR&amp;amp;quot; prefix=&amp;amp;quot;NPS_&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;define name=&amp;amp;quot;ACTUATOR_NAMES&amp;amp;quot; value=&amp;amp;quot;nw_motor, ne_motor, se_motor, sw_motor&amp;amp;quot; type=&amp;amp;quot;string[]&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;define name=&amp;amp;quot;ACTUATOR_THRUSTS&amp;amp;quot; value=&amp;amp;quot;1.55, 1.55, 1.55, 1.55&amp;amp;quot; type=&amp;amp;quot;double[]&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;define name=&amp;amp;quot;ACTUATOR_TORQUES&amp;amp;quot; value=&amp;amp;quot;0.155, -0.155, 0.155, -0.155&amp;amp;quot; type=&amp;amp;quot;double[]&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
          &amp;amp;lt;section&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
The thrusts and torques are expressed in SI units (N, Nm) and should be in the same order as the ACTUATOR_NAMES.&lt;br /&gt;
&lt;br /&gt;
In the same section, bypass the AHRS and INS as these are not supported yet, so add this&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;section name=&amp;amp;quot;SIMULATOR&amp;amp;quot; prefix=&amp;amp;quot;NPS_&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;amp;lt;define name=&amp;amp;quot;BYPASS_AHRS&amp;amp;quot; value=&amp;amp;quot;1&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;define name=&amp;amp;quot;BYPASS_INS&amp;amp;quot; value=&amp;amp;quot;1&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;amp;lt;section&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
 If you want to use visual based behaviour, enable video thread simulation:&lt;br /&gt;
&lt;br /&gt;
 &amp;amp;lt;section name=&amp;amp;quot;SIMULATOR&amp;amp;quot; prefix=&amp;amp;quot;NPS_&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;amp;lt;define name=&amp;amp;quot;SIMULATE_VIDEO&amp;amp;quot; value=&amp;amp;quot;1&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;amp;lt;section&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
Specify the Gazebo world and aircraft name:&lt;br /&gt;
 &amp;amp;lt;section name=&amp;amp;quot;SIMULATOR&amp;amp;quot; prefix=&amp;amp;quot;NPS_&amp;amp;quot;&amp;amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
            &amp;amp;lt;define name=&amp;amp;quot;GAZEBO_WORLD&amp;amp;quot; value=&amp;amp;quot;my_world.world&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
            &amp;amp;lt;define name=&amp;amp;quot;GAZEBO_AC_NAME&amp;amp;quot; value=&amp;amp;quot;my_uav&amp;amp;quot;/&amp;amp;gt;&lt;br /&gt;
          &amp;amp;lt;section&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
    4. Make sure all included modules work with NS. &lt;br /&gt;
&lt;br /&gt;
At the current state of Paparazzi code (20180206), most of the modules that depend on ''video_thread'' are only built when the target ap (autopilot hardware) is selected as the target. &lt;br /&gt;
&lt;br /&gt;
As a quick 'n dirty fix, try to remove the target attribute from the makefile element in the module xml, e.g.:&lt;br /&gt;
&lt;br /&gt;
&amp;amp;lt;makefile target=&amp;amp;quot;ap&amp;amp;quot;&amp;amp;gt; ---&amp;amp;gt; &amp;amp;lt;makefile&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
It would be great if as a user you would improve this and make a Pull request of your code improvements to the main Paparazzi codebase, TIA&lt;br /&gt;
&lt;br /&gt;
=Reality=&lt;br /&gt;
&lt;br /&gt;
Never forget... A sim is not reality... validate via testflights in the real world after you think everything you created works perfectly.&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Howto.crosscompile_for_parrot_drones&amp;diff=25292</id>
		<title>Howto.crosscompile for parrot drones</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Howto.crosscompile_for_parrot_drones&amp;diff=25292"/>
		<updated>2021-05-06T07:53:31Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* About */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
&lt;br /&gt;
On this page you find one way to '''compile the device drivers''' for a Parrot Bebop,Bebop2,Disco.&lt;br /&gt;
Works for Parrot mini drones like the Mambo and Swing as well with slight modifications.&lt;br /&gt;
&lt;br /&gt;
'''This is not the page for you''' if you only need to fly a Parrot Drone, in that case just follow regular instructions.&lt;br /&gt;
&lt;br /&gt;
For this to work, remember that there are many ways to Rome... This is just one.&lt;br /&gt;
&lt;br /&gt;
=Start=&lt;br /&gt;
&lt;br /&gt;
All wrong advise given on the internet, it does not matter to you probbably, [https://blukat29.github.io/2017/12/cross-compile-arm-kernel-module/ but this article] is likely 100% right!&lt;br /&gt;
&lt;br /&gt;
=Virtual Box=&lt;br /&gt;
&lt;br /&gt;
Install [[www.virtualbox.org | virtual box]], we used v5.2 at the time of writing this page.&lt;br /&gt;
&lt;br /&gt;
Native cross-compiling 64-bit did not work for us, grrrr :(. Believe it, we spend an all-nighter on it. Thanks to uavpal and his disco4g's hint that also his cross-compile efforts did not pan out on native 64 OS. It did only work for him on a 32bit Linux OS. So yes, we admit, we are sissy boys; we gave up on native crosscompiling on 64bit Linux for this Busybox one. Anyhow The way it is described, it all worked out, so let's be pragmatic for once...&lt;br /&gt;
&lt;br /&gt;
=Install a Virtual machine=&lt;br /&gt;
&lt;br /&gt;
Use the ISO of Debian 7 32-bit this worked, find e.g. here https://cdimage.debian.org/cdimage/archive/7.11.0/i386/iso-dvd/ , a network install might not work when the LTS period is over.&lt;br /&gt;
&lt;br /&gt;
==Guest additions==&lt;br /&gt;
&lt;br /&gt;
Follow these steps to install the VirtualBox Guest Additions on your Linux Debian virtual machine:&lt;br /&gt;
&lt;br /&gt;
Open terminal and become root (su); if you have sudo enabled, you may also do for example sudo -i; see man sudo for all options):&lt;br /&gt;
&lt;br /&gt;
 su&lt;br /&gt;
&lt;br /&gt;
Update APT cache:&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
&lt;br /&gt;
Install the latest security updates:&lt;br /&gt;
This step will upgrade all your packages, so be wise about it. Try the following steps first and they might be enough to work if not, then perform upgrade and retry.&lt;br /&gt;
&lt;br /&gt;
 apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
Install these required packages:&lt;br /&gt;
&lt;br /&gt;
Packages build-essential and module-assistant are both required to be able to compile the kernel modules and so when installing the VirtualBox Linux Guest Additions you must have them. So, this command will get the headers and packages (compilers and libraries) required to work. Notice, that after installing your VirtualBox Linux Guest Additions you will leave behind some packages as well as Linux headers, which you might delete afterwards or not. In my case they didn't hurt, but for the sake of system tidiness, you might want to pick up after playing.&lt;br /&gt;
&lt;br /&gt;
 apt-get install build-essential module-assistant&lt;br /&gt;
&lt;br /&gt;
Configure your system for building kernel modules:&lt;br /&gt;
&lt;br /&gt;
 m-a prepare&lt;br /&gt;
&lt;br /&gt;
Insert Guest Additions ISO:&lt;br /&gt;
&lt;br /&gt;
Expand menu Devices and click on Insert Guest Additions CD image...&lt;br /&gt;
&lt;br /&gt;
It should mount automatically, but if for any reason it doesn't:&lt;br /&gt;
&lt;br /&gt;
 mount /media/cdrom&lt;br /&gt;
&lt;br /&gt;
 Run the following script:&lt;br /&gt;
&lt;br /&gt;
sh /media/cdrom/VBoxLinuxAdditions.run&lt;br /&gt;
&lt;br /&gt;
Restart the system:&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
=Shared folder=&lt;br /&gt;
&lt;br /&gt;
Handy to transfer your .ko to drone from within host OS&lt;br /&gt;
&lt;br /&gt;
https://help.ubuntu.com/community/VirtualBox/SharedFolders&lt;br /&gt;
&lt;br /&gt;
=Toolchain in virtual box=&lt;br /&gt;
&lt;br /&gt;
Download the toolchain from here via:&lt;br /&gt;
&lt;br /&gt;
 wget https://openuas.org/pub/mirrors/gnu/gnu_toolchain/arm-none-linux-gnueabi/arm-2012.03-57-arm-none-linux-gnueabi.bin&lt;br /&gt;
&lt;br /&gt;
=Tools=&lt;br /&gt;
&lt;br /&gt;
Install tools needed via:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install make gcc build-essential&lt;br /&gt;
&lt;br /&gt;
=Get Parrot drivers sourcecode=&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/Parrot-Developers/disco-opensource.git&lt;br /&gt;
&lt;br /&gt;
The same kind of URL if needed for Bebop, Bebop2 or minidrones, you get the drift.&lt;br /&gt;
&lt;br /&gt;
==Patch Parrot drivers sourcecode==&lt;br /&gt;
&lt;br /&gt;
To be able to compile the whole enchilada, we need to fix something in Parrot sourcecode:&lt;br /&gt;
&lt;br /&gt;
Patch&lt;br /&gt;
&lt;br /&gt;
 drivers/parrot/gpu/ump/mali_files/Kbuild&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
 drivers/parrot/gpu/mali400/Kbuild&lt;br /&gt;
&lt;br /&gt;
 https://github.com/96boards/meta-96boards/blob/master/recipes-kernel/linux/linux-96boards/0005-drivers-gpu-arm-utgard-Fix-build-issue.patch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     diff --git a/sources/linux-3.4.11/linux-3.4.11/drivers/parrot/gpu/mali400/Kbuild b/sources/linux-3.4.11/linux-3.4.11/drivers/parrot/gpu/mali400/Kbuild&lt;br /&gt;
    index a4481dd..5c45684 100755&lt;br /&gt;
    --- a/sources/linux-3.4.11/linux-3.4.11/drivers/parrot/gpu/mali400/Kbuild&lt;br /&gt;
    +++ b/sources/linux-3.4.11/linux-3.4.11/drivers/parrot/gpu/mali400/Kbuild&lt;br /&gt;
    @@ -25,21 +25,21 @@ DRIVER_DIR=$(KBUILD_SRC)/$(src)&lt;br /&gt;
     # For customer releases the Linux Device Drivers will be provided as ARM proprietary and GPL releases:&lt;br /&gt;
     # The ARM proprietary product will only include the license/proprietary directory&lt;br /&gt;
     # The GPL product will only include the license/gpl directory&lt;br /&gt;
    -ifeq ($(wildcard $(DRIVER_DIR)/linux/license/gpl/*),)&lt;br /&gt;
    -    ccflags-y += -I$(DRIVER_DIR)/linux/license/proprietary&lt;br /&gt;
    -    ifeq ($(CONFIG_MALI400_PROFILING),y)&lt;br /&gt;
    -        $(error Profiling is incompatible with non-GPL license)&lt;br /&gt;
    -    endif&lt;br /&gt;
    -    ifeq ($(CONFIG_PM_RUNTIME),y)&lt;br /&gt;
    -        $(error Runtime PM is incompatible with non-GPL license)&lt;br /&gt;
    -    endif&lt;br /&gt;
    -    ifeq ($(CONFIG_DMA_SHARED_BUFFER),y)&lt;br /&gt;
    -        $(error DMA-BUF is incompatible with non-GPL license)&lt;br /&gt;
    -    endif&lt;br /&gt;
    -    $(error Linux Device integration is incompatible with non-GPL license)&lt;br /&gt;
    -else&lt;br /&gt;
    -    ccflags-y += -I$(DRIVER_DIR)/linux/license/gpl&lt;br /&gt;
    -endif&lt;br /&gt;
    +#ifeq ($(wildcard $(DRIVER_DIR)/linux/license/gpl/*),)&lt;br /&gt;
    +#    ccflags-y += -I$(DRIVER_DIR)/linux/license/proprietary&lt;br /&gt;
    +#    ifeq ($(CONFIG_MALI400_PROFILING),y)&lt;br /&gt;
    +#        $(error Profiling is incompatible with non-GPL license)&lt;br /&gt;
    +#    endif&lt;br /&gt;
    +#    ifeq ($(CONFIG_PM_RUNTIME),y)&lt;br /&gt;
    +#        $(error Runtime PM is incompatible with non-GPL license)&lt;br /&gt;
    +#    endif&lt;br /&gt;
    +#    ifeq ($(CONFIG_DMA_SHARED_BUFFER),y)&lt;br /&gt;
    +#        $(error DMA-BUF is incompatible with non-GPL license)&lt;br /&gt;
    +#    endif&lt;br /&gt;
    +#    $(error Linux Device integration is incompatible with non-GPL license)&lt;br /&gt;
    +#else&lt;br /&gt;
    +ccflags-y += -I$(DRIVER_DIR)/linux/license/gpl&lt;br /&gt;
    +#endif&lt;br /&gt;
&lt;br /&gt;
till:&lt;br /&gt;
&lt;br /&gt;
 mali-y += \&lt;br /&gt;
    linux/mali_osk_atomics.o \&lt;br /&gt;
&lt;br /&gt;
If you do not know how to apply a patch file, one can also use a text editor like nano and comment out the lines oneself so it looks, but do not add the three dots (...) , like:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 #ifeq ($(wildcard $(DRIVER_DIR)/linux/license/gpl/*),)&lt;br /&gt;
 #    ccflags-y += -I$(DRIVER_DIR)/linux/license/proprietary&lt;br /&gt;
 #    ifeq ($(CONFIG_MALI400_PROFILING),y)&lt;br /&gt;
 #        $(error Profiling is incompatible with non-GPL license)&lt;br /&gt;
 #    endif&lt;br /&gt;
 #    ifeq ($(CONFIG_PM_RUNTIME),y)&lt;br /&gt;
 #        $(error Runtime PM is incompatible with non-GPL license)&lt;br /&gt;
 #    endif&lt;br /&gt;
 #    ifeq ($(CONFIG_DMA_SHARED_BUFFER),y)&lt;br /&gt;
 #        $(error DMA-BUF is incompatible with non-GPL license)&lt;br /&gt;
 #    endif&lt;br /&gt;
 #    $(error Linux Device integration is incompatible with non-GPL license)&lt;br /&gt;
 #else&lt;br /&gt;
 ccflags-y += -I$(DRIVER_DIR)/linux/license/gpl&lt;br /&gt;
 #endif &lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
==changeMakefile:==&lt;br /&gt;
&lt;br /&gt;
If you have a Disco then also change the makefile. Thus open makefile via:&lt;br /&gt;
&lt;br /&gt;
 nano makefile&lt;br /&gt;
&lt;br /&gt;
add a plus ( + ) to the line&lt;br /&gt;
&lt;br /&gt;
EXTRAVERSION:&lt;br /&gt;
&lt;br /&gt;
EXTRAVERSION = +&lt;br /&gt;
&lt;br /&gt;
==Mali==&lt;br /&gt;
to prevent errors like '/bin/sh: line 0: cd: /drivers/parrot/gpu/mali400: No such file or directory' while compiling, create symlink (stupid way to do things, but a quick and dirty solution that works...)&lt;br /&gt;
&lt;br /&gt;
Where you have to change the path to where you copier your source files ofcourse. So for a developer who stores all its code in a ~/develop directory and wants to compile for e.g. Bebop2 steps would like:&lt;br /&gt;
&lt;br /&gt;
 $ su&lt;br /&gt;
 # cd /&lt;br /&gt;
 # ln -s /home/yourusername/develop/bebop2-opensource/sources/linux-3.4.11/linux-3.4.11/drivers drivers&lt;br /&gt;
&lt;br /&gt;
=Config=&lt;br /&gt;
&lt;br /&gt;
# rename linux.config to .config&lt;br /&gt;
# make the changes to .config required for your modules to be included&lt;br /&gt;
&lt;br /&gt;
=Environment=&lt;br /&gt;
&lt;br /&gt;
as root run: (Hint: Where &amp;quot;yourpath&amp;quot; is the path where you installed your toolchain...)&lt;br /&gt;
&lt;br /&gt;
 PATH=$PATH:/yourpath/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/libexec/gcc/arm-none-linux-gnueabi/4.6.3&lt;br /&gt;
 export ARCH=arm&lt;br /&gt;
 export CROSS_COMPILE=/yourpath/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/arm-none-linux-gnueabi-&lt;br /&gt;
&lt;br /&gt;
 make oldconfig&lt;br /&gt;
 make clean&lt;br /&gt;
 make zImage&lt;br /&gt;
 make modules&lt;br /&gt;
&lt;br /&gt;
Sadly we have to compile the entire kernel first, the &amp;quot;make zImage&amp;quot; part, if you don’t, the checksums used by Module.symvers (CONFIG_MODVERSIONS) will not match! And your modules will never un on a Parrot drone.&lt;br /&gt;
&lt;br /&gt;
=Reminder to self=&lt;br /&gt;
&lt;br /&gt;
j8 since..., well we have a fast PC lets also use it.&lt;br /&gt;
&lt;br /&gt;
 make -C /home/n$USER/develop/allthings_parrot/disco/disco-opensource/sources/linux-3.4.11/linux-3.4.11/ -j8 ARCH=arm CROSS_COMPILE=/opt/extra/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/arm-none-linux-gnueabi-&lt;br /&gt;
&lt;br /&gt;
TIP: https://www.techrepublic.com/article/how-to-run-virtualbox-virtual-machines-from-the-command-line/&lt;br /&gt;
&lt;br /&gt;
=Driver info=&lt;br /&gt;
&lt;br /&gt;
To get some more info of your comoiled drivers, these example might come in handy&lt;br /&gt;
&lt;br /&gt;
 $ readelf -a usbserial.ko&lt;br /&gt;
 $ file usbserial.ko&lt;br /&gt;
 $ modinfo usbserial.ko&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* Nothing, feel free to add...&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Project_add_uavcan&amp;diff=25287</id>
		<title>Project add uavcan</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Project_add_uavcan&amp;diff=25287"/>
		<updated>2021-03-18T16:08:44Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==UAVCAN on Paparazzi==&lt;br /&gt;
&lt;br /&gt;
==Outcome==&lt;br /&gt;
&lt;br /&gt;
Be able to simply connect UAVCAN devices to Paparazzi suppoted Autopilot board which have a CAN connector&lt;br /&gt;
&lt;br /&gt;
==Why==&lt;br /&gt;
&lt;br /&gt;
To have the benefits of CAN by using 3rd party UAVCAN sensors in Paparazzi enabled autopilots&lt;br /&gt;
&lt;br /&gt;
==Into==&lt;br /&gt;
&lt;br /&gt;
==RFC==&lt;br /&gt;
&lt;br /&gt;
Yes, this is a living document so RFC, ideas and whatever helps to move forward very welcome.&lt;br /&gt;
&lt;br /&gt;
==Version==&lt;br /&gt;
&lt;br /&gt;
UAVCAN specification exist in various version For now the solution is for UAVCAN specs Beta V1 only since V0 support is diminishing fast&lt;br /&gt;
&lt;br /&gt;
==Path==&lt;br /&gt;
&lt;br /&gt;
The step to take to get to a solution&lt;br /&gt;
&lt;br /&gt;
===Research===&lt;br /&gt;
&lt;br /&gt;
See what usable is already available&lt;br /&gt;
&lt;br /&gt;
# libcanard&lt;br /&gt;
# PPRZ ABI messages&lt;br /&gt;
# Chibios CAN&lt;br /&gt;
# Baremetal can support&lt;br /&gt;
&lt;br /&gt;
===Choices===&lt;br /&gt;
&lt;br /&gt;
Lets start of by using libcanard and Chibios and later add baremetal. If done well this shoul be possible &lt;br /&gt;
&lt;br /&gt;
==ABI==&lt;br /&gt;
&lt;br /&gt;
a  UAVCAN abi.xml bridge&lt;br /&gt;
&lt;br /&gt;
==DSDL==&lt;br /&gt;
&lt;br /&gt;
As an example on could take Hereflow and implement a driver for it&lt;br /&gt;
&lt;br /&gt;
===Generate code from DSDL====&lt;br /&gt;
&lt;br /&gt;
There are already tools even online https://nunaweb.uavcan.org/&lt;br /&gt;
&lt;br /&gt;
and for the other part someting like https://forum.uavcan.org/t/introducing-ap-periph-easy-uavcan-firmware-creation/678&lt;br /&gt;
&lt;br /&gt;
==Timestamps==&lt;br /&gt;
&lt;br /&gt;
Relevant https://forum.uavcan.org/t/rtos-can-api-requirements/706&lt;br /&gt;
&lt;br /&gt;
=Tools=&lt;br /&gt;
&lt;br /&gt;
==A Pixhawk as CANDEbugger==&lt;br /&gt;
&lt;br /&gt;
==CANAble==&lt;br /&gt;
&lt;br /&gt;
An opensource CAN to PC adapter usable for debuggin purposes https://canable.io/&lt;br /&gt;
&lt;br /&gt;
==Wireshark==&lt;br /&gt;
&lt;br /&gt;
Using wireshark as UAVCAN packet sniffer&lt;br /&gt;
&lt;br /&gt;
=Other CAN on same bus==&lt;br /&gt;
&lt;br /&gt;
If there are no collision one should be able to use CAN with other protocolstack as well (OpenCAN, CANAerospace etc.)&lt;br /&gt;
&lt;br /&gt;
=C99=&lt;br /&gt;
&lt;br /&gt;
=MISRA=&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
Links relevant to get UAVCAN into PPRZ&lt;br /&gt;
# https://github.com/olliw42/uavcan4hobbyists&lt;br /&gt;
# https://uavcan.org/&lt;br /&gt;
# https://forum.uavcan.org/t/uavcan-v1-0-and-ardupilot/671&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Project_add_uavcan&amp;diff=25286</id>
		<title>Project add uavcan</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Project_add_uavcan&amp;diff=25286"/>
		<updated>2021-03-18T13:42:02Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==UAVCAN on Paparazzi==&lt;br /&gt;
&lt;br /&gt;
==Outcome==&lt;br /&gt;
&lt;br /&gt;
Be able to simply connect UAVCAN devices to Paparazzi suppoted Autopilot board which have a CAN connector&lt;br /&gt;
&lt;br /&gt;
==Why==&lt;br /&gt;
&lt;br /&gt;
To have the benefits of CAN by using 3rd party UAVCAN sensors in Paparazzi enabled autopilots&lt;br /&gt;
&lt;br /&gt;
==Into==&lt;br /&gt;
&lt;br /&gt;
==RFC==&lt;br /&gt;
&lt;br /&gt;
Yes, this is a living document so RFC, ideas and whatever helps to move forward very welcome.&lt;br /&gt;
&lt;br /&gt;
==Version==&lt;br /&gt;
&lt;br /&gt;
UAVCAN specification exist in various version For now the solution is for UAVCAN specs Beta V1 only since V0 support is diminishing fast&lt;br /&gt;
&lt;br /&gt;
==Path==&lt;br /&gt;
&lt;br /&gt;
The step to take to get to a solution&lt;br /&gt;
&lt;br /&gt;
===Research===&lt;br /&gt;
&lt;br /&gt;
See what usable is already available&lt;br /&gt;
&lt;br /&gt;
# libcanard&lt;br /&gt;
# PPRZ ABI messages&lt;br /&gt;
# Chibios CAN&lt;br /&gt;
# Baremetal can support&lt;br /&gt;
&lt;br /&gt;
===Choices===&lt;br /&gt;
&lt;br /&gt;
Lets start of by using libcanard and Chibios and later add baremetal. If done well this shoul be possible &lt;br /&gt;
&lt;br /&gt;
==ABI==&lt;br /&gt;
&lt;br /&gt;
a  UAVCAN abi.xml bridge&lt;br /&gt;
&lt;br /&gt;
==DSDL==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As an example on could take Hereflow and implement a driver for it&lt;br /&gt;
&lt;br /&gt;
===Generate code from DSDL====&lt;br /&gt;
&lt;br /&gt;
There are already tools even online https://nunaweb.uavcan.org/&lt;br /&gt;
&lt;br /&gt;
==Timestamps==&lt;br /&gt;
&lt;br /&gt;
Relevant https://forum.uavcan.org/t/rtos-can-api-requirements/706&lt;br /&gt;
&lt;br /&gt;
=Tools=&lt;br /&gt;
&lt;br /&gt;
==A Pixhawk as CANDEbugger==&lt;br /&gt;
&lt;br /&gt;
==CANAble==&lt;br /&gt;
&lt;br /&gt;
An opensource CAN to PC adapter usable for debuggin purposes https://canable.io/&lt;br /&gt;
&lt;br /&gt;
==Wireshark==&lt;br /&gt;
&lt;br /&gt;
Using wireshark as UAVCAN packet sniffer&lt;br /&gt;
&lt;br /&gt;
=Other CAN on same bus==&lt;br /&gt;
&lt;br /&gt;
If there are no collision one should be able to use CAN with other protocolstack as well (OpenCAN, CANAerospace etc.)&lt;br /&gt;
&lt;br /&gt;
=C99=&lt;br /&gt;
&lt;br /&gt;
=MISRA=&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
Links relevant to get UAVCAN into PPRZ&lt;br /&gt;
# https://github.com/olliw42/uavcan4hobbyists&lt;br /&gt;
# https://uavcan.org/&lt;br /&gt;
# https://forum.uavcan.org/t/uavcan-v1-0-and-ardupilot/671&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Project_add_uavcan&amp;diff=25285</id>
		<title>Project add uavcan</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Project_add_uavcan&amp;diff=25285"/>
		<updated>2021-03-18T13:40:24Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==UAVCAN on Paparazzi==&lt;br /&gt;
&lt;br /&gt;
==Outcome==&lt;br /&gt;
&lt;br /&gt;
Be able to simply connect UAVCAN devices to Paparazzi suppoted Autopilot board which have a CAN connector&lt;br /&gt;
&lt;br /&gt;
==Why==&lt;br /&gt;
&lt;br /&gt;
To have the benefits of CAN by using 3rd party UAVCAN sensors in Paparazzi enabled autopilots&lt;br /&gt;
&lt;br /&gt;
==Into==&lt;br /&gt;
&lt;br /&gt;
==RFC==&lt;br /&gt;
&lt;br /&gt;
Yes, this is a living document so RFC, ideas and whatever helps to move forward very welcome.&lt;br /&gt;
&lt;br /&gt;
==Version==&lt;br /&gt;
&lt;br /&gt;
UAVCAN specification exist in various version For now the solution is for UAVCAN specs Beta V1 only since V0 support is diminishing fast&lt;br /&gt;
&lt;br /&gt;
==Path==&lt;br /&gt;
&lt;br /&gt;
The step to take to get to a solution&lt;br /&gt;
&lt;br /&gt;
===Research===&lt;br /&gt;
&lt;br /&gt;
See what usable is already available&lt;br /&gt;
&lt;br /&gt;
# libcanard&lt;br /&gt;
# PPRZ ABI messages&lt;br /&gt;
# Chibios CAN&lt;br /&gt;
# Baremetal can support&lt;br /&gt;
&lt;br /&gt;
===Choices===&lt;br /&gt;
&lt;br /&gt;
Lets start of by using libcanard and Chibios and later add baremetal. If done well this shoul be possible &lt;br /&gt;
&lt;br /&gt;
==ABI==&lt;br /&gt;
&lt;br /&gt;
a  UAVCAN abi.xml bridge&lt;br /&gt;
&lt;br /&gt;
==DSDL==&lt;br /&gt;
&lt;br /&gt;
As an example on could take Hereflow and implement a driver for it&lt;br /&gt;
&lt;br /&gt;
===Generate code from DSDL====&lt;br /&gt;
&lt;br /&gt;
There are already &lt;br /&gt;
&lt;br /&gt;
==Timestamps==&lt;br /&gt;
&lt;br /&gt;
Relevant https://forum.uavcan.org/t/rtos-can-api-requirements/706&lt;br /&gt;
&lt;br /&gt;
=Tools=&lt;br /&gt;
&lt;br /&gt;
==A Pixhawk as CANDEbugger==&lt;br /&gt;
&lt;br /&gt;
==CANAble==&lt;br /&gt;
&lt;br /&gt;
An opensource CAN to PC adapter usable for debuggin purposes https://canable.io/&lt;br /&gt;
&lt;br /&gt;
==Wireshark==&lt;br /&gt;
&lt;br /&gt;
Using wireshark as UAVCAN packet sniffer&lt;br /&gt;
&lt;br /&gt;
=Other CAN on same bus==&lt;br /&gt;
&lt;br /&gt;
If there are no collision one should be able to use CAN with other protocolstack as well (OpenCAN, CANAerospace etc.)&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
Links relevant to get UAVCAN into PPRZ&lt;br /&gt;
# https://github.com/olliw42/uavcan4hobbyists&lt;br /&gt;
# https://uavcan.org/&lt;br /&gt;
# https://forum.uavcan.org/t/uavcan-v1-0-and-ardupilot/671&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Project_add_uavcan&amp;diff=25284</id>
		<title>Project add uavcan</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Project_add_uavcan&amp;diff=25284"/>
		<updated>2021-03-18T13:25:20Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==UAVCAN on Paparazzi==&lt;br /&gt;
&lt;br /&gt;
==Outcome==&lt;br /&gt;
&lt;br /&gt;
Be able to simply connect UAVCAN devices to Paparazzi suppoted Autopilot board which have a CAN connector&lt;br /&gt;
&lt;br /&gt;
==Why==&lt;br /&gt;
&lt;br /&gt;
To have the benefits of CAN by using 3rd party UAVCAN sensors in Paparazzi enabled autopilots&lt;br /&gt;
&lt;br /&gt;
==Into==&lt;br /&gt;
&lt;br /&gt;
==RFC==&lt;br /&gt;
&lt;br /&gt;
Yes, this is a living document so RFC, ideas and whatever helps to move forward very welcome.&lt;br /&gt;
&lt;br /&gt;
==Version==&lt;br /&gt;
&lt;br /&gt;
UAVCAN specification exist in various version For now the solution is for UAVCAN specs Beta V1 only since V0 support is diminishing fast&lt;br /&gt;
&lt;br /&gt;
==Path==&lt;br /&gt;
&lt;br /&gt;
The step to take to get to a solution&lt;br /&gt;
&lt;br /&gt;
===Research===&lt;br /&gt;
&lt;br /&gt;
See what usable is already available&lt;br /&gt;
&lt;br /&gt;
# libcanard&lt;br /&gt;
# PPRZ ABI messages&lt;br /&gt;
# Chibios CAN&lt;br /&gt;
# Baremetal can support&lt;br /&gt;
&lt;br /&gt;
===Choices==&lt;br /&gt;
&lt;br /&gt;
Lets start of by using libcanard and Chibios and later add baremetal. If done well this shoul be possible &lt;br /&gt;
&lt;br /&gt;
==ABI==&lt;br /&gt;
&lt;br /&gt;
a  UAVCAN abi.xml bridge&lt;br /&gt;
&lt;br /&gt;
==DSDL==&lt;br /&gt;
&lt;br /&gt;
As an example&lt;br /&gt;
&lt;br /&gt;
===Generate code from DSDL====&lt;br /&gt;
&lt;br /&gt;
There are already &lt;br /&gt;
&lt;br /&gt;
==Timestamps==&lt;br /&gt;
&lt;br /&gt;
=Tools=&lt;br /&gt;
&lt;br /&gt;
==A Pixhawk as CANDEbugger==&lt;br /&gt;
&lt;br /&gt;
==CANAble==&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
Links relevant to get UAVCAN into PPRZ&lt;br /&gt;
# https://github.com/olliw42/uavcan4hobbyists&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Project_add_uavcan&amp;diff=25283</id>
		<title>Project add uavcan</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Project_add_uavcan&amp;diff=25283"/>
		<updated>2021-03-18T13:23:13Z</updated>

		<summary type="html">&lt;p&gt;Openuas: A kickof of RFC for UAVCAN in Paparazzi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==UAVCAN on Paparazzi==&lt;br /&gt;
&lt;br /&gt;
==Outcome==&lt;br /&gt;
&lt;br /&gt;
Be able to simply connect UAVCAN devices to Paparazzi suppoted Autopilot board which have a CAN connector&lt;br /&gt;
&lt;br /&gt;
==Why==&lt;br /&gt;
&lt;br /&gt;
To have the benefits of CAN by using 3rd party UAVCAN sensors in Paparazzi enabled autopilots&lt;br /&gt;
&lt;br /&gt;
==Into==&lt;br /&gt;
&lt;br /&gt;
==RFC==&lt;br /&gt;
&lt;br /&gt;
Yes, this is a living document so RFC, ideas and whatever helps to move forward very welcome.&lt;br /&gt;
&lt;br /&gt;
==Version==&lt;br /&gt;
&lt;br /&gt;
UAVCAN specification exist in various version For now the solution is for UAVCAN specs Beta V1 only since V0 support is diminishing fast&lt;br /&gt;
&lt;br /&gt;
==Path==&lt;br /&gt;
&lt;br /&gt;
The step to take to get to a solution&lt;br /&gt;
&lt;br /&gt;
===Research===&lt;br /&gt;
&lt;br /&gt;
See what usable is already available&lt;br /&gt;
&lt;br /&gt;
# libcanard&lt;br /&gt;
# PPRZ ABI messages&lt;br /&gt;
# Chibios CAN&lt;br /&gt;
# Baremetal can support&lt;br /&gt;
&lt;br /&gt;
===Choices==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ABI==&lt;br /&gt;
&lt;br /&gt;
a  UAVCAN abi.xml bridge&lt;br /&gt;
&lt;br /&gt;
==DSDL==&lt;br /&gt;
&lt;br /&gt;
As an example&lt;br /&gt;
&lt;br /&gt;
===Generate code from DSDL====&lt;br /&gt;
&lt;br /&gt;
There are already &lt;br /&gt;
&lt;br /&gt;
==Timestamps==&lt;br /&gt;
&lt;br /&gt;
=Tools=&lt;br /&gt;
&lt;br /&gt;
==A Pixhawk as CANDEbugger==&lt;br /&gt;
&lt;br /&gt;
==CANAble==&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=FlightGear&amp;diff=25280</id>
		<title>FlightGear</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=FlightGear&amp;diff=25280"/>
		<updated>2021-03-08T19:19:32Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Debian/Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Simulation&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
FlightGear Flight Simulator which can be used to visualize an aircraft and scenery. For the actual simulation, see [[Simulation]].&lt;br /&gt;
&lt;br /&gt;
See http://www.flightgear.org/&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Debian/Ubuntu ===&lt;br /&gt;
The standard Debian/Ubuntu repositories contain mostly older FlightGear versions.&lt;br /&gt;
&lt;br /&gt;
A lot has improved and changed over the years. To get the latest greatest Flightgear, as of writing this iv vv2020.3.6 and enjoy the improvements one can easily get that version by add in a PPA&lt;br /&gt;
&lt;br /&gt;
For Ubuntu the latest edition of FlightGear is available from Launchpad PPA (contributed by Saikrishna Arcot), to add the PPA an install the latest Flightgear, this in your terminal:&lt;br /&gt;
&lt;br /&gt;
 sudo add-apt-repository ppa:saiarcot895/flightgear&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get install flightgear&lt;br /&gt;
&lt;br /&gt;
This will install v2020.3.1 or newer&lt;br /&gt;
&lt;br /&gt;
Tip:&lt;br /&gt;
&lt;br /&gt;
Not a Paparazzi issue but if you get a message box saying &amp;quot;zone.tab&amp;quot; missing copy an paste this in you terminal to fix it:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install --reinstall flightgear-data-base&lt;br /&gt;
&lt;br /&gt;
==== From source ====&lt;br /&gt;
&lt;br /&gt;
A great page to read in case you want to install Flightgear from source [http://wiki.flightgear.org/Scripted_Compilation_on_Linux_Debian/Ubuntu can be found here]&lt;br /&gt;
&lt;br /&gt;
== Adding Paparazzi 3D models ==&lt;br /&gt;
&lt;br /&gt;
There are a few 3D UAV models that come with paparazzi:&lt;br /&gt;
* ''mikrokopter.xml'' quadrotor frame&lt;br /&gt;
* ''hexa.xml'' hexacopter&lt;br /&gt;
* ''easystar.xml'' Multiplex EasyStar fixedwing&lt;br /&gt;
* ''simple_bipe.xml'' biplane/quadrotor hybrid (transitioning vehicle)&lt;br /&gt;
&lt;br /&gt;
To make them available in flightgear, make a link from ''/usr/share/games/flightgear/Models/Aircraft/paparazzi'' to ''&amp;lt;paparazzi_dir&amp;gt;/conf/simulator/flightgear/''&lt;br /&gt;
 sudo ln -s $PAPARAZZI_SRC/conf/simulator/flightgear/ /usr/share/games/flightgear/Models/Aircraft/paparazzi&lt;br /&gt;
&lt;br /&gt;
== Using FlightGear for Visualization ==&lt;br /&gt;
For Flight Gear visualization of the simulation, version 2018.2.2 or higher is best. &lt;br /&gt;
&lt;br /&gt;
NOTE: '''Only''' if you still wish to use version '''v2.4 or lower''' for some reason, you must add the following to the firmware section of your airframe file:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;fixedwing or rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
     &amp;lt;define name=&amp;quot;FG_2_4&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
     ...&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Launch Flight Gear with the following command:&lt;br /&gt;
 fgfs --fdm=null --native-gui=socket,in,30,,5501,udp&lt;br /&gt;
or to e.g. use the mikrokopter quadrotor model:&lt;br /&gt;
 fgfs --fdm=null --native-gui=socket,in,30,,5501,udp --prop:/sim/model/path=Models/Aircraft/paparazzi/mikrokopter.xml&lt;br /&gt;
&lt;br /&gt;
== Loading scenery data ==&lt;br /&gt;
Using [http://wiki.flightgear.org/TerraSync TerraSync] you can let FlightGear automatically download scenery for where you are flying in the background. Add the '''--enable-terrasync''' option, e.g&lt;br /&gt;
 fgfs --fdm=null --native-gui=socket,in,30,,5501,udp --prop:/sim/model/path=Models/Aircraft/paparazzi/mikrokopter.xml --enable-terrasync&lt;br /&gt;
It seems to be a good idea, to start fgfs with terrasync first, let it initialize and start the sim then, otherwise fgfs sometimes won't start.&lt;br /&gt;
&lt;br /&gt;
[[Category:Simulation]] [[Category:Software]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Howto.crosscompile_for_parrot_drones&amp;diff=25274</id>
		<title>Howto.crosscompile for parrot drones</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Howto.crosscompile_for_parrot_drones&amp;diff=25274"/>
		<updated>2021-02-09T15:55:23Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
&lt;br /&gt;
On this page you find one way to compile the drivers for a Parrot Bebop,Bebop2,Disco or maybe even the nice Anafi.&lt;br /&gt;
Could well work for other Parrot mini drones also with maybe slight modifications.&lt;br /&gt;
&lt;br /&gt;
For this to work, remember that there are many ways to Rome... This is just one.&lt;br /&gt;
&lt;br /&gt;
=Start=&lt;br /&gt;
&lt;br /&gt;
All wrong advise given on the internet, it does not matter to you probbably, [https://blukat29.github.io/2017/12/cross-compile-arm-kernel-module/ but this article] is likely 100% right!&lt;br /&gt;
&lt;br /&gt;
=Virtual Box=&lt;br /&gt;
&lt;br /&gt;
Install [[www.virtualbox.org | virtual box]], we used v5.2 at the time of writing this page.&lt;br /&gt;
&lt;br /&gt;
Native cross-compiling 64-bit did not work for us, grrrr :(. Believe it, we spend an all-nighter on it. Thanks to uavpal and his disco4g's hint that also his cross-compile efforts did not pan out on native 64 OS. It did only work for him on a 32bit Linux OS. So yes, we admit, we are sissy boys; we gave up on native crosscompiling on 64bit Linux for this Busybox one. Anyhow The way it is described, it all worked out, so let's be pragmatic for once...&lt;br /&gt;
&lt;br /&gt;
=Install a Virtual machine=&lt;br /&gt;
&lt;br /&gt;
Use the ISO of Debian 7 32-bit this worked, find e.g. here https://cdimage.debian.org/cdimage/archive/7.11.0/i386/iso-dvd/ , a network install might not work when the LTS period is over.&lt;br /&gt;
&lt;br /&gt;
==Guest additions==&lt;br /&gt;
&lt;br /&gt;
Follow these steps to install the VirtualBox Guest Additions on your Linux Debian virtual machine:&lt;br /&gt;
&lt;br /&gt;
Open terminal and become root (su); if you have sudo enabled, you may also do for example sudo -i; see man sudo for all options):&lt;br /&gt;
&lt;br /&gt;
 su&lt;br /&gt;
&lt;br /&gt;
Update APT cache:&lt;br /&gt;
&lt;br /&gt;
 apt-get update&lt;br /&gt;
&lt;br /&gt;
Install the latest security updates:&lt;br /&gt;
This step will upgrade all your packages, so be wise about it. Try the following steps first and they might be enough to work if not, then perform upgrade and retry.&lt;br /&gt;
&lt;br /&gt;
 apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
Install these required packages:&lt;br /&gt;
&lt;br /&gt;
Packages build-essential and module-assistant are both required to be able to compile the kernel modules and so when installing the VirtualBox Linux Guest Additions you must have them. So, this command will get the headers and packages (compilers and libraries) required to work. Notice, that after installing your VirtualBox Linux Guest Additions you will leave behind some packages as well as Linux headers, which you might delete afterwards or not. In my case they didn't hurt, but for the sake of system tidiness, you might want to pick up after playing.&lt;br /&gt;
&lt;br /&gt;
 apt-get install build-essential module-assistant&lt;br /&gt;
&lt;br /&gt;
Configure your system for building kernel modules:&lt;br /&gt;
&lt;br /&gt;
 m-a prepare&lt;br /&gt;
&lt;br /&gt;
Insert Guest Additions ISO:&lt;br /&gt;
&lt;br /&gt;
Expand menu Devices and click on Insert Guest Additions CD image...&lt;br /&gt;
&lt;br /&gt;
It should mount automatically, but if for any reason it doesn't:&lt;br /&gt;
&lt;br /&gt;
 mount /media/cdrom&lt;br /&gt;
&lt;br /&gt;
 Run the following script:&lt;br /&gt;
&lt;br /&gt;
sh /media/cdrom/VBoxLinuxAdditions.run&lt;br /&gt;
&lt;br /&gt;
Restart the system:&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
=Shared folder=&lt;br /&gt;
&lt;br /&gt;
Handy to transfer your .ko to drone from within host OS&lt;br /&gt;
&lt;br /&gt;
https://help.ubuntu.com/community/VirtualBox/SharedFolders&lt;br /&gt;
&lt;br /&gt;
=Toolchain in virtual box=&lt;br /&gt;
&lt;br /&gt;
Download the toolchain from here via:&lt;br /&gt;
&lt;br /&gt;
 wget https://openuas.org/pub/mirrors/gnu/gnu_toolchain/arm-none-linux-gnueabi/arm-2012.03-57-arm-none-linux-gnueabi.bin&lt;br /&gt;
&lt;br /&gt;
=Tools=&lt;br /&gt;
&lt;br /&gt;
Install tools needed via:&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install make gcc build-essential&lt;br /&gt;
&lt;br /&gt;
=Get Parrot drivers sourcecode=&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/Parrot-Developers/disco-opensource.git&lt;br /&gt;
&lt;br /&gt;
The same kind of URL if needed for Bebop, Bebop2 or minidrones, you get the drift.&lt;br /&gt;
&lt;br /&gt;
==Patch Parrot drivers sourcecode==&lt;br /&gt;
&lt;br /&gt;
To be able to compile the whole enchilada, we need to fix something in Parrot sourcecode:&lt;br /&gt;
&lt;br /&gt;
Patch&lt;br /&gt;
&lt;br /&gt;
 drivers/parrot/gpu/ump/mali_files/Kbuild&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
 drivers/parrot/gpu/mali400/Kbuild&lt;br /&gt;
&lt;br /&gt;
 https://github.com/96boards/meta-96boards/blob/master/recipes-kernel/linux/linux-96boards/0005-drivers-gpu-arm-utgard-Fix-build-issue.patch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     diff --git a/sources/linux-3.4.11/linux-3.4.11/drivers/parrot/gpu/mali400/Kbuild b/sources/linux-3.4.11/linux-3.4.11/drivers/parrot/gpu/mali400/Kbuild&lt;br /&gt;
    index a4481dd..5c45684 100755&lt;br /&gt;
    --- a/sources/linux-3.4.11/linux-3.4.11/drivers/parrot/gpu/mali400/Kbuild&lt;br /&gt;
    +++ b/sources/linux-3.4.11/linux-3.4.11/drivers/parrot/gpu/mali400/Kbuild&lt;br /&gt;
    @@ -25,21 +25,21 @@ DRIVER_DIR=$(KBUILD_SRC)/$(src)&lt;br /&gt;
     # For customer releases the Linux Device Drivers will be provided as ARM proprietary and GPL releases:&lt;br /&gt;
     # The ARM proprietary product will only include the license/proprietary directory&lt;br /&gt;
     # The GPL product will only include the license/gpl directory&lt;br /&gt;
    -ifeq ($(wildcard $(DRIVER_DIR)/linux/license/gpl/*),)&lt;br /&gt;
    -    ccflags-y += -I$(DRIVER_DIR)/linux/license/proprietary&lt;br /&gt;
    -    ifeq ($(CONFIG_MALI400_PROFILING),y)&lt;br /&gt;
    -        $(error Profiling is incompatible with non-GPL license)&lt;br /&gt;
    -    endif&lt;br /&gt;
    -    ifeq ($(CONFIG_PM_RUNTIME),y)&lt;br /&gt;
    -        $(error Runtime PM is incompatible with non-GPL license)&lt;br /&gt;
    -    endif&lt;br /&gt;
    -    ifeq ($(CONFIG_DMA_SHARED_BUFFER),y)&lt;br /&gt;
    -        $(error DMA-BUF is incompatible with non-GPL license)&lt;br /&gt;
    -    endif&lt;br /&gt;
    -    $(error Linux Device integration is incompatible with non-GPL license)&lt;br /&gt;
    -else&lt;br /&gt;
    -    ccflags-y += -I$(DRIVER_DIR)/linux/license/gpl&lt;br /&gt;
    -endif&lt;br /&gt;
    +#ifeq ($(wildcard $(DRIVER_DIR)/linux/license/gpl/*),)&lt;br /&gt;
    +#    ccflags-y += -I$(DRIVER_DIR)/linux/license/proprietary&lt;br /&gt;
    +#    ifeq ($(CONFIG_MALI400_PROFILING),y)&lt;br /&gt;
    +#        $(error Profiling is incompatible with non-GPL license)&lt;br /&gt;
    +#    endif&lt;br /&gt;
    +#    ifeq ($(CONFIG_PM_RUNTIME),y)&lt;br /&gt;
    +#        $(error Runtime PM is incompatible with non-GPL license)&lt;br /&gt;
    +#    endif&lt;br /&gt;
    +#    ifeq ($(CONFIG_DMA_SHARED_BUFFER),y)&lt;br /&gt;
    +#        $(error DMA-BUF is incompatible with non-GPL license)&lt;br /&gt;
    +#    endif&lt;br /&gt;
    +#    $(error Linux Device integration is incompatible with non-GPL license)&lt;br /&gt;
    +#else&lt;br /&gt;
    +ccflags-y += -I$(DRIVER_DIR)/linux/license/gpl&lt;br /&gt;
    +#endif&lt;br /&gt;
&lt;br /&gt;
till:&lt;br /&gt;
&lt;br /&gt;
 mali-y += \&lt;br /&gt;
    linux/mali_osk_atomics.o \&lt;br /&gt;
&lt;br /&gt;
If you do not know how to apply a patch file, one can also use a text editor like nano and comment out the lines oneself so it looks, but do not add the three dots (...) , like:&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 #ifeq ($(wildcard $(DRIVER_DIR)/linux/license/gpl/*),)&lt;br /&gt;
 #    ccflags-y += -I$(DRIVER_DIR)/linux/license/proprietary&lt;br /&gt;
 #    ifeq ($(CONFIG_MALI400_PROFILING),y)&lt;br /&gt;
 #        $(error Profiling is incompatible with non-GPL license)&lt;br /&gt;
 #    endif&lt;br /&gt;
 #    ifeq ($(CONFIG_PM_RUNTIME),y)&lt;br /&gt;
 #        $(error Runtime PM is incompatible with non-GPL license)&lt;br /&gt;
 #    endif&lt;br /&gt;
 #    ifeq ($(CONFIG_DMA_SHARED_BUFFER),y)&lt;br /&gt;
 #        $(error DMA-BUF is incompatible with non-GPL license)&lt;br /&gt;
 #    endif&lt;br /&gt;
 #    $(error Linux Device integration is incompatible with non-GPL license)&lt;br /&gt;
 #else&lt;br /&gt;
 ccflags-y += -I$(DRIVER_DIR)/linux/license/gpl&lt;br /&gt;
 #endif &lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
==changeMakefile:==&lt;br /&gt;
&lt;br /&gt;
If you have a Disco then also change the makefile. Thus open makefile via:&lt;br /&gt;
&lt;br /&gt;
 nano makefile&lt;br /&gt;
&lt;br /&gt;
add a plus ( + ) to the line&lt;br /&gt;
&lt;br /&gt;
EXTRAVERSION:&lt;br /&gt;
&lt;br /&gt;
EXTRAVERSION = +&lt;br /&gt;
&lt;br /&gt;
==Mali==&lt;br /&gt;
to prevent errors like '/bin/sh: line 0: cd: /drivers/parrot/gpu/mali400: No such file or directory' while compiling, create symlink (stupid way to do things, but a quick and dirty solution that works...)&lt;br /&gt;
&lt;br /&gt;
Where you have to change the path to where you copier your source files ofcourse. So for a developer who stores all its code in a ~/develop directory and wants to compile for e.g. Bebop2 steps would like:&lt;br /&gt;
&lt;br /&gt;
 $ su&lt;br /&gt;
 # cd /&lt;br /&gt;
 # ln -s /home/yourusername/develop/bebop2-opensource/sources/linux-3.4.11/linux-3.4.11/drivers drivers&lt;br /&gt;
&lt;br /&gt;
=Config=&lt;br /&gt;
&lt;br /&gt;
# rename linux.config to .config&lt;br /&gt;
# make the changes to .config required for your modules to be included&lt;br /&gt;
&lt;br /&gt;
=Environment=&lt;br /&gt;
&lt;br /&gt;
as root run: (Hint: Where &amp;quot;yourpath&amp;quot; is the path where you installed your toolchain...)&lt;br /&gt;
&lt;br /&gt;
 PATH=$PATH:/yourpath/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/libexec/gcc/arm-none-linux-gnueabi/4.6.3&lt;br /&gt;
 export ARCH=arm&lt;br /&gt;
 export CROSS_COMPILE=/yourpath/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/arm-none-linux-gnueabi-&lt;br /&gt;
&lt;br /&gt;
 make oldconfig&lt;br /&gt;
 make clean&lt;br /&gt;
 make zImage&lt;br /&gt;
 make modules&lt;br /&gt;
&lt;br /&gt;
Sadly we have to compile the entire kernel first, the &amp;quot;make zImage&amp;quot; part, if you don’t, the checksums used by Module.symvers (CONFIG_MODVERSIONS) will not match! And your modules will never un on a Parrot drone.&lt;br /&gt;
&lt;br /&gt;
=Reminder to self=&lt;br /&gt;
&lt;br /&gt;
j8 since..., well we have a fast PC lets also use it.&lt;br /&gt;
&lt;br /&gt;
 make -C /home/n$USER/develop/allthings_parrot/disco/disco-opensource/sources/linux-3.4.11/linux-3.4.11/ -j8 ARCH=arm CROSS_COMPILE=/opt/extra/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/arm-none-linux-gnueabi-&lt;br /&gt;
&lt;br /&gt;
TIP: https://www.techrepublic.com/article/how-to-run-virtualbox-virtual-machines-from-the-command-line/&lt;br /&gt;
&lt;br /&gt;
=Driver info=&lt;br /&gt;
&lt;br /&gt;
To get some more info of your comoiled drivers, these example might come in handy&lt;br /&gt;
&lt;br /&gt;
 $ readelf -a usbserial.ko&lt;br /&gt;
 $ file usbserial.ko&lt;br /&gt;
 $ modinfo usbserial.ko&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
* Nothing, feel free to add...&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25273</id>
		<title>Multiple Parrot Drones as Swarm via WiFi Router</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25273"/>
		<updated>2021-02-02T10:33:53Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Multiple Parrot Drones as Swarm via WiFi Router=&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
&lt;br /&gt;
If you are eager to try and fly multiple Bebop or Discos at the same time and communicate to each-other, this is the page to read on how to get that to work&lt;br /&gt;
&lt;br /&gt;
=What your need=&lt;br /&gt;
&lt;br /&gt;
* 2x Bebop&lt;br /&gt;
* 1x Router&lt;br /&gt;
* Your Fieldlaptop&lt;br /&gt;
&lt;br /&gt;
=Network=&lt;br /&gt;
&lt;br /&gt;
First all your Bebops need to be configured. Repeat for all your Bebops&lt;br /&gt;
&lt;br /&gt;
There is a configuration to make. Here are some examples as a start:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed dhcp&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey none none&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or if you have WPA2 and  fixed IP's and do not have set the MAC of your Bebop in your DHCP for a static lease. IP is an example, your router could be on a different subnet.&lt;br /&gt;
Ofcourse change the YOURROUTERSSID and YOURKEY to the SSID of your router end the password of your network.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed 192.168.1.44&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey wpa2 YOURKEY&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=IVY Bus=&lt;br /&gt;
&lt;br /&gt;
 ~/paparazzi/sw/ground_segment/tmtc/link -udp -udp_broadcast&lt;br /&gt;
&lt;br /&gt;
=Airframe=&lt;br /&gt;
&lt;br /&gt;
In Paparazzi-center make four (4x) an airframe configuration, you can use the same airframe file for all since AC_ID makes the difference&lt;br /&gt;
&lt;br /&gt;
To be able to cross-communicate via UDP a additional setting to the Bebop airframe file needs to be added:&lt;br /&gt;
&lt;br /&gt;
If your router has e.g. IP 192.168.209.1 then add this to your airframe in the target section:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;HOST&amp;quot; value=&amp;quot;192.168.209.$(AC_ID)&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;MODEM_HOST&amp;quot; value=&amp;quot;192.168.209.255&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;MODEM_BROADCAST&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the IP number according to your setup&lt;br /&gt;
&lt;br /&gt;
=Tips=&lt;br /&gt;
&lt;br /&gt;
* To make things manageable, one could also resort to local name resolving where the last part name of the device is the  aircraft ID.&lt;br /&gt;
* Or set the last part of a static IP number to the Aircraft ID of your airframes&lt;br /&gt;
&lt;br /&gt;
=TIPS=&lt;br /&gt;
&lt;br /&gt;
Press and hold the Powerbutton for 10seconds in a row until the light turns red, that is a factory reset.&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Installation&amp;diff=25227</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Installation&amp;diff=25227"/>
		<updated>2021-01-05T18:49:45Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Quickstart for Ubuntu users */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Installation&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Paparazzi is very easily installed on any laptop or workstation running the [http://www.ubuntu.com/ Ubuntu Linux OS] or virtually any [http://www.debian.org/ Debian] based [http://en.wikipedia.org/wiki/Linux Linux] or Apple Macintosh running [http://en.wikipedia.org/wiki/OS_X Mac OS X]. After Microsoft introduced Ubuntu on Windows, now it is possible to run Paparazzi on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]. There is also another work being done to port Paparazzi to Windows with a different approach to work on all versions of Windows.&lt;br /&gt;
&lt;br /&gt;
The steps required to install the software needed to be able to let your UAS fly are:&lt;br /&gt;
&lt;br /&gt;
# Install tools and prerequisites needed by Paparazzi.&lt;br /&gt;
# Download the source code from the source repository.&lt;br /&gt;
# Compile the Paparazzi software from sourcecode&lt;br /&gt;
# Complete any final configuration&lt;br /&gt;
&lt;br /&gt;
== Quickstart for Ubuntu users ==&lt;br /&gt;
Love one-liners? To get the latest Paparazzi up and running on your '''Ubuntu 16.04 or Ubuntu 18.04''', make sure you have a working internet connection and the '''universe''' packages activated in 'Software &amp;amp; Updates', then just copy and paste the text below into your terminal and press [enter] ... and wait a while...&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sudo add-apt-repository -y ppa:paparazzi-uav/ppa &amp;amp;&amp;amp; sudo add-apt-repository -y ppa:team-gcc-arm-embedded/ppa &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -f -y install paparazzi-dev paparazzi-jsbsim gcc-arm-embedded dfu-util &amp;amp;&amp;amp; cd ~ &amp;amp;&amp;amp; git clone --origin upstream https://github.com/paparazzi/paparazzi.git &amp;amp;&amp;amp; cd ~/paparazzi &amp;amp;&amp;amp; git remote update -p &amp;amp;&amp;amp; git checkout -b v5.16 upstream/v5.16 &amp;amp;&amp;amp; sudo cp conf/system/udev/rules/*.rules /etc/udev/rules.d/ &amp;amp;&amp;amp; sudo udevadm control --reload-rules &amp;amp;&amp;amp; make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04:'''&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
sudo add-apt-repository -y ppa:paparazzi-uav/ppa &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -f -y install paparazzi-dev paparazzi-jsbsim python-is-python3 python3-serial gcc-arm-none-eabi gdb-multiarch dfu-util &amp;amp;&amp;amp; cd ~ &amp;amp;&amp;amp; git clone --origin upstream https://github.com/paparazzi/paparazzi.git &amp;amp;&amp;amp; cd ~/paparazzi &amp;amp;&amp;amp; git remote update -p &amp;amp;&amp;amp; git checkout -b v5.16 upstream/v5.16 &amp;amp;&amp;amp; sudo cp conf/system/udev/rules/*.rules /etc/udev/rules.d/ &amp;amp;&amp;amp; sudo udevadm control --reload-rules &amp;amp;&amp;amp; make &amp;amp;&amp;amp; ./paparazzi&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                [[File:Done.jpg|frameless|center|Done!]]&lt;br /&gt;
If all went well the Paparazzi Center should now be running... '''skip''' the rest of this page and go fly! &lt;br /&gt;
&lt;br /&gt;
If you are new you'll need to do some more things before you go fly like configuring your XML definition file detailing your airframe configuration. There is help here for that: [[Airframe_Configuration]]&lt;br /&gt;
&lt;br /&gt;
In case you have no autopilot hardware yet, no problem, you can get hardware [[Get_Hardware|here]] or just buy a ready to fly aircraft that can run Paparazzi Software like the Parrot Drones [http://www.parrot.com/products/bebop-drone/ Parrot Bebop] and run Paparazzi on your Parrot [[AR_Drone_2|ARDRone2]], [[Bebop|Bebop]] and Bebop2 (soon the Disco drone).&lt;br /&gt;
&lt;br /&gt;
== OS Specific Instructions ==&lt;br /&gt;
&lt;br /&gt;
For Linux an instructional video explaining it all in detail can be found here https://www.youtube.com/watch?v=eW0PCSjrP78&lt;br /&gt;
&lt;br /&gt;
The process of installing the prerequisite tools and dependencies needed by Paparazzi is specific to the operating system you are using. For detailed installation instructions, please see the following pages:&lt;br /&gt;
*[[Installation/Linux|Installing prerequisites tools on Linux]]&lt;br /&gt;
*[[Installation/MacOSX|Installing prerequisites tools on Mac OS X]]&lt;br /&gt;
*[[Installation/RaspberryPi|Installing prerequisites tools on the RaspberryPi (Raspbian)]]&lt;br /&gt;
&lt;br /&gt;
For more advanced installation information or developers, please see the following pages:&lt;br /&gt;
*[[Installation/FromScratch|Installing everything from scratch]] For non Debian based Linux distributions or if one just wants to be able to use all the latest and greatest compilers, or source code of everything to improve something. Then there is no other way than to install from scratch.&lt;br /&gt;
*[[Installation/Windows|Installing prerequisite tools on Windows]] Note that this is '''a work in progress, and not finished yet'''. It would be fantastic if you are interested in running Paparazzi on this OS to help out with the porting. Being able to help is one of opensource software main features. If your skill- set is not so good in this area, but you still insist using Windows OS, then it is best to install a VirtualMachine from within Windows where you run the free Ubuntu OS of choice.&lt;br /&gt;
&lt;br /&gt;
=== Virtual Machines ===&lt;br /&gt;
&lt;br /&gt;
It is also possible to have your Debian/Ubuntu running in a virtual machine, for instance with [http://www.virtualbox.org/ VirtualBox]. This requires minimal changes to your computer setup, as you can run the VM from all common platforms (Windows, OS X, Linux). The virtual machine image can easily be transferred between different laptops, giving greater flexibility. Unfortunately, the Open-Source Edition of VirtualBox doesn't include the necessary USB support, so you'll need to get the regular version from the website.&lt;br /&gt;
&lt;br /&gt;
If you are new and this is your first time installing it is suggested you keep it simple. Use the standard Linux or OS X install. Select a system you can dedicate to the Linux installation. No VMs or dual boot configurations. The idea is do a very simple generic installation that is certain to have no issues. This reassures you that the installation process works and you can see and use a working Paparazzi install for some time before you try a more complicated install. The install is well documented and certain to succeed if followed exactly. Most issues arise when someone unfamiliar with Paparazzi or their OS tries a non-standard install that requires special steps that are not documented. Generally, commands can be copied and pasted for easy, step-by-step installation.&lt;br /&gt;
&lt;br /&gt;
== Getting the Source Code ==&lt;br /&gt;
The Paparazzi source code is hosted on [https://github.com/paparazzi/paparazzi Github]. While you can download it as a tarball from https://github.com/paparazzi/paparazzi/releases, it is recommended to clone the repository with [[git]].&lt;br /&gt;
&lt;br /&gt;
From the directory of your choice type:&lt;br /&gt;
 git clone --origin upstream https://github.com/paparazzi/paparazzi.git&lt;br /&gt;
Check out the released stable version branch:&lt;br /&gt;
 cd paparazzi&lt;br /&gt;
 git checkout v5.16&lt;br /&gt;
&lt;br /&gt;
'''If this whole &amp;quot;Git&amp;quot; thing is new to you, more options and information can be found on the [[git|Git page]].'''&lt;br /&gt;
&lt;br /&gt;
== Launching the Software ==&lt;br /&gt;
Make sure you have installed the &amp;lt;tt&amp;gt;paparazzi-dev&amp;lt;/tt&amp;gt; package as described above. Without these you will not be able to compile the sourcecode.&lt;br /&gt;
The first step is to compile. From the &amp;lt;tt&amp;gt;paparazzi&amp;lt;/tt&amp;gt; directory (&amp;lt;tt&amp;gt;cd ~/paparazzi&amp;lt;/tt&amp;gt;), run&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
You will have to run this command after each update of the source (&amp;lt;tt&amp;gt;git pull&amp;lt;/tt&amp;gt; command).&lt;br /&gt;
Launch the software from the &amp;lt;tt&amp;gt;paparazzi&amp;lt;/tt&amp;gt; directory with&lt;br /&gt;
&lt;br /&gt;
 ./paparazzi&lt;br /&gt;
&lt;br /&gt;
From the [[Paparazzi_Center|Paparazzi Center]] interface, select the ''Microjet'' aircraft, select the ''sim'' target and ''Build'' it. Then ''Execute'' the ''Simulation'' session. The procedure is detailed in the [[Simulation]] page.&lt;br /&gt;
&lt;br /&gt;
=== Environment Variables ===&lt;br /&gt;
&lt;br /&gt;
If ('''and only if''') you want to directly launch some Paparazzi agents (the ''Tools'' of the [[Paparazzi_Center|Paparazzi Center]]) from the command line, without using the Paparazzi Center, you must have the Paparazzi source and home environment variables set correctly in your shell. These variables can be automatically set in your shell by adding the following lines to your .bashrc file:&lt;br /&gt;
{{Box Code|~/.bashrc|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PAPARAZZI_HOME=''your paparazzi software directory''&lt;br /&gt;
export PAPARAZZI_SRC=''your paparazzi software directory''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Verify that your variables are set correctly with the following command:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;env | grep PAPARAZZI&amp;lt;/source&amp;gt;&lt;br /&gt;
which should return the following:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
PAPARAZZI_HOME=''your paparazzi software directory''&lt;br /&gt;
PAPARAZZI_SRC=''your paparazzi software directory''&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you wish to manually set the env variables (i.e. when compiling a backup copy of your code in a different folder) execute the following command from the folder you wish to set as your active paparazzi folder:&lt;br /&gt;
:&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;export PAPARAZZI_HOME=`pwd`;export PAPARAZZI_SRC=`pwd`&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In case you obtain an error indicating that your environmental variables are not set up correctly (for example 'ocamlfind: Package `pprz.xlib' not found') it should be noted that some shells or versions of make can not handle the '~/paparazzi' path. Try setting it to '/home/username/paparazzi' instead. &lt;br /&gt;
&lt;br /&gt;
== Software Updates ==&lt;br /&gt;
'''We manage the software with the git version control system. Learn it! If you are new to it, see the [[Git|Git wiki page]].'''&lt;br /&gt;
&lt;br /&gt;
Paparazzi is a very rapidly evolving project and as such you might want to update your software regularly. See the [[RepositoryStructure|branching model and release process page]].&lt;br /&gt;
&lt;br /&gt;
Any new files you created will not be lost/overwritten when updating (like your own airframe file). Nevertheless, as with all things, backups are advised.&lt;br /&gt;
If you modified source code, the best way is of course to use the version control system [[Git]] to commit your changes. Otherwise at least use the brute force method and save everything in another directory.&lt;br /&gt;
&lt;br /&gt;
Update your software with care and caution, and always test the functionality on the ground and in the air as some updates will affect tuning parameters. You might need to update your airframe file as well. The compiler will usually complain if there is a problem, at which point you can look at the [[Airframe_Configuration|Airframe Configuration wiki page]] again, look on the [[Contact#Mailing_List|mailing list]] or some of the most recent airframe files on git to find the proper syntax.&lt;br /&gt;
&lt;br /&gt;
'''See also the [[Release Upgrades]] page for information on how to update your configuration from one release to the next.'''&lt;br /&gt;
&lt;br /&gt;
=== Quick'n dirty description ===&lt;br /&gt;
&lt;br /&gt;
To download and automatically merge any updated source files, run the following command from your Paparazzi directory&lt;br /&gt;
 git pull&lt;br /&gt;
&lt;br /&gt;
After any git update or source code modification the code can be recompiled from ''your paparazzi software directory'' with the following command:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
The ''make'' command will only recompile portions of the software where changed have been detected.&lt;br /&gt;
If it does not behave as expected you can delete all compiled files and recompile from scratch with the following commands:&lt;br /&gt;
&lt;br /&gt;
 make clean&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
If you'd like to check that the code compiles all example airframes then you can run the test suite using the command&lt;br /&gt;
&lt;br /&gt;
 make test&lt;br /&gt;
&lt;br /&gt;
For more details see the [[Builds/Tests|tests page]].&lt;br /&gt;
&lt;br /&gt;
== Using the Live CD ==&lt;br /&gt;
&lt;br /&gt;
There is a [[LiveCD]] available, but it dates back to 2008. It is still an easy way to get a first glimpse of Paparazzi however without installing anything.&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]] [[Category:User_Documentation]] [[Category:Installation]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Module/Airspeed_ETS&amp;diff=25223</id>
		<title>Module/Airspeed ETS</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Module/Airspeed_ETS&amp;diff=25223"/>
		<updated>2020-12-31T14:43:43Z</updated>

		<summary type="html">&lt;p&gt;Openuas: unintended edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
[[Image:Ets_airspeed_v3.jpg|thumb|right|Eagletree Airspeed v3]]&lt;br /&gt;
&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Modules&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The EagleTree Airspeed Sensor is a low cost module and comes with a good [http://en.wikipedia.org/wiki/Pitot_tube pitot tube] (Prandtl style, pitot-static tube) that includes static and dynamic ports. It has an I²C interface that connects directly to the Autopilot I²C port.&lt;br /&gt;
&lt;br /&gt;
NOTE: the sensor has two operating modes which determine what value is sent to the autopilot. In the default mode the pressure diference between the 2 ends of the pitot is sent. Supposedly this could be used to calculate airspeed but in reality temperature must also be taken into account. The rest of this page assumes that a temperature reading is not needed and the usefullness is in question. Do not use it for any serious stuff.&amp;lt;BR&amp;gt;&lt;br /&gt;
In the other mode, called &amp;quot;third party mode&amp;quot;, the actual speed value is sent as shown in the sensor. The sensor is said by the manufacturer to take temperature into account to arrive at this value so this should be used as the correct speed. Unfortunately the Paparazzi code does not work in this mode and additional hardware (an EagleTree elogger) is needed to put the sensor in this mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||Module name||sensors/airspeed_ets&lt;br /&gt;
|-&lt;br /&gt;
|Sensor type&lt;br /&gt;
|air speed&lt;br /&gt;
|-&lt;br /&gt;
|Range&lt;br /&gt;
|4m/s .. 150m/s&lt;br /&gt;
|-&lt;br /&gt;
|Resolution&lt;br /&gt;
|0.3m/s&lt;br /&gt;
|-&lt;br /&gt;
|Refresh rate&lt;br /&gt;
|10Hz&lt;br /&gt;
|-&lt;br /&gt;
|I2C address&lt;br /&gt;
|0xEA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[http://www.eagletreesystems.com/Support/manuals/airspeed-v3.pdf Product data sheet]&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The sensor can directly be connected to an I2C port of and autopilot. The + supply voltage can be between 3V and 16V. &lt;br /&gt;
&lt;br /&gt;
When you buy the airspeed sensor it is set to operate in the default mode. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Caution!'''&amp;lt;/span&amp;gt; Make sure you did not set it somehow to 3rd party mode.&lt;br /&gt;
&lt;br /&gt;
== Wiring ==&lt;br /&gt;
&lt;br /&gt;
The ETS Airspeed sensor has an I2C cable with the following layout:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||'''Tiny/TWOG I2C pin'''||'''Autopilot I2C'''||'''ETS Airspeed wire colour'''&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|white&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
| +5V&lt;br /&gt;
|red&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
| +3.3V&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|SDA&lt;br /&gt;
|yellow&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|SCL&lt;br /&gt;
|brown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Please refer to your boards documentation to find out the correct pinout on your board (which cable to connect to which pin). &lt;br /&gt;
As an example the correct pinout for the TWOG v1.0 and Tiny has been given in the table above.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
'''Please refer to the generated docs for the exact configuration options of the version you are using!'''&lt;br /&gt;
http://docs.paparazziuav.org/latest/module__airspeed_ets.html&lt;br /&gt;
&lt;br /&gt;
To use it load the ''airspeed_ets'' module:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot; /&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
For versions older than v5.8&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;For versions older than v5.8, also define the used I2C device:&lt;br /&gt;
Depending on your board and the I2C interface you are using, you may need to&lt;br /&gt;
enable I2CX, where X is 0,1,2,etc., if you are not using it already:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;firmware&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C0&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C0 --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C1&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C1 --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C2&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C2 --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C3&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C3 --&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
You can also set some '''optional parameters to change the default configuration'''. &lt;br /&gt;
For example to use I2C1 instead of I2C0, a scale of 1.44 (default is 1.8) and offset of 50 (default is 0) is needed:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Applies if another I2C interface than IC20 is used --&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;AIRSPEED_ETS_SCALE&amp;quot;   value=&amp;quot;1.44&amp;quot;/&amp;gt; &lt;br /&gt;
      &amp;lt;define name=&amp;quot;AIRSPEED_ETS_OFFSET&amp;quot;  value=&amp;quot;50&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;AIRSPEED_ETS_I2C_DEV&amp;quot; value=&amp;quot;i2c1&amp;quot;/&amp;gt; &lt;br /&gt;
    &amp;lt;/load&amp;gt;&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Usage as sensor for speed control ==&lt;br /&gt;
&lt;br /&gt;
To use the sensor to control the speed of your aircraft add the aggressive climb flag, define which I2C device you are enabling and enable airspeed control:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;twog_1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AGR_CLIMB&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_AIRSPEED&amp;quot;/&amp;gt; &amp;lt;!-- Use the airspeed sensor in the control loop --&amp;gt;&lt;br /&gt;
  &amp;lt;/target&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Airframe configuration ===&lt;br /&gt;
 &lt;br /&gt;
Now to use real airspeed values for adjusting your aircrafts autopilot behavior there are several way to accomplish this. A simple classic way is to add the following to the end of the &amp;quot;VERTICAL CONTROL&amp;quot; section of your airframe file:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;VERTICAL_CONTROL&amp;quot; prefix=&amp;quot;V_CTL_&amp;quot;&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;!-- auto airspeed and altitude inner loop (for airspeed sensor) --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_AIRSPEED_SETPOINT&amp;quot; value=&amp;quot;13.0&amp;quot;  unit=&amp;quot;m/s&amp;quot; /&amp;gt; &amp;lt;!-- SETPOINT values may need to be adjusted to suit your aircraft --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_AIRSPEED_PGAIN&amp;quot;    value=&amp;quot;0.060&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_AIRSPEED_IGAIN&amp;quot;    value=&amp;quot;0.050&amp;quot; /&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_GROUNDSPEED_SETPOINT&amp;quot; value=&amp;quot;7.0&amp;quot;  unit=&amp;quot;m/s&amp;quot; /&amp;gt; &amp;lt;!-- SETPOINT values may need to be adjusted to suit your aircraft --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_GROUNDSPEED_PGAIN&amp;quot;    value=&amp;quot;0.75&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_GROUNDSPEED_IGAIN&amp;quot;    value=&amp;quot;0.25&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
  &lt;br /&gt;
Note that the SETPOINT values may need to be adjusted to suit your aircraft.&lt;br /&gt;
&lt;br /&gt;
Note that depending on whether you set the AIRSPEED setpoint or the GROUNDSPEED setpoint higher, either constant airspeed or constant groundspeed, respectively, will be the goal of the controller.&lt;br /&gt;
&lt;br /&gt;
See paparazzi/conf/airframes/easystar_ets_example.xml for an example airframe configuration.&lt;br /&gt;
&lt;br /&gt;
Better even is to start using ETECS, '''E'''nhanced '''T'''otal '''E'''nergy '''C'''ontrol '''S'''ystem&lt;br /&gt;
&lt;br /&gt;
Take a look at See paparazzi/conf/airframes/MentorEnergy.xml for an example airframe configuration.&lt;br /&gt;
&lt;br /&gt;
=== Debugging and logging the airspeed values ===&lt;br /&gt;
&lt;br /&gt;
To debug or log the raw values from the ETS airspeed sensor define SENSOR_SYNC_SEND in your airframe file to send the message AIRSPEED_ETS on every sensor reading. &lt;br /&gt;
Note that defining this sends the AIRSPEED_ETS message at the sensor read rate as defined in conf/modules/airspeed_ets.xml. &lt;br /&gt;
This does not have any bearing on the AIRSPEED message (if both SENSOR_SYNC_SEND and USE_AIRSPEED are defined, then both messages are sent). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Caution!'''&amp;lt;/span&amp;gt; ''Please note: if you are using the master branch and have merged commits on or later than July 16, 2013, please replace SENSOR_SYNC_SEND with AIRSPEED_ETS_SYNC_SEND''&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;SENSOR_SYNC_SEND&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/load&amp;gt;&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The general airspeed can be displayed in the Messages tool by adding the AIRSPEED message to the telemetry file as follows:&lt;br /&gt;
{{Box Code|conf/telemetry/default.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;process name=&amp;quot;Ap&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;mode name=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;AIRSPEED&amp;quot; period=&amp;quot;1.0&amp;quot;/&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The AIRSPEED_ETS message does NOT need to be added to the telemetry configuration since it is sent directly by the module if SENSOR_SYNC_SEND is defined.&lt;br /&gt;
&lt;br /&gt;
=== NOTES ===&lt;br /&gt;
# In the GCS, the strip displays ground speed and '''not''' airspeed by default. In order to display airspeed, drag-and-drop the airspeed message field from the Messages tool onto the 2D map of the GCS. &lt;br /&gt;
# The telemetry name AIRSPEED&amp;quot;  should actually be called SPEED and contains Groundspeed and airspeed return values.&lt;br /&gt;
&lt;br /&gt;
== Measurement only ==&lt;br /&gt;
&lt;br /&gt;
To use the  sensor for airspeed measurement is also possible. This Measurement only mode does thus not imput to the control loops to have effect to the aircraft behaviour.&lt;br /&gt;
&lt;br /&gt;
To see the sensors data in the log file set the SENSOR_SYNC_SEND in your airframe file. Every time new data is available it will be sent directly.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;SENSOR_SYNC_SEND&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/load&amp;gt;&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Caution!'''&amp;lt;/span&amp;gt; ''Please note: if you are using the master branch and have merged commits on or later than July 16, 2013, please replace SENSOR_SYNC_SEND with AIRSPEED_ETS_SYNC_SEND''&lt;br /&gt;
&lt;br /&gt;
===Result message===&lt;br /&gt;
&lt;br /&gt;
The raw data (adc), estimated offset at init time (offset) and the converted result (scaled) is written to the log file.&lt;br /&gt;
{{Box Code|conf/messages.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;message name=&amp;quot;AIRSPEED_ETS&amp;quot; id=&amp;quot;57&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;field name=&amp;quot;adc&amp;quot;    type=&amp;quot;uint16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;field name=&amp;quot;offset&amp;quot; type=&amp;quot;uint16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;field name=&amp;quot;scaled&amp;quot; type=&amp;quot;float&amp;quot;  /&amp;gt;&lt;br /&gt;
 &amp;lt;/message&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample log file lines&lt;br /&gt;
 149.529 123 AIRSPEED_ETS 1626 1606 8.024844&lt;br /&gt;
 149.633 123 AIRSPEED_ETS 1626 1606 8.024844&lt;br /&gt;
 149.730 123 AIRSPEED_ETS 1627 1606 7.942226&lt;br /&gt;
 149.841 123 AIRSPEED_ETS 1628 1606 7.942226&lt;br /&gt;
&lt;br /&gt;
=Issues= &lt;br /&gt;
&lt;br /&gt;
Some people report that the sensor only works after a fresh upload, not after a regular power on. Adding a AIRSPEED_ETS_START_DELAY setting could help getting it to work. For this to work need at least version 5.2 of Paparazzi.&lt;br /&gt;
&lt;br /&gt;
Add the following to your module part in your airframe XML document. Where ''value'' can be anything from 0.01 to 4seconds. Some users report that a value of 1 fixes the issue for them.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot;&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AIRSPEED_ETS_START_DELAY&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/load&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:User_Documentation]] [[Category:Modules]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Module/Airspeed_ETS&amp;diff=25222</id>
		<title>Module/Airspeed ETS</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Module/Airspeed_ETS&amp;diff=25222"/>
		<updated>2020-12-31T14:39:01Z</updated>

		<summary type="html">&lt;p&gt;Openuas: Added short explanation on how to set 3rd party mode output&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
[[Image:Ets_airspeed_v3.jpg|thumb|right|Eagletree Airspeed v3]]&lt;br /&gt;
&amp;lt;categorytree style=&amp;quot;float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;&amp;quot; mode=pages&amp;gt;Modules&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The EagleTree Airspeed Sensor is a low cost module and comes with a good [http://en.wikipedia.org/wiki/Pitot_tube pitot tube] (Prandtl style, pitot-static tube) that includes static and dynamic ports. It has an I²C interface that connects directly to the Autopilot I²C port.&lt;br /&gt;
&lt;br /&gt;
NOTE: the sensor has two operating modes which determine what value is sent to the autopilot. In the default mode the pressure diference between the 2 ends of the pitot is sent. Supposedly this could be used to calculate airspeed but in reality temperature must also be taken into account. The rest of this page assumes that a temperature reading is not needed and the usefullness is in question. Do not use it for any serious stuff.&amp;lt;BR&amp;gt;&lt;br /&gt;
In the other mode, called &amp;quot;third party mode&amp;quot;, the actual speed value is sent as shown in the sensor. The sensor is said by the manufacturer to take temperature into account to arrive at this value so this should be used as the correct speed. To put the sensor in this mode one can use the supplied jumper over the pins as described in the Eagletree Manual.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||Module name||sensors/airspeed_ets&lt;br /&gt;
|-&lt;br /&gt;
|Sensor type&lt;br /&gt;
|air speed&lt;br /&gt;
|-&lt;br /&gt;
|Range&lt;br /&gt;
|4m/s .. 150m/s&lt;br /&gt;
|-&lt;br /&gt;
|Resolution&lt;br /&gt;
|0.3m/s&lt;br /&gt;
|-&lt;br /&gt;
|Refresh rate&lt;br /&gt;
|10Hz&lt;br /&gt;
|-&lt;br /&gt;
|I2C address&lt;br /&gt;
|0xEA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[http://www.eagletreesystems.com/Support/manuals/airspeed-v3.pdf Product data sheet]&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The sensor can directly be connected to an I2C port of and autopilot. The + supply voltage can be between 3V and 16V. &lt;br /&gt;
&lt;br /&gt;
When you buy the airspeed sensor it is set to operate in the default mode. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Caution!'''&amp;lt;/span&amp;gt; Make sure you did not set it somehow to 3rd party mode.&lt;br /&gt;
&lt;br /&gt;
== Wiring ==&lt;br /&gt;
&lt;br /&gt;
The ETS Airspeed sensor has an I2C cable with the following layout:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
||'''Tiny/TWOG I2C pin'''||'''Autopilot I2C'''||'''ETS Airspeed wire colour'''&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|GND&lt;br /&gt;
|white&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
| +5V&lt;br /&gt;
|red&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
| +3.3V&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|SDA&lt;br /&gt;
|yellow&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|SCL&lt;br /&gt;
|brown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Please refer to your boards documentation to find out the correct pinout on your board (which cable to connect to which pin). &lt;br /&gt;
As an example the correct pinout for the TWOG v1.0 and Tiny has been given in the table above.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
'''Please refer to the generated docs for the exact configuration options of the version you are using!'''&lt;br /&gt;
http://docs.paparazziuav.org/latest/module__airspeed_ets.html&lt;br /&gt;
&lt;br /&gt;
To use it load the ''airspeed_ets'' module:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot; /&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:800px&amp;quot;&amp;gt;&lt;br /&gt;
For versions older than v5.8&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;For versions older than v5.8, also define the used I2C device:&lt;br /&gt;
Depending on your board and the I2C interface you are using, you may need to&lt;br /&gt;
enable I2CX, where X is 0,1,2,etc., if you are not using it already:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;firmware&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C0&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C0 --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C1&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C1 --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C2&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C2 --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_I2C3&amp;quot; /&amp;gt; &amp;lt;!-- In case you attached the ETS module to I2C3 --&amp;gt;&lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
You can also set some '''optional parameters to change the default configuration'''. &lt;br /&gt;
For example to use I2C1 instead of I2C0, a scale of 1.44 (default is 1.8) and offset of 50 (default is 0) is needed:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;!-- Applies if another I2C interface than IC20 is used --&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;AIRSPEED_ETS_SCALE&amp;quot;   value=&amp;quot;1.44&amp;quot;/&amp;gt; &lt;br /&gt;
      &amp;lt;define name=&amp;quot;AIRSPEED_ETS_OFFSET&amp;quot;  value=&amp;quot;50&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;AIRSPEED_ETS_I2C_DEV&amp;quot; value=&amp;quot;i2c1&amp;quot;/&amp;gt; &lt;br /&gt;
    &amp;lt;/load&amp;gt;&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Usage as sensor for speed control ==&lt;br /&gt;
&lt;br /&gt;
To use the sensor to control the speed of your aircraft add the aggressive climb flag, define which I2C device you are enabling and enable airspeed control:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;twog_1.0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AGR_CLIMB&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_AIRSPEED&amp;quot;/&amp;gt; &amp;lt;!-- Use the airspeed sensor in the control loop --&amp;gt;&lt;br /&gt;
  &amp;lt;/target&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Airframe configuration ===&lt;br /&gt;
 &lt;br /&gt;
Now to use real airspeed values for adjusting your aircrafts autopilot behavior there are several way to accomplish this. A simple classic way is to add the following to the end of the &amp;quot;VERTICAL CONTROL&amp;quot; section of your airframe file:&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;VERTICAL_CONTROL&amp;quot; prefix=&amp;quot;V_CTL_&amp;quot;&amp;gt;&lt;br /&gt;
    ....&lt;br /&gt;
    &amp;lt;!-- auto airspeed and altitude inner loop (for airspeed sensor) --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_AIRSPEED_SETPOINT&amp;quot; value=&amp;quot;13.0&amp;quot;  unit=&amp;quot;m/s&amp;quot; /&amp;gt; &amp;lt;!-- SETPOINT values may need to be adjusted to suit your aircraft --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_AIRSPEED_PGAIN&amp;quot;    value=&amp;quot;0.060&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_AIRSPEED_IGAIN&amp;quot;    value=&amp;quot;0.050&amp;quot; /&amp;gt; &lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_GROUNDSPEED_SETPOINT&amp;quot; value=&amp;quot;7.0&amp;quot;  unit=&amp;quot;m/s&amp;quot; /&amp;gt; &amp;lt;!-- SETPOINT values may need to be adjusted to suit your aircraft --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_GROUNDSPEED_PGAIN&amp;quot;    value=&amp;quot;0.75&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AUTO_GROUNDSPEED_IGAIN&amp;quot;    value=&amp;quot;0.25&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
  &lt;br /&gt;
Note that the SETPOINT values may need to be adjusted to suit your aircraft.&lt;br /&gt;
&lt;br /&gt;
Note that depending on whether you set the AIRSPEED setpoint or the GROUNDSPEED setpoint higher, either constant airspeed or constant groundspeed, respectively, will be the goal of the controller.&lt;br /&gt;
&lt;br /&gt;
See paparazzi/conf/airframes/easystar_ets_example.xml for an example airframe configuration.&lt;br /&gt;
&lt;br /&gt;
Better even is to start using ETECS, '''E'''nhanced '''T'''otal '''E'''nergy '''C'''ontrol '''S'''ystem&lt;br /&gt;
&lt;br /&gt;
Take a look at See paparazzi/conf/airframes/MentorEnergy.xml for an example airframe configuration.&lt;br /&gt;
&lt;br /&gt;
=== Debugging and logging the airspeed values ===&lt;br /&gt;
&lt;br /&gt;
To debug or log the raw values from the ETS airspeed sensor define SENSOR_SYNC_SEND in your airframe file to send the message AIRSPEED_ETS on every sensor reading. &lt;br /&gt;
Note that defining this sends the AIRSPEED_ETS message at the sensor read rate as defined in conf/modules/airspeed_ets.xml. &lt;br /&gt;
This does not have any bearing on the AIRSPEED message (if both SENSOR_SYNC_SEND and USE_AIRSPEED are defined, then both messages are sent). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Caution!'''&amp;lt;/span&amp;gt; ''Please note: if you are using the master branch and have merged commits on or later than July 16, 2013, please replace SENSOR_SYNC_SEND with AIRSPEED_ETS_SYNC_SEND''&lt;br /&gt;
&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;SENSOR_SYNC_SEND&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/load&amp;gt;&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The general airspeed can be displayed in the Messages tool by adding the AIRSPEED message to the telemetry file as follows:&lt;br /&gt;
{{Box Code|conf/telemetry/default.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;process name=&amp;quot;Ap&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;mode name=&amp;quot;default&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;AIRSPEED&amp;quot; period=&amp;quot;1.0&amp;quot;/&amp;gt;&lt;br /&gt;
      ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The AIRSPEED_ETS message does NOT need to be added to the telemetry configuration since it is sent directly by the module if SENSOR_SYNC_SEND is defined.&lt;br /&gt;
&lt;br /&gt;
=== NOTES ===&lt;br /&gt;
# In the GCS, the strip displays ground speed and '''not''' airspeed by default. In order to display airspeed, drag-and-drop the airspeed message field from the Messages tool onto the 2D map of the GCS. &lt;br /&gt;
# The telemetry name AIRSPEED&amp;quot;  should actually be called SPEED and contains Groundspeed and airspeed return values.&lt;br /&gt;
&lt;br /&gt;
== Measurement only ==&lt;br /&gt;
&lt;br /&gt;
To use the  sensor for airspeed measurement is also possible. This Measurement only mode does thus not imput to the control loops to have effect to the aircraft behaviour.&lt;br /&gt;
&lt;br /&gt;
To see the sensors data in the log file set the SENSOR_SYNC_SEND in your airframe file. Every time new data is available it will be sent directly.&lt;br /&gt;
{{Box Code|conf/airframes/myplane.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;modules&amp;gt;&lt;br /&gt;
    &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;SENSOR_SYNC_SEND&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/load&amp;gt;&lt;br /&gt;
  &amp;lt;/modules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''Caution!'''&amp;lt;/span&amp;gt; ''Please note: if you are using the master branch and have merged commits on or later than July 16, 2013, please replace SENSOR_SYNC_SEND with AIRSPEED_ETS_SYNC_SEND''&lt;br /&gt;
&lt;br /&gt;
===Result message===&lt;br /&gt;
&lt;br /&gt;
The raw data (adc), estimated offset at init time (offset) and the converted result (scaled) is written to the log file.&lt;br /&gt;
{{Box Code|conf/messages.xml|&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;message name=&amp;quot;AIRSPEED_ETS&amp;quot; id=&amp;quot;57&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;field name=&amp;quot;adc&amp;quot;    type=&amp;quot;uint16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;field name=&amp;quot;offset&amp;quot; type=&amp;quot;uint16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;field name=&amp;quot;scaled&amp;quot; type=&amp;quot;float&amp;quot;  /&amp;gt;&lt;br /&gt;
 &amp;lt;/message&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sample log file lines&lt;br /&gt;
 149.529 123 AIRSPEED_ETS 1626 1606 8.024844&lt;br /&gt;
 149.633 123 AIRSPEED_ETS 1626 1606 8.024844&lt;br /&gt;
 149.730 123 AIRSPEED_ETS 1627 1606 7.942226&lt;br /&gt;
 149.841 123 AIRSPEED_ETS 1628 1606 7.942226&lt;br /&gt;
&lt;br /&gt;
=Issues= &lt;br /&gt;
&lt;br /&gt;
Some people report that the sensor only works after a fresh upload, not after a regular power on. Adding a AIRSPEED_ETS_START_DELAY setting could help getting it to work. For this to work need at least version 5.2 of Paparazzi.&lt;br /&gt;
&lt;br /&gt;
Add the following to your module part in your airframe XML document. Where ''value'' can be anything from 0.01 to 4seconds. Some users report that a value of 1 fixes the issue for them.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;load name=&amp;quot;airspeed_ets.xml&amp;quot;&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
   ...&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AIRSPEED_ETS_START_DELAY&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/load&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:User_Documentation]] [[Category:Modules]]&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25220</id>
		<title>Multiple Parrot Drones as Swarm via WiFi Router</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25220"/>
		<updated>2020-11-18T10:19:30Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Multiple Parrot Drones as Swarm via WiFi Router=&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
&lt;br /&gt;
If you are eager to try and fly multiple Bebop or Discos at the same time and communicate to each-other, this is the page to read hot  to get that to work&lt;br /&gt;
&lt;br /&gt;
=What your need=&lt;br /&gt;
&lt;br /&gt;
* 2x Bebop&lt;br /&gt;
* 1x Router&lt;br /&gt;
* Your Fieldlaptop&lt;br /&gt;
&lt;br /&gt;
=Network=&lt;br /&gt;
&lt;br /&gt;
First all your Bebops need to be configured. Repeat for all your Bebops&lt;br /&gt;
&lt;br /&gt;
There is a configuration to make. Here are some examples as a start:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed dhcp&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey none none&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or if you have WPA2 and  fixed IP's and do not have set the MAC of your Bebop in your DHCP for a static lease. IP is an example, your router could be on a different subnet.&lt;br /&gt;
Ofcourse change the YOURROUTERSSID and YOURKEY to the SSID of your router end the password of your network.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed 192.168.1.44&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey wpa2 YOURKEY&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=IVY Bus=&lt;br /&gt;
&lt;br /&gt;
 ~/paparazzi/sw/ground_segment/tmtc/link -udp -udp_broadcast&lt;br /&gt;
&lt;br /&gt;
=Airframe=&lt;br /&gt;
&lt;br /&gt;
In Paparazzi-center make four (4x) an airframe configuration, you can use the same airframe file for all since AC_ID makes the difference&lt;br /&gt;
&lt;br /&gt;
To be able to cross-communicate via UDP a additional setting to the Bebop airframe file needs to be added:&lt;br /&gt;
&lt;br /&gt;
If your router has e.g. IP 192.168.209.1 then add this to your airframe in the target section:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;HOST&amp;quot; value=&amp;quot;192.168.209.$(AC_ID)&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;MODEM_HOST&amp;quot; value=&amp;quot;192.168.209.255&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;MODEM_BROADCAST&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the IP number according to your setup&lt;br /&gt;
&lt;br /&gt;
=Tips=&lt;br /&gt;
&lt;br /&gt;
* To make things manageable, one could also resort to local name resolving where the last part name of the device is the  aircraft ID.&lt;br /&gt;
* Or set the last part of a static IP number to the Aircraft ID of your airframes&lt;br /&gt;
&lt;br /&gt;
=TIPS=&lt;br /&gt;
&lt;br /&gt;
Press and hold the Powerbutton for 10seconds in a row until the light turns red, that is a factory reset.&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Crazyflie_2.0&amp;diff=25218</id>
		<title>Crazyflie 2.0</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Crazyflie_2.0&amp;diff=25218"/>
		<updated>2020-11-05T15:41:59Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Crazyflie2_01.jpg|Crazyflie 2.1&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
The Crazyflie 2.1 is nice little open source quadcopter. Yes it runs Paparazzi too. We had some testflights but we need more testflights, indeed. &lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
&lt;br /&gt;
* Easy to assemble and no soldering required&lt;br /&gt;
* WIP: Wireless firmware updates (not yet)&lt;br /&gt;
* On-board charging via standard uUSB&lt;br /&gt;
* Dual-MCU architecture with dedicated radio/power management SoC for advanced applications&lt;br /&gt;
* All the Real-time logging, graphing and variable setting as one is used to with Paparazzi&lt;br /&gt;
&lt;br /&gt;
=Specifications=&lt;br /&gt;
&lt;br /&gt;
* Weight: 27g&lt;br /&gt;
* Size:  92x92x29mm&lt;br /&gt;
* Radio: BL 20 dBm nRF5182&lt;br /&gt;
* Bluetooth LE support&lt;br /&gt;
&lt;br /&gt;
=Microcontrollers=&lt;br /&gt;
&lt;br /&gt;
* STM32F405 main application MCU (Cortex-M4, 168MHz, 192kb SRAM, 1Mb flash)&lt;br /&gt;
* nRF51822 radio and power management MCU (Cortex-M0, 32Mhz, 16kb SRAM, 128kb flash)&lt;br /&gt;
* uUSB connector&lt;br /&gt;
* On-board LiPo charger&lt;br /&gt;
* Full speed USB device interface&lt;br /&gt;
* 8KB EEPROM&lt;br /&gt;
&lt;br /&gt;
=IMU=&lt;br /&gt;
&lt;br /&gt;
* 3 axis gyro (MPU-9250)&lt;br /&gt;
* 3 axis accelerometer (MPU-9250)&lt;br /&gt;
* 3 axis magnetometer (MPU-9250)&lt;br /&gt;
* High precision pressure sensor (LPS25H)&lt;br /&gt;
&lt;br /&gt;
=Flight specifications=&lt;br /&gt;
&lt;br /&gt;
* Maximum payload weight: ~10 g&lt;br /&gt;
&lt;br /&gt;
=Motors=&lt;br /&gt;
&lt;br /&gt;
There are four 7x16mm Coreless DC-motors icw default props that give a maximum take-off weight of ~40g&lt;br /&gt;
&lt;br /&gt;
==Mechanical specification==&lt;br /&gt;
&lt;br /&gt;
* Diameter: 7.0 mm&lt;br /&gt;
* Length: 16.0 mm&lt;br /&gt;
* Shaft length: 3.5 mm&lt;br /&gt;
* Shaft diameter: 0.8 mm&lt;br /&gt;
* Weight: 2.7 g&lt;br /&gt;
* Wire length: 32.0 mm&lt;br /&gt;
&lt;br /&gt;
==Electrical specification==&lt;br /&gt;
&lt;br /&gt;
* Kv: 14 000 rpm/V&lt;br /&gt;
* Rated voltage: 4.2 V&lt;br /&gt;
* Rated current: 1000mA&lt;br /&gt;
&lt;br /&gt;
=Expansion connectors=&lt;br /&gt;
&lt;br /&gt;
* VCC (3.0V, max 100mA)&lt;br /&gt;
* GND&lt;br /&gt;
* VCOM (unregulated VBAT or VUSB, max 1A)&lt;br /&gt;
* VUSB (both for input and output)&lt;br /&gt;
* I2C (400kHz)&lt;br /&gt;
* SPI&lt;br /&gt;
* 2 x UART&lt;br /&gt;
* 4 x GPIO/CS for SPI&lt;br /&gt;
* 1-wire bus for expansion identification&lt;br /&gt;
* 2 x GPIO connected to nRF51&lt;br /&gt;
&lt;br /&gt;
=Airframe=&lt;br /&gt;
&lt;br /&gt;
=Flashing=&lt;br /&gt;
&lt;br /&gt;
==Flashing via DFU==&lt;br /&gt;
&lt;br /&gt;
Howto set the Crazyflie in the DFU update mode:&lt;br /&gt;
&lt;br /&gt;
# Connect the USB cable to your Crazyflie 2.1 but not to your PC just yet...&lt;br /&gt;
# Unplug the Crazyflie 2.1 battery if it is plugged in&lt;br /&gt;
# Keep pressing the on/off button while inserting the USB cable in your PC&lt;br /&gt;
# Hold down the button for about 5 seconds until if starts to blink faster second blink rate (1Hz), then release the on/off button&lt;br /&gt;
# The Crazyflie 2.1 can now receive your new firmware... Click &amp;quot;Upload&amp;quot; in Paparazzi Centre&lt;br /&gt;
&lt;br /&gt;
==Flashing via BlackMagicProbe==&lt;br /&gt;
&lt;br /&gt;
For this you need a BMP and a 10 pin adaptor board.&lt;br /&gt;
&lt;br /&gt;
==Over Air==&lt;br /&gt;
&lt;br /&gt;
Over the air updates via the nordic chip are not yet possible, feel free to help us out and make it happen.&lt;br /&gt;
&lt;br /&gt;
=Debugging=&lt;br /&gt;
&lt;br /&gt;
With the BlackMagicProbe JTAG adapter development can be smoother than without. A worthy investment if you value speed development.&lt;br /&gt;
&lt;br /&gt;
=Extra=&lt;br /&gt;
&lt;br /&gt;
==Add GNSS==&lt;br /&gt;
&lt;br /&gt;
A light GPS can be added to e.g. the I2C bus, for example the uBlox CAM-M8Q&lt;br /&gt;
&lt;br /&gt;
==Add Magnetometer==&lt;br /&gt;
&lt;br /&gt;
The previous iteration had an magnetometer, well now you best add one over I2C bus&lt;br /&gt;
&lt;br /&gt;
==Wifi==&lt;br /&gt;
&lt;br /&gt;
One can add one of those [https://github.com/paparazzi/esp8266_udp_firmware small EP8266 based Wifi modules described here] to have telemetry via WiFi in a simple way&lt;br /&gt;
&lt;br /&gt;
=Links=&lt;br /&gt;
&lt;br /&gt;
Links with al sorts of no PPRZ information that my come in handy:&lt;br /&gt;
&lt;br /&gt;
* https://wiki.bitcraze.io/projects:crazyflie2:index&lt;br /&gt;
* https://github.com/bitcraze/crazyflie-firmware/tree/crazyflie2&lt;br /&gt;
* https://wiki.bitcraze.io/projects:crazyflie:hardware:explained&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25175</id>
		<title>Multiple Parrot Drones as Swarm via WiFi Router</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25175"/>
		<updated>2020-09-25T14:02:37Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Multiple Parrot Drones as Swarm via WiFi Router=&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
&lt;br /&gt;
If you are eager to try and fly multiple Bebop or Discos at the same time and communicate to each-other, this is the page to read hot  to get that to work&lt;br /&gt;
&lt;br /&gt;
=What your need=&lt;br /&gt;
&lt;br /&gt;
* 2x Bebop&lt;br /&gt;
* 1x Router&lt;br /&gt;
* Your Fieldlaptop&lt;br /&gt;
&lt;br /&gt;
=Network=&lt;br /&gt;
&lt;br /&gt;
First all your Bebops need to be configured. Repeat for all your Bebops&lt;br /&gt;
&lt;br /&gt;
There is a configuration to make. Here are some examples as a start:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed dhcp&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey none none&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or if you have WPA2 and  fixed IP's and do not have set the MAC of your Bebop in your DHCP for a static lease. IP is an example, your router could be on a different subnet.&lt;br /&gt;
Ofcourse change the YOURROUTERSSID and YOURKEY to the SSID of your router end the password of your network.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed 192.168.1.44&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey wpa2 YOURKEY&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=IVY Bus=&lt;br /&gt;
&lt;br /&gt;
 ~/paparazzi/sw/ground_segment/tmtc/link -udp -udp_broadcast&lt;br /&gt;
&lt;br /&gt;
=Airframe=&lt;br /&gt;
&lt;br /&gt;
To be able to cross-communicate some changes to the Bebop airframe need to be made:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In paparazzi center make 4x a airframe config, you can uses same airframe file for all since AC_ID make the differcder&lt;br /&gt;
add to your airframe:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;HOST&amp;quot; value=&amp;quot;192.168.1.$(AC_ID)&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;MODEM_HOST&amp;quot; value=&amp;quot;192.168.1.255&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;MODEM_BROADCAST&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Tips=&lt;br /&gt;
&lt;br /&gt;
* To make things manageable, one could also resort to local name resolving where the last part name of the device is the  aircraft ID.&lt;br /&gt;
* Or set the last part of a static IP number to the Aircraft ID of your airframes&lt;br /&gt;
&lt;br /&gt;
=TIPS=&lt;br /&gt;
&lt;br /&gt;
Press and hold the Powerbutton for 10seconds in a row until the light turns red, that is a factory reset.&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25174</id>
		<title>Multiple Parrot Drones as Swarm via WiFi Router</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25174"/>
		<updated>2020-09-25T13:58:43Z</updated>

		<summary type="html">&lt;p&gt;Openuas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Multiple Parrot Drones as Swarm via WiFi Router=&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
&lt;br /&gt;
If you are eager to try and fly multiple Bebop or Discos at the same time and communicate to each-other, this is the page to read hot  to get that to work&lt;br /&gt;
&lt;br /&gt;
=What your need=&lt;br /&gt;
&lt;br /&gt;
* 2x Bebop&lt;br /&gt;
* 1x Router&lt;br /&gt;
* Your Fieldlaptop&lt;br /&gt;
&lt;br /&gt;
=Network=&lt;br /&gt;
&lt;br /&gt;
First all your Bebops need to be configured. Repeat for all your Bebops&lt;br /&gt;
&lt;br /&gt;
There is a configuration to make. Here are some examples as a start:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed dhcp&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey none none&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or if you have WPA2 and  fixed IP's and do not have set the MAC of your Bebop in your DHCP for a static lease. IP is an example, your router could be on a different subnet.&lt;br /&gt;
Ofcourse change the YOURROUTERSSID and YOURKEY to the SSID of your router end the password of your network.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed 192.168.1.44&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey wpa2 YOURKEY&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Airframe=&lt;br /&gt;
&lt;br /&gt;
To be able to cross-communicate some changes to the Bebop airframe need to be made:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In paparazzi center make 4x a airframe config, you can uses same airframe file for all since AC_ID make the differcder&lt;br /&gt;
add to your airframe:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;HOST&amp;quot; value=&amp;quot;192.168.1.$(AC_ID)&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;MODEM_HOST&amp;quot; value=&amp;quot;192.168.1.255&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;configure name=&amp;quot;MODEM_BROADCAST&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Tips=&lt;br /&gt;
&lt;br /&gt;
* To make things manageable, one could also resort to local name resolving where the last part name of the device is the  aircraft ID.&lt;br /&gt;
* Or set the last part of a static IP number to the Aircraft ID of your airframes&lt;br /&gt;
&lt;br /&gt;
=TIPS=&lt;br /&gt;
&lt;br /&gt;
Press and hold the Powerbutton for 10seconds in a row until the light turns red, that is a factory reset.&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=OSAM_Tuning_Procedure&amp;diff=25134</id>
		<title>OSAM Tuning Procedure</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=OSAM_Tuning_Procedure&amp;diff=25134"/>
		<updated>2020-09-19T12:33:13Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Step3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
==Variable Explanation==&lt;br /&gt;
&lt;br /&gt;
===HORIZ_SENSOR_TILTED===&lt;br /&gt;
&lt;br /&gt;
This Describes whether the IR sensor is titled at a 90 degree angle or 45 degree angle. This meaning if the nose of the plane is facing north when the sensor is at 45 degrees (equals a 1 in the airframe config) the thermopile's do not point north south east and west but rather at a 45 degree offset from those directions. This is the recommended way to configure the IR sensors.&lt;br /&gt;
&lt;br /&gt;
===IR_360_Lateral_Correction &amp;amp; IR_360_Longitudinal_Correction===&lt;br /&gt;
&lt;br /&gt;
Coefficient that corrects the outputs of the IR sensor and is proportional meaning that it is simply multiplied by the sensor reading.&lt;br /&gt;
Longitudinal is the pitch and Lateral is the roll.&lt;br /&gt;
&lt;br /&gt;
===ADC_ROLL_NEUTRAL &amp;amp; ADC_PITCH_NEUTRAL &amp;amp; ADC_TOP_NEUTRAL===&lt;br /&gt;
&lt;br /&gt;
These are the readings from the sensor when it is in a neutral state. This is also characterized by having no temperature difference across each pair of sensors.&lt;br /&gt;
&lt;br /&gt;
===PITCH_NEUTRAL_DEFAULT &amp;amp; ROLL_NEUTRAL_DEFAULT===&lt;br /&gt;
&lt;br /&gt;
The angles which are output when the plane is in the “flat” position. This flat is also known as the angles necessary to make the plane fly flat and straight.&lt;br /&gt;
&lt;br /&gt;
===ROLL_PGAIN &amp;amp; PITCH_PGAIN===&lt;br /&gt;
&lt;br /&gt;
This is the proportional variable in the pitch and roll control loops. &lt;br /&gt;
&lt;br /&gt;
===ROLL_MAX_SETPOINT &amp;amp; PITCH_MAX_SETPOINT &amp;amp; PITCH_MIN_SETPOINT===&lt;br /&gt;
&lt;br /&gt;
These set the maximum and minimum of the roll and pitch. This means that the plane will not be able to roll or pitch past the maximum or minimum angle.&lt;br /&gt;
&lt;br /&gt;
===ALTITIUDE_PGAIN &amp;amp; COURSE_PGAIN===&lt;br /&gt;
&lt;br /&gt;
These are the proportional control variables of the altitude and course loops.&lt;br /&gt;
&lt;br /&gt;
===MAX_ROLL &amp;amp; MAX_PITCH===&lt;br /&gt;
&lt;br /&gt;
These are set in the AUTO1 section of the airframe file and are the maximum allowed pitch and roll in auto1 mode.. These are by default in radians.&lt;br /&gt;
&lt;br /&gt;
===ROLL_MAX_SETPOINT &amp;amp; PITCH_MAX_SETPOINT &amp;amp; PITCH_MIN_SETPOINT===&lt;br /&gt;
&lt;br /&gt;
These are set in the HORIZONTAL CONTROL section of the airframe file and are the maximum and minimum allowed pitch and roll in auto2 mode.. These are by default in radians.&lt;br /&gt;
&lt;br /&gt;
==Tuning Procedure==&lt;br /&gt;
&lt;br /&gt;
===Step 1===&lt;br /&gt;
&lt;br /&gt;
Align measured and real angles from the IR sensors. The first step is to take the IR sensors and the fully encase them in foam. Then you must change the ADC neutrals to zero in the airframe file. Once this has been done the user must flash the board then get a connection to the ground station computer and the GUI. Once this has been completed launch the messages agent and view the tab called IR, record the raw sensor values shown. After that disconnect the board and power it down. Finally change the ADC neutrals in the airframe file to the recorded values and re-flash the board. &lt;br /&gt;
&lt;br /&gt;
===Step 2===&lt;br /&gt;
&lt;br /&gt;
First you must set the ROLL and PITCH neutrals to zero in the airframe file and then flash the board. Next take the airframe outside with all the necessary &lt;br /&gt;
electronics inside that are needed to fly autonomously. The area which should be used to tune is one without any buildings or large man made objects within 500-1000 ft. This will make the variables far more accurate and save time due to lack of tuning needed in the air. Now place the plane “flat” on a surface so that all the sensors have clear views (aka no man made objects), the vertical sensors should be able to see both the ground and sky. Next connect the plane to the ground station GUI and record the attitude values, once these have been found power down and add the values recorded into the ROLL and PITCH neutrals in the airframe file.&lt;br /&gt;
&lt;br /&gt;
Next, place the pane at an angle of the users choosing and measure the real angle. Remember the IR sensors must have unobstructed views. Now connect the airplane to the GUI and look to see if the reported angle in the messages agent matches the recorded real angle. If these do no match the user must change the 360_Lateral and Longitudinal variables as well as the neutral values, remember the neutral values can only shift the readings so use those for asymmetrical errors.  The user must changes these variables until the angles match, it should be noted however that these variables are independent of each other so they should be adjusted one at a time. In addition make sure that the D gain of the Pitch loop is set to zero. &lt;br /&gt;
&lt;br /&gt;
Once the users has done this on ground stuff a couple times it may be possible to use their eye to judge angles in the sky and do all the tuning that way. Remember all of the variables can be changed in real time by utilizing the tuning.xml for the settings of the aircraft&lt;br /&gt;
&lt;br /&gt;
===Step3===&lt;br /&gt;
&lt;br /&gt;
Once the plane is at a safe height and in sight turn on the AUTO1 mode. Next look for oscillations in the roll. If there are oscillations in the roll lower the ROLL_PGAIN coefficient until these no longer exist. If there are no oscillations start to raise to coefficients until the point right before oscillations. The point of this process is to maximize the coefficient value to the point right before oscillations occur.  This is the same process that is used to tune the pitch loop except for the coefficient changed is PITCH_PGAIN. However it should be noted that the pitch is far more damped than the roll so it may harder to spot oscillations. The PITCH_PGAIN value originally was expressed in negative terms so a -10,000 would “higher” than a -6000 variable, later version of Paparazzi all gain are converted to have a positive number&lt;br /&gt;
&lt;br /&gt;
The next step is to test your roll and pitch neutrals. To do this the user must turn on auto1 mode and set the throttle to the nominal throttle value in the airframe file after this is set let go of all sticks and watch to see if the plane flies flat and straight. If this is the case then all is well but if not the user must once again tune the PITCH_ NUETRAL _DEFAULT &amp;amp; ROLL_ NUETRAL _DEFAULT values until the plane flys straight and flat. Next the user must test the maximum and minimum set points of the pitch and roll. This is done by testing in AUTO1, the user must make the plane pitch and roll to maximum and minimum amount that the RC controller allows, this is done by pushing the right stick to its maximum's. These angles however can only be recorded by looking at the plane in the air and guessing. This is not very exact but should give a good value to compare with the user written set points.  The IR_360 variables will probably have to be retuned in air during this last part due to bad sensor data on the ground.&lt;br /&gt;
&lt;br /&gt;
===Step 4===&lt;br /&gt;
&lt;br /&gt;
The final step is to put the plane into auto2 mode and determine if the plane is flying its desired course and altitude correctly. If this is not the case the PGAIN variables of each must be changed to take out oscillations and maximize to right before oscillations. Remember to check your max angle set points to make sure your plane will not over pitch or roll causing instability.&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25125</id>
		<title>Multiple Parrot Drones as Swarm via WiFi Router</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25125"/>
		<updated>2020-09-04T17:07:09Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Prepare the Bebop */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Multiple Parrot Drones as Swarm via WiFi Router=&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
&lt;br /&gt;
If you are eager to try and fly multiple Bebop or Discos at the same time and communicate to each-other, this is the page to read hot  to get that to work&lt;br /&gt;
&lt;br /&gt;
=What your need=&lt;br /&gt;
&lt;br /&gt;
* 2x Bebop&lt;br /&gt;
* 1x Router&lt;br /&gt;
* Your Fieldlaptop&lt;br /&gt;
&lt;br /&gt;
=Network=&lt;br /&gt;
&lt;br /&gt;
First all your Bebops need to be configured. Repeat for all your Bebops&lt;br /&gt;
&lt;br /&gt;
There is a configuration to make. Here are some examples as a start:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed dhcp&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey none none&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or if you have WPA2 and  fixed IP's and do not have set the MAC of your Bebop in your DHCP for a static lease. IP is an example, your router could be on a different subnet.&lt;br /&gt;
Ofcourse change the YOURROUTERSSID and YOURKEY to the SSID of your router end the password of your network.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed 192.168.1.44&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey wpa2 YOURKEY&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Airframe=&lt;br /&gt;
&lt;br /&gt;
To be able to cross-communicate some changes to the Bebop airframe need to be made:&lt;br /&gt;
&lt;br /&gt;
HOST (AC$)&lt;br /&gt;
&lt;br /&gt;
=Tips=&lt;br /&gt;
&lt;br /&gt;
* To make things manageable, one could also resort to local name resolving where the last part name of the device is the  aircraft ID.&lt;br /&gt;
* Or set the last part of a static IP number to the Aircraft ID of your airframes&lt;br /&gt;
&lt;br /&gt;
=TIPS=&lt;br /&gt;
&lt;br /&gt;
Press and hold the Powerbutton for 10seconds in a row until the light turns red, that is a factory reset.&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25124</id>
		<title>Multiple Parrot Drones as Swarm via WiFi Router</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25124"/>
		<updated>2020-09-04T17:02:15Z</updated>

		<summary type="html">&lt;p&gt;Openuas: /* Prepare the Bebop */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Multiple Parrot Drones as Swarm via WiFi Router=&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
&lt;br /&gt;
If you are eager to try and fly multiple Bebop or Discos at the same time and communicate to each-other, this is the page to read hot  to get that to work&lt;br /&gt;
&lt;br /&gt;
=What your need=&lt;br /&gt;
&lt;br /&gt;
* 2x Bebop&lt;br /&gt;
* 1x Router&lt;br /&gt;
* Your Fieldlaptop&lt;br /&gt;
&lt;br /&gt;
=Prepare the Bebop=&lt;br /&gt;
&lt;br /&gt;
There is a configuration to make. Here are some examples as a start:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed dhcp&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey none none&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or if you have WPA2 and  fixed IP's and do not have set the MAC of your Bebop in your DHCP for a static lease. IP is an example, your router could be on a different subnet.&lt;br /&gt;
Ofcourse change the YOURROUTERSSID and YOURKEY to the SSID of your router end the password of your network.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cd ~/paparazzi/sw/tools/parrot&lt;br /&gt;
&lt;br /&gt;
./bebop.py configure_network YOURROUTERSSID managed 192.168.1.44&lt;br /&gt;
&lt;br /&gt;
./bebop.py wifikey wpa2 YOURKEY&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=TIPS=&lt;br /&gt;
&lt;br /&gt;
Press and hold the Powerbutton for 10seconds in a row until the light turns red, that is a factory reset.&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25123</id>
		<title>Multiple Parrot Drones as Swarm via WiFi Router</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25123"/>
		<updated>2020-09-04T14:57:20Z</updated>

		<summary type="html">&lt;p&gt;Openuas: kickoff page with multiple Parrot drones in one network&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Multiple Parrot Drones as Swarm via WiFi Router=&lt;br /&gt;
&lt;br /&gt;
=About=&lt;br /&gt;
&lt;br /&gt;
If you are eager to try and fly multiple Bebop or Discos at the same time and communicate to each-other, this is the page to read hot  to get that to work&lt;br /&gt;
&lt;br /&gt;
=What your need=&lt;br /&gt;
&lt;br /&gt;
* 2x Bebop&lt;br /&gt;
* 1x Router&lt;br /&gt;
* Your Fieldlaptop&lt;br /&gt;
&lt;br /&gt;
=Prepare the Bebop=&lt;br /&gt;
&lt;br /&gt;
=TIPS=&lt;br /&gt;
&lt;br /&gt;
Press and hold the Powerbutton for 10seconds in a row until the light turns red, that is a factory reset.&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25122</id>
		<title>Multiple Parrot Drones as Swarm via WiFi Router</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Multiple_Parrot_Drones_as_Swarm_via_WiFi_Router&amp;diff=25122"/>
		<updated>2020-09-04T14:27:44Z</updated>

		<summary type="html">&lt;p&gt;Openuas: Created page with &amp;quot;!Multiple Parrot Drones as Swarm via WiFi Router  !About  If you are eager to try and fly multiple Bebop or Discos at the same time and communicate to eachother.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;!Multiple Parrot Drones as Swarm via WiFi Router&lt;br /&gt;
&lt;br /&gt;
!About&lt;br /&gt;
&lt;br /&gt;
If you are eager to try and fly multiple Bebop or Discos at the same time and communicate to eachother.&lt;/div&gt;</summary>
		<author><name>Openuas</name></author>
	</entry>
</feed>