<?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=Xp31</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=Xp31"/>
	<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/wiki/Special:Contributions/Xp31"/>
	<updated>2026-04-08T10:21:34Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25279</id>
		<title>Explorer/RaspberryPi/Visualprocessing/Motionvector</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25279"/>
		<updated>2021-02-12T12:20:48Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Raspberry Pi is based on a BCM2835 System on a Chip (SoC), which provides an hardware (GPU) motion estimation block to the H264 encoder.&amp;lt;br /&amp;gt;&lt;br /&gt;
The Coarse Motion Block (CME) compares macroblock (16×16 pixels) from two consecutive frames and output a vector where the macroblock came from.&amp;lt;br /&amp;gt;&lt;br /&gt;
The vector is encoded in a single 32-bit value:&amp;lt;br /&amp;gt;&lt;br /&gt;
- the most significant 16 bits represent a Sum of Absolute Differences (SAD = quality of the estimation, the lower is the better)&amp;lt;br /&amp;gt;&lt;br /&gt;
- the others 16 bits represents (8-bit signed integer) the horizontal and vertical directions &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code below, patch &amp;quot;raspivid&amp;quot; to provide a video buffer (gray scale image) with motion vectors.&amp;lt;br /&amp;gt;&lt;br /&gt;
The new code compiled as &amp;quot;raspicv&amp;quot;, with a custom &amp;quot;cv.cpp&amp;quot; (see below), output motion vector display to /tmp/camera3 &amp;lt;br /&amp;gt;&lt;br /&gt;
The &amp;quot;cv.cpp&amp;quot; is limited to 640x480 grayscale image in this sample.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ref. Adam Heinrich thesis: An Optical Flow Odometry Sensor Based on the Raspberry Pi Computer)&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/raspberrypi/userland.git&lt;br /&gt;
 git clone https://github.com/adamheinrich/RaspiCV.git&lt;br /&gt;
&lt;br /&gt;
Path RaspiCV/src/Makefile&lt;br /&gt;
 &amp;lt; USERLAND_DIR&lt;br /&gt;
 &amp;gt; USERLAND_DIR = $(HOME)/userland&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiHelpers.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiCommonSettings.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiGPS.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/libgps_loader.c&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv` \&lt;br /&gt;
 &amp;gt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv4` \&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDFLAGS += `pkg-config --libs opencv`&lt;br /&gt;
 &amp;gt; LDFLAGS += `pkg-config --libs opencv4`&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDLIBFLAGS = -Wl, ...&lt;br /&gt;
 &amp;gt; LDLIBFLAGS = -ldl -Wl, ...&lt;br /&gt;
&lt;br /&gt;
Update RaspiCV.c&lt;br /&gt;
 cp ~/userland/host_applications/linux/apps/raspicam/RaspiVid.c ~/RaspiCV/src/RaspiCV.c&lt;br /&gt;
and patch it&lt;br /&gt;
 &amp;lt; #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 &amp;gt; #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
   #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
               if(pData-&amp;gt;pstate-&amp;gt;inlineMotionVectors)&lt;br /&gt;
               {&lt;br /&gt;
 &amp;gt;		 cv_process_imv(buffer-&amp;gt;data, buffer-&amp;gt;length, buffer-&amp;gt;pts);&lt;br /&gt;
                  bytes_written = fwrite(buffer-&amp;gt;data, 1, buffer-&amp;gt;length, pData-&amp;gt;imv_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
      if (bytes_to_write)&lt;br /&gt;
      {&lt;br /&gt;
         mmal_buffer_header_mem_lock(buffer);&lt;br /&gt;
 &amp;gt;	cv_process_img(buffer-&amp;gt;data, bytes_to_write, buffer-&amp;gt;pts);&lt;br /&gt;
         bytes_written = fwrite(buffer-&amp;gt;data, 1, bytes_to_write, pData-&amp;gt;raw_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;             cv_init(state.common_settings.width, state.common_settings.height, state.framerate, state.raw_output_fmt);&lt;br /&gt;
               int initialCapturing=state.bCapturing;&lt;br /&gt;
               while (running)&lt;br /&gt;
               {&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
      destroy_splitter_component(&amp;amp;state);&lt;br /&gt;
      destroy_camera_component(&amp;amp;state);&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt;    cv_close();&lt;br /&gt;
&lt;br /&gt;
Replace de file RaspiCV/src/cv.cpp with this&lt;br /&gt;
 #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
 #include &amp;lt;opencv2/opencv.hpp&amp;gt;&lt;br /&gt;
 #include &amp;lt;pthread.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using namespace cv;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 #define SAD_LIMIT 2000&lt;br /&gt;
 #define streamOutGstStr &amp;quot;appsrc ! shmsink socket-path=/tmp/camera3 wait-for-connection=false async=false sync=false&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 struct motion_elt_t {&lt;br /&gt;
   int8_t x;&lt;br /&gt;
   int8_t y;&lt;br /&gt;
   uint16_t sad;&lt;br /&gt;
 };&lt;br /&gt;
 static motion_elt_t *motionIn;&lt;br /&gt;
 static Mat1b gray;&lt;br /&gt;
 static int width,height,fps; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_mutex_t imv_mutex;&lt;br /&gt;
 static bool imv_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_t img_thread;&lt;br /&gt;
 static pthread_mutex_t img_mutex;&lt;br /&gt;
 static pthread_cond_t img_condv;&lt;br /&gt;
 static bool img_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static bool init_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 static void *process_thread(void *ptr)&lt;br /&gt;
 {&lt;br /&gt;
   VideoWriter strOut = VideoWriter(streamOutGstStr,0,fps/1,Size(width,height),true); &lt;br /&gt;
   Mat3b grayBGR;&lt;br /&gt;
   Mat colormap;&lt;br /&gt;
   int32_t sum_x,sum_y;&lt;br /&gt;
 &lt;br /&gt;
   int mbx = width/16;&lt;br /&gt;
   int mby = height/16;&lt;br /&gt;
   int mbxy = (8 * mbx * mby);&lt;br /&gt;
   unsigned int motionSize = ((mbx+1)*mby) * sizeof(struct motion_elt_t); &lt;br /&gt;
   motion_elt_t *motionOut = new motion_elt_t[(mbx+1)*mby];&lt;br /&gt;
 &lt;br /&gt;
   char buff[20];int lg;&lt;br /&gt;
  &lt;br /&gt;
   while (true) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     while (!img_ready) pthread_cond_wait(&amp;amp;img_condv, &amp;amp;img_mutex);&lt;br /&gt;
     cvtColor(gray, grayBGR, COLOR_GRAY2BGR);&lt;br /&gt;
     applyColorMap(grayBGR, colormap, COLORMAP_JET); &lt;br /&gt;
 &lt;br /&gt;
     img_ready=false;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex); &lt;br /&gt;
 &lt;br /&gt;
     if(imv_ready) { &lt;br /&gt;
       pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
       memcpy(motionOut ,motionIn, motionSize);&lt;br /&gt;
       imv_ready=false;&lt;br /&gt;
       pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
     }  &lt;br /&gt;
 &lt;br /&gt;
     sum_x=0;sum_y=0;&lt;br /&gt;
     for (int j=0;j&amp;lt;mby;j++) {&lt;br /&gt;
       for (int i=0;i&amp;lt;mbx;i++) { &lt;br /&gt;
         motion_elt_t *vec = motionOut + (i+(mbx+1)*j); &lt;br /&gt;
         if (vec-&amp;gt;x == 0 &amp;amp;&amp;amp; vec-&amp;gt;y == 0) continue;&lt;br /&gt;
         if (vec-&amp;gt;sad &amp;gt; SAD_LIMIT) continue;&lt;br /&gt;
 	 int x = i*16 + 8;&lt;br /&gt;
         int y = j*16 + 8;&lt;br /&gt;
         float intensity = vec-&amp;gt;sad;&lt;br /&gt;
         intensity = round(255 * intensity / SAD_LIMIT);&lt;br /&gt;
         if (intensity &amp;gt; 255) intensity = 255;&lt;br /&gt;
         uint8_t *ptr = colormap.ptr&amp;lt;uchar&amp;gt;(0);&lt;br /&gt;
         uint8_t idx = 3*(uint8_t)intensity;&lt;br /&gt;
         arrowedLine(grayBGR, Point(x+vec-&amp;gt;x, y+vec-&amp;gt;y),&lt;br /&gt;
                              Point(x, y),&lt;br /&gt;
                              Scalar(ptr[idx], ptr[idx+1], ptr[idx+2])); &lt;br /&gt;
 &lt;br /&gt;
         sum_x += (intensity * vec-&amp;gt;x);&lt;br /&gt;
         sum_y += (intensity * vec-&amp;gt;y);&lt;br /&gt;
       }&lt;br /&gt;
     } &lt;br /&gt;
 &lt;br /&gt;
     sum_x = (sum_x/mbxy);&lt;br /&gt;
     sum_y = (sum_y/mbxy);&lt;br /&gt;
     arrowedLine(grayBGR, Point(320,240),Point(320+sum_x,240+sum_y),Scalar(0,255,0),5); &lt;br /&gt;
 &lt;br /&gt;
     drawAxes(&amp;amp;grayBGR);&lt;br /&gt;
 &lt;br /&gt;
     strOut.write(grayBGR);&lt;br /&gt;
   }&lt;br /&gt;
   return((void *)0);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_init(int w, int h, int f, int fmt)&lt;br /&gt;
 {&lt;br /&gt;
 //  freopen( &amp;quot;/tmp/error.txt&amp;quot;, &amp;quot;w&amp;quot;, stderr );&lt;br /&gt;
 //  cerr &amp;lt;&amp;lt; length &amp;lt;&amp;lt; endl;&lt;br /&gt;
 //    fd &amp;lt;&amp;lt; static_cast&amp;lt;int32_t&amp;gt;(sum_x) &amp;lt;&amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
   drawAxes_init(); &lt;br /&gt;
  &lt;br /&gt;
   width=w;height=h;fps=f;&lt;br /&gt;
 &lt;br /&gt;
   gray = Mat(height, width, CV_8UC1);&lt;br /&gt;
   motionIn = new motion_elt_t[((width/16)+1) * (height/16)]; &lt;br /&gt;
 &lt;br /&gt;
   pthread_mutex_init(&amp;amp;imv_mutex, NULL);&lt;br /&gt;
 &lt;br /&gt;
   pthread_mutex_init(&amp;amp;img_mutex, NULL);&lt;br /&gt;
   pthread_cond_init(&amp;amp;img_condv, NULL);&lt;br /&gt;
 &lt;br /&gt;
   pthread_create(&amp;amp;img_thread, NULL, process_thread, (void *)0);&lt;br /&gt;
 &lt;br /&gt;
   init_ready=true;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_img(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     memcpy(gray.data, p_buffer, length);		&lt;br /&gt;
     img_ready=true;&lt;br /&gt;
     pthread_cond_signal(&amp;amp;img_condv);&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_imv(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
     memcpy(motionIn ,p_buffer, length);&lt;br /&gt;
     imv_ready=true;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_close(void)&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 cd RaspiCV/src&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Visualprocessing/Motionvector/Run]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Equipements&amp;diff=25278</id>
		<title>Explorer/RaspberryPi/Wifibroadcast/Equipements</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Equipements&amp;diff=25278"/>
		<updated>2021-02-12T08:29:23Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wifibroadcast have been checked with wifi adapters chips:&lt;br /&gt;
* Ralink RT5572&lt;br /&gt;
* Realtek RTL8812AU&lt;br /&gt;
Ground and board transciever can be mixed.&lt;br /&gt;
&lt;br /&gt;
While the RT5572 driver (rt2800lib/usb) is fully operational on the raspbian buster, the RTL8812AU driver (88XXau) need to be compiled&lt;br /&gt;
 &lt;br /&gt;
 sudo apt-get install raspberrypi-kernel-headers&lt;br /&gt;
 git clone https://github.com/aircrack-ng/rtl8812au&lt;br /&gt;
 cd rtl8812au&lt;br /&gt;
 sed -i 's/CONFIG_PLATFORM_I386_PC = y/CONFIG_PLATFORM_I386_PC = n/g' Makefile&lt;br /&gt;
 sed -i 's/CONFIG_PLATFORM_ARM64_RPI = n/CONFIG_PLATFORM_ARM64_RPI = y/g' Makefile&lt;br /&gt;
 export ARCH=arm&lt;br /&gt;
 sed -i 's/^MAKE=&amp;quot;/MAKE=&amp;quot;ARCH=arm\ /' dkms.conf&lt;br /&gt;
 make &lt;br /&gt;
 sudo make install&lt;br /&gt;
 &lt;br /&gt;
create file with your MAC address &amp;lt;br /&amp;gt;&lt;br /&gt;
(keep wlan0 for the RPI wifi chip, and wlan1 for the external wifi adpater)&amp;lt;br /&amp;gt;&lt;br /&gt;
/etc/udev/rules.d/76-netnames.rules&lt;br /&gt;
 SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTR{address}==&amp;quot;b8:27:eb:be:ba:55&amp;quot;, NAME=&amp;quot;wlan0&amp;quot;&lt;br /&gt;
 SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTR{address}==&amp;quot;00:13:ef:f2:18:98&amp;quot;, NAME=&amp;quot;wlan1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Explorer_RaspiZero_RT5572_open.jpg&lt;br /&gt;
Explorer_RaspiZero_RT5572_close.jpg&lt;br /&gt;
Explorer_Raspi_RT5572.jpg&lt;br /&gt;
Explorer_Raspi_Apogee_RT5572.jpg&lt;br /&gt;
Explorer_Raspi_Apogee_HDMI_ETH.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Explorer_RT5572_RTL8812AU_AC1200.jpg&lt;br /&gt;
Explorer_RT5572_RTL8812AU_AC1200_open.jpg&lt;br /&gt;
Explorer_RT5572_RTL8812AU_AC1200_zoom.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Explorer_RTL8812AU_AC1200_ALFA.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Setup&amp;diff=25277</id>
		<title>Explorer/RaspberryPi/Setup</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Setup&amp;diff=25277"/>
		<updated>2021-02-12T07:49:01Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Explorer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Softwares]]&lt;br /&gt;
&lt;br /&gt;
* Installation&lt;br /&gt;
Download and install raspbian (debian for raspberry) lite package (same for PI3 and PIzero)&amp;lt;br /&amp;gt;&lt;br /&gt;
Raspberry Pi OS (32-bit) Lite (buster : 433M)&lt;br /&gt;
&lt;br /&gt;
  wget https://downloads.raspberrypi.org/raspbian_lite_latest&lt;br /&gt;
&lt;br /&gt;
  Flash the RaspberryPi OS on a 16Gb minimum size SD&lt;br /&gt;
 &lt;br /&gt;
  mv raspbian_lite_latest raspbian_lite_latest.zip&lt;br /&gt;
  ./balenaEtcher-1.5.79-x64.AppImage&lt;br /&gt;
&lt;br /&gt;
* Initial configuration:&lt;br /&gt;
PI3 and PIZero can be configured headless, without a keyboard and a display.&amp;lt;br /&amp;gt;&lt;br /&gt;
You just need to configure the board to connect to a wifi hotspot when power on.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Plug the memory SD card with the fresh raspbian installed.&lt;br /&gt;
&lt;br /&gt;
Create file (sudo touch)&lt;br /&gt;
  boot/ssh&lt;br /&gt;
&lt;br /&gt;
Create the file with following content (sudo vi)&lt;br /&gt;
  boot/wpa_supplicant.conf&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
  ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;br /&gt;
  update_config=1&lt;br /&gt;
  country=FR&lt;br /&gt;
  network={&lt;br /&gt;
    ssid=&amp;quot;Androidxp&amp;quot;&lt;br /&gt;
    psk=&amp;quot;pprzpprz&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  network={&lt;br /&gt;
    ssid=&amp;quot;pprz_router&amp;quot;&lt;br /&gt;
    key_mgmt=NONE&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
* Plug the SD memory card in the raspberry Pi and power on.&lt;br /&gt;
* Connect your computer to the same wifi hotspot&lt;br /&gt;
* Look for the Raspberry IP on the network&lt;br /&gt;
 nmap -sn 192.168.1.0/24&lt;br /&gt;
&lt;br /&gt;
* Connect to the identified IP&lt;br /&gt;
  ssh pi@...&lt;br /&gt;
  password: raspberry&lt;br /&gt;
&lt;br /&gt;
* Set the configuration&lt;br /&gt;
  sudo raspi-config&lt;br /&gt;
  1) change user password&lt;br /&gt;
  5) P1) enable camera&lt;br /&gt;
     P6) login shell:disable&lt;br /&gt;
         serial interface:enable&lt;br /&gt;
  7) advanced options&lt;br /&gt;
    A1) expand filesystem&lt;br /&gt;
&lt;br /&gt;
  /etc/hosts&lt;br /&gt;
  127.0.1.1       raspberrypi&lt;br /&gt;
  to 127.0.1.1       airpi or groundpi&lt;br /&gt;
&lt;br /&gt;
  /etc/hostname&lt;br /&gt;
  raspberrypi to airpi or groundpi&lt;br /&gt;
&lt;br /&gt;
 /etc/dhcpcd.conf&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
 # It is possible to fall back to a static IP if DHCP fails:&lt;br /&gt;
 # define static profile&lt;br /&gt;
 profile static_eth0&lt;br /&gt;
 static ip_address=192.168.3.2/24&lt;br /&gt;
 static routers=192.168.3.1&lt;br /&gt;
 static domain_name_servers=192.168.3.1&lt;br /&gt;
 # fallback to static profile on eth0&lt;br /&gt;
 interface eth0&lt;br /&gt;
 fallback static_eth0&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
&lt;br /&gt;
 /boot/config.txt&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
&lt;br /&gt;
 sudo reboot&lt;br /&gt;
 &lt;br /&gt;
 sudo systemctl stop serial-getty@ttyAMA0.service&lt;br /&gt;
 sudo systemctl disable serial-getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl stop hciuart&lt;br /&gt;
 sudo systemctl disable hciuart&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Equipements&amp;diff=25276</id>
		<title>Explorer/RaspberryPi/Wifibroadcast/Equipements</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Equipements&amp;diff=25276"/>
		<updated>2021-02-11T15:22:29Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wifibroadcast have been checked with wifi adapters chips:&lt;br /&gt;
* Ralink RT5572&lt;br /&gt;
* Realtek RTL8812AU&lt;br /&gt;
Ground and board transciever can be mixed.&lt;br /&gt;
&lt;br /&gt;
While the RT5572 driver (rt2800lib/usb) is fully operational on the raspbian buster, the RTL8812AU driver (88XXau) need to be compiled&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/aircrack-ng/rtl8812au&lt;br /&gt;
 cd rtl8812au&lt;br /&gt;
 sed -i 's/CONFIG_PLATFORM_I386_PC = y/CONFIG_PLATFORM_I386_PC = n/g' Makefile&lt;br /&gt;
 sed -i 's/CONFIG_PLATFORM_ARM64_RPI = n/CONFIG_PLATFORM_ARM64_RPI = y/g' Makefile&lt;br /&gt;
 make &lt;br /&gt;
 sudo make install&lt;br /&gt;
 &lt;br /&gt;
create file with your MAC address &amp;lt;br /&amp;gt;&lt;br /&gt;
(keep wlan0 for the RPI wifi chip, and wlan1 for the external wifi adpater)&amp;lt;br /&amp;gt;&lt;br /&gt;
/etc/udev/rules.d/76-netnames.rules&lt;br /&gt;
 SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTR{address}==&amp;quot;b8:27:eb:be:ba:55&amp;quot;, NAME=&amp;quot;wlan0&amp;quot;&lt;br /&gt;
 SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTR{address}==&amp;quot;00:13:ef:f2:18:98&amp;quot;, NAME=&amp;quot;wlan1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Explorer_RaspiZero_RT5572_open.jpg&lt;br /&gt;
Explorer_RaspiZero_RT5572_close.jpg&lt;br /&gt;
Explorer_Raspi_RT5572.jpg&lt;br /&gt;
Explorer_Raspi_Apogee_RT5572.jpg&lt;br /&gt;
Explorer_Raspi_Apogee_HDMI_ETH.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Explorer_RT5572_RTL8812AU_AC1200.jpg&lt;br /&gt;
Explorer_RT5572_RTL8812AU_AC1200_open.jpg&lt;br /&gt;
Explorer_RT5572_RTL8812AU_AC1200_zoom.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Explorer_RTL8812AU_AC1200_ALFA.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Equipements&amp;diff=25275</id>
		<title>Explorer/RaspberryPi/Wifibroadcast/Equipements</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Equipements&amp;diff=25275"/>
		<updated>2021-02-11T15:21:41Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wifibroadcast have been checked with wifi adapters chips:&lt;br /&gt;
* Ralink RT5572&lt;br /&gt;
* Realtek RTL8812AU&lt;br /&gt;
Ground and board transciever can be mixed.&lt;br /&gt;
&lt;br /&gt;
While the RT5572 driver (rt2800lib/usb) is fully operational on the raspbian buster, the RTL8812AU driver (88XXau) need to be compiled&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/aircrack-ng/rtl8812au&lt;br /&gt;
 cd rtl8812au&lt;br /&gt;
 sed -i 's/CONFIG_PLATFORM_I386_PC = y/CONFIG_PLATFORM_I386_PC = n/g' Makefile&lt;br /&gt;
 sed -i 's/CONFIG_PLATFORM_ARM64_RPI = n/CONFIG_PLATFORM_ARM64_RPI = y/g' Makefile&lt;br /&gt;
 make &lt;br /&gt;
 sudo make install&lt;br /&gt;
 &lt;br /&gt;
create file with your MAC address &amp;lt;br /&amp;gt;&lt;br /&gt;
(keep wlan0 for the RPI wifi chip, and wlan1 for the external wifi adpater)&amp;lt;br /&amp;gt;&lt;br /&gt;
/etc/udev/rules.d/76-netnames.rules&lt;br /&gt;
 SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTR{address}==&amp;quot;b8:27:eb:be:ba:55&amp;quot;, NAME=&amp;quot;wlan0&amp;quot;&lt;br /&gt;
 SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTR{address}==&amp;quot;00:13:ef:f2:18:98&amp;quot;, NAME=&amp;quot;wlan1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
check installation&lt;br /&gt;
 sudo dkms status&lt;br /&gt;
 =&amp;gt; rtl8812au, 5.6.4.2, 4.19.75-v7+, armv7l: installed&lt;br /&gt;
 (sudo dkms remove rtl8812au/5.6.4.2 --all)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Explorer_RaspiZero_RT5572_open.jpg&lt;br /&gt;
Explorer_RaspiZero_RT5572_close.jpg&lt;br /&gt;
Explorer_Raspi_RT5572.jpg&lt;br /&gt;
Explorer_Raspi_Apogee_RT5572.jpg&lt;br /&gt;
Explorer_Raspi_Apogee_HDMI_ETH.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Explorer_RT5572_RTL8812AU_AC1200.jpg&lt;br /&gt;
Explorer_RT5572_RTL8812AU_AC1200_open.jpg&lt;br /&gt;
Explorer_RT5572_RTL8812AU_AC1200_zoom.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Explorer_RTL8812AU_AC1200_ALFA.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Opencv/Optimisation&amp;diff=25205</id>
		<title>Explorer/RaspberryPi/Visualprocessing/Opencv/Optimisation</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Opencv/Optimisation&amp;diff=25205"/>
		<updated>2020-09-29T12:50:32Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Improve latency and CPU usage by removing filter &amp;quot;VIDEOCONVERT&amp;quot; and using v4l2h264enc instead of omxh264enc&amp;lt;br /&amp;gt;&lt;br /&gt;
 gst-launch-1.0 shmsrc socket-path=/tmp/camera3 do-timestamp=true \&lt;br /&gt;
   ! video/x-raw, format=BGR, width=640, height=480, framerate=30/1, colorimetry=1:1:5:1  \&lt;br /&gt;
   ! v4l2h264enc extra-controls=&amp;quot;controls,video_bitrate=3000000;&amp;quot; \&lt;br /&gt;
   ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
   ! udpsink host=127.0.0.1 port=5600 &amp;amp;&lt;br /&gt;
TO BE UPDATED&lt;br /&gt;
 #include &amp;lt;opencv2/opencv.hpp&amp;gt;&lt;br /&gt;
 #define WIDTH 640&lt;br /&gt;
 #define HEIGHT 480&lt;br /&gt;
 #define FPS 30&lt;br /&gt;
 #define SCALE 3/2&lt;br /&gt;
 &lt;br /&gt;
 using namespace cv;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main(int, char**)&lt;br /&gt;
 {&lt;br /&gt;
  unsigned int dataSize = sizeof(unsigned char)*WIDTH*HEIGHT*SCALE;&lt;br /&gt;
  Mat imageIn(WIDTH*SCALE, HEIGHT, CV_8UC1);&lt;br /&gt;
  Mat imageOut(WIDTH,HEIGHT,CV_8UC3,Scalar(0,0,0));&lt;br /&gt;
  //cout &amp;lt;&amp;lt; getBuildInformation() &amp;lt;&amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
  string streamInGstStr=&amp;quot;shmsrc socket-path=/tmp/camera2 ! video/x-raw,width=&amp;quot;+to_string(WIDTH)+&lt;br /&gt;
   &amp;quot;,height=&amp;quot;+to_string(HEIGHT)+&amp;quot;,framerate=&amp;quot;+to_string(FPS)+&amp;quot;/1,format=I420 ! appsink sync=true&amp;quot;;&lt;br /&gt;
  string streamOutGstStr=&amp;quot;appsrc ! shmsink socket-path=/tmp/camera3 wait-for-connection=false async=false sync=false&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
  VideoCapture streamIn(streamInGstStr,CAP_GSTREAMER);&lt;br /&gt;
  VideoWriter  streamOut(streamOutGstStr,0,FPS/1,Size(WIDTH,HEIGHT),true); &lt;br /&gt;
 &lt;br /&gt;
  if (streamIn.isOpened() &amp;amp;&amp;amp; streamOut.isOpened()) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
      streamIn.read(imageIn);&lt;br /&gt;
      if (!imageIn.empty()) {&lt;br /&gt;
        memcpy(imageOut.data,imageIn.data,dataSize);&lt;br /&gt;
        streamOut.write(imageOut);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 rm /tmp/camera*;\&lt;br /&gt;
 raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -vf -hf -cd H264 -n -fl -ih -o -  \&lt;br /&gt;
   | gst-launch-1.0 fdsrc  \&lt;br /&gt;
   ! h264parse  \&lt;br /&gt;
   ! video/x-h264,stream-format=byte-stream  \&lt;br /&gt;
   ! tee name=streams \&lt;br /&gt;
   ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
   ! udpsink host=127.0.0.1 port=5100 streams. \&lt;br /&gt;
   ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
   ! omxh264dec \&lt;br /&gt;
   ! shmsink socket-path=/tmp/camera2 wait-for-connection=false sync=false &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ~/opencv_test/test &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 gst-rtsp-server-1.14.4/examples/test-launch  \&lt;br /&gt;
 &amp;quot;udpsrc port=5100 do-timestamp=true ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1&amp;quot; \&lt;br /&gt;
 &amp;quot;shmsrc socket-path=/tmp/camera3 do-timestamp=true ! video/x-raw, format=I420, width=640, height=480, framerate=30/1 ! omxh264enc ! video/x-h264,profile=high  ! rtph264pay name=pay0 pt=96 config-interval=1&amp;quot; &amp;amp;&lt;br /&gt;
&lt;br /&gt;
client:&amp;lt;br /&amp;gt;&lt;br /&gt;
gst-launch-1.0 rtspsrc location=rtsp://RASPBERRYPI_IP:8554/test ! rtph264depay ! avdec_h264 ! xvimagesink sync=false&amp;lt;br /&amp;gt;&lt;br /&gt;
gst-launch-1.0 rtspsrc location=rtsp://RASPBERRYPI_IP:8554/test ! rtph264depay ! avdec_h264 ! xvimagesink sync=false&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Opencv/Optimisation&amp;diff=25204</id>
		<title>Explorer/RaspberryPi/Visualprocessing/Opencv/Optimisation</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Opencv/Optimisation&amp;diff=25204"/>
		<updated>2020-09-29T12:49:45Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Improve latency and CPU usage by removing filter &amp;quot;VIDEOCONVERT&amp;quot; and using v4l2h264enc instead of omxh264enc&amp;lt;br /&amp;gt;&lt;br /&gt;
TO BE UPDATED WITH&lt;br /&gt;
 gst-launch-1.0 shmsrc socket-path=/tmp/camera3 do-timestamp=true \&lt;br /&gt;
   ! video/x-raw, format=BGR, width=640, height=480, framerate=30/1, colorimetry=1:1:5:1  \&lt;br /&gt;
   ! v4l2h264enc extra-controls=&amp;quot;controls,video_bitrate=3000000;&amp;quot; \&lt;br /&gt;
   ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
   ! udpsink host=127.0.0.1 port=5600 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;opencv2/opencv.hpp&amp;gt;&lt;br /&gt;
 #define WIDTH 640&lt;br /&gt;
 #define HEIGHT 480&lt;br /&gt;
 #define FPS 30&lt;br /&gt;
 #define SCALE 3/2&lt;br /&gt;
 &lt;br /&gt;
 using namespace cv;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main(int, char**)&lt;br /&gt;
 {&lt;br /&gt;
  unsigned int dataSize = sizeof(unsigned char)*WIDTH*HEIGHT*SCALE;&lt;br /&gt;
  Mat imageIn(WIDTH*SCALE, HEIGHT, CV_8UC1);&lt;br /&gt;
  Mat imageOut(WIDTH,HEIGHT,CV_8UC3,Scalar(0,0,0));&lt;br /&gt;
  //cout &amp;lt;&amp;lt; getBuildInformation() &amp;lt;&amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
  string streamInGstStr=&amp;quot;shmsrc socket-path=/tmp/camera2 ! video/x-raw,width=&amp;quot;+to_string(WIDTH)+&lt;br /&gt;
   &amp;quot;,height=&amp;quot;+to_string(HEIGHT)+&amp;quot;,framerate=&amp;quot;+to_string(FPS)+&amp;quot;/1,format=I420 ! appsink sync=true&amp;quot;;&lt;br /&gt;
  string streamOutGstStr=&amp;quot;appsrc ! shmsink socket-path=/tmp/camera3 wait-for-connection=false async=false sync=false&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
  VideoCapture streamIn(streamInGstStr,CAP_GSTREAMER);&lt;br /&gt;
  VideoWriter  streamOut(streamOutGstStr,0,FPS/1,Size(WIDTH,HEIGHT),true); &lt;br /&gt;
 &lt;br /&gt;
  if (streamIn.isOpened() &amp;amp;&amp;amp; streamOut.isOpened()) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
      streamIn.read(imageIn);&lt;br /&gt;
      if (!imageIn.empty()) {&lt;br /&gt;
        memcpy(imageOut.data,imageIn.data,dataSize);&lt;br /&gt;
        streamOut.write(imageOut);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 rm /tmp/camera*;\&lt;br /&gt;
 raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -vf -hf -cd H264 -n -fl -ih -o -  \&lt;br /&gt;
   | gst-launch-1.0 fdsrc  \&lt;br /&gt;
   ! h264parse  \&lt;br /&gt;
   ! video/x-h264,stream-format=byte-stream  \&lt;br /&gt;
   ! tee name=streams \&lt;br /&gt;
   ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
   ! udpsink host=127.0.0.1 port=5100 streams. \&lt;br /&gt;
   ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
   ! omxh264dec \&lt;br /&gt;
   ! shmsink socket-path=/tmp/camera2 wait-for-connection=false sync=false &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ~/opencv_test/test &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 gst-rtsp-server-1.14.4/examples/test-launch  \&lt;br /&gt;
 &amp;quot;udpsrc port=5100 do-timestamp=true ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1&amp;quot; \&lt;br /&gt;
 &amp;quot;shmsrc socket-path=/tmp/camera3 do-timestamp=true ! video/x-raw, format=I420, width=640, height=480, framerate=30/1 ! omxh264enc ! video/x-h264,profile=high  ! rtph264pay name=pay0 pt=96 config-interval=1&amp;quot; &amp;amp;&lt;br /&gt;
&lt;br /&gt;
client:&amp;lt;br /&amp;gt;&lt;br /&gt;
gst-launch-1.0 rtspsrc location=rtsp://RASPBERRYPI_IP:8554/test ! rtph264depay ! avdec_h264 ! xvimagesink sync=false&amp;lt;br /&amp;gt;&lt;br /&gt;
gst-launch-1.0 rtspsrc location=rtsp://RASPBERRYPI_IP:8554/test ! rtph264depay ! avdec_h264 ! xvimagesink sync=false&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Opencv/Optimisation&amp;diff=25203</id>
		<title>Explorer/RaspberryPi/Visualprocessing/Opencv/Optimisation</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Opencv/Optimisation&amp;diff=25203"/>
		<updated>2020-09-29T12:48:42Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Improve latency and CPU usage by removing filter &amp;quot;VIDEOCONVERT&amp;quot;&lt;br /&gt;
TO BE UPDATED WITH&lt;br /&gt;
 gst-launch-1.0 shmsrc socket-path=/tmp/camera3 do-timestamp=true \&lt;br /&gt;
   ! video/x-raw, format=BGR, width=640, height=480, framerate=30/1, colorimetry=1:1:5:1  \&lt;br /&gt;
   ! v4l2h264enc extra-controls=&amp;quot;controls,video_bitrate=3000000;&amp;quot; \&lt;br /&gt;
   ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
   ! udpsink host=127.0.0.1 port=5600 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;opencv2/opencv.hpp&amp;gt;&lt;br /&gt;
 #define WIDTH 640&lt;br /&gt;
 #define HEIGHT 480&lt;br /&gt;
 #define FPS 30&lt;br /&gt;
 #define SCALE 3/2&lt;br /&gt;
 &lt;br /&gt;
 using namespace cv;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 int main(int, char**)&lt;br /&gt;
 {&lt;br /&gt;
  unsigned int dataSize = sizeof(unsigned char)*WIDTH*HEIGHT*SCALE;&lt;br /&gt;
  Mat imageIn(WIDTH*SCALE, HEIGHT, CV_8UC1);&lt;br /&gt;
  Mat imageOut(WIDTH,HEIGHT,CV_8UC3,Scalar(0,0,0));&lt;br /&gt;
  //cout &amp;lt;&amp;lt; getBuildInformation() &amp;lt;&amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
  string streamInGstStr=&amp;quot;shmsrc socket-path=/tmp/camera2 ! video/x-raw,width=&amp;quot;+to_string(WIDTH)+&lt;br /&gt;
   &amp;quot;,height=&amp;quot;+to_string(HEIGHT)+&amp;quot;,framerate=&amp;quot;+to_string(FPS)+&amp;quot;/1,format=I420 ! appsink sync=true&amp;quot;;&lt;br /&gt;
  string streamOutGstStr=&amp;quot;appsrc ! shmsink socket-path=/tmp/camera3 wait-for-connection=false async=false sync=false&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
  VideoCapture streamIn(streamInGstStr,CAP_GSTREAMER);&lt;br /&gt;
  VideoWriter  streamOut(streamOutGstStr,0,FPS/1,Size(WIDTH,HEIGHT),true); &lt;br /&gt;
 &lt;br /&gt;
  if (streamIn.isOpened() &amp;amp;&amp;amp; streamOut.isOpened()) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
      streamIn.read(imageIn);&lt;br /&gt;
      if (!imageIn.empty()) {&lt;br /&gt;
        memcpy(imageOut.data,imageIn.data,dataSize);&lt;br /&gt;
        streamOut.write(imageOut);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 rm /tmp/camera*;\&lt;br /&gt;
 raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -vf -hf -cd H264 -n -fl -ih -o -  \&lt;br /&gt;
   | gst-launch-1.0 fdsrc  \&lt;br /&gt;
   ! h264parse  \&lt;br /&gt;
   ! video/x-h264,stream-format=byte-stream  \&lt;br /&gt;
   ! tee name=streams \&lt;br /&gt;
   ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
   ! udpsink host=127.0.0.1 port=5100 streams. \&lt;br /&gt;
   ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
   ! omxh264dec \&lt;br /&gt;
   ! shmsink socket-path=/tmp/camera2 wait-for-connection=false sync=false &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ~/opencv_test/test &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 gst-rtsp-server-1.14.4/examples/test-launch  \&lt;br /&gt;
 &amp;quot;udpsrc port=5100 do-timestamp=true ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1&amp;quot; \&lt;br /&gt;
 &amp;quot;shmsrc socket-path=/tmp/camera3 do-timestamp=true ! video/x-raw, format=I420, width=640, height=480, framerate=30/1 ! omxh264enc ! video/x-h264,profile=high  ! rtph264pay name=pay0 pt=96 config-interval=1&amp;quot; &amp;amp;&lt;br /&gt;
&lt;br /&gt;
client:&amp;lt;br /&amp;gt;&lt;br /&gt;
gst-launch-1.0 rtspsrc location=rtsp://RASPBERRYPI_IP:8554/test ! rtph264depay ! avdec_h264 ! xvimagesink sync=false&amp;lt;br /&amp;gt;&lt;br /&gt;
gst-launch-1.0 rtspsrc location=rtsp://RASPBERRYPI_IP:8554/test ! rtph264depay ! avdec_h264 ! xvimagesink sync=false&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/IMU&amp;diff=25202</id>
		<title>Explorer/RaspberryPi/Visualprocessing/IMU</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/IMU&amp;diff=25202"/>
		<updated>2020-09-29T12:43:31Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;to be added in cv.cpp&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define IMUPIPE &amp;quot;/tmp/fromimu&amp;quot;&lt;br /&gt;
 float msgpipe_g[3];&lt;br /&gt;
 int imufd;&lt;br /&gt;
 Point pcenter(320,240);&lt;br /&gt;
 float torad = CV_PI / 180.0;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 static void * drawAxes_threadImuProg(void *arg) {&lt;br /&gt;
   float msgpipe_l[3];&lt;br /&gt;
   int msgsize = sizeof(msgpipe_g);&lt;br /&gt;
   while(true) {&lt;br /&gt;
     if (msgsize==read(imufd,&amp;amp;msgpipe_l,msgsize)) {&lt;br /&gt;
       memcpy(&amp;amp;msgpipe_g, &amp;amp;msgpipe_l, msgsize); &lt;br /&gt;
     } &lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static void drawAxes_init()&lt;br /&gt;
 {&lt;br /&gt;
   mkfifo(IMUPIPE, 0666); &lt;br /&gt;
   imufd = open(IMUPIPE, O_RDWR);&lt;br /&gt;
 &lt;br /&gt;
   pthread_t threadImu;&lt;br /&gt;
   pthread_create(&amp;amp;threadImu, NULL, &amp;amp;drawAxes_threadImuProg, NULL);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 struct quaternion_t&lt;br /&gt;
 {&lt;br /&gt;
   float w, x, y, z;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 static void drawAxes(Mat3b *img) &lt;br /&gt;
 {&lt;br /&gt;
   float msgpipe_l[3];&lt;br /&gt;
   memcpy(&amp;amp;msgpipe_l, &amp;amp;msgpipe_g, sizeof(msgpipe_g)); &lt;br /&gt;
 &lt;br /&gt;
   float roll  =  torad*msgpipe_l[0];   // roll_phy(x)&lt;br /&gt;
   float pitch = -torad*msgpipe_l[1]; // pitch_theta(y)&lt;br /&gt;
   float yaw   = -torad*msgpipe_l[2];   // yaw_psi(z)&lt;br /&gt;
 &lt;br /&gt;
   float cy = cos(roll * 0.5);&lt;br /&gt;
   float sy = sin(roll * 0.5);&lt;br /&gt;
   float cp = cos(yaw * 0.5);&lt;br /&gt;
   float sp = sin(yaw * 0.5);&lt;br /&gt;
   float cr = cos(pitch * 0.5);&lt;br /&gt;
   float sr = sin(pitch * 0.5);&lt;br /&gt;
 &lt;br /&gt;
   quaternion_t q;          // quaternion from euler&lt;br /&gt;
   q.w = cr * cp * cy + sr * sp * sy;&lt;br /&gt;
   q.x = sr * cp * cy - cr * sp * sy;&lt;br /&gt;
   q.y = cr * sp * cy + sr * cp * sy;&lt;br /&gt;
   q.z = cr * cp * sy - sr * sp * cy;&lt;br /&gt;
 &lt;br /&gt;
   array&amp;lt;Point3i,4&amp;gt; pts = {Point3i{0,0,0},Point3i{100,0,0},Point3i{0,100,0},Point3i{0,0,100}};&lt;br /&gt;
   array&amp;lt;Point3f,4&amp;gt; out;&lt;br /&gt;
   for (int i=0;i&amp;lt;4;i++) {  // rotation matrix from quaternion&lt;br /&gt;
     out[i].x=(1-2*q.y*q.y-2*q.z*q.z)*pts[i].x+(2*q.x*q.y-2*q.z*q.w)*pts[i].y+(2*q.x*q.z+2*q.y*q.w)*pts[i].z;&lt;br /&gt;
     out[i].y=(2*q.x*q.y+2*q.z*q.w)*pts[i].x+(1-2*q.x*q.x-2*q.z*q.z)*pts[i].y+(2*q.y*q.z-2*q.x*q.w)*pts[i].z;&lt;br /&gt;
     out[i].z=(2*q.x*q.z-2*q.y*q.w)*pts[i].x+(2*q.y*q.z+2*q.x*q.w)*pts[i].y+(1-2*q.x*q.x-2*q.y*q.y)*pts[i].z;&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   Point loc=pcenter;&lt;br /&gt;
   array&amp;lt;Point,4&amp;gt; imgPts;   // 3D to 2D projection&lt;br /&gt;
   for (int i=0;i&amp;lt;4;i++)&lt;br /&gt;
     imgPts[i]={(int)(loc.x-out[i].x+0.5*out[i].z),(int)(loc.y-out[i].y-0.5*out[i].z)}; &lt;br /&gt;
 &lt;br /&gt;
   line(*img, imgPts[0], imgPts[3], Scalar(0,0,255), 3); // red&lt;br /&gt;
   line(*img, imgPts[0], imgPts[1], Scalar(0,255,0), 3); // green&lt;br /&gt;
   line(*img, imgPts[0], imgPts[2], Scalar(255,0,0), 3); // blue&lt;br /&gt;
   circle(*img, pcenter, 5, Scalar(0,0,0), -1);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
to be modified in muxer.c&lt;br /&gt;
&lt;br /&gt;
 #define IMUPIPE &amp;quot;/tmp/fromimu&amp;quot;&lt;br /&gt;
 float msgpipe_g[3];&lt;br /&gt;
 int imufd;&lt;br /&gt;
 ...&lt;br /&gt;
       mkfifo(IMUPIPE, 0666); &lt;br /&gt;
      imufd = open(IMUPIPE, O_RDWR | O_NONBLOCK);&lt;br /&gt;
 ...&lt;br /&gt;
             if (msgid == PPRZ_MSG_ID_ROTORCRAFT_FP) {&lt;br /&gt;
       	      memcpy(&amp;amp;(rfp_g.stamp),&amp;amp;tv,sizeof(struct timeval));&lt;br /&gt;
               rfp_g.phi  =ALT_UNIT_COEF_ATT*pprzlink_get_ROTORCRAFT_FP_phi(buf);&lt;br /&gt;
               rfp_g.theta=ALT_UNIT_COEF_ATT*pprzlink_get_ROTORCRAFT_FP_theta(buf);&lt;br /&gt;
               rfp_g.psi  =ALT_UNIT_COEF_ATT*pprzlink_get_ROTORCRAFT_FP_psi(buf);&lt;br /&gt;
   	       acid = buf[0];&lt;br /&gt;
               printf(&amp;quot;%.4f %d ROTORCRAFT_FP %f %f %f\n&amp;quot;,elapsed,acid,rfp_g.phi,rfp_g.theta,rfp_g.psi);  &lt;br /&gt;
 &lt;br /&gt;
               msgpipe_g[0]=rfp_g.phi; msgpipe_g[1]=rfp_g.theta; msgpipe_g[2] = rfp_g.psi;&lt;br /&gt;
               write(imufd, &amp;amp;msgpipe_g, sizeof(msgpipe_g));&lt;br /&gt;
&lt;br /&gt;
to be modified in airpi.sh&lt;br /&gt;
&lt;br /&gt;
 socat -u /dev/ttyAMA0,raw,echo=0,b115200 - | tee &amp;gt;(socat - udp-sendto:127.0.0.1:4245) &amp;gt;(socat - udp-sendto:127.0.0.1:4242) &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
 socat -u udp-listen:4243,reuseaddr,fork /dev/ttyAMA0,raw,echo=0,b115200 &amp;amp;&lt;br /&gt;
 export LD_LIBRARY_PATH=/home/pi/muxer/lib&lt;br /&gt;
 /home/pi/muxer/exe/muxer 4244 4245 &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/IMU&amp;diff=25201</id>
		<title>Explorer/RaspberryPi/Visualprocessing/IMU</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/IMU&amp;diff=25201"/>
		<updated>2020-09-29T12:42:05Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;to be added in cv.cpp&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define IMUPIPE &amp;quot;/tmp/fromimu&amp;quot;&lt;br /&gt;
 float msgpipe_g[3];&lt;br /&gt;
 int imufd;&lt;br /&gt;
 Point pcenter(320,240);&lt;br /&gt;
 float torad = CV_PI / 180.0;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 static void * drawAxes_threadImuProg(void *arg) {&lt;br /&gt;
   float msgpipe_l[3];&lt;br /&gt;
   int msgsize = sizeof(msgpipe_g);&lt;br /&gt;
   while(true) {&lt;br /&gt;
     if (msgsize==read(imufd,&amp;amp;msgpipe_l,msgsize)) {&lt;br /&gt;
       memcpy(&amp;amp;msgpipe_g, &amp;amp;msgpipe_l, msgsize); &lt;br /&gt;
     } &lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static void drawAxes_init()&lt;br /&gt;
 {&lt;br /&gt;
   mkfifo(IMUPIPE, 0666); &lt;br /&gt;
   imufd = open(IMUPIPE, O_RDWR);&lt;br /&gt;
 &lt;br /&gt;
   pthread_t threadImu;&lt;br /&gt;
   pthread_create(&amp;amp;threadImu, NULL, &amp;amp;drawAxes_threadImuProg, NULL);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 struct quaternion_t&lt;br /&gt;
 {&lt;br /&gt;
   float w, x, y, z;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 static void drawAxes(Mat3b *img) &lt;br /&gt;
 {&lt;br /&gt;
   float msgpipe_l[3];&lt;br /&gt;
   memcpy(&amp;amp;msgpipe_l, &amp;amp;msgpipe_g, sizeof(msgpipe_g)); &lt;br /&gt;
 &lt;br /&gt;
   float roll  =  torad*msgpipe_l[0];   // roll_phy(x)&lt;br /&gt;
   float pitch = -torad*msgpipe_l[1]; // pitch_theta(y)&lt;br /&gt;
   float yaw   = -torad*msgpipe_l[2];   // yaw_psi(z)&lt;br /&gt;
 &lt;br /&gt;
   float cy = cos(roll * 0.5);&lt;br /&gt;
   float sy = sin(roll * 0.5);&lt;br /&gt;
   float cp = cos(yaw * 0.5);&lt;br /&gt;
   float sp = sin(yaw * 0.5);&lt;br /&gt;
   float cr = cos(pitch * 0.5);&lt;br /&gt;
   float sr = sin(pitch * 0.5);&lt;br /&gt;
 &lt;br /&gt;
   quaternion_t q;          // quaternion from euler&lt;br /&gt;
   q.w = cr * cp * cy + sr * sp * sy;&lt;br /&gt;
   q.x = sr * cp * cy - cr * sp * sy;&lt;br /&gt;
   q.y = cr * sp * cy + sr * cp * sy;&lt;br /&gt;
   q.z = cr * cp * sy - sr * sp * cy;&lt;br /&gt;
 &lt;br /&gt;
   array&amp;lt;Point3i,4&amp;gt; pts = {Point3i{0,0,0},Point3i{100,0,0},Point3i{0,100,0},Point3i{0,0,100}};&lt;br /&gt;
   array&amp;lt;Point3f,4&amp;gt; out;&lt;br /&gt;
   for (int i=0;i&amp;lt;4;i++) {  // rotation matrix from quaternion&lt;br /&gt;
     out[i].x=(1-2*q.y*q.y-2*q.z*q.z)*pts[i].x+(2*q.x*q.y-2*q.z*q.w)*pts[i].y+(2*q.x*q.z+2*q.y*q.w)*pts[i].z;&lt;br /&gt;
     out[i].y=(2*q.x*q.y+2*q.z*q.w)*pts[i].x+(1-2*q.x*q.x-2*q.z*q.z)*pts[i].y+(2*q.y*q.z-2*q.x*q.w)*pts[i].z;&lt;br /&gt;
     out[i].z=(2*q.x*q.z-2*q.y*q.w)*pts[i].x+(2*q.y*q.z+2*q.x*q.w)*pts[i].y+(1-2*q.x*q.x-2*q.y*q.y)*pts[i].z;&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   Point loc=pcenter;&lt;br /&gt;
   array&amp;lt;Point,4&amp;gt; imgPts;   // 3D to 2D projection&lt;br /&gt;
   for (int i=0;i&amp;lt;4;i++)&lt;br /&gt;
     imgPts[i]={(int)(loc.x-out[i].x+0.5*out[i].z),(int)(loc.y-out[i].y-0.5*out[i].z)}; &lt;br /&gt;
 &lt;br /&gt;
   line(*img, imgPts[0], imgPts[3], Scalar(0,0,255), 3); // red&lt;br /&gt;
   line(*img, imgPts[0], imgPts[1], Scalar(0,255,0), 3); // green&lt;br /&gt;
   line(*img, imgPts[0], imgPts[2], Scalar(255,0,0), 3); // blue&lt;br /&gt;
   circle(*img, pcenter, 5, Scalar(0,0,0), -1);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to be modified in muxer.c&lt;br /&gt;
&lt;br /&gt;
 #define IMUPIPE &amp;quot;/tmp/fromimu&amp;quot;&lt;br /&gt;
 float msgpipe_g[3];&lt;br /&gt;
 int imufd;&lt;br /&gt;
 ...&lt;br /&gt;
       mkfifo(IMUPIPE, 0666); &lt;br /&gt;
      imufd = open(IMUPIPE, O_RDWR | O_NONBLOCK);&lt;br /&gt;
 ...&lt;br /&gt;
             if (msgid == PPRZ_MSG_ID_ROTORCRAFT_FP) {&lt;br /&gt;
       	      memcpy(&amp;amp;(rfp_g.stamp),&amp;amp;tv,sizeof(struct timeval));&lt;br /&gt;
               rfp_g.phi  =ALT_UNIT_COEF_ATT*pprzlink_get_ROTORCRAFT_FP_phi(buf);&lt;br /&gt;
               rfp_g.theta=ALT_UNIT_COEF_ATT*pprzlink_get_ROTORCRAFT_FP_theta(buf);&lt;br /&gt;
               rfp_g.psi  =ALT_UNIT_COEF_ATT*pprzlink_get_ROTORCRAFT_FP_psi(buf);&lt;br /&gt;
   	       acid = buf[0];&lt;br /&gt;
               printf(&amp;quot;%.4f %d ROTORCRAFT_FP %f %f %f\n&amp;quot;,elapsed,acid,rfp_g.phi,rfp_g.theta,rfp_g.psi);  &lt;br /&gt;
 &lt;br /&gt;
               msgpipe_g[0]=rfp_g.phi; msgpipe_g[1]=rfp_g.theta; msgpipe_g[2] = rfp_g.psi;&lt;br /&gt;
               write(imufd, &amp;amp;msgpipe_g, sizeof(msgpipe_g));&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/IMU&amp;diff=25200</id>
		<title>Explorer/RaspberryPi/Visualprocessing/IMU</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/IMU&amp;diff=25200"/>
		<updated>2020-09-29T12:39:42Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;to be added in cv.cpp&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define IMUPIPE &amp;quot;/tmp/fromimu&amp;quot;&lt;br /&gt;
 float msgpipe_g[3];&lt;br /&gt;
 int imufd;&lt;br /&gt;
 Point pcenter(320,240);&lt;br /&gt;
 float torad = CV_PI / 180.0;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 static void * drawAxes_threadImuProg(void *arg) {&lt;br /&gt;
   float msgpipe_l[3];&lt;br /&gt;
   int msgsize = sizeof(msgpipe_g);&lt;br /&gt;
   while(true) {&lt;br /&gt;
     if (msgsize==read(imufd,&amp;amp;msgpipe_l,msgsize)) {&lt;br /&gt;
       memcpy(&amp;amp;msgpipe_g, &amp;amp;msgpipe_l, msgsize); &lt;br /&gt;
     } &lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static void drawAxes_init()&lt;br /&gt;
 {&lt;br /&gt;
   mkfifo(IMUPIPE, 0666); &lt;br /&gt;
   imufd = open(IMUPIPE, O_RDWR);&lt;br /&gt;
 &lt;br /&gt;
   pthread_t threadImu;&lt;br /&gt;
   pthread_create(&amp;amp;threadImu, NULL, &amp;amp;drawAxes_threadImuProg, NULL);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 struct quaternion_t&lt;br /&gt;
 {&lt;br /&gt;
   float w, x, y, z;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 static void drawAxes(Mat3b *img) &lt;br /&gt;
 {&lt;br /&gt;
   float msgpipe_l[3];&lt;br /&gt;
   memcpy(&amp;amp;msgpipe_l, &amp;amp;msgpipe_g, sizeof(msgpipe_g)); &lt;br /&gt;
 &lt;br /&gt;
   float roll  =  torad*msgpipe_l[0];   // roll_phy(x)&lt;br /&gt;
   float pitch = -torad*msgpipe_l[1]; // pitch_theta(y)&lt;br /&gt;
   float yaw   = -torad*msgpipe_l[2];   // yaw_psi(z)&lt;br /&gt;
 &lt;br /&gt;
   float cy = cos(roll * 0.5);&lt;br /&gt;
   float sy = sin(roll * 0.5);&lt;br /&gt;
   float cp = cos(yaw * 0.5);&lt;br /&gt;
   float sp = sin(yaw * 0.5);&lt;br /&gt;
   float cr = cos(pitch * 0.5);&lt;br /&gt;
   float sr = sin(pitch * 0.5);&lt;br /&gt;
 &lt;br /&gt;
   quaternion_t q;          // quaternion from euler&lt;br /&gt;
   q.w = cr * cp * cy + sr * sp * sy;&lt;br /&gt;
   q.x = sr * cp * cy - cr * sp * sy;&lt;br /&gt;
   q.y = cr * sp * cy + sr * cp * sy;&lt;br /&gt;
   q.z = cr * cp * sy - sr * sp * cy;&lt;br /&gt;
 &lt;br /&gt;
   array&amp;lt;Point3i,4&amp;gt; pts = {Point3i{0,0,0},Point3i{100,0,0},Point3i{0,100,0},Point3i{0,0,100}};&lt;br /&gt;
   array&amp;lt;Point3f,4&amp;gt; out;&lt;br /&gt;
   for (int i=0;i&amp;lt;4;i++) {  // rotation matrix from quaternion&lt;br /&gt;
     out[i].x=(1-2*q.y*q.y-2*q.z*q.z)*pts[i].x+(2*q.x*q.y-2*q.z*q.w)*pts[i].y+(2*q.x*q.z+2*q.y*q.w)*pts[i].z;&lt;br /&gt;
     out[i].y=(2*q.x*q.y+2*q.z*q.w)*pts[i].x+(1-2*q.x*q.x-2*q.z*q.z)*pts[i].y+(2*q.y*q.z-2*q.x*q.w)*pts[i].z;&lt;br /&gt;
     out[i].z=(2*q.x*q.z-2*q.y*q.w)*pts[i].x+(2*q.y*q.z+2*q.x*q.w)*pts[i].y+(1-2*q.x*q.x-2*q.y*q.y)*pts[i].z;&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   Point loc=pcenter;&lt;br /&gt;
   array&amp;lt;Point,4&amp;gt; imgPts;   // 3D to 2D projection&lt;br /&gt;
   for (int i=0;i&amp;lt;4;i++)&lt;br /&gt;
     imgPts[i]={(int)(loc.x-out[i].x+0.5*out[i].z),(int)(loc.y-out[i].y-0.5*out[i].z)}; &lt;br /&gt;
 &lt;br /&gt;
   line(*img, imgPts[0], imgPts[3], Scalar(0,0,255), 3); // red&lt;br /&gt;
   line(*img, imgPts[0], imgPts[1], Scalar(0,255,0), 3); // green&lt;br /&gt;
   line(*img, imgPts[0], imgPts[2], Scalar(255,0,0), 3); // blue&lt;br /&gt;
   circle(*img, pcenter, 5, Scalar(0,0,0), -1);&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/IMU&amp;diff=25199</id>
		<title>Explorer/RaspberryPi/Visualprocessing/IMU</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/IMU&amp;diff=25199"/>
		<updated>2020-09-29T12:39:33Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; to be added in cv.cpp&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define IMUPIPE &amp;quot;/tmp/fromimu&amp;quot;&lt;br /&gt;
 float msgpipe_g[3];&lt;br /&gt;
 int imufd;&lt;br /&gt;
 Point pcenter(320,240);&lt;br /&gt;
 float torad = CV_PI / 180.0;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 static void * drawAxes_threadImuProg(void *arg) {&lt;br /&gt;
   float msgpipe_l[3];&lt;br /&gt;
   int msgsize = sizeof(msgpipe_g);&lt;br /&gt;
   while(true) {&lt;br /&gt;
     if (msgsize==read(imufd,&amp;amp;msgpipe_l,msgsize)) {&lt;br /&gt;
       memcpy(&amp;amp;msgpipe_g, &amp;amp;msgpipe_l, msgsize); &lt;br /&gt;
     } &lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static void drawAxes_init()&lt;br /&gt;
 {&lt;br /&gt;
   mkfifo(IMUPIPE, 0666); &lt;br /&gt;
   imufd = open(IMUPIPE, O_RDWR);&lt;br /&gt;
 &lt;br /&gt;
   pthread_t threadImu;&lt;br /&gt;
   pthread_create(&amp;amp;threadImu, NULL, &amp;amp;drawAxes_threadImuProg, NULL);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 struct quaternion_t&lt;br /&gt;
 {&lt;br /&gt;
   float w, x, y, z;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 static void drawAxes(Mat3b *img) &lt;br /&gt;
 {&lt;br /&gt;
   float msgpipe_l[3];&lt;br /&gt;
   memcpy(&amp;amp;msgpipe_l, &amp;amp;msgpipe_g, sizeof(msgpipe_g)); &lt;br /&gt;
 &lt;br /&gt;
   float roll  =  torad*msgpipe_l[0];   // roll_phy(x)&lt;br /&gt;
   float pitch = -torad*msgpipe_l[1]; // pitch_theta(y)&lt;br /&gt;
   float yaw   = -torad*msgpipe_l[2];   // yaw_psi(z)&lt;br /&gt;
 &lt;br /&gt;
   float cy = cos(roll * 0.5);&lt;br /&gt;
   float sy = sin(roll * 0.5);&lt;br /&gt;
   float cp = cos(yaw * 0.5);&lt;br /&gt;
   float sp = sin(yaw * 0.5);&lt;br /&gt;
   float cr = cos(pitch * 0.5);&lt;br /&gt;
   float sr = sin(pitch * 0.5);&lt;br /&gt;
 &lt;br /&gt;
   quaternion_t q;          // quaternion from euler&lt;br /&gt;
   q.w = cr * cp * cy + sr * sp * sy;&lt;br /&gt;
   q.x = sr * cp * cy - cr * sp * sy;&lt;br /&gt;
   q.y = cr * sp * cy + sr * cp * sy;&lt;br /&gt;
   q.z = cr * cp * sy - sr * sp * cy;&lt;br /&gt;
 &lt;br /&gt;
   array&amp;lt;Point3i,4&amp;gt; pts = {Point3i{0,0,0},Point3i{100,0,0},Point3i{0,100,0},Point3i{0,0,100}};&lt;br /&gt;
   array&amp;lt;Point3f,4&amp;gt; out;&lt;br /&gt;
   for (int i=0;i&amp;lt;4;i++) {  // rotation matrix from quaternion&lt;br /&gt;
     out[i].x=(1-2*q.y*q.y-2*q.z*q.z)*pts[i].x+(2*q.x*q.y-2*q.z*q.w)*pts[i].y+(2*q.x*q.z+2*q.y*q.w)*pts[i].z;&lt;br /&gt;
     out[i].y=(2*q.x*q.y+2*q.z*q.w)*pts[i].x+(1-2*q.x*q.x-2*q.z*q.z)*pts[i].y+(2*q.y*q.z-2*q.x*q.w)*pts[i].z;&lt;br /&gt;
     out[i].z=(2*q.x*q.z-2*q.y*q.w)*pts[i].x+(2*q.y*q.z+2*q.x*q.w)*pts[i].y+(1-2*q.x*q.x-2*q.y*q.y)*pts[i].z;&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   Point loc=pcenter;&lt;br /&gt;
   array&amp;lt;Point,4&amp;gt; imgPts;   // 3D to 2D projection&lt;br /&gt;
   for (int i=0;i&amp;lt;4;i++)&lt;br /&gt;
     imgPts[i]={(int)(loc.x-out[i].x+0.5*out[i].z),(int)(loc.y-out[i].y-0.5*out[i].z)}; &lt;br /&gt;
 &lt;br /&gt;
   line(*img, imgPts[0], imgPts[3], Scalar(0,0,255), 3); // red&lt;br /&gt;
   line(*img, imgPts[0], imgPts[1], Scalar(0,255,0), 3); // green&lt;br /&gt;
   line(*img, imgPts[0], imgPts[2], Scalar(255,0,0), 3); // blue&lt;br /&gt;
   circle(*img, pcenter, 5, Scalar(0,0,0), -1);&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/IMU&amp;diff=25198</id>
		<title>Explorer/RaspberryPi/Visualprocessing/IMU</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/IMU&amp;diff=25198"/>
		<updated>2020-09-29T12:37:48Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; #include &amp;lt;fcntl.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/stat.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #define IMUPIPE &amp;quot;/tmp/fromimu&amp;quot;&lt;br /&gt;
 float msgpipe_g[3];&lt;br /&gt;
 int imufd;&lt;br /&gt;
 Point pcenter(320,240);&lt;br /&gt;
 float torad = CV_PI / 180.0;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 static void * drawAxes_threadImuProg(void *arg) {&lt;br /&gt;
   float msgpipe_l[3];&lt;br /&gt;
   int msgsize = sizeof(msgpipe_g);&lt;br /&gt;
   while(true) {&lt;br /&gt;
     if (msgsize==read(imufd,&amp;amp;msgpipe_l,msgsize)) {&lt;br /&gt;
       memcpy(&amp;amp;msgpipe_g, &amp;amp;msgpipe_l, msgsize); &lt;br /&gt;
     } &lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static void drawAxes_init()&lt;br /&gt;
 {&lt;br /&gt;
   mkfifo(IMUPIPE, 0666); &lt;br /&gt;
   imufd = open(IMUPIPE, O_RDWR);&lt;br /&gt;
 &lt;br /&gt;
   pthread_t threadImu;&lt;br /&gt;
   pthread_create(&amp;amp;threadImu, NULL, &amp;amp;drawAxes_threadImuProg, NULL);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 struct quaternion_t&lt;br /&gt;
 {&lt;br /&gt;
   float w, x, y, z;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 static void drawAxes(Mat3b *img) &lt;br /&gt;
 {&lt;br /&gt;
   float msgpipe_l[3];&lt;br /&gt;
   memcpy(&amp;amp;msgpipe_l, &amp;amp;msgpipe_g, sizeof(msgpipe_g)); &lt;br /&gt;
 &lt;br /&gt;
   float roll  =  torad*msgpipe_l[0];   // roll_phy(x)&lt;br /&gt;
   float pitch = -torad*msgpipe_l[1]; // pitch_theta(y)&lt;br /&gt;
   float yaw   = -torad*msgpipe_l[2];   // yaw_psi(z)&lt;br /&gt;
 &lt;br /&gt;
   float cy = cos(roll * 0.5);&lt;br /&gt;
   float sy = sin(roll * 0.5);&lt;br /&gt;
   float cp = cos(yaw * 0.5);&lt;br /&gt;
   float sp = sin(yaw * 0.5);&lt;br /&gt;
   float cr = cos(pitch * 0.5);&lt;br /&gt;
   float sr = sin(pitch * 0.5);&lt;br /&gt;
 &lt;br /&gt;
   quaternion_t q;          // quaternion from euler&lt;br /&gt;
   q.w = cr * cp * cy + sr * sp * sy;&lt;br /&gt;
   q.x = sr * cp * cy - cr * sp * sy;&lt;br /&gt;
   q.y = cr * sp * cy + sr * cp * sy;&lt;br /&gt;
   q.z = cr * cp * sy - sr * sp * cy;&lt;br /&gt;
 &lt;br /&gt;
   array&amp;lt;Point3i,4&amp;gt; pts = {Point3i{0,0,0},Point3i{100,0,0},Point3i{0,100,0},Point3i{0,0,100}};&lt;br /&gt;
   array&amp;lt;Point3f,4&amp;gt; out;&lt;br /&gt;
   for (int i=0;i&amp;lt;4;i++) {  // rotation matrix from quaternion&lt;br /&gt;
     out[i].x=(1-2*q.y*q.y-2*q.z*q.z)*pts[i].x+(2*q.x*q.y-2*q.z*q.w)*pts[i].y+(2*q.x*q.z+2*q.y*q.w)*pts[i].z;&lt;br /&gt;
     out[i].y=(2*q.x*q.y+2*q.z*q.w)*pts[i].x+(1-2*q.x*q.x-2*q.z*q.z)*pts[i].y+(2*q.y*q.z-2*q.x*q.w)*pts[i].z;&lt;br /&gt;
     out[i].z=(2*q.x*q.z-2*q.y*q.w)*pts[i].x+(2*q.y*q.z+2*q.x*q.w)*pts[i].y+(1-2*q.x*q.x-2*q.y*q.y)*pts[i].z;&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   Point loc=pcenter;&lt;br /&gt;
   array&amp;lt;Point,4&amp;gt; imgPts;   // 3D to 2D projection&lt;br /&gt;
   for (int i=0;i&amp;lt;4;i++)&lt;br /&gt;
     imgPts[i]={(int)(loc.x-out[i].x+0.5*out[i].z),(int)(loc.y-out[i].y-0.5*out[i].z)}; &lt;br /&gt;
 &lt;br /&gt;
   line(*img, imgPts[0], imgPts[3], Scalar(0,0,255), 3); // red&lt;br /&gt;
   line(*img, imgPts[0], imgPts[1], Scalar(0,255,0), 3); // green&lt;br /&gt;
   line(*img, imgPts[0], imgPts[2], Scalar(255,0,0), 3); // blue&lt;br /&gt;
   circle(*img, pcenter, 5, Scalar(0,0,0), -1);&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing&amp;diff=25197</id>
		<title>Explorer/RaspberryPi/Visualprocessing</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing&amp;diff=25197"/>
		<updated>2020-09-29T12:36:33Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File recording&lt;br /&gt;
 gst-launch-1.0 shmsrc socket-path=/tmp/camera1 do-timestamp=true \&lt;br /&gt;
   ! h264parse config-interval=1 \&lt;br /&gt;
   ! matroskamux \&lt;br /&gt;
   ! filesink location=/data/file0.mkv&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Visualprocessing/Opencv]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Visualprocessing/Opencv/Optimisation]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Visualprocessing/Motionvector]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Visualprocessing/Motionvector/Run]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Visualprocessing/IMU]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25196</id>
		<title>Explorer/RaspberryPi/Visualprocessing/Motionvector</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25196"/>
		<updated>2020-09-29T12:35:16Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Raspberry Pi is based on a BCM2835 System on a Chip (SoC), which provides an hardware (GPU) motion estimation block to the H264 encoder.&amp;lt;br /&amp;gt;&lt;br /&gt;
The Coarse Motion Block (CME) compares macroblock (16×16 pixels) from two consecutive frames and output a vector where the macroblock came from.&amp;lt;br /&amp;gt;&lt;br /&gt;
The vector is encoded in a single 32-bit value:&amp;lt;br /&amp;gt;&lt;br /&gt;
- the most significant 16 bits represent a Sum of Absolute Differences (SAD = quality of the estimation, the lower is the better)&amp;lt;br /&amp;gt;&lt;br /&gt;
- the others 16 bits represents (8-bit signed integer) the horizontal and vertical directions &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code below, patch &amp;quot;raspivid&amp;quot; to provide a video buffer (gray scale image) with motion vectors.&amp;lt;br /&amp;gt;&lt;br /&gt;
The new code compiled as &amp;quot;raspicv&amp;quot;, with a custom &amp;quot;cv.cpp&amp;quot; (see below), output motion vector display to /tmp/camera3 &amp;lt;br /&amp;gt;&lt;br /&gt;
The &amp;quot;cv.cpp&amp;quot; is limited to 640x480 grayscale image in this sample.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ref. Adam Heinrich thesis: An Optical Flow Odometry Sensor Based on the Raspberry Pi Computer)&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/raspberrypi/userland.git&lt;br /&gt;
 git clone https://github.com/adamheinrich/RaspiCV.git&lt;br /&gt;
&lt;br /&gt;
Path RaspiCV/src/Makefile&lt;br /&gt;
 &amp;lt; USERLAND_DIR&lt;br /&gt;
 &amp;gt; USERLAND_DIR = $(HOME)/userland&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiHelpers.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiCommonSettings.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiGPS.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/libgps_loader.c&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv` \&lt;br /&gt;
 &amp;gt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv4` \&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDFLAGS += `pkg-config --libs opencv`&lt;br /&gt;
 &amp;gt; LDFLAGS += `pkg-config --libs opencv4`&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDLIBFLAGS = -Wl, ...&lt;br /&gt;
 &amp;gt; LDLIBFLAGS = -ldl -Wl, ...&lt;br /&gt;
&lt;br /&gt;
Update RaspiCV.c&lt;br /&gt;
 cp userland/host_applications/linux/apps/raspicam/RaspiVid.c ~/RaspiCV/src/RaspiCV.c&lt;br /&gt;
and patch it&lt;br /&gt;
 &amp;lt; #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 &amp;gt; #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
   #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
               if(pData-&amp;gt;pstate-&amp;gt;inlineMotionVectors)&lt;br /&gt;
               {&lt;br /&gt;
 &amp;gt;		 cv_process_imv(buffer-&amp;gt;data, buffer-&amp;gt;length, buffer-&amp;gt;pts);&lt;br /&gt;
                  bytes_written = fwrite(buffer-&amp;gt;data, 1, buffer-&amp;gt;length, pData-&amp;gt;imv_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
      if (bytes_to_write)&lt;br /&gt;
      {&lt;br /&gt;
         mmal_buffer_header_mem_lock(buffer);&lt;br /&gt;
 &amp;gt;	cv_process_img(buffer-&amp;gt;data, bytes_to_write, buffer-&amp;gt;pts);&lt;br /&gt;
         bytes_written = fwrite(buffer-&amp;gt;data, 1, bytes_to_write, pData-&amp;gt;raw_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;             cv_init(state.common_settings.width, state.common_settings.height, state.framerate, state.raw_output_fmt);&lt;br /&gt;
               int initialCapturing=state.bCapturing;&lt;br /&gt;
               while (running)&lt;br /&gt;
               {&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
      destroy_splitter_component(&amp;amp;state);&lt;br /&gt;
      destroy_camera_component(&amp;amp;state);&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt;    cv_close();&lt;br /&gt;
&lt;br /&gt;
Replace de file RaspiCV/src/cv.cpp with this&lt;br /&gt;
 #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
 #include &amp;lt;opencv2/opencv.hpp&amp;gt;&lt;br /&gt;
 #include &amp;lt;pthread.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using namespace cv;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 #define SAD_LIMIT 2000&lt;br /&gt;
 #define streamOutGstStr &amp;quot;appsrc ! shmsink socket-path=/tmp/camera3 wait-for-connection=false async=false sync=false&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 struct motion_elt_t {&lt;br /&gt;
   int8_t x;&lt;br /&gt;
   int8_t y;&lt;br /&gt;
   uint16_t sad;&lt;br /&gt;
 };&lt;br /&gt;
 static motion_elt_t *motionIn;&lt;br /&gt;
 static Mat1b gray;&lt;br /&gt;
 static int width,height,fps; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_mutex_t imv_mutex;&lt;br /&gt;
 static bool imv_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_t img_thread;&lt;br /&gt;
 static pthread_mutex_t img_mutex;&lt;br /&gt;
 static pthread_cond_t img_condv;&lt;br /&gt;
 static bool img_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static bool init_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 static void *process_thread(void *ptr)&lt;br /&gt;
 {&lt;br /&gt;
   VideoWriter strOut = VideoWriter(streamOutGstStr,0,fps/1,Size(width,height),true); &lt;br /&gt;
   Mat3b grayBGR;&lt;br /&gt;
   Mat colormap;&lt;br /&gt;
   int32_t sum_x,sum_y;&lt;br /&gt;
 &lt;br /&gt;
   int mbx = width/16;&lt;br /&gt;
   int mby = height/16;&lt;br /&gt;
   int mbxy = (8 * mbx * mby);&lt;br /&gt;
   unsigned int motionSize = ((mbx+1)*mby) * sizeof(struct motion_elt_t); &lt;br /&gt;
   motion_elt_t *motionOut = new motion_elt_t[(mbx+1)*mby];&lt;br /&gt;
 &lt;br /&gt;
   char buff[20];int lg;&lt;br /&gt;
  &lt;br /&gt;
   while (true) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     while (!img_ready) pthread_cond_wait(&amp;amp;img_condv, &amp;amp;img_mutex);&lt;br /&gt;
     cvtColor(gray, grayBGR, COLOR_GRAY2BGR);&lt;br /&gt;
     applyColorMap(grayBGR, colormap, COLORMAP_JET); &lt;br /&gt;
 &lt;br /&gt;
     img_ready=false;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex); &lt;br /&gt;
 &lt;br /&gt;
     if(imv_ready) { &lt;br /&gt;
       pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
       memcpy(motionOut ,motionIn, motionSize);&lt;br /&gt;
       imv_ready=false;&lt;br /&gt;
       pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
     }  &lt;br /&gt;
 &lt;br /&gt;
     sum_x=0;sum_y=0;&lt;br /&gt;
     for (int j=0;j&amp;lt;mby;j++) {&lt;br /&gt;
       for (int i=0;i&amp;lt;mbx;i++) { &lt;br /&gt;
         motion_elt_t *vec = motionOut + (i+(mbx+1)*j); &lt;br /&gt;
         if (vec-&amp;gt;x == 0 &amp;amp;&amp;amp; vec-&amp;gt;y == 0) continue;&lt;br /&gt;
         if (vec-&amp;gt;sad &amp;gt; SAD_LIMIT) continue;&lt;br /&gt;
 	 int x = i*16 + 8;&lt;br /&gt;
         int y = j*16 + 8;&lt;br /&gt;
         float intensity = vec-&amp;gt;sad;&lt;br /&gt;
         intensity = round(255 * intensity / SAD_LIMIT);&lt;br /&gt;
         if (intensity &amp;gt; 255) intensity = 255;&lt;br /&gt;
         uint8_t *ptr = colormap.ptr&amp;lt;uchar&amp;gt;(0);&lt;br /&gt;
         uint8_t idx = 3*(uint8_t)intensity;&lt;br /&gt;
         arrowedLine(grayBGR, Point(x+vec-&amp;gt;x, y+vec-&amp;gt;y),&lt;br /&gt;
                              Point(x, y),&lt;br /&gt;
                              Scalar(ptr[idx], ptr[idx+1], ptr[idx+2])); &lt;br /&gt;
 &lt;br /&gt;
         sum_x += (intensity * vec-&amp;gt;x);&lt;br /&gt;
         sum_y += (intensity * vec-&amp;gt;y);&lt;br /&gt;
       }&lt;br /&gt;
     } &lt;br /&gt;
 &lt;br /&gt;
     sum_x = (sum_x/mbxy);&lt;br /&gt;
     sum_y = (sum_y/mbxy);&lt;br /&gt;
     arrowedLine(grayBGR, Point(320,240),Point(320+sum_x,240+sum_y),Scalar(0,255,0),5); &lt;br /&gt;
 &lt;br /&gt;
     drawAxes(&amp;amp;grayBGR);&lt;br /&gt;
 &lt;br /&gt;
     strOut.write(grayBGR);&lt;br /&gt;
   }&lt;br /&gt;
   return((void *)0);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_init(int w, int h, int f, int fmt)&lt;br /&gt;
 {&lt;br /&gt;
 //  freopen( &amp;quot;/tmp/error.txt&amp;quot;, &amp;quot;w&amp;quot;, stderr );&lt;br /&gt;
 //  cerr &amp;lt;&amp;lt; length &amp;lt;&amp;lt; endl;&lt;br /&gt;
 //    fd &amp;lt;&amp;lt; static_cast&amp;lt;int32_t&amp;gt;(sum_x) &amp;lt;&amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
   drawAxes_init(); &lt;br /&gt;
  &lt;br /&gt;
   width=w;height=h;fps=f;&lt;br /&gt;
 &lt;br /&gt;
   gray = Mat(height, width, CV_8UC1);&lt;br /&gt;
   motionIn = new motion_elt_t[((width/16)+1) * (height/16)]; &lt;br /&gt;
 &lt;br /&gt;
   pthread_mutex_init(&amp;amp;imv_mutex, NULL);&lt;br /&gt;
 &lt;br /&gt;
   pthread_mutex_init(&amp;amp;img_mutex, NULL);&lt;br /&gt;
   pthread_cond_init(&amp;amp;img_condv, NULL);&lt;br /&gt;
 &lt;br /&gt;
   pthread_create(&amp;amp;img_thread, NULL, process_thread, (void *)0);&lt;br /&gt;
 &lt;br /&gt;
   init_ready=true;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_img(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     memcpy(gray.data, p_buffer, length);		&lt;br /&gt;
     img_ready=true;&lt;br /&gt;
     pthread_cond_signal(&amp;amp;img_condv);&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_imv(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
     memcpy(motionIn ,p_buffer, length);&lt;br /&gt;
     imv_ready=true;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_close(void)&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 cd RaspiCV/src&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Visualprocessing/Motionvector/Run]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25195</id>
		<title>Explorer/RaspberryPi/Visualprocessing/Motionvector</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25195"/>
		<updated>2020-09-29T12:34:03Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Raspberry Pi is based on a BCM2835 System on a Chip (SoC), which provides an hardware (GPU) motion estimation block to the H264 encoder.&amp;lt;br /&amp;gt;&lt;br /&gt;
The Coarse Motion Block (CME) compares macroblock (16×16 pixels) from two consecutive frames and output a vector where the macroblock came from.&amp;lt;br /&amp;gt;&lt;br /&gt;
The vector is encoded in a single 32-bit value:&amp;lt;br /&amp;gt;&lt;br /&gt;
- the most significant 16 bits represent a Sum of Absolute Differences (SAD = quality of the estimation, the lower is the better)&amp;lt;br /&amp;gt;&lt;br /&gt;
- the others 16 bits represents (8-bit signed integer) the horizontal and vertical directions &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code below, patch &amp;quot;raspivid&amp;quot; to provide a video buffer (gray scale image) with motion vectors.&amp;lt;br /&amp;gt;&lt;br /&gt;
The new code compiled as &amp;quot;raspicv&amp;quot;, with a custom &amp;quot;cv.cpp&amp;quot; (see below), output motion vector display to /tmp/camera3 &amp;lt;br /&amp;gt;&lt;br /&gt;
The &amp;quot;cv.cpp&amp;quot; is limited to 640x480 grayscale image in this sample.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ref. Adam Heinrich thesis: An Optical Flow Odometry Sensor Based on the Raspberry Pi Computer)&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/raspberrypi/userland.git&lt;br /&gt;
 git clone https://github.com/adamheinrich/RaspiCV.git&lt;br /&gt;
&lt;br /&gt;
Path RaspiCV/src/Makefile&lt;br /&gt;
 &amp;lt; USERLAND_DIR&lt;br /&gt;
 &amp;gt; USERLAND_DIR = $(HOME)/userland&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiHelpers.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiCommonSettings.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiGPS.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/libgps_loader.c&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv` \&lt;br /&gt;
 &amp;gt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv4` \&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDFLAGS += `pkg-config --libs opencv`&lt;br /&gt;
 &amp;gt; LDFLAGS += `pkg-config --libs opencv4`&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDLIBFLAGS = -Wl, ...&lt;br /&gt;
 &amp;gt; LDLIBFLAGS = -ldl -Wl, ...&lt;br /&gt;
&lt;br /&gt;
Update RaspiCV.c&lt;br /&gt;
 cp userland/host_applications/linux/apps/raspicam/RaspiVid.c ~/RaspiCV/src/RaspiCV.c&lt;br /&gt;
and patch it&lt;br /&gt;
 &amp;lt; #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 &amp;gt; #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
   #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
               if(pData-&amp;gt;pstate-&amp;gt;inlineMotionVectors)&lt;br /&gt;
               {&lt;br /&gt;
 &amp;gt;		 cv_process_imv(buffer-&amp;gt;data, buffer-&amp;gt;length, buffer-&amp;gt;pts);&lt;br /&gt;
                  bytes_written = fwrite(buffer-&amp;gt;data, 1, buffer-&amp;gt;length, pData-&amp;gt;imv_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
      if (bytes_to_write)&lt;br /&gt;
      {&lt;br /&gt;
         mmal_buffer_header_mem_lock(buffer);&lt;br /&gt;
 &amp;gt;	cv_process_img(buffer-&amp;gt;data, bytes_to_write, buffer-&amp;gt;pts);&lt;br /&gt;
         bytes_written = fwrite(buffer-&amp;gt;data, 1, bytes_to_write, pData-&amp;gt;raw_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;             cv_init(state.common_settings.width, state.common_settings.height, state.framerate, state.raw_output_fmt);&lt;br /&gt;
               int initialCapturing=state.bCapturing;&lt;br /&gt;
               while (running)&lt;br /&gt;
               {&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
      destroy_splitter_component(&amp;amp;state);&lt;br /&gt;
      destroy_camera_component(&amp;amp;state);&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt;    cv_close();&lt;br /&gt;
&lt;br /&gt;
Replace de file RaspiCV/src/cv.cpp with this&lt;br /&gt;
 #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
 #include &amp;lt;opencv2/opencv.hpp&amp;gt;&lt;br /&gt;
 #include &amp;lt;pthread.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using namespace cv;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 #define SAD_LIMIT 2000&lt;br /&gt;
 #define streamOutGstStr &amp;quot;appsrc ! shmsink socket-path=/tmp/camera3 wait-for-connection=false async=false sync=false&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 struct motion_elt_t {&lt;br /&gt;
   int8_t x;&lt;br /&gt;
   int8_t y;&lt;br /&gt;
   uint16_t sad;&lt;br /&gt;
 };&lt;br /&gt;
 static motion_elt_t *motionIn;&lt;br /&gt;
 static Mat1b gray;&lt;br /&gt;
 static int width,height,fps; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_mutex_t imv_mutex;&lt;br /&gt;
 static bool imv_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_t img_thread;&lt;br /&gt;
 static pthread_mutex_t img_mutex;&lt;br /&gt;
 static pthread_cond_t img_condv;&lt;br /&gt;
 static bool img_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static bool init_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 static void *process_thread(void *ptr)&lt;br /&gt;
 {&lt;br /&gt;
   VideoWriter strOut = VideoWriter(streamOutGstStr,0,fps/1,Size(width,height),true); &lt;br /&gt;
   Mat3b grayBGR;&lt;br /&gt;
   Mat colormap;&lt;br /&gt;
   int32_t sum_x,sum_y;&lt;br /&gt;
 &lt;br /&gt;
   int mbx = width/16;&lt;br /&gt;
   int mby = height/16;&lt;br /&gt;
   int mbxy = (8 * mbx * mby);&lt;br /&gt;
   unsigned int motionSize = ((mbx+1)*mby) * sizeof(struct motion_elt_t); &lt;br /&gt;
   motion_elt_t *motionOut = new motion_elt_t[(mbx+1)*mby];&lt;br /&gt;
 &lt;br /&gt;
   char buff[20];int lg;&lt;br /&gt;
  &lt;br /&gt;
   while (true) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     while (!img_ready) pthread_cond_wait(&amp;amp;img_condv, &amp;amp;img_mutex);&lt;br /&gt;
     cvtColor(gray, grayBGR, COLOR_GRAY2BGR);&lt;br /&gt;
     applyColorMap(grayBGR, colormap, COLORMAP_JET); &lt;br /&gt;
 &lt;br /&gt;
     img_ready=false;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex); &lt;br /&gt;
 &lt;br /&gt;
     if(imv_ready) { &lt;br /&gt;
       pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
       memcpy(motionOut ,motionIn, motionSize);&lt;br /&gt;
       imv_ready=false;&lt;br /&gt;
       pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
     }  &lt;br /&gt;
 &lt;br /&gt;
     sum_x=0;sum_y=0;&lt;br /&gt;
     for (int j=0;j&amp;lt;mby;j++) {&lt;br /&gt;
       for (int i=0;i&amp;lt;mbx;i++) { &lt;br /&gt;
         motion_elt_t *vec = motionOut + (i+(mbx+1)*j); &lt;br /&gt;
         if (vec-&amp;gt;x == 0 &amp;amp;&amp;amp; vec-&amp;gt;y == 0) continue;&lt;br /&gt;
         if (vec-&amp;gt;sad &amp;gt; SAD_LIMIT) continue;&lt;br /&gt;
 	 int x = i*16 + 8;&lt;br /&gt;
         int y = j*16 + 8;&lt;br /&gt;
         float intensity = vec-&amp;gt;sad;&lt;br /&gt;
         intensity = round(255 * intensity / SAD_LIMIT);&lt;br /&gt;
         if (intensity &amp;gt; 255) intensity = 255;&lt;br /&gt;
         uint8_t *ptr = colormap.ptr&amp;lt;uchar&amp;gt;(0);&lt;br /&gt;
         uint8_t idx = 3*(uint8_t)intensity;&lt;br /&gt;
         arrowedLine(grayBGR, Point(x+vec-&amp;gt;x, y+vec-&amp;gt;y),&lt;br /&gt;
                              Point(x, y),&lt;br /&gt;
                              Scalar(ptr[idx], ptr[idx+1], ptr[idx+2])); &lt;br /&gt;
 &lt;br /&gt;
         sum_x += (intensity * vec-&amp;gt;x);&lt;br /&gt;
         sum_y += (intensity * vec-&amp;gt;y);&lt;br /&gt;
       }&lt;br /&gt;
     } &lt;br /&gt;
 &lt;br /&gt;
     sum_x = (sum_x/mbxy);&lt;br /&gt;
     sum_y = (sum_y/mbxy);&lt;br /&gt;
     arrowedLine(grayBGR, Point(320,240),Point(320+sum_x,240+sum_y),Scalar(0,255,0),5); &lt;br /&gt;
 &lt;br /&gt;
     drawAxes(&amp;amp;grayBGR);&lt;br /&gt;
 &lt;br /&gt;
     strOut.write(grayBGR);&lt;br /&gt;
   }&lt;br /&gt;
   return((void *)0);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_init(int w, int h, int f, int fmt)&lt;br /&gt;
 {&lt;br /&gt;
 //  freopen( &amp;quot;/tmp/error.txt&amp;quot;, &amp;quot;w&amp;quot;, stderr );&lt;br /&gt;
 //  cerr &amp;lt;&amp;lt; length &amp;lt;&amp;lt; endl;&lt;br /&gt;
 //    fd &amp;lt;&amp;lt; static_cast&amp;lt;int32_t&amp;gt;(sum_x) &amp;lt;&amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
   drawAxes_init(); &lt;br /&gt;
 &lt;br /&gt;
   width=w;height=h;fps=f;&lt;br /&gt;
&lt;br /&gt;
   gray = Mat(height, width, CV_8UC1);&lt;br /&gt;
   motionIn = new motion_elt_t[((width/16)+1) * (height/16)]; &lt;br /&gt;
&lt;br /&gt;
   pthread_mutex_init(&amp;amp;imv_mutex, NULL);&lt;br /&gt;
&lt;br /&gt;
   pthread_mutex_init(&amp;amp;img_mutex, NULL);&lt;br /&gt;
   pthread_cond_init(&amp;amp;img_condv, NULL);&lt;br /&gt;
&lt;br /&gt;
   pthread_create(&amp;amp;img_thread, NULL, process_thread, (void *)0);&lt;br /&gt;
&lt;br /&gt;
   init_ready=true;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_img(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     memcpy(gray.data, p_buffer, length);		&lt;br /&gt;
     img_ready=true;&lt;br /&gt;
     pthread_cond_signal(&amp;amp;img_condv);&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_imv(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
     memcpy(motionIn ,p_buffer, length);&lt;br /&gt;
     imv_ready=true;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_close(void)&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 cd RaspiCV/src&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Visualprocessing/Motionvector/Run]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25194</id>
		<title>Explorer/RaspberryPi/Visualprocessing/Motionvector</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25194"/>
		<updated>2020-09-29T12:33:23Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Raspberry Pi is based on a BCM2835 System on a Chip (SoC), which provides an hardware (GPU) motion estimation block to the H264 encoder.&amp;lt;br /&amp;gt;&lt;br /&gt;
The Coarse Motion Block (CME) compares macroblock (16×16 pixels) from two consecutive frames and output a vector where the macroblock came from.&amp;lt;br /&amp;gt;&lt;br /&gt;
The vector is encoded in a single 32-bit value:&amp;lt;br /&amp;gt;&lt;br /&gt;
- the most significant 16 bits represent a Sum of Absolute Differences (SAD = quality of the estimation, the lower is the better)&amp;lt;br /&amp;gt;&lt;br /&gt;
- the others 16 bits represents (8-bit signed integer) the horizontal and vertical directions &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code below, patch &amp;quot;raspivid&amp;quot; to provide a video buffer (gray scale image) with motion vectors.&amp;lt;br /&amp;gt;&lt;br /&gt;
The new code compiled as &amp;quot;raspicv&amp;quot;, with a custom &amp;quot;cv.cpp&amp;quot; (see below), output motion vector display to /tmp/camera3 &amp;lt;br /&amp;gt;&lt;br /&gt;
The &amp;quot;cv.cpp&amp;quot; is limited to 640x480 grayscale image in this sample.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ref. Adam Heinrich thesis: An Optical Flow Odometry Sensor Based on the Raspberry Pi Computer)&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/raspberrypi/userland.git&lt;br /&gt;
 git clone https://github.com/adamheinrich/RaspiCV.git&lt;br /&gt;
&lt;br /&gt;
Path RaspiCV/src/Makefile&lt;br /&gt;
 &amp;lt; USERLAND_DIR&lt;br /&gt;
 &amp;gt; USERLAND_DIR = $(HOME)/userland&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiHelpers.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiCommonSettings.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiGPS.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/libgps_loader.c&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv` \&lt;br /&gt;
 &amp;gt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv4` \&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDFLAGS += `pkg-config --libs opencv`&lt;br /&gt;
 &amp;gt; LDFLAGS += `pkg-config --libs opencv4`&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDLIBFLAGS = -Wl, ...&lt;br /&gt;
 &amp;gt; LDLIBFLAGS = -ldl -Wl, ...&lt;br /&gt;
&lt;br /&gt;
Update RaspiCV.c&lt;br /&gt;
 cp userland/host_applications/linux/apps/raspicam/RaspiVid.c ~/RaspiCV/src/RaspiCV.c&lt;br /&gt;
and patch it&lt;br /&gt;
 &amp;lt; #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 &amp;gt; #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
   #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
               if(pData-&amp;gt;pstate-&amp;gt;inlineMotionVectors)&lt;br /&gt;
               {&lt;br /&gt;
 &amp;gt;		 cv_process_imv(buffer-&amp;gt;data, buffer-&amp;gt;length, buffer-&amp;gt;pts);&lt;br /&gt;
                  bytes_written = fwrite(buffer-&amp;gt;data, 1, buffer-&amp;gt;length, pData-&amp;gt;imv_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
      if (bytes_to_write)&lt;br /&gt;
      {&lt;br /&gt;
         mmal_buffer_header_mem_lock(buffer);&lt;br /&gt;
 &amp;gt;	cv_process_img(buffer-&amp;gt;data, bytes_to_write, buffer-&amp;gt;pts);&lt;br /&gt;
         bytes_written = fwrite(buffer-&amp;gt;data, 1, bytes_to_write, pData-&amp;gt;raw_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;             cv_init(state.common_settings.width, state.common_settings.height, state.framerate, state.raw_output_fmt);&lt;br /&gt;
               int initialCapturing=state.bCapturing;&lt;br /&gt;
               while (running)&lt;br /&gt;
               {&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
      destroy_splitter_component(&amp;amp;state);&lt;br /&gt;
      destroy_camera_component(&amp;amp;state);&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt;    cv_close();&lt;br /&gt;
&lt;br /&gt;
Replace de file RaspiCV/src/cv.cpp with this&lt;br /&gt;
 #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
 #include &amp;lt;opencv2/opencv.hpp&amp;gt;&lt;br /&gt;
 #include &amp;lt;pthread.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using namespace cv;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 #define SAD_LIMIT 2000&lt;br /&gt;
 #define streamOutGstStr &amp;quot;appsrc ! shmsink socket-path=/tmp/camera3 wait-for-connection=false async=false sync=false&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 struct motion_elt_t {&lt;br /&gt;
   int8_t x;&lt;br /&gt;
   int8_t y;&lt;br /&gt;
   uint16_t sad;&lt;br /&gt;
 };&lt;br /&gt;
 static motion_elt_t *motionIn;&lt;br /&gt;
 static Mat1b gray;&lt;br /&gt;
 static int width,height,fps; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_mutex_t imv_mutex;&lt;br /&gt;
 static bool imv_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_t img_thread;&lt;br /&gt;
 static pthread_mutex_t img_mutex;&lt;br /&gt;
 static pthread_cond_t img_condv;&lt;br /&gt;
 static bool img_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static bool init_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 static void *process_thread(void *ptr)&lt;br /&gt;
 {&lt;br /&gt;
   VideoWriter strOut = VideoWriter(streamOutGstStr,0,fps/1,Size(width,height),true); &lt;br /&gt;
   Mat3b grayBGR;&lt;br /&gt;
   Mat colormap;&lt;br /&gt;
   int32_t sum_x,sum_y;&lt;br /&gt;
 &lt;br /&gt;
   int mbx = width/16;&lt;br /&gt;
   int mby = height/16;&lt;br /&gt;
   int mbxy = (8 * mbx * mby);&lt;br /&gt;
   unsigned int motionSize = ((mbx+1)*mby) * sizeof(struct motion_elt_t); &lt;br /&gt;
   motion_elt_t *motionOut = new motion_elt_t[(mbx+1)*mby];&lt;br /&gt;
 &lt;br /&gt;
   char buff[20];int lg;&lt;br /&gt;
  &lt;br /&gt;
   while (true) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     while (!img_ready) pthread_cond_wait(&amp;amp;img_condv, &amp;amp;img_mutex);&lt;br /&gt;
     cvtColor(gray, grayBGR, COLOR_GRAY2BGR);&lt;br /&gt;
     applyColorMap(grayBGR, colormap, COLORMAP_JET); &lt;br /&gt;
 &lt;br /&gt;
     img_ready=false;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex); &lt;br /&gt;
 &lt;br /&gt;
     if(imv_ready) { &lt;br /&gt;
       pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
       memcpy(motionOut ,motionIn, motionSize);&lt;br /&gt;
       imv_ready=false;&lt;br /&gt;
       pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
     }  &lt;br /&gt;
 &lt;br /&gt;
     sum_x=0;sum_y=0;&lt;br /&gt;
     for (int j=0;j&amp;lt;mby;j++) {&lt;br /&gt;
       for (int i=0;i&amp;lt;mbx;i++) { &lt;br /&gt;
         motion_elt_t *vec = motionOut + (i+(mbx+1)*j); &lt;br /&gt;
         if (vec-&amp;gt;x == 0 &amp;amp;&amp;amp; vec-&amp;gt;y == 0) continue;&lt;br /&gt;
         if (vec-&amp;gt;sad &amp;gt; SAD_LIMIT) continue;&lt;br /&gt;
 	 int x = i*16 + 8;&lt;br /&gt;
         int y = j*16 + 8;&lt;br /&gt;
         float intensity = vec-&amp;gt;sad;&lt;br /&gt;
         intensity = round(255 * intensity / SAD_LIMIT);&lt;br /&gt;
         if (intensity &amp;gt; 255) intensity = 255;&lt;br /&gt;
	 uint8_t *ptr = colormap.ptr&amp;lt;uchar&amp;gt;(0);&lt;br /&gt;
	 uint8_t idx = 3*(uint8_t)intensity;&lt;br /&gt;
         arrowedLine(grayBGR, Point(x+vec-&amp;gt;x, y+vec-&amp;gt;y),&lt;br /&gt;
                              Point(x, y),&lt;br /&gt;
                              Scalar(ptr[idx], ptr[idx+1], ptr[idx+2])); &lt;br /&gt;
 &lt;br /&gt;
         sum_x += (intensity * vec-&amp;gt;x);&lt;br /&gt;
         sum_y += (intensity * vec-&amp;gt;y);&lt;br /&gt;
       }&lt;br /&gt;
     } &lt;br /&gt;
 &lt;br /&gt;
     sum_x = (sum_x/mbxy);&lt;br /&gt;
     sum_y = (sum_y/mbxy);&lt;br /&gt;
     arrowedLine(grayBGR, Point(320,240),Point(320+sum_x,240+sum_y),Scalar(0,255,0),5); &lt;br /&gt;
 &lt;br /&gt;
     drawAxes(&amp;amp;grayBGR);&lt;br /&gt;
 &lt;br /&gt;
     strOut.write(grayBGR);&lt;br /&gt;
   }&lt;br /&gt;
   return((void *)0);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_init(int w, int h, int f, int fmt)&lt;br /&gt;
 {&lt;br /&gt;
 //  freopen( &amp;quot;/tmp/error.txt&amp;quot;, &amp;quot;w&amp;quot;, stderr );&lt;br /&gt;
 //  cerr &amp;lt;&amp;lt; length &amp;lt;&amp;lt; endl;&lt;br /&gt;
 //    fd &amp;lt;&amp;lt; static_cast&amp;lt;int32_t&amp;gt;(sum_x) &amp;lt;&amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
   drawAxes_init(); &lt;br /&gt;
 &lt;br /&gt;
   width=w;height=h;fps=f;&lt;br /&gt;
&lt;br /&gt;
   gray = Mat(height, width, CV_8UC1);&lt;br /&gt;
   motionIn = new motion_elt_t[((width/16)+1) * (height/16)]; &lt;br /&gt;
&lt;br /&gt;
   pthread_mutex_init(&amp;amp;imv_mutex, NULL);&lt;br /&gt;
&lt;br /&gt;
   pthread_mutex_init(&amp;amp;img_mutex, NULL);&lt;br /&gt;
   pthread_cond_init(&amp;amp;img_condv, NULL);&lt;br /&gt;
&lt;br /&gt;
   pthread_create(&amp;amp;img_thread, NULL, process_thread, (void *)0);&lt;br /&gt;
&lt;br /&gt;
   init_ready=true;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_img(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     memcpy(gray.data, p_buffer, length);		&lt;br /&gt;
     img_ready=true;&lt;br /&gt;
     pthread_cond_signal(&amp;amp;img_condv);&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_imv(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
     memcpy(motionIn ,p_buffer, length);&lt;br /&gt;
     imv_ready=true;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_close(void)&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 cd RaspiCV/src&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Visualprocessing/Motionvector/Run]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25193</id>
		<title>Explorer/RaspberryPi/Visualprocessing/Motionvector</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25193"/>
		<updated>2020-09-29T12:32:49Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Raspberry Pi is based on a BCM2835 System on a Chip (SoC), which provides an hardware (GPU) motion estimation block to the H264 encoder.&amp;lt;br /&amp;gt;&lt;br /&gt;
The Coarse Motion Block (CME) compares macroblock (16×16 pixels) from two consecutive frames and output a vector where the macroblock came from.&amp;lt;br /&amp;gt;&lt;br /&gt;
The vector is encoded in a single 32-bit value:&amp;lt;br /&amp;gt;&lt;br /&gt;
- the most significant 16 bits represent a Sum of Absolute Differences (SAD = quality of the estimation, the lower is the better)&amp;lt;br /&amp;gt;&lt;br /&gt;
- the others 16 bits represents (8-bit signed integer) the horizontal and vertical directions &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code below, patch &amp;quot;raspivid&amp;quot; to provide a video buffer (gray scale image) with motion vectors.&amp;lt;br /&amp;gt;&lt;br /&gt;
The new code compiled as &amp;quot;raspicv&amp;quot;, with a custom &amp;quot;cv.cpp&amp;quot; (see below), output motion vector display to /tmp/camera3 &amp;lt;br /&amp;gt;&lt;br /&gt;
The &amp;quot;cv.cpp&amp;quot; is limited to 640x480 grayscale image in this sample.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ref. Adam Heinrich thesis: An Optical Flow Odometry Sensor Based on the Raspberry Pi Computer)&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/raspberrypi/userland.git&lt;br /&gt;
 git clone https://github.com/adamheinrich/RaspiCV.git&lt;br /&gt;
&lt;br /&gt;
Path RaspiCV/src/Makefile&lt;br /&gt;
 &amp;lt; USERLAND_DIR&lt;br /&gt;
 &amp;gt; USERLAND_DIR = $(HOME)/userland&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiHelpers.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiCommonSettings.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiGPS.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/libgps_loader.c&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv` \&lt;br /&gt;
 &amp;gt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv4` \&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDFLAGS += `pkg-config --libs opencv`&lt;br /&gt;
 &amp;gt; LDFLAGS += `pkg-config --libs opencv4`&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDLIBFLAGS = -Wl, ...&lt;br /&gt;
 &amp;gt; LDLIBFLAGS = -ldl -Wl, ...&lt;br /&gt;
&lt;br /&gt;
Update RaspiCV.c&lt;br /&gt;
 cp userland/host_applications/linux/apps/raspicam/RaspiVid.c ~/RaspiCV/src/RaspiCV.c&lt;br /&gt;
and patch it&lt;br /&gt;
 &amp;lt; #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 &amp;gt; #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
   #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
               if(pData-&amp;gt;pstate-&amp;gt;inlineMotionVectors)&lt;br /&gt;
               {&lt;br /&gt;
 &amp;gt;		 cv_process_imv(buffer-&amp;gt;data, buffer-&amp;gt;length, buffer-&amp;gt;pts);&lt;br /&gt;
                  bytes_written = fwrite(buffer-&amp;gt;data, 1, buffer-&amp;gt;length, pData-&amp;gt;imv_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
      if (bytes_to_write)&lt;br /&gt;
      {&lt;br /&gt;
         mmal_buffer_header_mem_lock(buffer);&lt;br /&gt;
 &amp;gt;	cv_process_img(buffer-&amp;gt;data, bytes_to_write, buffer-&amp;gt;pts);&lt;br /&gt;
         bytes_written = fwrite(buffer-&amp;gt;data, 1, bytes_to_write, pData-&amp;gt;raw_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;             cv_init(state.common_settings.width, state.common_settings.height, state.framerate, state.raw_output_fmt);&lt;br /&gt;
               int initialCapturing=state.bCapturing;&lt;br /&gt;
               while (running)&lt;br /&gt;
               {&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
      destroy_splitter_component(&amp;amp;state);&lt;br /&gt;
      destroy_camera_component(&amp;amp;state);&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt;    cv_close();&lt;br /&gt;
&lt;br /&gt;
Replace de file RaspiCV/src/cv.cpp with this&lt;br /&gt;
 #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
 #include &amp;lt;opencv2/opencv.hpp&amp;gt;&lt;br /&gt;
 #include &amp;lt;pthread.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using namespace cv;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 #define SAD_LIMIT 2000&lt;br /&gt;
 #define streamOutGstStr &amp;quot;appsrc ! shmsink socket-path=/tmp/camera3 wait-for-connection=false async=false sync=false&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 struct motion_elt_t {&lt;br /&gt;
   int8_t x;&lt;br /&gt;
   int8_t y;&lt;br /&gt;
   uint16_t sad;&lt;br /&gt;
 };&lt;br /&gt;
 static motion_elt_t *motionIn;&lt;br /&gt;
 static Mat1b gray;&lt;br /&gt;
 static int width,height,fps; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_mutex_t imv_mutex;&lt;br /&gt;
 static bool imv_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_t img_thread;&lt;br /&gt;
 static pthread_mutex_t img_mutex;&lt;br /&gt;
 static pthread_cond_t img_condv;&lt;br /&gt;
 static bool img_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static bool init_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 static void *process_thread(void *ptr)&lt;br /&gt;
 {&lt;br /&gt;
   VideoWriter strOut = VideoWriter(streamOutGstStr,0,fps/1,Size(width,height),true); &lt;br /&gt;
   Mat3b grayBGR;&lt;br /&gt;
   Mat colormap;&lt;br /&gt;
   int32_t sum_x,sum_y;&lt;br /&gt;
 &lt;br /&gt;
   int mbx = width/16;&lt;br /&gt;
   int mby = height/16;&lt;br /&gt;
   int mbxy = (8 * mbx * mby);&lt;br /&gt;
   unsigned int motionSize = ((mbx+1)*mby) * sizeof(struct motion_elt_t); &lt;br /&gt;
   motion_elt_t *motionOut = new motion_elt_t[(mbx+1)*mby];&lt;br /&gt;
 &lt;br /&gt;
   char buff[20];int lg;&lt;br /&gt;
  &lt;br /&gt;
   while (true) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     while (!img_ready) pthread_cond_wait(&amp;amp;img_condv, &amp;amp;img_mutex);&lt;br /&gt;
     cvtColor(gray, grayBGR, COLOR_GRAY2BGR);&lt;br /&gt;
     applyColorMap(grayBGR, colormap, COLORMAP_JET); &lt;br /&gt;
 &lt;br /&gt;
     img_ready=false;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex); &lt;br /&gt;
 &lt;br /&gt;
     if(imv_ready) { &lt;br /&gt;
       pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
       memcpy(motionOut ,motionIn, motionSize);&lt;br /&gt;
       imv_ready=false;&lt;br /&gt;
       pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
     }  &lt;br /&gt;
 &lt;br /&gt;
     sum_x=0;sum_y=0;&lt;br /&gt;
     for (int j=0;j&amp;lt;mby;j++) {&lt;br /&gt;
       for (int i=0;i&amp;lt;mbx;i++) { &lt;br /&gt;
         motion_elt_t *vec = motionOut + (i+(mbx+1)*j); &lt;br /&gt;
         if (vec-&amp;gt;x == 0 &amp;amp;&amp;amp; vec-&amp;gt;y == 0) continue;&lt;br /&gt;
         if (vec-&amp;gt;sad &amp;gt; SAD_LIMIT) continue;&lt;br /&gt;
 	 int x = i*16 + 8;&lt;br /&gt;
         int y = j*16 + 8;&lt;br /&gt;
	 float intensity = vec-&amp;gt;sad;&lt;br /&gt;
	 intensity = round(255 * intensity / SAD_LIMIT);&lt;br /&gt;
	 if (intensity &amp;gt; 255) intensity = 255;&lt;br /&gt;
	 uint8_t *ptr = colormap.ptr&amp;lt;uchar&amp;gt;(0);&lt;br /&gt;
	 uint8_t idx = 3*(uint8_t)intensity;&lt;br /&gt;
         arrowedLine(grayBGR, Point(x+vec-&amp;gt;x, y+vec-&amp;gt;y),&lt;br /&gt;
                              Point(x, y),&lt;br /&gt;
                              Scalar(ptr[idx], ptr[idx+1], ptr[idx+2])); &lt;br /&gt;
 &lt;br /&gt;
         sum_x += (intensity * vec-&amp;gt;x);&lt;br /&gt;
         sum_y += (intensity * vec-&amp;gt;y);&lt;br /&gt;
       }&lt;br /&gt;
     } &lt;br /&gt;
 &lt;br /&gt;
     sum_x = (sum_x/mbxy);&lt;br /&gt;
     sum_y = (sum_y/mbxy);&lt;br /&gt;
     arrowedLine(grayBGR, Point(320,240),Point(320+sum_x,240+sum_y),Scalar(0,255,0),5); &lt;br /&gt;
 &lt;br /&gt;
     drawAxes(&amp;amp;grayBGR);&lt;br /&gt;
 &lt;br /&gt;
     strOut.write(grayBGR);&lt;br /&gt;
   }&lt;br /&gt;
   return((void *)0);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_init(int w, int h, int f, int fmt)&lt;br /&gt;
 {&lt;br /&gt;
 //  freopen( &amp;quot;/tmp/error.txt&amp;quot;, &amp;quot;w&amp;quot;, stderr );&lt;br /&gt;
 //  cerr &amp;lt;&amp;lt; length &amp;lt;&amp;lt; endl;&lt;br /&gt;
 //    fd &amp;lt;&amp;lt; static_cast&amp;lt;int32_t&amp;gt;(sum_x) &amp;lt;&amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
   drawAxes_init(); &lt;br /&gt;
 &lt;br /&gt;
   width=w;height=h;fps=f;&lt;br /&gt;
&lt;br /&gt;
   gray = Mat(height, width, CV_8UC1);&lt;br /&gt;
   motionIn = new motion_elt_t[((width/16)+1) * (height/16)]; &lt;br /&gt;
&lt;br /&gt;
   pthread_mutex_init(&amp;amp;imv_mutex, NULL);&lt;br /&gt;
&lt;br /&gt;
   pthread_mutex_init(&amp;amp;img_mutex, NULL);&lt;br /&gt;
   pthread_cond_init(&amp;amp;img_condv, NULL);&lt;br /&gt;
&lt;br /&gt;
   pthread_create(&amp;amp;img_thread, NULL, process_thread, (void *)0);&lt;br /&gt;
&lt;br /&gt;
   init_ready=true;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_img(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     memcpy(gray.data, p_buffer, length);		&lt;br /&gt;
     img_ready=true;&lt;br /&gt;
     pthread_cond_signal(&amp;amp;img_condv);&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_imv(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
     memcpy(motionIn ,p_buffer, length);&lt;br /&gt;
     imv_ready=true;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_close(void)&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 cd RaspiCV/src&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Visualprocessing/Motionvector/Run]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25192</id>
		<title>Explorer/RaspberryPi/Visualprocessing/Motionvector</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25192"/>
		<updated>2020-09-29T12:31:40Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Raspberry Pi is based on a BCM2835 System on a Chip (SoC), which provides an hardware (GPU) motion estimation block to the H264 encoder.&amp;lt;br /&amp;gt;&lt;br /&gt;
The Coarse Motion Block (CME) compares macroblock (16×16 pixels) from two consecutive frames and output a vector where the macroblock came from.&amp;lt;br /&amp;gt;&lt;br /&gt;
The vector is encoded in a single 32-bit value:&amp;lt;br /&amp;gt;&lt;br /&gt;
- the most significant 16 bits represent a Sum of Absolute Differences (SAD = quality of the estimation, the lower is the better)&amp;lt;br /&amp;gt;&lt;br /&gt;
- the others 16 bits represents (8-bit signed integer) the horizontal and vertical directions &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code below, patch &amp;quot;raspivid&amp;quot; to provide a video buffer (gray scale image) with motion vectors.&amp;lt;br /&amp;gt;&lt;br /&gt;
The new code compiled as &amp;quot;raspicv&amp;quot;, with a custom &amp;quot;cv.cpp&amp;quot; (see below), output motion vector display to /tmp/camera3 &amp;lt;br /&amp;gt;&lt;br /&gt;
The &amp;quot;cv.cpp&amp;quot; is limited to 640x480 grayscale image in this sample.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ref. Adam Heinrich thesis: An Optical Flow Odometry Sensor Based on the Raspberry Pi Computer)&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/raspberrypi/userland.git&lt;br /&gt;
 git clone https://github.com/adamheinrich/RaspiCV.git&lt;br /&gt;
&lt;br /&gt;
Path RaspiCV/src/Makefile&lt;br /&gt;
 &amp;lt; USERLAND_DIR&lt;br /&gt;
 &amp;gt; USERLAND_DIR = $(HOME)/userland&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiHelpers.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiCommonSettings.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiGPS.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/libgps_loader.c&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv` \&lt;br /&gt;
 &amp;gt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv4` \&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDFLAGS += `pkg-config --libs opencv`&lt;br /&gt;
 &amp;gt; LDFLAGS += `pkg-config --libs opencv4`&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDLIBFLAGS = -Wl, ...&lt;br /&gt;
 &amp;gt; LDLIBFLAGS = -ldl -Wl, ...&lt;br /&gt;
&lt;br /&gt;
Update RaspiCV.c&lt;br /&gt;
 cp userland/host_applications/linux/apps/raspicam/RaspiVid.c ~/RaspiCV/src/RaspiCV.c&lt;br /&gt;
and patch it&lt;br /&gt;
 &amp;lt; #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 &amp;gt; #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
   #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
               if(pData-&amp;gt;pstate-&amp;gt;inlineMotionVectors)&lt;br /&gt;
               {&lt;br /&gt;
 &amp;gt;		 cv_process_imv(buffer-&amp;gt;data, buffer-&amp;gt;length, buffer-&amp;gt;pts);&lt;br /&gt;
                  bytes_written = fwrite(buffer-&amp;gt;data, 1, buffer-&amp;gt;length, pData-&amp;gt;imv_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
      if (bytes_to_write)&lt;br /&gt;
      {&lt;br /&gt;
         mmal_buffer_header_mem_lock(buffer);&lt;br /&gt;
 &amp;gt;	cv_process_img(buffer-&amp;gt;data, bytes_to_write, buffer-&amp;gt;pts);&lt;br /&gt;
         bytes_written = fwrite(buffer-&amp;gt;data, 1, bytes_to_write, pData-&amp;gt;raw_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;             cv_init(state.common_settings.width, state.common_settings.height, state.framerate, state.raw_output_fmt);&lt;br /&gt;
               int initialCapturing=state.bCapturing;&lt;br /&gt;
               while (running)&lt;br /&gt;
               {&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
      destroy_splitter_component(&amp;amp;state);&lt;br /&gt;
      destroy_camera_component(&amp;amp;state);&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt;    cv_close();&lt;br /&gt;
&lt;br /&gt;
Replace de file RaspiCV/src/cv.cpp with this&lt;br /&gt;
 #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
 #include &amp;lt;opencv2/opencv.hpp&amp;gt;&lt;br /&gt;
 #include &amp;lt;pthread.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using namespace cv;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 #define SAD_LIMIT 2000&lt;br /&gt;
 #define streamOutGstStr &amp;quot;appsrc ! shmsink socket-path=/tmp/camera3 wait-for-connection=false async=false sync=false&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 struct motion_elt_t {&lt;br /&gt;
   int8_t x;&lt;br /&gt;
   int8_t y;&lt;br /&gt;
   uint16_t sad;&lt;br /&gt;
 };&lt;br /&gt;
 static motion_elt_t *motionIn;&lt;br /&gt;
 static Mat1b gray;&lt;br /&gt;
 static int width,height,fps; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_mutex_t imv_mutex;&lt;br /&gt;
 static bool imv_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_t img_thread;&lt;br /&gt;
 static pthread_mutex_t img_mutex;&lt;br /&gt;
 static pthread_cond_t img_condv;&lt;br /&gt;
 static bool img_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static bool init_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 static void *process_thread(void *ptr)&lt;br /&gt;
 {&lt;br /&gt;
   VideoWriter strOut = VideoWriter(streamOutGstStr,0,fps/1,Size(width,height),true); &lt;br /&gt;
   Mat3b grayBGR;&lt;br /&gt;
   Mat colormap;&lt;br /&gt;
   int32_t sum_x,sum_y;&lt;br /&gt;
 &lt;br /&gt;
   int mbx = width/16;&lt;br /&gt;
   int mby = height/16;&lt;br /&gt;
   int mbxy = (8 * mbx * mby);&lt;br /&gt;
   unsigned int motionSize = ((mbx+1)*mby) * sizeof(struct motion_elt_t); &lt;br /&gt;
   motion_elt_t *motionOut = new motion_elt_t[(mbx+1)*mby];&lt;br /&gt;
 &lt;br /&gt;
   char buff[20];int lg;&lt;br /&gt;
  &lt;br /&gt;
   while (true) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     while (!img_ready) pthread_cond_wait(&amp;amp;img_condv, &amp;amp;img_mutex);&lt;br /&gt;
     cvtColor(gray, grayBGR, COLOR_GRAY2BGR);&lt;br /&gt;
     applyColorMap(grayBGR, colormap, COLORMAP_JET); &lt;br /&gt;
 &lt;br /&gt;
     img_ready=false;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex); &lt;br /&gt;
 &lt;br /&gt;
     if(imv_ready) { &lt;br /&gt;
       pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
       memcpy(motionOut ,motionIn, motionSize);&lt;br /&gt;
       imv_ready=false;&lt;br /&gt;
       pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
     }  &lt;br /&gt;
 &lt;br /&gt;
     sum_x=0;sum_y=0;&lt;br /&gt;
     for (int j=0;j&amp;lt;mby;j++) {&lt;br /&gt;
       for (int i=0;i&amp;lt;mbx;i++) { &lt;br /&gt;
         motion_elt_t *vec = motionOut + (i+(mbx+1)*j); &lt;br /&gt;
         if (vec-&amp;gt;x == 0 &amp;amp;&amp;amp; vec-&amp;gt;y == 0) continue;&lt;br /&gt;
         if (vec-&amp;gt;sad &amp;gt; SAD_LIMIT) continue;&lt;br /&gt;
 	 int x = i*16 + 8;&lt;br /&gt;
         int y = j*16 + 8;&lt;br /&gt;
	 float intensity = vec-&amp;gt;sad;&lt;br /&gt;
	 intensity = round(255 * intensity / SAD_LIMIT);&lt;br /&gt;
	 if (intensity &amp;gt; 255) intensity = 255;&lt;br /&gt;
	 uint8_t *ptr = colormap.ptr&amp;lt;uchar&amp;gt;(0);&lt;br /&gt;
	 uint8_t idx = 3*(uint8_t)intensity;&lt;br /&gt;
	 arrowedLine(grayBGR, Point(x+vec-&amp;gt;x, y+vec-&amp;gt;y),&lt;br /&gt;
	 		   Point(x, y),&lt;br /&gt;
	 		   Scalar(ptr[idx], ptr[idx+1], ptr[idx+2])); &lt;br /&gt;
 &lt;br /&gt;
 	 sum_x += (intensity * vec-&amp;gt;x);&lt;br /&gt;
	 sum_y += (intensity * vec-&amp;gt;y);&lt;br /&gt;
       }&lt;br /&gt;
     } &lt;br /&gt;
 &lt;br /&gt;
     sum_x = (sum_x/mbxy);&lt;br /&gt;
     sum_y = (sum_y/mbxy);&lt;br /&gt;
     arrowedLine(grayBGR, Point(320,240),Point(320+sum_x,240+sum_y),Scalar(0,255,0),5); &lt;br /&gt;
 &lt;br /&gt;
     drawAxes(&amp;amp;grayBGR);&lt;br /&gt;
 &lt;br /&gt;
     strOut.write(grayBGR);&lt;br /&gt;
   }&lt;br /&gt;
   return((void *)0);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_init(int w, int h, int f, int fmt)&lt;br /&gt;
 {&lt;br /&gt;
 //  freopen( &amp;quot;/tmp/error.txt&amp;quot;, &amp;quot;w&amp;quot;, stderr );&lt;br /&gt;
 //  cerr &amp;lt;&amp;lt; length &amp;lt;&amp;lt; endl;&lt;br /&gt;
 //    fd &amp;lt;&amp;lt; static_cast&amp;lt;int32_t&amp;gt;(sum_x) &amp;lt;&amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
   drawAxes_init(); &lt;br /&gt;
 &lt;br /&gt;
   width=w;height=h;fps=f;&lt;br /&gt;
&lt;br /&gt;
   gray = Mat(height, width, CV_8UC1);&lt;br /&gt;
   motionIn = new motion_elt_t[((width/16)+1) * (height/16)]; &lt;br /&gt;
&lt;br /&gt;
   pthread_mutex_init(&amp;amp;imv_mutex, NULL);&lt;br /&gt;
&lt;br /&gt;
   pthread_mutex_init(&amp;amp;img_mutex, NULL);&lt;br /&gt;
   pthread_cond_init(&amp;amp;img_condv, NULL);&lt;br /&gt;
&lt;br /&gt;
   pthread_create(&amp;amp;img_thread, NULL, process_thread, (void *)0);&lt;br /&gt;
&lt;br /&gt;
   init_ready=true;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_img(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     memcpy(gray.data, p_buffer, length);		&lt;br /&gt;
     img_ready=true;&lt;br /&gt;
     pthread_cond_signal(&amp;amp;img_condv);&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_imv(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
     memcpy(motionIn ,p_buffer, length);&lt;br /&gt;
     imv_ready=true;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_close(void)&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 cd RaspiCV/src&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Visualprocessing/Motionvector/Run]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/IMU&amp;diff=25191</id>
		<title>Explorer/RaspberryPi/Visualprocessing/IMU</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/IMU&amp;diff=25191"/>
		<updated>2020-09-29T12:29:16Z</updated>

		<summary type="html">&lt;p&gt;Xp31: Created page with &amp;quot; /*****************************************************************************/  static void * drawAxes_threadImuProg(void *arg) {    float msgpipe_l[3];    int msgsize = siz...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; /*****************************************************************************/&lt;br /&gt;
 static void * drawAxes_threadImuProg(void *arg) {&lt;br /&gt;
   float msgpipe_l[3];&lt;br /&gt;
   int msgsize = sizeof(msgpipe_g);&lt;br /&gt;
   while(true) {&lt;br /&gt;
     if (msgsize==read(imufd,&amp;amp;msgpipe_l,msgsize)) {&lt;br /&gt;
       memcpy(&amp;amp;msgpipe_g, &amp;amp;msgpipe_l, msgsize); &lt;br /&gt;
     } &lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 static void drawAxes_init()&lt;br /&gt;
 {&lt;br /&gt;
   mkfifo(IMUPIPE, 0666); &lt;br /&gt;
   imufd = open(IMUPIPE, O_RDWR);&lt;br /&gt;
 &lt;br /&gt;
   pthread_t threadImu;&lt;br /&gt;
   pthread_create(&amp;amp;threadImu, NULL, &amp;amp;drawAxes_threadImuProg, NULL);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 struct quaternion_t&lt;br /&gt;
 {&lt;br /&gt;
   float w, x, y, z;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 static void drawAxes(Mat3b *img) &lt;br /&gt;
 {&lt;br /&gt;
   float msgpipe_l[3];&lt;br /&gt;
   memcpy(&amp;amp;msgpipe_l, &amp;amp;msgpipe_g, sizeof(msgpipe_g)); &lt;br /&gt;
 &lt;br /&gt;
   float roll  =  torad*msgpipe_l[0];   // roll_phy(x)&lt;br /&gt;
   float pitch = -torad*msgpipe_l[1]; // pitch_theta(y)&lt;br /&gt;
   float yaw   = -torad*msgpipe_l[2];   // yaw_psi(z)&lt;br /&gt;
 &lt;br /&gt;
   float cy = cos(roll * 0.5);&lt;br /&gt;
   float sy = sin(roll * 0.5);&lt;br /&gt;
   float cp = cos(yaw * 0.5);&lt;br /&gt;
   float sp = sin(yaw * 0.5);&lt;br /&gt;
   float cr = cos(pitch * 0.5);&lt;br /&gt;
   float sr = sin(pitch * 0.5);&lt;br /&gt;
 &lt;br /&gt;
   quaternion_t q;          // quaternion from euler&lt;br /&gt;
   q.w = cr * cp * cy + sr * sp * sy;&lt;br /&gt;
   q.x = sr * cp * cy - cr * sp * sy;&lt;br /&gt;
   q.y = cr * sp * cy + sr * cp * sy;&lt;br /&gt;
   q.z = cr * cp * sy - sr * sp * cy;&lt;br /&gt;
 &lt;br /&gt;
   array&amp;lt;Point3i,4&amp;gt; pts = {Point3i{0,0,0},Point3i{100,0,0},Point3i{0,100,0},Point3i{0,0,100}};&lt;br /&gt;
   array&amp;lt;Point3f,4&amp;gt; out;&lt;br /&gt;
   for (int i=0;i&amp;lt;4;i++) {  // rotation matrix from quaternion&lt;br /&gt;
     out[i].x=(1-2*q.y*q.y-2*q.z*q.z)*pts[i].x+(2*q.x*q.y-2*q.z*q.w)*pts[i].y+(2*q.x*q.z+2*q.y*q.w)*pts[i].z;&lt;br /&gt;
     out[i].y=(2*q.x*q.y+2*q.z*q.w)*pts[i].x+(1-2*q.x*q.x-2*q.z*q.z)*pts[i].y+(2*q.y*q.z-2*q.x*q.w)*pts[i].z;&lt;br /&gt;
     out[i].z=(2*q.x*q.z-2*q.y*q.w)*pts[i].x+(2*q.y*q.z+2*q.x*q.w)*pts[i].y+(1-2*q.x*q.x-2*q.y*q.y)*pts[i].z;&lt;br /&gt;
   } &lt;br /&gt;
 &lt;br /&gt;
   Point loc=pcenter;&lt;br /&gt;
   array&amp;lt;Point,4&amp;gt; imgPts;   // 3D to 2D projection&lt;br /&gt;
   for (int i=0;i&amp;lt;4;i++)&lt;br /&gt;
     imgPts[i]={(int)(loc.x-out[i].x+0.5*out[i].z),(int)(loc.y-out[i].y-0.5*out[i].z)}; &lt;br /&gt;
 &lt;br /&gt;
   line(*img, imgPts[0], imgPts[3], Scalar(0,0,255), 3); // red&lt;br /&gt;
   line(*img, imgPts[0], imgPts[1], Scalar(0,255,0), 3); // green&lt;br /&gt;
   line(*img, imgPts[0], imgPts[2], Scalar(255,0,0), 3); // blue&lt;br /&gt;
   circle(*img, pcenter, 5, Scalar(0,0,0), -1);&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25190</id>
		<title>Explorer/RaspberryPi/Visualprocessing/Motionvector</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector&amp;diff=25190"/>
		<updated>2020-09-29T12:27:08Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Raspberry Pi is based on a BCM2835 System on a Chip (SoC), which provides an hardware (GPU) motion estimation block to the H264 encoder.&amp;lt;br /&amp;gt;&lt;br /&gt;
The Coarse Motion Block (CME) compares macroblock (16×16 pixels) from two consecutive frames and output a vector where the macroblock came from.&amp;lt;br /&amp;gt;&lt;br /&gt;
The vector is encoded in a single 32-bit value:&amp;lt;br /&amp;gt;&lt;br /&gt;
- the most significant 16 bits represent a Sum of Absolute Differences (SAD = quality of the estimation, the lower is the better)&amp;lt;br /&amp;gt;&lt;br /&gt;
- the others 16 bits represents (8-bit signed integer) the horizontal and vertical directions &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The code below, patch &amp;quot;raspivid&amp;quot; to provide a video buffer (gray scale image) with motion vectors.&amp;lt;br /&amp;gt;&lt;br /&gt;
The new code compiled as &amp;quot;raspicv&amp;quot;, with a custom &amp;quot;cv.cpp&amp;quot; (see below), output motion vector display to /tmp/camera3 &amp;lt;br /&amp;gt;&lt;br /&gt;
The &amp;quot;cv.cpp&amp;quot; is limited to 640x480 grayscale image in this sample.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(ref. Adam Heinrich thesis: An Optical Flow Odometry Sensor Based on the Raspberry Pi Computer)&lt;br /&gt;
&lt;br /&gt;
 git clone https://github.com/raspberrypi/userland.git&lt;br /&gt;
 git clone https://github.com/adamheinrich/RaspiCV.git&lt;br /&gt;
&lt;br /&gt;
Path RaspiCV/src/Makefile&lt;br /&gt;
 &amp;lt; USERLAND_DIR&lt;br /&gt;
 &amp;gt; USERLAND_DIR = $(HOME)/userland&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiHelpers.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiCommonSettings.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/RaspiGPS.c \&lt;br /&gt;
 &amp;gt;      $(USERLAND_DIR)/host_applications/linux/apps/raspicam/libgps_loader.c&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv` \&lt;br /&gt;
 &amp;gt; CXXFLAGS = $(ARCHFLAGS) $(DBGFLAGS) $(OPTFLAGS) `pkg-config --cflags opencv4` \&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDFLAGS += `pkg-config --libs opencv`&lt;br /&gt;
 &amp;gt; LDFLAGS += `pkg-config --libs opencv4`&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;lt; LDLIBFLAGS = -Wl, ...&lt;br /&gt;
 &amp;gt; LDLIBFLAGS = -ldl -Wl, ...&lt;br /&gt;
&lt;br /&gt;
Update RaspiCV.c&lt;br /&gt;
 cp userland/host_applications/linux/apps/raspicam/RaspiVid.c ~/RaspiCV/src/RaspiCV.c&lt;br /&gt;
and patch it&lt;br /&gt;
 &amp;lt; #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 &amp;gt; #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
   #include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
               if(pData-&amp;gt;pstate-&amp;gt;inlineMotionVectors)&lt;br /&gt;
               {&lt;br /&gt;
 &amp;gt;		 cv_process_imv(buffer-&amp;gt;data, buffer-&amp;gt;length, buffer-&amp;gt;pts);&lt;br /&gt;
                  bytes_written = fwrite(buffer-&amp;gt;data, 1, buffer-&amp;gt;length, pData-&amp;gt;imv_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
      if (bytes_to_write)&lt;br /&gt;
      {&lt;br /&gt;
         mmal_buffer_header_mem_lock(buffer);&lt;br /&gt;
 &amp;gt;	cv_process_img(buffer-&amp;gt;data, bytes_to_write, buffer-&amp;gt;pts);&lt;br /&gt;
         bytes_written = fwrite(buffer-&amp;gt;data, 1, bytes_to_write, pData-&amp;gt;raw_file_handle);&lt;br /&gt;
 ...&lt;br /&gt;
 &amp;gt;             cv_init(state.common_settings.width, state.common_settings.height, state.framerate, state.raw_output_fmt);&lt;br /&gt;
               int initialCapturing=state.bCapturing;&lt;br /&gt;
               while (running)&lt;br /&gt;
               {&lt;br /&gt;
 ...&lt;br /&gt;
 ...&lt;br /&gt;
      destroy_splitter_component(&amp;amp;state);&lt;br /&gt;
      destroy_camera_component(&amp;amp;state);&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt;    cv_close();&lt;br /&gt;
&lt;br /&gt;
Replace de file RaspiCV/src/cv.cpp with this&lt;br /&gt;
 #include &amp;quot;cv.h&amp;quot;&lt;br /&gt;
 #include &amp;lt;opencv2/opencv.hpp&amp;gt;&lt;br /&gt;
 #include &amp;lt;pthread.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using namespace cv;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 #define SAD_LIMIT 2000&lt;br /&gt;
 #define streamOutGstStr &amp;quot;appsrc ! shmsink socket-path=/tmp/camera3 wait-for-connection=false async=false sync=false&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 struct motion_elt_t {&lt;br /&gt;
   int8_t x;&lt;br /&gt;
   int8_t y;&lt;br /&gt;
   uint16_t sad;&lt;br /&gt;
 };&lt;br /&gt;
 static motion_elt_t *motionIn;&lt;br /&gt;
 static Mat1b gray;&lt;br /&gt;
 static int width,height,fps; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_mutex_t imv_mutex;&lt;br /&gt;
 static bool imv_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static pthread_t img_thread;&lt;br /&gt;
 static pthread_mutex_t img_mutex;&lt;br /&gt;
 static pthread_cond_t img_condv;&lt;br /&gt;
 static bool img_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 static bool init_ready=false; &lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 static void *process_thread(void *ptr)&lt;br /&gt;
 {&lt;br /&gt;
   VideoWriter strOut = VideoWriter(streamOutGstStr,0,fps/1,Size(width,height),true); &lt;br /&gt;
   Mat3b grayBGR;&lt;br /&gt;
   Mat colormap;&lt;br /&gt;
   int32_t sum_x,sum_y;&lt;br /&gt;
 &lt;br /&gt;
   int mbx = width/16;&lt;br /&gt;
   int mby = height/16;&lt;br /&gt;
   int mbxy = (8 * mbx * mby);&lt;br /&gt;
   unsigned int motionSize = ((mbx+1)*mby) * sizeof(struct motion_elt_t); &lt;br /&gt;
   motion_elt_t *motionOut = new motion_elt_t[(mbx+1)*mby];&lt;br /&gt;
 &lt;br /&gt;
   char buff[20];int lg;&lt;br /&gt;
  &lt;br /&gt;
   while (true) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     while (!img_ready) pthread_cond_wait(&amp;amp;img_condv, &amp;amp;img_mutex);&lt;br /&gt;
     cvtColor(gray, grayBGR, COLOR_GRAY2BGR);&lt;br /&gt;
     applyColorMap(grayBGR, colormap, COLORMAP_JET); &lt;br /&gt;
 &lt;br /&gt;
     img_ready=false;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex); &lt;br /&gt;
 &lt;br /&gt;
     if(imv_ready) { &lt;br /&gt;
       pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
       memcpy(motionOut ,motionIn, motionSize);&lt;br /&gt;
       imv_ready=false;&lt;br /&gt;
       pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
     }  &lt;br /&gt;
 &lt;br /&gt;
     sum_x=0;sum_y=0;&lt;br /&gt;
     for (int j=0;j&amp;lt;mby;j++) {&lt;br /&gt;
       for (int i=0;i&amp;lt;mbx;i++) { &lt;br /&gt;
         motion_elt_t *vec = motionOut + (i+(mbx+1)*j); &lt;br /&gt;
         if (vec-&amp;gt;x == 0 &amp;amp;&amp;amp; vec-&amp;gt;y == 0) continue;&lt;br /&gt;
         if (vec-&amp;gt;sad &amp;gt; SAD_LIMIT) continue;&lt;br /&gt;
 	 int x = i*16 + 8;&lt;br /&gt;
	 int y = j*16 + 8;&lt;br /&gt;
	 float intensity = vec-&amp;gt;sad;&lt;br /&gt;
	 intensity = round(255 * intensity / SAD_LIMIT);&lt;br /&gt;
	 if (intensity &amp;gt; 255) intensity = 255;&lt;br /&gt;
	 uint8_t *ptr = colormap.ptr&amp;lt;uchar&amp;gt;(0);&lt;br /&gt;
	 uint8_t idx = 3*(uint8_t)intensity;&lt;br /&gt;
	 arrowedLine(grayBGR, Point(x+vec-&amp;gt;x, y+vec-&amp;gt;y),&lt;br /&gt;
	 		   Point(x, y),&lt;br /&gt;
	 		   Scalar(ptr[idx], ptr[idx+1], ptr[idx+2])); &lt;br /&gt;
 &lt;br /&gt;
 	 sum_x += (intensity * vec-&amp;gt;x);&lt;br /&gt;
	 sum_y += (intensity * vec-&amp;gt;y);&lt;br /&gt;
       }&lt;br /&gt;
     } &lt;br /&gt;
 &lt;br /&gt;
     sum_x = (sum_x/mbxy);&lt;br /&gt;
     sum_y = (sum_y/mbxy);&lt;br /&gt;
     arrowedLine(grayBGR, Point(320,240),Point(320+sum_x,240+sum_y),Scalar(0,255,0),5); &lt;br /&gt;
 &lt;br /&gt;
     drawAxes(&amp;amp;grayBGR);&lt;br /&gt;
 &lt;br /&gt;
     strOut.write(grayBGR);&lt;br /&gt;
   }&lt;br /&gt;
   return((void *)0);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_init(int w, int h, int f, int fmt)&lt;br /&gt;
 {&lt;br /&gt;
 //  freopen( &amp;quot;/tmp/error.txt&amp;quot;, &amp;quot;w&amp;quot;, stderr );&lt;br /&gt;
 //  cerr &amp;lt;&amp;lt; length &amp;lt;&amp;lt; endl;&lt;br /&gt;
 //    fd &amp;lt;&amp;lt; static_cast&amp;lt;int32_t&amp;gt;(sum_x) &amp;lt;&amp;lt; endl;&lt;br /&gt;
 &lt;br /&gt;
   drawAxes_init(); &lt;br /&gt;
 &lt;br /&gt;
   width=w;height=h;fps=f;&lt;br /&gt;
&lt;br /&gt;
   gray = Mat(height, width, CV_8UC1);&lt;br /&gt;
   motionIn = new motion_elt_t[((width/16)+1) * (height/16)]; &lt;br /&gt;
&lt;br /&gt;
   pthread_mutex_init(&amp;amp;imv_mutex, NULL);&lt;br /&gt;
&lt;br /&gt;
   pthread_mutex_init(&amp;amp;img_mutex, NULL);&lt;br /&gt;
   pthread_cond_init(&amp;amp;img_condv, NULL);&lt;br /&gt;
&lt;br /&gt;
   pthread_create(&amp;amp;img_thread, NULL, process_thread, (void *)0);&lt;br /&gt;
&lt;br /&gt;
   init_ready=true;&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_img(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;img_mutex);&lt;br /&gt;
     memcpy(gray.data, p_buffer, length);		&lt;br /&gt;
     img_ready=true;&lt;br /&gt;
     pthread_cond_signal(&amp;amp;img_condv);&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;img_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_process_imv(uint8_t *p_buffer, int length, int64_t timestamp)&lt;br /&gt;
 {&lt;br /&gt;
   if (init_ready) {&lt;br /&gt;
     pthread_mutex_lock(&amp;amp;imv_mutex);&lt;br /&gt;
     memcpy(motionIn ,p_buffer, length);&lt;br /&gt;
     imv_ready=true;&lt;br /&gt;
     pthread_mutex_unlock(&amp;amp;imv_mutex);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*****************************************************************************/&lt;br /&gt;
 void cv_close(void)&lt;br /&gt;
 {&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 cd RaspiCV/src&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Visualprocessing/Motionvector/Run]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector/Run&amp;diff=25189</id>
		<title>Explorer/RaspberryPi/Visualprocessing/Motionvector/Run</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Visualprocessing/Motionvector/Run&amp;diff=25189"/>
		<updated>2020-09-29T12:19:31Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; rm /tmp/camera*;&lt;br /&gt;
 /home/pi/RaspiCV/build/raspicv -t 0 -w 640 -h 480 -fps 30/1 -b 500000 -cd H264 -n -a ENAC -ae 22 -x /dev/null -r /dev/null -rf gray -o - \&lt;br /&gt;
   | gst-launch-1.0 fdsrc \&lt;br /&gt;
     ! h264parse \&lt;br /&gt;
     ! video/x-h264,stream-format=byte-stream \&lt;br /&gt;
     ! udpsink host=127.0.0.1 port=5100&lt;br /&gt;
 gst-rtsp-server-1.14.4/examples/test-launch  \&lt;br /&gt;
   &amp;quot;udpsrc port=5100 do-timestamp=true ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1&amp;quot; \&lt;br /&gt;
   &amp;quot;shmsrc socket-path=/tmp/camera3 do-timestamp=true ! video/x-raw, format=I420, width=640, height=480, framerate=30/1 ! omxh264enc ! video/x-h264,profile=high ! rtph264pay name=pay0 pt=96 config-interval=1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
client&amp;lt;br /&amp;gt;&lt;br /&gt;
gst-launch-1.0 rtspsrc location=rtsp://RASPBERRYPI_IP:8554/test ! rtph264depay ! avdec_h264 !  xvimagesink sync=false&amp;lt;br /&amp;gt;&lt;br /&gt;
gst-launch-1.0 rtspsrc location=rtsp://RASPBERRYPI_IP:8554/test2 ! rtph264depay ! avdec_h264 !  xvimagesink sync=false&amp;lt;br /&amp;gt;&lt;br /&gt;
___________________&lt;br /&gt;
&lt;br /&gt;
airpi.sh&lt;br /&gt;
 ...&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 6 -u 5610 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 ...&lt;br /&gt;
 /home/pi/RaspiCV/build/raspicv -t 0 -w 640 -h 480 -fps 30/1 -b 500000 -cd H264 -n -a ENAC -ae 22 -x /dev/null -r /dev/null -rf gray -o - \&lt;br /&gt;
 | gst-launch-1.0 fdsrc \&lt;br /&gt;
   ! h264parse \&lt;br /&gt;
   ! video/x-h264,stream-format=byte-stream,alignment=au \&lt;br /&gt;
   ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
   ! udpsink host=127.0.0.1 port=5610 &amp;amp;&lt;br /&gt;
 sleep 10&lt;br /&gt;
 gst-launch-1.0 shmsrc socket-path=/tmp/camera3 do-timestamp=true \&lt;br /&gt;
  ! video/x-raw, format=BGR, width=640, height=480, framerate=30/1, colorimetry=1:1:5:1  \&lt;br /&gt;
  ! v4l2h264enc extra-controls=&amp;quot;controls,video_bitrate=3000000;&amp;quot; \&lt;br /&gt;
  ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
  ! udpsink host=127.0.0.1 port=5600 &amp;amp;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
groundpi.sh&lt;br /&gt;
 ...&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 6 -c 127.0.0.1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -c 127.0.0.1 -u 5610 wlan1 &amp;amp;&lt;br /&gt;
 ...&lt;br /&gt;
 gst-launch-1.0 udpsrc port=5600 \&lt;br /&gt;
  ! tee name=streams \&lt;br /&gt;
  ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
  ! udpsink host=127.0.0.1 port=5620 streams. \&lt;br /&gt;
  ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
  ! application/x-rtp, encoding-name=H264,payload=96 \&lt;br /&gt;
  ! rtph264depay \&lt;br /&gt;
  ! video/x-h264,stream-format=byte-stream \&lt;br /&gt;
  ! fdsink | /home/pi/wifibroadcast_osd/fpv_video/fpv_video &amp;amp;&lt;br /&gt;
 ...&lt;br /&gt;
 /home/pi/gst-rtsp-server-1.14.4/examples/.libs/test-launch \&lt;br /&gt;
  &amp;quot;udpsrc port=5610 do-timestamp=true ! application/x-rtp, encoding-name=H264,payload=96 ! rtph264depay ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1&amp;quot; \&lt;br /&gt;
  &amp;quot;udpsrc port=5600 do-timestamp=true ! application/x-rtp, encoding-name=H264,payload=96 ! rtph264depay ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1&amp;quot; &amp;amp;&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Visualprocessing]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Softwares/rtsp-server&amp;diff=25188</id>
		<title>Explorer/RaspberryPi/Softwares/rtsp-server</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Softwares/rtsp-server&amp;diff=25188"/>
		<updated>2020-09-29T11:46:18Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Explorer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi]]&lt;br /&gt;
&lt;br /&gt;
* Install Server RTSP&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install libglib2.0 -y;\&lt;br /&gt;
 sudo apt-get install libgstreamer1.0-dev -y;\&lt;br /&gt;
 sudo apt-get install libgstreamer-plugins-base1.0-dev -y&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 --version&lt;br /&gt;
 =&amp;gt; gst-launch-1.0 version 1.14.4&lt;br /&gt;
&lt;br /&gt;
 wget http://gstreamer.freedesktop.org/src/gst-rtsp-server/gst-rtsp-server-1.14.4.tar.xz&lt;br /&gt;
 tar -xf gst-rtsp-server-1.14.4.tar.xz&lt;br /&gt;
 rm gst-rtsp-server-1.14.4.tar.xz&lt;br /&gt;
 cd gst-rtsp-server-1.14.4/&lt;br /&gt;
 ./configure&lt;br /&gt;
&lt;br /&gt;
 ~/gst-rtsp-server-1.14.4/examples/test-launch.c &lt;br /&gt;
 patched with second stream &lt;br /&gt;
 &amp;quot;&lt;br /&gt;
  GstRTSPMediaFactory *factory2;&lt;br /&gt;
  factory2 = gst_rtsp_media_factory_new ();&lt;br /&gt;
  gst_rtsp_media_factory_set_launch (factory2, argv[2]);&lt;br /&gt;
  gst_rtsp_mount_points_add_factory (mounts, &amp;quot;/test2&amp;quot;, factory2);&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
 cd ~/gst-rtsp-server-1.14.4&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
* Check installation with camera unicast&lt;br /&gt;
Server&lt;br /&gt;
 rm /tmp/camera*;\&lt;br /&gt;
 raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -vf -hf -cd H264 -n -fl -ih -o -  \&lt;br /&gt;
   | gst-launch-1.0 fdsrc  \&lt;br /&gt;
   ! h264parse  \&lt;br /&gt;
   ! video/x-h264,stream-format=byte-stream  \&lt;br /&gt;
   ! tee name=streams \&lt;br /&gt;
   ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
   ! udpsink host=127.0.0.1 port=5100 streams. \&lt;br /&gt;
   ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
   ! omxh264dec \&lt;br /&gt;
   ! shmsink socket-path=/tmp/camera2 wait-for-connection=false sync=false&lt;br /&gt;
&lt;br /&gt;
 gst-rtsp-server-1.14.4/examples/test-launch  \&lt;br /&gt;
 &amp;quot;udpsrc port=5100 do-timestamp=true ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1&amp;quot; \&lt;br /&gt;
 &amp;quot;shmsrc socket-path=/tmp/camera2 do-timestamp=true ! video/x-raw, format=I420, width=640, height=480, framerate=30/1 ! omxh264enc ! video/x-h264,profile=high  ! rtph264pay name=pay0 pt=96 config-interval=1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
client:&lt;br /&gt;
 gst-launch-1.0 rtspsrc location=rtsp://RASPBERRYPI_IP:8554/test ! rtph264depay ! avdec_h264 !  xvimagesink sync=false&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 rtspsrc location=rtsp://RASPBERRYPI_IP:8554/test2 ! rtph264depay ! avdec_h264 !  xvimagesink sync=false&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Softwares/gstreamer&amp;diff=25187</id>
		<title>Explorer/RaspberryPi/Softwares/gstreamer</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Softwares/gstreamer&amp;diff=25187"/>
		<updated>2020-09-29T11:45:26Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Explorer]]&lt;br /&gt;
&lt;br /&gt;
* Install gstreamer &lt;br /&gt;
 sudo apt-get install gstreamer1.0-plugins-base -y; \&lt;br /&gt;
 sudo apt-get install gstreamer1.0-plugins-good -y; \&lt;br /&gt;
 sudo apt-get install gstreamer1.0-plugins-bad -y; \&lt;br /&gt;
 sudo apt-get install gstreamer1.0-plugins-ugly -y; \&lt;br /&gt;
 sudo apt-get install gstreamer1.0-libav -y; \&lt;br /&gt;
 sudo apt-get install gstreamer1.0-omx -y; \&lt;br /&gt;
 sudo apt-get install gstreamer1.0-tools -y&lt;br /&gt;
&lt;br /&gt;
* Check installation with camera unicast&lt;br /&gt;
                       | --&amp;gt; camera1 (x-h264)                         --&amp;gt; port=5000&lt;br /&gt;
 raspivid (x-h264) --&amp;gt; |   &lt;br /&gt;
                       | omxh264dec --&amp;gt; camera2 (x-raw,I420)          --&amp;gt; omxh264enc --&amp;gt; port=5100&lt;br /&gt;
&lt;br /&gt;
Server:&lt;br /&gt;
 rm /tmp/camera*; \&lt;br /&gt;
 raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -vf -hf -cd H264 -n -fl -ih -o - \&lt;br /&gt;
   | gst-launch-1.0 fdsrc \&lt;br /&gt;
   ! h264parse \&lt;br /&gt;
   ! video/x-h264,stream-format=byte-stream \&lt;br /&gt;
   ! tee name=streams \&lt;br /&gt;
   ! omxh264dec \&lt;br /&gt;
   ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
   ! shmsink socket-path=/tmp/camera2 wait-for-connection=false sync=false streams. \&lt;br /&gt;
   ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
   ! shmsink socket-path=/tmp/camera1 wait-for-connection=false sync=false&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 shmsrc socket-path=/tmp/camera1 do-timestamp=true \&lt;br /&gt;
   ! video/x-h264,stream-format=byte-stream,alignment=au \&lt;br /&gt;
   ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
   ! udpsink host=CLIENTIP port=5000&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 shmsrc socket-path=/tmp/camera2 do-timestamp=true is-live=true \&lt;br /&gt;
  ! video/x-raw,format=I420,width=640,height=480,framerate=15/1 \&lt;br /&gt;
  ! omxh264enc \&lt;br /&gt;
  ! video/x-h264,profile=high \&lt;br /&gt;
  ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
  ! udpsink host=CLIENTIP port=5100&lt;br /&gt;
&lt;br /&gt;
Client: (port 5000 and 5100)&lt;br /&gt;
 gst-launch-1.0 udpsrc port=5000  \&lt;br /&gt;
  ! application/x-rtp, encoding-name=H264,payload=96  \&lt;br /&gt;
  ! rtph264depay  \&lt;br /&gt;
  ! h264parse  \&lt;br /&gt;
  ! avdec_h264  \&lt;br /&gt;
  ! videoconvert \&lt;br /&gt;
  ! autovideosink&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Softwares/rtsp-server]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Softwares/gstreamer&amp;diff=25186</id>
		<title>Explorer/RaspberryPi/Softwares/gstreamer</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Softwares/gstreamer&amp;diff=25186"/>
		<updated>2020-09-29T11:44:55Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Explorer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Install gstreamer &lt;br /&gt;
 sudo apt-get install gstreamer1.0-plugins-base -y; \&lt;br /&gt;
 sudo apt-get install gstreamer1.0-plugins-good -y; \&lt;br /&gt;
 sudo apt-get install gstreamer1.0-plugins-bad -y; \&lt;br /&gt;
 sudo apt-get install gstreamer1.0-plugins-ugly -y; \&lt;br /&gt;
 sudo apt-get install gstreamer1.0-libav -y; \&lt;br /&gt;
 sudo apt-get install gstreamer1.0-omx -y; \&lt;br /&gt;
 sudo apt-get install gstreamer1.0-tools -y&lt;br /&gt;
&lt;br /&gt;
* Check installation with camera unicast&lt;br /&gt;
                       | --&amp;gt; camera1 (x-h264)                         --&amp;gt; port=5000&lt;br /&gt;
 raspivid (x-h264) --&amp;gt; |   &lt;br /&gt;
                       | omxh264dec --&amp;gt; camera2 (x-raw,I420)          --&amp;gt; omxh264enc --&amp;gt; port=5100&lt;br /&gt;
&lt;br /&gt;
Server:&lt;br /&gt;
 rm /tmp/camera*; \&lt;br /&gt;
 raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -vf -hf -cd H264 -n -fl -ih -o - \&lt;br /&gt;
   | gst-launch-1.0 fdsrc \&lt;br /&gt;
   ! h264parse \&lt;br /&gt;
   ! video/x-h264,stream-format=byte-stream \&lt;br /&gt;
   ! tee name=streams \&lt;br /&gt;
   ! omxh264dec \&lt;br /&gt;
   ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
   ! shmsink socket-path=/tmp/camera2 wait-for-connection=false sync=false streams. \&lt;br /&gt;
   ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
   ! shmsink socket-path=/tmp/camera1 wait-for-connection=false sync=false&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 shmsrc socket-path=/tmp/camera1 do-timestamp=true \&lt;br /&gt;
   ! video/x-h264,stream-format=byte-stream,alignment=au \&lt;br /&gt;
   ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
   ! udpsink host=CLIENTIP port=5000&lt;br /&gt;
&lt;br /&gt;
 gst-launch-1.0 shmsrc socket-path=/tmp/camera2 do-timestamp=true is-live=true \&lt;br /&gt;
  ! video/x-raw,format=I420,width=640,height=480,framerate=15/1 \&lt;br /&gt;
  ! omxh264enc \&lt;br /&gt;
  ! video/x-h264,profile=high \&lt;br /&gt;
  ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
  ! udpsink host=CLIENTIP port=5100&lt;br /&gt;
&lt;br /&gt;
Client: (port 5000 and 5100)&lt;br /&gt;
 gst-launch-1.0 udpsrc port=5000  \&lt;br /&gt;
  ! application/x-rtp, encoding-name=H264,payload=96  \&lt;br /&gt;
  ! rtph264depay  \&lt;br /&gt;
  ! h264parse  \&lt;br /&gt;
  ! avdec_h264  \&lt;br /&gt;
  ! videoconvert \&lt;br /&gt;
  ! autovideosink&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Softwares&amp;diff=25185</id>
		<title>Explorer/RaspberryPi/Softwares</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Softwares&amp;diff=25185"/>
		<updated>2020-09-29T11:44:13Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Explorer]]&lt;br /&gt;
&lt;br /&gt;
* Update softwares&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get update&lt;br /&gt;
 sudo apt-get upgrade&lt;br /&gt;
 (20 minutes)&lt;br /&gt;
&lt;br /&gt;
* Install new softwares&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Softwares/gstreamer]]&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Softwares/rtsp-server]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Setup&amp;diff=25184</id>
		<title>Explorer/RaspberryPi/Setup</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Setup&amp;diff=25184"/>
		<updated>2020-09-29T11:43:38Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Explorer]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Softwares]]&lt;br /&gt;
&lt;br /&gt;
* Installation&lt;br /&gt;
Download and install raspbian (debian for raspberry) lite package (same for PI3 and PIzero)&amp;lt;br /&amp;gt;&lt;br /&gt;
Raspberry Pi OS (32-bit) Lite (buster : 433M)&lt;br /&gt;
&lt;br /&gt;
  wget https://downloads.raspberrypi.org/raspbian_lite_latest&lt;br /&gt;
&lt;br /&gt;
  Flash the RaspberryPi OS on a 16Gb minimum size SD&lt;br /&gt;
 &lt;br /&gt;
  mv raspbian_lite_latest raspbian_lite_latest.zip&lt;br /&gt;
  ./balenaEtcher-1.5.79-x64.AppImage&lt;br /&gt;
&lt;br /&gt;
* Initial configuration:&lt;br /&gt;
PI3 and PIZero can be configured headless, without a keyboard and a display.&amp;lt;br /&amp;gt;&lt;br /&gt;
You just need to configure the board to connect to a wifi hotspot when power on.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Plug the memory SD card with the fresh raspbian installed.&lt;br /&gt;
&lt;br /&gt;
Create file (sudo touch)&lt;br /&gt;
  boot/ssh&lt;br /&gt;
&lt;br /&gt;
Create the file with following content (sudo vi)&lt;br /&gt;
  boot/wpa_supplicant.conf&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
  ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;br /&gt;
  update_config=1&lt;br /&gt;
  country=FR&lt;br /&gt;
  network={&lt;br /&gt;
    ssid=&amp;quot;Androidxp&amp;quot;&lt;br /&gt;
    psk=&amp;quot;pprzpprz&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  network={&lt;br /&gt;
    ssid=&amp;quot;pprz_router&amp;quot;&lt;br /&gt;
    key_mgmt=NONE&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
* Plug the SD memory card in the raspberry Pi and power on.&lt;br /&gt;
* Connect your computer to the same wifi hotspot&lt;br /&gt;
* Look for the Raspberry IP on the network&lt;br /&gt;
 nmap -sn 192.168.1.0/24&lt;br /&gt;
&lt;br /&gt;
* Connect to the identified IP&lt;br /&gt;
  ssh pi@...&lt;br /&gt;
  password: raspberry&lt;br /&gt;
&lt;br /&gt;
* Set the configuration&lt;br /&gt;
  sudo raspi-config&lt;br /&gt;
  1) change user password&lt;br /&gt;
  5) P1) enable camera&lt;br /&gt;
     P6) login shell:disable&lt;br /&gt;
         serial interface:enable&lt;br /&gt;
  7) advanced options&lt;br /&gt;
    A1) expand filesystem&lt;br /&gt;
&lt;br /&gt;
  /etc/hosts&lt;br /&gt;
  127.0.1.1       raspberrypi&lt;br /&gt;
  to 127.0.1.1       airpi or groundpi&lt;br /&gt;
&lt;br /&gt;
  /etc/hostname&lt;br /&gt;
  raspberrypi to airpi or groundpi&lt;br /&gt;
&lt;br /&gt;
 /etc/dhcpcd.conf&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
 # It is possible to fall back to a static IP if DHCP fails:&lt;br /&gt;
 # define static profile&lt;br /&gt;
 profile static_eth0&lt;br /&gt;
 static ip_address=192.168.3.2/24&lt;br /&gt;
 static routers=192.168.3.1&lt;br /&gt;
 static domain_name_servers=192.168.3.1&lt;br /&gt;
 # fallback to static profile on eth0&lt;br /&gt;
 interface eth0&lt;br /&gt;
 fallback static_eth0&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
&lt;br /&gt;
 /boot/config.txt&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl stop serial-getty@ttyAMA0.service&lt;br /&gt;
 sudo systemctl disable serial-getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl stop hciuart&lt;br /&gt;
 sudo systemctl disable hciuart&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi&amp;diff=25183</id>
		<title>Explorer/RaspberryPi</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi&amp;diff=25183"/>
		<updated>2020-09-29T11:43:03Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Explorer]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Setup]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Softwares]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Autopilot]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Log]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/PowerOffProtection]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Wifibroadcast]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Wifibroadcast/Integration]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Wifibroadcast/Run]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Wifibroadcast/Equipements]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/DualLink]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/Visualprocessing]]&lt;br /&gt;
&lt;br /&gt;
* [[Explorer/RaspberryPi/BackupRestore]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25182</id>
		<title>Explorer/PPRZ/Tunning</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25182"/>
		<updated>2020-09-29T11:42:32Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Explorer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Tunning the vertical loop&amp;lt;/big&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;GUIDANCE_V&amp;quot; prefix=&amp;quot;GUIDANCE_V_&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add following mode to telemetry file&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;mode name=&amp;quot;vert_loop&amp;quot; key_press=&amp;quot;v&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ROTORCRAFT_STATUS&amp;quot; period=&amp;quot;1.2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;DL_VALUE&amp;quot;          period=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ALIVE&amp;quot;             period=&amp;quot;0.9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF&amp;quot;               period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF_EXTENDED&amp;quot;      period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VERT_LOOP&amp;quot;         period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_Z&amp;quot;             period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS&amp;quot;               period=&amp;quot;.11&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_REF&amp;quot;           period=&amp;quot;5.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/mode&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Switch to NAV mode, takeoff, standby &amp;lt;br /&amp;gt;&lt;br /&gt;
Set telemetry from default to vert_loop &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plot in realtime&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/ground_segment/tmtc/messages &amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/plotter &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or post process ground log and data files&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/logplotter ~/Projects/paparazzi/var/logs/xx.log&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
1) Start with no KI, and no adaptation, and set NOMINAL_HOVER_THROTTLE, from manual flight &amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KP and KD&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;90&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;120&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;FALSE&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Set KP and KD&amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KI   &lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Set KI, and adaptation&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_NOISE_FACTOR&amp;quot; value=&amp;quot;1.&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_INITIAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ&amp;diff=25181</id>
		<title>Explorer/PPRZ</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ&amp;diff=25181"/>
		<updated>2020-09-29T11:41:41Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Explorer]]&lt;br /&gt;
&lt;br /&gt;
[[Explorer/PPRZ/Configuration]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Explorer/PPRZ/Tunning]]&lt;br /&gt;
&lt;br /&gt;
airframe file:&lt;br /&gt;
 &amp;lt;!DOCTYPE airframe SYSTEM &amp;quot;../../airframe.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;airframe name=&amp;quot;Quadricopter XP&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;description&amp;gt;&lt;br /&gt;
    * Autopilot:   Tawaki/ Apogee&lt;br /&gt;
    * Actuators:   4 in 1 Holybro BLHELI ESC&lt;br /&gt;
    * Telemetry:   XBee and Wifibroadcast (compagnon board)&lt;br /&gt;
    * GPS:         ublox M8P (optional DGPS) or Datalink&lt;br /&gt;
    * RC:          FrSky XM+ or Datalink&lt;br /&gt;
 &lt;br /&gt;
    IMU Apogee :    &lt;br /&gt;
      - MPU6050 (acc+gyro), &lt;br /&gt;
      - MPU9150 (acc+gyro+mag) = MPU6050 + AK8975&lt;br /&gt;
 &lt;br /&gt;
    MAG Apogee (AK8975 on I2C1) or on external GPS board (LIS3MDL on I2C1) or Datalink&lt;br /&gt;
 &lt;br /&gt;
    BARO Apogee (MPL3115A2 on I2C1)&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;/description&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;configure name=&amp;quot;PERIODIC_FREQUENCY&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;AHRS_PROPAGATE_FREQUENCY&amp;quot; value=&amp;quot;$(PERIODIC_FREQUENCY)&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;KILL_AS_FAILSAFE&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;amp;lt;!-- OPTION 1A &amp;amp; 1B --&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;apogee_1.0_chibios&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- OPTION 1C --&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!--&lt;br /&gt;
    &amp;lt;target name=&amp;quot;nps&amp;quot; board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- apogee_1.0_chibios --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 1A --&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_mpu9150.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_imu_apogee_mpu9150.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_target_flying.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_target_apogee.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 1B --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!--&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_lis3mdl.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_imu_apogee_lis3mdl.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_target_flying.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_target_apogee.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 1C --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!--&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_tawaki.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_mpu9150.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_lis3mdl.xml&amp;quot;/&amp;gt; &lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- tawaki_1.0 &amp;amp; apogee_1.0_chibios --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 2A --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_indoor.xml&amp;quot;/--&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 2B --&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_outdoor.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- OPTION 2C --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!--&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_target_nps.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- All targets --&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_stab_rate.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_stab_attitude.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_guidance.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_modules.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
flght_plan file:&lt;br /&gt;
 &amp;lt;!DOCTYPE flight_plan SYSTEM &amp;quot;../flight_plan.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;flight_plan alt=&amp;quot;148&amp;quot; ground_alt=&amp;quot;146&amp;quot; lat0=&amp;quot;43.5640917&amp;quot; lon0=&amp;quot;1.4829201&amp;quot; max_dist_from_home=&amp;quot;20&amp;quot; name=&amp;quot;Rotorcraft Optitrack (ENAC)&amp;quot; security_height=&amp;quot;0.3&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;header&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/header&amp;gt;&lt;br /&gt;
   &amp;lt;waypoints&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;HOME&amp;quot; x=&amp;quot;0.0&amp;quot; y=&amp;quot;0.0&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;GOAL&amp;quot; x=&amp;quot;2.0&amp;quot; y=&amp;quot;2.0&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;STDBY&amp;quot; x=&amp;quot;-0.7&amp;quot; y=&amp;quot;-0.8&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;TD&amp;quot; x=&amp;quot;0.8&amp;quot; y=&amp;quot;-1.7&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S1&amp;quot; x=&amp;quot;2.1&amp;quot; y=&amp;quot;2.8&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S2&amp;quot; x=&amp;quot;2.0&amp;quot; y=&amp;quot;-3.0&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S3&amp;quot; x=&amp;quot;-2.1&amp;quot; y=&amp;quot;-3.1&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S4&amp;quot; x=&amp;quot;-2.2&amp;quot; y=&amp;quot;2.8&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N1&amp;quot; x=&amp;quot;4.5&amp;quot; y=&amp;quot;5.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N2&amp;quot; x=&amp;quot;4.5&amp;quot; y=&amp;quot;-5.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N3&amp;quot; x=&amp;quot;-4.5&amp;quot; y=&amp;quot;-5.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N4&amp;quot; x=&amp;quot;-4.5&amp;quot; y=&amp;quot;5.2&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/waypoints&amp;gt;&lt;br /&gt;
   &amp;lt;sectors&amp;gt;&lt;br /&gt;
     &amp;lt;sector color=&amp;quot;red&amp;quot; name=&amp;quot;Net&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N1&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N2&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N3&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N4&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/sector&amp;gt;&lt;br /&gt;
     &amp;lt;sector color=&amp;quot;green&amp;quot; name=&amp;quot;Survey&amp;quot; type=&amp;quot;dynamic&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S1&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S2&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S3&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S4&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/sector&amp;gt;&lt;br /&gt;
   &amp;lt;/sectors&amp;gt;&lt;br /&gt;
   &amp;lt;modules&amp;gt;&lt;br /&gt;
     &amp;lt;module name=&amp;quot;nav&amp;quot; type=&amp;quot;survey_rectangle_rotorcraft&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/modules&amp;gt;&lt;br /&gt;
   &amp;lt;blocks&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Wait GPS&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavKillThrottle()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;while cond=&amp;quot;!GpsFixValid()&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Holding point&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavKillThrottle()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;attitude pitch=&amp;quot;0&amp;quot; roll=&amp;quot;0&amp;quot; throttle=&amp;quot;0&amp;quot; until=&amp;quot;FALSE&amp;quot; vmode=&amp;quot;throttle&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Start Engine&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavResurrect()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;attitude pitch=&amp;quot;0&amp;quot; roll=&amp;quot;0&amp;quot; throttle=&amp;quot;0&amp;quot; until=&amp;quot;FALSE&amp;quot; vmode=&amp;quot;throttle&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Takeoff&amp;quot; strip_button=&amp;quot;Takeoff&amp;quot; strip_icon=&amp;quot;takeoff.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;exception cond=&amp;quot;stateGetPositionEnu_f()-&amp;gt;z &amp;gt; 1.0&amp;quot; deroute=&amp;quot;Standby&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavSetWaypointHere(WP_STDBY)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;stay climb=&amp;quot;nav_climb_vspeed&amp;quot; vmode=&amp;quot;climb&amp;quot; wp=&amp;quot;STDBY&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Standby&amp;quot; strip_button=&amp;quot;Standby&amp;quot; strip_icon=&amp;quot;home.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;nav_set_heading_deg(0)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;stay wp=&amp;quot;STDBY&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;START&amp;quot; strip_button=&amp;quot;Go&amp;quot; strip_icon=&amp;quot;lookfore.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavSetWaypointHere(WP_GOAL)&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;StayGoal&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;stay wp=&amp;quot;GOAL&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block group=&amp;quot;extra_pattern&amp;quot; name=&amp;quot;Survey S1-S2 Sweep NS SET&amp;quot; strip_button=&amp;quot;SvySweep-NS&amp;quot; strip_icon=&amp;quot;survey_rect_ns.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;nav_survey_rectangle_rotorcraft_setup(WP_S1, WP_S3, 1, NS)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;deroute block=&amp;quot;Survey RECTANGLE RUN&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block group=&amp;quot;extra_pattern&amp;quot; name=&amp;quot;Survey S1-S2 Sweep WE SET&amp;quot; strip_button=&amp;quot;SvySweep-WE&amp;quot; strip_icon=&amp;quot;survey_rect_we.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;nav_survey_rectangle_rotorcraft_setup(WP_S1, WP_S3, 1, WE)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;deroute block=&amp;quot;Survey RECTANGLE RUN&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block group=&amp;quot;extra_pattern&amp;quot; name=&amp;quot;Survey RECTANGLE RUN&amp;quot; strip_button=&amp;quot;SvySweep CONT&amp;quot; strip_icon=&amp;quot;survey_rect_run.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;exception cond=&amp;quot;rectangle_survey_sweep_num == 1&amp;quot; deroute=&amp;quot;Standby&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;call fun=&amp;quot;nav_survey_rectangle_rotorcraft_run(WP_S1, WP_S3)&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;land here&amp;quot; strip_button=&amp;quot;Land Here&amp;quot; strip_icon=&amp;quot;land-right.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavSetWaypointHere(WP_TD)&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;land&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;go wp=&amp;quot;TD&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;flare&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;exception cond=&amp;quot;!nav_is_in_flight()&amp;quot; deroute=&amp;quot;KILL_LANDED&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;stay climb=&amp;quot;nav_descend_vspeed&amp;quot; vmode=&amp;quot;climb&amp;quot; wp=&amp;quot;TD&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;KILL_LANDED&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavKillThrottle()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;attitude pitch=&amp;quot;0&amp;quot; roll=&amp;quot;0&amp;quot; throttle=&amp;quot;0&amp;quot; until=&amp;quot;FALSE&amp;quot; vmode=&amp;quot;throttle&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
   &amp;lt;/blocks&amp;gt;&lt;br /&gt;
 &amp;lt;/flight_plan&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/3DPrinted&amp;diff=25180</id>
		<title>Explorer/3DPrinted</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/3DPrinted&amp;diff=25180"/>
		<updated>2020-09-29T11:41:00Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Explorer]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Explorer_3DPrinted.jpg&lt;br /&gt;
Explorer_3DPrinted_MarkForged.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Configuration&amp;diff=25179</id>
		<title>Explorer/PPRZ/Configuration</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Configuration&amp;diff=25179"/>
		<updated>2020-09-29T11:40:39Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Explorer]]&lt;br /&gt;
&lt;br /&gt;
xp_option_board_apogee_mpu9150.xml&lt;br /&gt;
 &amp;lt;firmware&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;imu&amp;quot; type=&amp;quot;apogee_mpu9150&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;APOGEE_LOWPASS_FILTER&amp;quot; value=&amp;quot;MPU60X0_DLPF_256HZ&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;APOGEE_SMPLRT_DIV&amp;quot;     value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/module&amp;gt;&lt;br /&gt;
 &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_option_imu_apogee_mpu9150.xml&lt;br /&gt;
 &amp;lt;airframe&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;
    &amp;lt;define name=&amp;quot;GYRO_P_SIGN&amp;quot;       value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GYRO_Q_SIGN&amp;quot;       value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GYRO_R_SIGN&amp;quot;       value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_X_SIGN&amp;quot;      value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_Y_SIGN&amp;quot;      value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_Z_SIGN&amp;quot;      value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_X_NEUTRAL&amp;quot;   value=&amp;quot;-87&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_Y_NEUTRAL&amp;quot;   value=&amp;quot;50&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_Z_NEUTRAL&amp;quot;   value=&amp;quot;-16&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_X_SENS&amp;quot;      value=&amp;quot;2.26755822693&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;2.4468957791&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;2.45151941617&amp;quot; integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_X_SIGN&amp;quot;        value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_Y_SIGN&amp;quot;        value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_Z_SIGN&amp;quot;        value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_X_NEUTRAL&amp;quot;     value=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_Y_NEUTRAL&amp;quot;     value=&amp;quot;-8&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_Z_NEUTRAL&amp;quot;     value=&amp;quot;45&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_X_SENS&amp;quot;        value=&amp;quot;15.406512237311269&amp;quot; integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_Y_SENS&amp;quot;        value=&amp;quot;14.315784652910315&amp;quot; integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_Z_SENS&amp;quot;        value=&amp;quot;16.04339395369838&amp;quot; integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;BODY_TO_IMU_PHI&amp;quot;   value=&amp;quot;0.&amp;quot; unit=&amp;quot;deg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;BODY_TO_IMU_THETA&amp;quot; value=&amp;quot;0.&amp;quot; unit=&amp;quot;deg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;BODY_TO_IMU_PSI&amp;quot;   value=&amp;quot;0.&amp;quot; unit=&amp;quot;deg&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_common_target_flying.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;radio_control&amp;quot; type=&amp;quot;sbus&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;define name=&amp;quot;RADIO_KILL_SWITCH&amp;quot; value=&amp;quot;RADIO_GAIN1&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- module name=&amp;quot;tlsf&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;pprzlog&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;logger&amp;quot; type=&amp;quot;sd_chibios&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;flight_recorder&amp;quot;/--&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_option_target_apogee.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- Info: Tawaki: Auxa1, Apogee: PPMin --&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;light_scheduler&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;WS2812_NB_LEDS&amp;quot; value=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;WS2812_SEQUENCE&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;actuators&amp;quot; type=&amp;quot;pwm&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;switch&amp;quot; type=&amp;quot;servo&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;extra_dl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;EXTRA_DL_PORT&amp;quot; value=&amp;quot;UART6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;EXTRA_DL_BAUD&amp;quot; value=&amp;quot;B115200&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;lt;servos driver=&amp;quot;Pwm&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;servo name=&amp;quot;SWITCH&amp;quot; no=&amp;quot;1&amp;quot; min=&amp;quot;1000&amp;quot; neutral=&amp;quot;1000&amp;quot; max=&amp;quot;1900&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/servos&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;actuators&amp;quot; type=&amp;quot;dshot&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;DSHOT_SPEED&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_DSHOT_TIM3&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_DSHOT6&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;lt;servos driver=&amp;quot;DShot&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;servo name=&amp;quot;FR&amp;quot; no=&amp;quot;0&amp;quot; min=&amp;quot;0&amp;quot; neutral=&amp;quot;100&amp;quot; max=&amp;quot;2000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;servo name=&amp;quot;BR&amp;quot; no=&amp;quot;2&amp;quot; min=&amp;quot;0&amp;quot; neutral=&amp;quot;100&amp;quot; max=&amp;quot;2000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;servo name=&amp;quot;BL&amp;quot; no=&amp;quot;3&amp;quot; min=&amp;quot;0&amp;quot; neutral=&amp;quot;100&amp;quot; max=&amp;quot;2000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;servo name=&amp;quot;FL&amp;quot; no=&amp;quot;6&amp;quot; min=&amp;quot;0&amp;quot; neutral=&amp;quot;100&amp;quot; max=&amp;quot;2000&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/servos&amp;gt;  &lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_option_outdoor.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;ins&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;gps&amp;quot; type=&amp;quot;ublox&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;GPS_BAUD&amp;quot; value=&amp;quot;B115200&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;USE_GPS_UBX_RTCM&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- Firmware Option (1) --&amp;gt; &lt;br /&gt;
  &amp;lt;section name=&amp;quot;INS&amp;quot; prefix=&amp;quot;INS_&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;AHRS&amp;quot; prefix=&amp;quot;AHRS_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;H_X&amp;quot; value=&amp;quot;0.51385&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;H_Y&amp;quot; value=&amp;quot;0.00299&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;H_Z&amp;quot; value=&amp;quot;0.85787&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;   &lt;br /&gt;
  &amp;amp;lt;!-- Firmware Option (2) --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- section name=&amp;quot;INS&amp;quot; prefix=&amp;quot;INS_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;H_X&amp;quot; value=&amp;quot;0.576084&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;H_Y&amp;quot; value=&amp;quot;-0.00275807&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;H_Z&amp;quot; value=&amp;quot;0.817385&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;INV_NXZ&amp;quot; value=&amp;quot;0.25&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;INV_NH&amp;quot; value=&amp;quot;2.0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;INV_MVZ&amp;quot; value=&amp;quot;8.&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section--&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_option_indoor.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;gps&amp;quot; type=&amp;quot;datalink&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;ins&amp;quot; type=&amp;quot;gps_passthrough&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;ahrs&amp;quot; type=&amp;quot;int_cmpl_quat&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;USE_MAGNETOMETER&amp;quot; value=&amp;quot;FALSE&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;AHRS&amp;quot; prefix=&amp;quot;AHRS_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_GPS_HEADING&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;HEADING_UPDATE_GPS_MIN_SPEED&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_common_stab_rate.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;STABILIZATION_RATE&amp;quot; prefix=&amp;quot;STABILIZATION_RATE_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SP_MAX_P&amp;quot; value=&amp;quot;10000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SP_MAX_Q&amp;quot; value=&amp;quot;10000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SP_MAX_R&amp;quot; value=&amp;quot;10000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GAIN_P&amp;quot; value=&amp;quot;400&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GAIN_Q&amp;quot; value=&amp;quot;400&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GAIN_R&amp;quot; value=&amp;quot;350&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_common_stab_attitude.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;STABILIZATION_ATTITUDE&amp;quot; prefix=&amp;quot;STABILIZATION_ATTITUDE_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- setpoints --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SP_MAX_PHI&amp;quot; value=&amp;quot;45.&amp;quot; unit=&amp;quot;deg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SP_MAX_THETA&amp;quot; value=&amp;quot;45.&amp;quot; unit=&amp;quot;deg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SP_MAX_R&amp;quot; value=&amp;quot;90.&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;DEADBAND_R&amp;quot; value=&amp;quot;250&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- reference --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_OMEGA_P&amp;quot; value=&amp;quot;800&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_ZETA_P&amp;quot; value=&amp;quot;0.85&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_MAX_P&amp;quot; value=&amp;quot;300.&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_MAX_PDOT&amp;quot; value=&amp;quot;RadOfDeg(7000.)&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_OMEGA_Q&amp;quot; value=&amp;quot;800&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_ZETA_Q&amp;quot; value=&amp;quot;0.85&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_MAX_Q&amp;quot; value=&amp;quot;300.&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_MAX_QDOT&amp;quot; value=&amp;quot;RadOfDeg(7000.)&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_OMEGA_R&amp;quot; value=&amp;quot;500&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_ZETA_R&amp;quot; value=&amp;quot;0.85&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_MAX_R&amp;quot; value=&amp;quot;90.&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_MAX_RDOT&amp;quot; value=&amp;quot;RadOfDeg(900.)&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- feedback --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PHI_PGAIN&amp;quot; value=&amp;quot;432&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PHI_DGAIN&amp;quot; value=&amp;quot;207&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PHI_IGAIN&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THETA_PGAIN&amp;quot; value=&amp;quot;432&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THETA_DGAIN&amp;quot; value=&amp;quot;207&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THETA_IGAIN&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PSI_PGAIN&amp;quot; value=&amp;quot;1392&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PSI_DGAIN&amp;quot; value=&amp;quot;350&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PSI_IGAIN&amp;quot; value=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- feedforward --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PHI_DDGAIN&amp;quot; value=&amp;quot;60&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THETA_DDGAIN&amp;quot; value=&amp;quot;60&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PSI_DDGAIN&amp;quot; value=&amp;quot;170&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PHI_AGAIN&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THETA_AGAIN&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PSI_AGAIN&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_common_guidance.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;GUIDANCE_V&amp;quot; prefix=&amp;quot;GUIDANCE_V_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;REF_MIN_ZDD&amp;quot; value=&amp;quot;-0.4*9.81&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;REF_MAX_ZDD&amp;quot; value=&amp;quot; 0.4*9.81&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;REF_MIN_ZD&amp;quot; value=&amp;quot;-1.5&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;REF_MAX_ZD&amp;quot; value=&amp;quot; 1.&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;90&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;110&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.35&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_NOISE_FACTOR&amp;quot; value=&amp;quot;1.&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_INITIAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.3&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;GUIDANCE_H&amp;quot; prefix=&amp;quot;GUIDANCE_H_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MAX_BANK&amp;quot; value=&amp;quot;20&amp;quot; unit=&amp;quot;deg&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;PGAIN&amp;quot; value=&amp;quot;41&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;DGAIN&amp;quot; value=&amp;quot;108&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;IGAIN&amp;quot; value=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NGAIN&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;amp;lt;!-- feedforward --&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AGAIN&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;amp;lt;!--define name=&amp;quot;REF_MAX_SPEED&amp;quot; value=&amp;quot;0.2&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;REF_MAX_ACCEL&amp;quot; value=&amp;quot;1.&amp;quot;/--&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_common_modules.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;telemetry&amp;quot; type=&amp;quot;xbee_api&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;ahrs&amp;quot; type=&amp;quot;int_cmpl_quat&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;stabilization&amp;quot; type=&amp;quot;int_quat&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;motor_mixing&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;air_data&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;filter&amp;quot; type=&amp;quot;1euro_imu&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AHRS_ICQ_IMU_ID&amp;quot; value=&amp;quot;IMU_F1E_ID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AHRS_ALIGNER_IMU_ID&amp;quot; value=&amp;quot;IMU_F1E_ID&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;lt;commands&amp;gt;&lt;br /&gt;
    &amp;lt;axis name=&amp;quot;ROLL&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;axis name=&amp;quot;PITCH&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;axis name=&amp;quot;YAW&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;axis name=&amp;quot;THRUST&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/commands&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;MIXING&amp;quot; prefix=&amp;quot;MOTOR_MIXING_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TYPE&amp;quot; value=&amp;quot;QUAD_X&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REVERSE&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;command_laws&amp;gt;&lt;br /&gt;
    &amp;lt;call fun=&amp;quot;motor_mixing_run(autopilot_get_motors_on(),FALSE,values)&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;set servo=&amp;quot;FR&amp;quot; value=&amp;quot;motor_mixing.commands[MOTOR_FRONT_RIGHT]&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;set servo=&amp;quot;FL&amp;quot; value=&amp;quot;motor_mixing.commands[MOTOR_FRONT_LEFT]&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;set servo=&amp;quot;BR&amp;quot; value=&amp;quot;motor_mixing.commands[MOTOR_BACK_RIGHT]&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;set servo=&amp;quot;BL&amp;quot; value=&amp;quot;motor_mixing.commands[MOTOR_BACK_LEFT]&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/command_laws&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;NAV&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ARRIVED_AT_WAYPOINT&amp;quot; value=&amp;quot;0.25&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NAV_DESCEND_VSPEED&amp;quot; value=&amp;quot;-0.4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NAV_CLIMB_VSPEED&amp;quot; value=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;BAT&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;CRITIC_BAT_LEVEL&amp;quot; value=&amp;quot;9.3&amp;quot; unit=&amp;quot;V&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;AUTOPILOT&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MODE_MANUAL&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_DIRECT&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MODE_AUTO1&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_Z_HOLD&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MODE_AUTO2&amp;quot; value=&amp;quot;AP_MODE_NAV&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;GCS&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALT_SHIFT_PLUS_PLUS&amp;quot; value=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALT_SHIFT_PLUS&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALT_SHIFT_MINUS&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Configuration&amp;diff=25178</id>
		<title>Explorer/PPRZ/Configuration</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Configuration&amp;diff=25178"/>
		<updated>2020-09-29T11:38:07Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;xp_option_board_apogee_mpu9150.xml&lt;br /&gt;
 &amp;lt;firmware&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;imu&amp;quot; type=&amp;quot;apogee_mpu9150&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;APOGEE_LOWPASS_FILTER&amp;quot; value=&amp;quot;MPU60X0_DLPF_256HZ&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;APOGEE_SMPLRT_DIV&amp;quot;     value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/module&amp;gt;&lt;br /&gt;
 &amp;lt;/firmware&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_option_imu_apogee_mpu9150.xml&lt;br /&gt;
 &amp;lt;airframe&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;
    &amp;lt;define name=&amp;quot;GYRO_P_SIGN&amp;quot;       value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GYRO_Q_SIGN&amp;quot;       value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GYRO_R_SIGN&amp;quot;       value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_X_SIGN&amp;quot;      value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_Y_SIGN&amp;quot;      value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_Z_SIGN&amp;quot;      value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_X_NEUTRAL&amp;quot;   value=&amp;quot;-87&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_Y_NEUTRAL&amp;quot;   value=&amp;quot;50&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_Z_NEUTRAL&amp;quot;   value=&amp;quot;-16&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ACCEL_X_SENS&amp;quot;      value=&amp;quot;2.26755822693&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;2.4468957791&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;2.45151941617&amp;quot; integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_X_SIGN&amp;quot;        value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_Y_SIGN&amp;quot;        value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_Z_SIGN&amp;quot;        value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_X_NEUTRAL&amp;quot;     value=&amp;quot;6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_Y_NEUTRAL&amp;quot;     value=&amp;quot;-8&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_Z_NEUTRAL&amp;quot;     value=&amp;quot;45&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_X_SENS&amp;quot;        value=&amp;quot;15.406512237311269&amp;quot; integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_Y_SENS&amp;quot;        value=&amp;quot;14.315784652910315&amp;quot; integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MAG_Z_SENS&amp;quot;        value=&amp;quot;16.04339395369838&amp;quot; integer=&amp;quot;16&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;BODY_TO_IMU_PHI&amp;quot;   value=&amp;quot;0.&amp;quot; unit=&amp;quot;deg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;BODY_TO_IMU_THETA&amp;quot; value=&amp;quot;0.&amp;quot; unit=&amp;quot;deg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;BODY_TO_IMU_PSI&amp;quot;   value=&amp;quot;0.&amp;quot; unit=&amp;quot;deg&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_common_target_flying.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;radio_control&amp;quot; type=&amp;quot;sbus&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;define name=&amp;quot;RADIO_KILL_SWITCH&amp;quot; value=&amp;quot;RADIO_GAIN1&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- module name=&amp;quot;tlsf&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;pprzlog&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;logger&amp;quot; type=&amp;quot;sd_chibios&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;flight_recorder&amp;quot;/--&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_option_target_apogee.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- Info: Tawaki: Auxa1, Apogee: PPMin --&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;light_scheduler&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;WS2812_NB_LEDS&amp;quot; value=&amp;quot;12&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;WS2812_SEQUENCE&amp;quot; value=&amp;quot;2&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;actuators&amp;quot; type=&amp;quot;pwm&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;switch&amp;quot; type=&amp;quot;servo&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;extra_dl&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;EXTRA_DL_PORT&amp;quot; value=&amp;quot;UART6&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;EXTRA_DL_BAUD&amp;quot; value=&amp;quot;B115200&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;lt;servos driver=&amp;quot;Pwm&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;servo name=&amp;quot;SWITCH&amp;quot; no=&amp;quot;1&amp;quot; min=&amp;quot;1000&amp;quot; neutral=&amp;quot;1000&amp;quot; max=&amp;quot;1900&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/servos&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;actuators&amp;quot; type=&amp;quot;dshot&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;DSHOT_SPEED&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_DSHOT_TIM3&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_DSHOT6&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;lt;servos driver=&amp;quot;DShot&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;servo name=&amp;quot;FR&amp;quot; no=&amp;quot;0&amp;quot; min=&amp;quot;0&amp;quot; neutral=&amp;quot;100&amp;quot; max=&amp;quot;2000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;servo name=&amp;quot;BR&amp;quot; no=&amp;quot;2&amp;quot; min=&amp;quot;0&amp;quot; neutral=&amp;quot;100&amp;quot; max=&amp;quot;2000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;servo name=&amp;quot;BL&amp;quot; no=&amp;quot;3&amp;quot; min=&amp;quot;0&amp;quot; neutral=&amp;quot;100&amp;quot; max=&amp;quot;2000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;servo name=&amp;quot;FL&amp;quot; no=&amp;quot;6&amp;quot; min=&amp;quot;0&amp;quot; neutral=&amp;quot;100&amp;quot; max=&amp;quot;2000&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/servos&amp;gt;  &lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_option_outdoor.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;ins&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;gps&amp;quot; type=&amp;quot;ublox&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;GPS_BAUD&amp;quot; value=&amp;quot;B115200&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;define name=&amp;quot;USE_GPS_UBX_RTCM&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- Firmware Option (1) --&amp;gt; &lt;br /&gt;
  &amp;lt;section name=&amp;quot;INS&amp;quot; prefix=&amp;quot;INS_&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;AHRS&amp;quot; prefix=&amp;quot;AHRS_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;H_X&amp;quot; value=&amp;quot;0.51385&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;H_Y&amp;quot; value=&amp;quot;0.00299&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;H_Z&amp;quot; value=&amp;quot;0.85787&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;   &lt;br /&gt;
  &amp;amp;lt;!-- Firmware Option (2) --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- section name=&amp;quot;INS&amp;quot; prefix=&amp;quot;INS_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;H_X&amp;quot; value=&amp;quot;0.576084&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;H_Y&amp;quot; value=&amp;quot;-0.00275807&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;H_Z&amp;quot; value=&amp;quot;0.817385&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;INV_NXZ&amp;quot; value=&amp;quot;0.25&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;INV_NH&amp;quot; value=&amp;quot;2.0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;INV_MVZ&amp;quot; value=&amp;quot;8.&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section--&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_option_indoor.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;gps&amp;quot; type=&amp;quot;datalink&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;ins&amp;quot; type=&amp;quot;gps_passthrough&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;module name=&amp;quot;ahrs&amp;quot; type=&amp;quot;int_cmpl_quat&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;configure name=&amp;quot;USE_MAGNETOMETER&amp;quot; value=&amp;quot;FALSE&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;AHRS&amp;quot; prefix=&amp;quot;AHRS_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;USE_GPS_HEADING&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;HEADING_UPDATE_GPS_MIN_SPEED&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_common_stab_rate.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;STABILIZATION_RATE&amp;quot; prefix=&amp;quot;STABILIZATION_RATE_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SP_MAX_P&amp;quot; value=&amp;quot;10000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SP_MAX_Q&amp;quot; value=&amp;quot;10000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SP_MAX_R&amp;quot; value=&amp;quot;10000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GAIN_P&amp;quot; value=&amp;quot;400&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GAIN_Q&amp;quot; value=&amp;quot;400&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;GAIN_R&amp;quot; value=&amp;quot;350&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_common_stab_attitude.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;STABILIZATION_ATTITUDE&amp;quot; prefix=&amp;quot;STABILIZATION_ATTITUDE_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- setpoints --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SP_MAX_PHI&amp;quot; value=&amp;quot;45.&amp;quot; unit=&amp;quot;deg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SP_MAX_THETA&amp;quot; value=&amp;quot;45.&amp;quot; unit=&amp;quot;deg&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;SP_MAX_R&amp;quot; value=&amp;quot;90.&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;DEADBAND_R&amp;quot; value=&amp;quot;250&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- reference --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_OMEGA_P&amp;quot; value=&amp;quot;800&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_ZETA_P&amp;quot; value=&amp;quot;0.85&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_MAX_P&amp;quot; value=&amp;quot;300.&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_MAX_PDOT&amp;quot; value=&amp;quot;RadOfDeg(7000.)&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_OMEGA_Q&amp;quot; value=&amp;quot;800&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_ZETA_Q&amp;quot; value=&amp;quot;0.85&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_MAX_Q&amp;quot; value=&amp;quot;300.&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_MAX_QDOT&amp;quot; value=&amp;quot;RadOfDeg(7000.)&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_OMEGA_R&amp;quot; value=&amp;quot;500&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_ZETA_R&amp;quot; value=&amp;quot;0.85&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_MAX_R&amp;quot; value=&amp;quot;90.&amp;quot; unit=&amp;quot;deg/s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REF_MAX_RDOT&amp;quot; value=&amp;quot;RadOfDeg(900.)&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- feedback --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PHI_PGAIN&amp;quot; value=&amp;quot;432&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PHI_DGAIN&amp;quot; value=&amp;quot;207&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PHI_IGAIN&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THETA_PGAIN&amp;quot; value=&amp;quot;432&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THETA_DGAIN&amp;quot; value=&amp;quot;207&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THETA_IGAIN&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PSI_PGAIN&amp;quot; value=&amp;quot;1392&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PSI_DGAIN&amp;quot; value=&amp;quot;350&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PSI_IGAIN&amp;quot; value=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- feedforward --&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PHI_DDGAIN&amp;quot; value=&amp;quot;60&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THETA_DDGAIN&amp;quot; value=&amp;quot;60&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PSI_DDGAIN&amp;quot; value=&amp;quot;170&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PHI_AGAIN&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;THETA_AGAIN&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;PSI_AGAIN&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_common_guidance.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;GUIDANCE_V&amp;quot; prefix=&amp;quot;GUIDANCE_V_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;REF_MIN_ZDD&amp;quot; value=&amp;quot;-0.4*9.81&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;REF_MAX_ZDD&amp;quot; value=&amp;quot; 0.4*9.81&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;REF_MIN_ZD&amp;quot; value=&amp;quot;-1.5&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;REF_MAX_ZD&amp;quot; value=&amp;quot; 1.&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;90&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;110&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;10&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.35&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_NOISE_FACTOR&amp;quot; value=&amp;quot;1.&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_INITIAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.3&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;GUIDANCE_H&amp;quot; prefix=&amp;quot;GUIDANCE_H_&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;MAX_BANK&amp;quot; value=&amp;quot;20&amp;quot; unit=&amp;quot;deg&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;PGAIN&amp;quot; value=&amp;quot;41&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;DGAIN&amp;quot; value=&amp;quot;108&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;IGAIN&amp;quot; value=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NGAIN&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;amp;lt;!-- feedforward --&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;AGAIN&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;amp;lt;!--define name=&amp;quot;REF_MAX_SPEED&amp;quot; value=&amp;quot;0.2&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;REF_MAX_ACCEL&amp;quot; value=&amp;quot;1.&amp;quot;/--&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
xp_common_modules.xml&lt;br /&gt;
 &amp;lt;airframe&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;telemetry&amp;quot; type=&amp;quot;xbee_api&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;ahrs&amp;quot; type=&amp;quot;int_cmpl_quat&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;stabilization&amp;quot; type=&amp;quot;int_quat&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;motor_mixing&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;air_data&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;module name=&amp;quot;filter&amp;quot; type=&amp;quot;1euro_imu&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AHRS_ICQ_IMU_ID&amp;quot; value=&amp;quot;IMU_F1E_ID&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;AHRS_ALIGNER_IMU_ID&amp;quot; value=&amp;quot;IMU_F1E_ID&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/module&amp;gt;&lt;br /&gt;
  &amp;lt;commands&amp;gt;&lt;br /&gt;
    &amp;lt;axis name=&amp;quot;ROLL&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;axis name=&amp;quot;PITCH&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;axis name=&amp;quot;YAW&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;axis name=&amp;quot;THRUST&amp;quot; failsafe_value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/commands&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;MIXING&amp;quot; prefix=&amp;quot;MOTOR_MIXING_&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;TYPE&amp;quot; value=&amp;quot;QUAD_X&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;REVERSE&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;command_laws&amp;gt;&lt;br /&gt;
    &amp;lt;call fun=&amp;quot;motor_mixing_run(autopilot_get_motors_on(),FALSE,values)&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;set servo=&amp;quot;FR&amp;quot; value=&amp;quot;motor_mixing.commands[MOTOR_FRONT_RIGHT]&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;set servo=&amp;quot;FL&amp;quot; value=&amp;quot;motor_mixing.commands[MOTOR_FRONT_LEFT]&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;set servo=&amp;quot;BR&amp;quot; value=&amp;quot;motor_mixing.commands[MOTOR_BACK_RIGHT]&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;set servo=&amp;quot;BL&amp;quot; value=&amp;quot;motor_mixing.commands[MOTOR_BACK_LEFT]&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/command_laws&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;NAV&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ARRIVED_AT_WAYPOINT&amp;quot; value=&amp;quot;0.25&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NAV_DESCEND_VSPEED&amp;quot; value=&amp;quot;-0.4&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;NAV_CLIMB_VSPEED&amp;quot; value=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;BAT&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;CRITIC_BAT_LEVEL&amp;quot; value=&amp;quot;9.3&amp;quot; unit=&amp;quot;V&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;AUTOPILOT&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MODE_MANUAL&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_DIRECT&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MODE_AUTO1&amp;quot; value=&amp;quot;AP_MODE_ATTITUDE_Z_HOLD&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;MODE_AUTO2&amp;quot; value=&amp;quot;AP_MODE_NAV&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;GCS&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALT_SHIFT_PLUS_PLUS&amp;quot; value=&amp;quot;5&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALT_SHIFT_PLUS&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;define name=&amp;quot;ALT_SHIFT_MINUS&amp;quot; value=&amp;quot;-1&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/section&amp;gt;&lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Explorer]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ&amp;diff=25177</id>
		<title>Explorer/PPRZ</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ&amp;diff=25177"/>
		<updated>2020-09-29T11:37:40Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;airframe file:&lt;br /&gt;
 &amp;lt;!DOCTYPE airframe SYSTEM &amp;quot;../../airframe.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;airframe name=&amp;quot;Quadricopter XP&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;description&amp;gt;&lt;br /&gt;
    * Autopilot:   Tawaki/ Apogee&lt;br /&gt;
    * Actuators:   4 in 1 Holybro BLHELI ESC&lt;br /&gt;
    * Telemetry:   XBee and Wifibroadcast (compagnon board)&lt;br /&gt;
    * GPS:         ublox M8P (optional DGPS) or Datalink&lt;br /&gt;
    * RC:          FrSky XM+ or Datalink&lt;br /&gt;
 &lt;br /&gt;
    IMU Apogee :    &lt;br /&gt;
      - MPU6050 (acc+gyro), &lt;br /&gt;
      - MPU9150 (acc+gyro+mag) = MPU6050 + AK8975&lt;br /&gt;
 &lt;br /&gt;
    MAG Apogee (AK8975 on I2C1) or on external GPS board (LIS3MDL on I2C1) or Datalink&lt;br /&gt;
 &lt;br /&gt;
    BARO Apogee (MPL3115A2 on I2C1)&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;/description&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;configure name=&amp;quot;PERIODIC_FREQUENCY&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;AHRS_PROPAGATE_FREQUENCY&amp;quot; value=&amp;quot;$(PERIODIC_FREQUENCY)&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;KILL_AS_FAILSAFE&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;amp;lt;!-- OPTION 1A &amp;amp; 1B --&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;apogee_1.0_chibios&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- OPTION 1C --&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!--&lt;br /&gt;
    &amp;lt;target name=&amp;quot;nps&amp;quot; board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- apogee_1.0_chibios --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 1A --&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_mpu9150.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_imu_apogee_mpu9150.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_target_flying.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_target_apogee.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 1B --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!--&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_lis3mdl.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_imu_apogee_lis3mdl.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_target_flying.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_target_apogee.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 1C --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!--&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_tawaki.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_mpu9150.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_lis3mdl.xml&amp;quot;/&amp;gt; &lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- tawaki_1.0 &amp;amp; apogee_1.0_chibios --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 2A --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_indoor.xml&amp;quot;/--&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 2B --&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_outdoor.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- OPTION 2C --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!--&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_target_nps.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- All targets --&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_stab_rate.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_stab_attitude.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_guidance.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_modules.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
flght_plan file:&lt;br /&gt;
 &amp;lt;!DOCTYPE flight_plan SYSTEM &amp;quot;../flight_plan.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;flight_plan alt=&amp;quot;148&amp;quot; ground_alt=&amp;quot;146&amp;quot; lat0=&amp;quot;43.5640917&amp;quot; lon0=&amp;quot;1.4829201&amp;quot; max_dist_from_home=&amp;quot;20&amp;quot; name=&amp;quot;Rotorcraft Optitrack (ENAC)&amp;quot; security_height=&amp;quot;0.3&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;header&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/header&amp;gt;&lt;br /&gt;
   &amp;lt;waypoints&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;HOME&amp;quot; x=&amp;quot;0.0&amp;quot; y=&amp;quot;0.0&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;GOAL&amp;quot; x=&amp;quot;2.0&amp;quot; y=&amp;quot;2.0&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;STDBY&amp;quot; x=&amp;quot;-0.7&amp;quot; y=&amp;quot;-0.8&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;TD&amp;quot; x=&amp;quot;0.8&amp;quot; y=&amp;quot;-1.7&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S1&amp;quot; x=&amp;quot;2.1&amp;quot; y=&amp;quot;2.8&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S2&amp;quot; x=&amp;quot;2.0&amp;quot; y=&amp;quot;-3.0&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S3&amp;quot; x=&amp;quot;-2.1&amp;quot; y=&amp;quot;-3.1&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S4&amp;quot; x=&amp;quot;-2.2&amp;quot; y=&amp;quot;2.8&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N1&amp;quot; x=&amp;quot;4.5&amp;quot; y=&amp;quot;5.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N2&amp;quot; x=&amp;quot;4.5&amp;quot; y=&amp;quot;-5.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N3&amp;quot; x=&amp;quot;-4.5&amp;quot; y=&amp;quot;-5.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N4&amp;quot; x=&amp;quot;-4.5&amp;quot; y=&amp;quot;5.2&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/waypoints&amp;gt;&lt;br /&gt;
   &amp;lt;sectors&amp;gt;&lt;br /&gt;
     &amp;lt;sector color=&amp;quot;red&amp;quot; name=&amp;quot;Net&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N1&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N2&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N3&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N4&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/sector&amp;gt;&lt;br /&gt;
     &amp;lt;sector color=&amp;quot;green&amp;quot; name=&amp;quot;Survey&amp;quot; type=&amp;quot;dynamic&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S1&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S2&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S3&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S4&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/sector&amp;gt;&lt;br /&gt;
   &amp;lt;/sectors&amp;gt;&lt;br /&gt;
   &amp;lt;modules&amp;gt;&lt;br /&gt;
     &amp;lt;module name=&amp;quot;nav&amp;quot; type=&amp;quot;survey_rectangle_rotorcraft&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/modules&amp;gt;&lt;br /&gt;
   &amp;lt;blocks&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Wait GPS&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavKillThrottle()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;while cond=&amp;quot;!GpsFixValid()&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Holding point&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavKillThrottle()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;attitude pitch=&amp;quot;0&amp;quot; roll=&amp;quot;0&amp;quot; throttle=&amp;quot;0&amp;quot; until=&amp;quot;FALSE&amp;quot; vmode=&amp;quot;throttle&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Start Engine&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavResurrect()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;attitude pitch=&amp;quot;0&amp;quot; roll=&amp;quot;0&amp;quot; throttle=&amp;quot;0&amp;quot; until=&amp;quot;FALSE&amp;quot; vmode=&amp;quot;throttle&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Takeoff&amp;quot; strip_button=&amp;quot;Takeoff&amp;quot; strip_icon=&amp;quot;takeoff.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;exception cond=&amp;quot;stateGetPositionEnu_f()-&amp;gt;z &amp;gt; 1.0&amp;quot; deroute=&amp;quot;Standby&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavSetWaypointHere(WP_STDBY)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;stay climb=&amp;quot;nav_climb_vspeed&amp;quot; vmode=&amp;quot;climb&amp;quot; wp=&amp;quot;STDBY&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Standby&amp;quot; strip_button=&amp;quot;Standby&amp;quot; strip_icon=&amp;quot;home.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;nav_set_heading_deg(0)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;stay wp=&amp;quot;STDBY&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;START&amp;quot; strip_button=&amp;quot;Go&amp;quot; strip_icon=&amp;quot;lookfore.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavSetWaypointHere(WP_GOAL)&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;StayGoal&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;stay wp=&amp;quot;GOAL&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block group=&amp;quot;extra_pattern&amp;quot; name=&amp;quot;Survey S1-S2 Sweep NS SET&amp;quot; strip_button=&amp;quot;SvySweep-NS&amp;quot; strip_icon=&amp;quot;survey_rect_ns.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;nav_survey_rectangle_rotorcraft_setup(WP_S1, WP_S3, 1, NS)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;deroute block=&amp;quot;Survey RECTANGLE RUN&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block group=&amp;quot;extra_pattern&amp;quot; name=&amp;quot;Survey S1-S2 Sweep WE SET&amp;quot; strip_button=&amp;quot;SvySweep-WE&amp;quot; strip_icon=&amp;quot;survey_rect_we.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;nav_survey_rectangle_rotorcraft_setup(WP_S1, WP_S3, 1, WE)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;deroute block=&amp;quot;Survey RECTANGLE RUN&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block group=&amp;quot;extra_pattern&amp;quot; name=&amp;quot;Survey RECTANGLE RUN&amp;quot; strip_button=&amp;quot;SvySweep CONT&amp;quot; strip_icon=&amp;quot;survey_rect_run.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;exception cond=&amp;quot;rectangle_survey_sweep_num == 1&amp;quot; deroute=&amp;quot;Standby&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;call fun=&amp;quot;nav_survey_rectangle_rotorcraft_run(WP_S1, WP_S3)&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;land here&amp;quot; strip_button=&amp;quot;Land Here&amp;quot; strip_icon=&amp;quot;land-right.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavSetWaypointHere(WP_TD)&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;land&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;go wp=&amp;quot;TD&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;flare&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;exception cond=&amp;quot;!nav_is_in_flight()&amp;quot; deroute=&amp;quot;KILL_LANDED&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;stay climb=&amp;quot;nav_descend_vspeed&amp;quot; vmode=&amp;quot;climb&amp;quot; wp=&amp;quot;TD&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;KILL_LANDED&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavKillThrottle()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;attitude pitch=&amp;quot;0&amp;quot; roll=&amp;quot;0&amp;quot; throttle=&amp;quot;0&amp;quot; until=&amp;quot;FALSE&amp;quot; vmode=&amp;quot;throttle&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
   &amp;lt;/blocks&amp;gt;&lt;br /&gt;
 &amp;lt;/flight_plan&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/PPRZ/Configuration]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Explorer/PPRZ/Tunning]]&lt;br /&gt;
&lt;br /&gt;
[[Explorer]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Setup&amp;diff=25176</id>
		<title>Explorer/RaspberryPi/Setup</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Setup&amp;diff=25176"/>
		<updated>2020-09-29T11:37:11Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Installation&lt;br /&gt;
Download and install raspbian (debian for raspberry) lite package (same for PI3 and PIzero)&amp;lt;br /&amp;gt;&lt;br /&gt;
Raspberry Pi OS (32-bit) Lite (buster : 433M)&lt;br /&gt;
&lt;br /&gt;
  wget https://downloads.raspberrypi.org/raspbian_lite_latest&lt;br /&gt;
&lt;br /&gt;
  Flash the RaspberryPi OS on a 16Gb minimum size SD&lt;br /&gt;
 &lt;br /&gt;
  mv raspbian_lite_latest raspbian_lite_latest.zip&lt;br /&gt;
  ./balenaEtcher-1.5.79-x64.AppImage&lt;br /&gt;
&lt;br /&gt;
* Initial configuration:&lt;br /&gt;
PI3 and PIZero can be configured headless, without a keyboard and a display.&amp;lt;br /&amp;gt;&lt;br /&gt;
You just need to configure the board to connect to a wifi hotspot when power on.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Plug the memory SD card with the fresh raspbian installed.&lt;br /&gt;
&lt;br /&gt;
Create file (sudo touch)&lt;br /&gt;
  boot/ssh&lt;br /&gt;
&lt;br /&gt;
Create the file with following content (sudo vi)&lt;br /&gt;
  boot/wpa_supplicant.conf&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
  ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev&lt;br /&gt;
  update_config=1&lt;br /&gt;
  country=FR&lt;br /&gt;
  network={&lt;br /&gt;
    ssid=&amp;quot;Androidxp&amp;quot;&lt;br /&gt;
    psk=&amp;quot;pprzpprz&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  network={&lt;br /&gt;
    ssid=&amp;quot;pprz_router&amp;quot;&lt;br /&gt;
    key_mgmt=NONE&lt;br /&gt;
  }&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
* Plug the SD memory card in the raspberry Pi and power on.&lt;br /&gt;
* Connect your computer to the same wifi hotspot&lt;br /&gt;
* Look for the Raspberry IP on the network&lt;br /&gt;
 nmap -sn 192.168.1.0/24&lt;br /&gt;
&lt;br /&gt;
* Connect to the identified IP&lt;br /&gt;
  ssh pi@...&lt;br /&gt;
  password: raspberry&lt;br /&gt;
&lt;br /&gt;
* Set the configuration&lt;br /&gt;
  sudo raspi-config&lt;br /&gt;
  1) change user password&lt;br /&gt;
  5) P1) enable camera&lt;br /&gt;
     P6) login shell:disable&lt;br /&gt;
         serial interface:enable&lt;br /&gt;
  7) advanced options&lt;br /&gt;
    A1) expand filesystem&lt;br /&gt;
&lt;br /&gt;
  /etc/hosts&lt;br /&gt;
  127.0.1.1       raspberrypi&lt;br /&gt;
  to 127.0.1.1       airpi or groundpi&lt;br /&gt;
&lt;br /&gt;
  /etc/hostname&lt;br /&gt;
  raspberrypi to airpi or groundpi&lt;br /&gt;
&lt;br /&gt;
 /etc/dhcpcd.conf&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
 # It is possible to fall back to a static IP if DHCP fails:&lt;br /&gt;
 # define static profile&lt;br /&gt;
 profile static_eth0&lt;br /&gt;
 static ip_address=192.168.3.2/24&lt;br /&gt;
 static routers=192.168.3.1&lt;br /&gt;
 static domain_name_servers=192.168.3.1&lt;br /&gt;
 # fallback to static profile on eth0&lt;br /&gt;
 interface eth0&lt;br /&gt;
 fallback static_eth0&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
&lt;br /&gt;
 /boot/config.txt&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
 &amp;quot;&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl stop serial-getty@ttyAMA0.service&lt;br /&gt;
 sudo systemctl disable serial-getty@ttyAMA0.service&lt;br /&gt;
&lt;br /&gt;
 sudo systemctl stop hciuart&lt;br /&gt;
 sudo systemctl disable hciuart&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
[[Explorer/RaspberryPi/Softwares]]&lt;br /&gt;
&lt;br /&gt;
[[Explorer]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25133</id>
		<title>Explorer/RaspberryPi/Wifibroadcast/Run</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25133"/>
		<updated>2020-09-16T06:39:20Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;su root -c /home/pi/airpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
/home/pi/airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
chmod ugo+xwr airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 #iw wlan1 info&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14900 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14901 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 rm /tmp/camera*; \&lt;br /&gt;
 /usr/bin/raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -cd H264 -n -fl -ih -pf high -if both -ex sports -mm average -awb horizon -a ENAC -ae 22 -o - \&lt;br /&gt;
  | gst-launch-1.0 fdsrc \&lt;br /&gt;
    ! h264parse \&lt;br /&gt;
    ! video/x-h264,stream-format=byte-stream,alignment=au \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5600 streams. \&lt;br /&gt;
    ! shmsink socket-path=/tmp/camera1 wait-for-connection=false sync=false&lt;br /&gt;
 socat -u udp-listen:4243,reuseaddr,fork /dev/ttyAMA0,raw,echo=0,b115200 &amp;amp;&lt;br /&gt;
 socat -u /dev/ttyAMA0,raw,echo=0,b115200 udp-sendto:127.0.0.1:4242 &amp;amp;&lt;br /&gt;
 socat TUN:10.0.1.2/24,tun-name=airpituntx,iff-no-pi,tun-type=tun,su=pi,iff-up udp-sendto:127.0.0.1:14900 &amp;amp;&lt;br /&gt;
 socat udp-listen:14901 TUN:10.0.1.2/24,tun-name=airpitunrx,iff-no-pi,tun-type=tun,su=pi,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig airpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
chmod ugo+xwr groundpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;su root -c /home/pi/groundpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
or&amp;lt;br /&amp;gt;&lt;br /&gt;
sudo passwd root&amp;lt;br /&amp;gt;&lt;br /&gt;
/etc/ssh/sshd_config&amp;lt;br /&amp;gt;&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
On GCS&amp;lt;br /&amp;gt;&lt;br /&gt;
/etc/hosts&lt;br /&gt;
 192.168.1.111 groundpi_111&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen&lt;br /&gt;
 ssh-copy-id -i root@groundpi_111&lt;br /&gt;
&lt;br /&gt;
ssh root@groundpi_111 &amp;quot;/home/pi/groundpi.sh MY_GCS_IP &lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 if /bin/pidof -x &amp;quot;wfb_tx&amp;quot; &amp;gt;/dev/null ; then&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 #Update GCS_IP with yours&lt;br /&gt;
 #export GCS_IP=192.168.1.236&lt;br /&gt;
 GCS_IP=$1&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -c 127.0.0.1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -c $GCS_IP -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14800 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14801 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 gst-launch-1.0 udpsrc port=5600 \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5610 streams. \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! application/x-rtp, encoding-name=H264,payload=96 \&lt;br /&gt;
    ! rtph264depay ! video/x-h264,stream-format=byte-stream \&lt;br /&gt;
    ! fdsink \&lt;br /&gt;
  | /home/pi/wifibroadcast_osd/fpv_video/fpv_video &amp;amp;&lt;br /&gt;
 /home/pi/gst-rtsp-server-1.14.4/examples/.libs/test-launch \&lt;br /&gt;
    &amp;quot;\&amp;quot;udpsrc port=5610 do-timestamp=true ! application/x-rtp, encoding-name=H264,payload=96 ! rtph264depay ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1\&amp;quot;&amp;quot; &amp;quot;\&amp;quot; &amp;quot; &amp;amp;&lt;br /&gt;
 socat -u TUN:10.0.1.1/24,tun-name=groundpituntx,iff-no-pi,tun-type=tun,iff-up udp-sendto:127.0.0.1:14800 &amp;amp;&lt;br /&gt;
 socat -u udp-listen:14801 TUN:10.0.1.1/24,tun-name=groundpitunrx,iff-no-pi,tun-type=tun,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig groundpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
 pi@groundpi:~ $ ssh 10.0.1.2&lt;br /&gt;
 pi@10.0.1.2's password: &lt;br /&gt;
 Linux airpi 4.19.118+ #1311 Mon Apr 27 14:16:15 BST 2020 armv6l&lt;br /&gt;
 pi@airpi:~ $ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Wifibroadcast/Equipements]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25132</id>
		<title>Explorer/RaspberryPi/Wifibroadcast/Run</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25132"/>
		<updated>2020-09-16T06:37:32Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;su root -c /home/pi/airpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
/home/pi/airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
chmod ugo+xwr airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 #iw wlan1 info&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14900 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14901 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 rm /tmp/camera*; \&lt;br /&gt;
 /usr/bin/raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -cd H264 -n -fl -ih -pf high -if both -ex sports -mm average -awb horizon -a ENAC -ae 22 -o - \&lt;br /&gt;
  | gst-launch-1.0 fdsrc \&lt;br /&gt;
    ! h264parse \&lt;br /&gt;
    ! video/x-h264,stream-format=byte-stream,alignment=au \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5600 streams. \&lt;br /&gt;
    ! shmsink socket-path=/tmp/camera1 wait-for-connection=false sync=false&lt;br /&gt;
 socat -u udp-listen:4243,reuseaddr,fork /dev/ttyAMA0,raw,echo=0,b115200 &amp;amp;&lt;br /&gt;
 socat -u /dev/ttyAMA0,raw,echo=0,b115200 udp-sendto:127.0.0.1:4242 &amp;amp;&lt;br /&gt;
 socat TUN:10.0.1.2/24,tun-name=airpituntx,iff-no-pi,tun-type=tun,su=pi,iff-up udp-sendto:127.0.0.1:14900 &amp;amp;&lt;br /&gt;
 socat udp-listen:14901 TUN:10.0.1.2/24,tun-name=airpitunrx,iff-no-pi,tun-type=tun,su=pi,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig airpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
chmod ugo+xwr groundpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;su root -c /home/pi/groundpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
or&amp;lt;br /&amp;gt;&lt;br /&gt;
sudo passwd root&amp;lt;br /&amp;gt;&lt;br /&gt;
/etc/ssh/sshd_config&amp;lt;br /&amp;gt;&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
/etc/hosts&lt;br /&gt;
 192.168.1.111 groundpi_111&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen&lt;br /&gt;
 ssh-copy-id -i root@groundpi_111&lt;br /&gt;
&lt;br /&gt;
ssh root@groundpi_111 &amp;quot;/home/pi/groundpi.sh MY_GCS_IP &lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 if /bin/pidof -x &amp;quot;wfb_tx&amp;quot; &amp;gt;/dev/null ; then&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 #Update GCS_IP with yours&lt;br /&gt;
 #export GCS_IP=192.168.1.236&lt;br /&gt;
 GCS_IP=$1&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -c 127.0.0.1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -c $GCS_IP -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14800 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14801 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 gst-launch-1.0 udpsrc port=5600 \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5610 streams. \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! application/x-rtp, encoding-name=H264,payload=96 \&lt;br /&gt;
    ! rtph264depay ! video/x-h264,stream-format=byte-stream \&lt;br /&gt;
    ! fdsink \&lt;br /&gt;
  | /home/pi/wifibroadcast_osd/fpv_video/fpv_video &amp;amp;&lt;br /&gt;
 /home/pi/gst-rtsp-server-1.14.4/examples/.libs/test-launch \&lt;br /&gt;
    &amp;quot;\&amp;quot;udpsrc port=5610 do-timestamp=true ! application/x-rtp, encoding-name=H264,payload=96 ! rtph264depay ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1\&amp;quot;&amp;quot; &amp;quot;\&amp;quot; &amp;quot; &amp;amp;&lt;br /&gt;
 socat -u TUN:10.0.1.1/24,tun-name=groundpituntx,iff-no-pi,tun-type=tun,iff-up udp-sendto:127.0.0.1:14800 &amp;amp;&lt;br /&gt;
 socat -u udp-listen:14801 TUN:10.0.1.1/24,tun-name=groundpitunrx,iff-no-pi,tun-type=tun,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig groundpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
 pi@groundpi:~ $ ssh 10.0.1.2&lt;br /&gt;
 pi@10.0.1.2's password: &lt;br /&gt;
 Linux airpi 4.19.118+ #1311 Mon Apr 27 14:16:15 BST 2020 armv6l&lt;br /&gt;
 pi@airpi:~ $ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Wifibroadcast/Equipements]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25131</id>
		<title>Explorer/RaspberryPi/Wifibroadcast/Run</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25131"/>
		<updated>2020-09-16T06:37:08Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;su root -c /home/pi/airpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
/home/pi/airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
chmod ugo+xwr airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 #iw wlan1 info&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14900 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14901 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 rm /tmp/camera*; \&lt;br /&gt;
 /usr/bin/raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -cd H264 -n -fl -ih -pf high -if both -ex sports -mm average -awb horizon -a ENAC -ae 22 -o - \&lt;br /&gt;
  | gst-launch-1.0 fdsrc \&lt;br /&gt;
    ! h264parse \&lt;br /&gt;
    ! video/x-h264,stream-format=byte-stream,alignment=au \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5600 streams. \&lt;br /&gt;
    ! shmsink socket-path=/tmp/camera1 wait-for-connection=false sync=false&lt;br /&gt;
 socat -u udp-listen:4243,reuseaddr,fork /dev/ttyAMA0,raw,echo=0,b115200 &amp;amp;&lt;br /&gt;
 socat -u /dev/ttyAMA0,raw,echo=0,b115200 udp-sendto:127.0.0.1:4242 &amp;amp;&lt;br /&gt;
 socat TUN:10.0.1.2/24,tun-name=airpituntx,iff-no-pi,tun-type=tun,su=pi,iff-up udp-sendto:127.0.0.1:14900 &amp;amp;&lt;br /&gt;
 socat udp-listen:14901 TUN:10.0.1.2/24,tun-name=airpitunrx,iff-no-pi,tun-type=tun,su=pi,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig airpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
chmod ugo+xwr groundpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;su root -c /home/pi/groundpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
or&amp;lt;br /&amp;gt;&lt;br /&gt;
sudo passwd root&amp;lt;br /&amp;gt;&lt;br /&gt;
/etc/ssh/sshd_config&amp;lt;br /&amp;gt;&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
/etc/hosts&lt;br /&gt;
 192.168.1.111 groundpi_111&amp;lt;br /&amp;gt;&lt;br /&gt;
 ssh-keygen&lt;br /&gt;
 ssh-copy-id -i root@groundpi_111&lt;br /&gt;
ssh root@groundpi_111 &amp;quot;/home/pi/groundpi.sh MY_GCS_IP &lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 if /bin/pidof -x &amp;quot;wfb_tx&amp;quot; &amp;gt;/dev/null ; then&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 #Update GCS_IP with yours&lt;br /&gt;
 #export GCS_IP=192.168.1.236&lt;br /&gt;
 GCS_IP=$1&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -c 127.0.0.1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -c $GCS_IP -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14800 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14801 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 gst-launch-1.0 udpsrc port=5600 \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5610 streams. \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! application/x-rtp, encoding-name=H264,payload=96 \&lt;br /&gt;
    ! rtph264depay ! video/x-h264,stream-format=byte-stream \&lt;br /&gt;
    ! fdsink \&lt;br /&gt;
  | /home/pi/wifibroadcast_osd/fpv_video/fpv_video &amp;amp;&lt;br /&gt;
 /home/pi/gst-rtsp-server-1.14.4/examples/.libs/test-launch \&lt;br /&gt;
    &amp;quot;\&amp;quot;udpsrc port=5610 do-timestamp=true ! application/x-rtp, encoding-name=H264,payload=96 ! rtph264depay ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1\&amp;quot;&amp;quot; &amp;quot;\&amp;quot; &amp;quot; &amp;amp;&lt;br /&gt;
 socat -u TUN:10.0.1.1/24,tun-name=groundpituntx,iff-no-pi,tun-type=tun,iff-up udp-sendto:127.0.0.1:14800 &amp;amp;&lt;br /&gt;
 socat -u udp-listen:14801 TUN:10.0.1.1/24,tun-name=groundpitunrx,iff-no-pi,tun-type=tun,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig groundpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
 pi@groundpi:~ $ ssh 10.0.1.2&lt;br /&gt;
 pi@10.0.1.2's password: &lt;br /&gt;
 Linux airpi 4.19.118+ #1311 Mon Apr 27 14:16:15 BST 2020 armv6l&lt;br /&gt;
 pi@airpi:~ $ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Wifibroadcast/Equipements]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25130</id>
		<title>Explorer/RaspberryPi/Wifibroadcast/Run</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25130"/>
		<updated>2020-09-16T06:35:48Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;su root -c /home/pi/airpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
/home/pi/airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
chmod ugo+xwr airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 #iw wlan1 info&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14900 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14901 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 rm /tmp/camera*; \&lt;br /&gt;
 /usr/bin/raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -cd H264 -n -fl -ih -pf high -if both -ex sports -mm average -awb horizon -a ENAC -ae 22 -o - \&lt;br /&gt;
  | gst-launch-1.0 fdsrc \&lt;br /&gt;
    ! h264parse \&lt;br /&gt;
    ! video/x-h264,stream-format=byte-stream,alignment=au \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5600 streams. \&lt;br /&gt;
    ! shmsink socket-path=/tmp/camera1 wait-for-connection=false sync=false&lt;br /&gt;
 socat -u udp-listen:4243,reuseaddr,fork /dev/ttyAMA0,raw,echo=0,b115200 &amp;amp;&lt;br /&gt;
 socat -u /dev/ttyAMA0,raw,echo=0,b115200 udp-sendto:127.0.0.1:4242 &amp;amp;&lt;br /&gt;
 socat TUN:10.0.1.2/24,tun-name=airpituntx,iff-no-pi,tun-type=tun,su=pi,iff-up udp-sendto:127.0.0.1:14900 &amp;amp;&lt;br /&gt;
 socat udp-listen:14901 TUN:10.0.1.2/24,tun-name=airpitunrx,iff-no-pi,tun-type=tun,su=pi,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig airpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
chmod ugo+xwr groundpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;su root -c /home/pi/groundpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
or&amp;lt;br /&amp;gt;&lt;br /&gt;
sudo passwd root&amp;lt;br /&amp;gt;&lt;br /&gt;
/etc/ssh/sshd_config&amp;lt;br /&amp;gt;&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
/etc/hosts&lt;br /&gt;
 192.168.1.111 groundpi_111&lt;br /&gt;
 ssh-keygen&lt;br /&gt;
 ssh-copy-id -i root@groundpi_111&lt;br /&gt;
ssh root@groundpi_111 &amp;quot;/home/pi/groundpi.sh MY_GCS_IP &lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 if /bin/pidof -x &amp;quot;wfb_tx&amp;quot; &amp;gt;/dev/null ; then&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 #Update GCS_IP with yours&lt;br /&gt;
 #export GCS_IP=192.168.1.236&lt;br /&gt;
 GCS_IP=$1&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -c 127.0.0.1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -c $GCS_IP -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14800 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14801 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 gst-launch-1.0 udpsrc port=5600 \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5610 streams. \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! application/x-rtp, encoding-name=H264,payload=96 \&lt;br /&gt;
    ! rtph264depay ! video/x-h264,stream-format=byte-stream \&lt;br /&gt;
    ! fdsink \&lt;br /&gt;
  | /home/pi/wifibroadcast_osd/fpv_video/fpv_video &amp;amp;&lt;br /&gt;
 /home/pi/gst-rtsp-server-1.14.4/examples/.libs/test-launch \&lt;br /&gt;
    &amp;quot;\&amp;quot;udpsrc port=5610 do-timestamp=true ! application/x-rtp, encoding-name=H264,payload=96 ! rtph264depay ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1\&amp;quot;&amp;quot; &amp;quot;\&amp;quot; &amp;quot; &amp;amp;&lt;br /&gt;
 socat -u TUN:10.0.1.1/24,tun-name=groundpituntx,iff-no-pi,tun-type=tun,iff-up udp-sendto:127.0.0.1:14800 &amp;amp;&lt;br /&gt;
 socat -u udp-listen:14801 TUN:10.0.1.1/24,tun-name=groundpitunrx,iff-no-pi,tun-type=tun,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig groundpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
 pi@groundpi:~ $ ssh 10.0.1.2&lt;br /&gt;
 pi@10.0.1.2's password: &lt;br /&gt;
 Linux airpi 4.19.118+ #1311 Mon Apr 27 14:16:15 BST 2020 armv6l&lt;br /&gt;
 pi@airpi:~ $ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Wifibroadcast/Equipements]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25129</id>
		<title>Explorer/RaspberryPi/Wifibroadcast/Run</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25129"/>
		<updated>2020-09-16T06:33:34Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;su root -c /home/pi/airpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
/home/pi/airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
chmod ugo+xwr airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 #iw wlan1 info&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14900 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14901 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 rm /tmp/camera*; \&lt;br /&gt;
 /usr/bin/raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -cd H264 -n -fl -ih -pf high -if both -ex sports -mm average -awb horizon -a ENAC -ae 22 -o - \&lt;br /&gt;
  | gst-launch-1.0 fdsrc \&lt;br /&gt;
    ! h264parse \&lt;br /&gt;
    ! video/x-h264,stream-format=byte-stream,alignment=au \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5600 streams. \&lt;br /&gt;
    ! shmsink socket-path=/tmp/camera1 wait-for-connection=false sync=false&lt;br /&gt;
 socat -u udp-listen:4243,reuseaddr,fork /dev/ttyAMA0,raw,echo=0,b115200 &amp;amp;&lt;br /&gt;
 socat -u /dev/ttyAMA0,raw,echo=0,b115200 udp-sendto:127.0.0.1:4242 &amp;amp;&lt;br /&gt;
 socat TUN:10.0.1.2/24,tun-name=airpituntx,iff-no-pi,tun-type=tun,su=pi,iff-up udp-sendto:127.0.0.1:14900 &amp;amp;&lt;br /&gt;
 socat udp-listen:14901 TUN:10.0.1.2/24,tun-name=airpitunrx,iff-no-pi,tun-type=tun,su=pi,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig airpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
chmod ugo+xwr groundpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;#su root -c /home/pi/groundpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
or&amp;lt;br /&amp;gt;&lt;br /&gt;
/home/pi/groundpi.sh MY_GCS_IP&amp;lt;br /&amp;gt;&lt;br /&gt;
sudo passwd root&amp;lt;br /&amp;gt;&lt;br /&gt;
/etc/ssh/sshd_config&amp;lt;br /&amp;gt;&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
/etc/hosts&lt;br /&gt;
 192.168.1.111 groundpi_111&lt;br /&gt;
 ssh-keygen&lt;br /&gt;
 ssh-copy-id -i root@groundpi_111&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 if /bin/pidof -x &amp;quot;wfb_tx&amp;quot; &amp;gt;/dev/null ; then&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 #Update GCS_IP with yours&lt;br /&gt;
 #export GCS_IP=192.168.1.236&lt;br /&gt;
 GCS_IP=$1&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -c 127.0.0.1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -c $GCS_IP -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14800 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14801 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 gst-launch-1.0 udpsrc port=5600 \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5610 streams. \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! application/x-rtp, encoding-name=H264,payload=96 \&lt;br /&gt;
    ! rtph264depay ! video/x-h264,stream-format=byte-stream \&lt;br /&gt;
    ! fdsink \&lt;br /&gt;
  | /home/pi/wifibroadcast_osd/fpv_video/fpv_video &amp;amp;&lt;br /&gt;
 /home/pi/gst-rtsp-server-1.14.4/examples/.libs/test-launch \&lt;br /&gt;
    &amp;quot;\&amp;quot;udpsrc port=5610 do-timestamp=true ! application/x-rtp, encoding-name=H264,payload=96 ! rtph264depay ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1\&amp;quot;&amp;quot; &amp;quot;\&amp;quot; &amp;quot; &amp;amp;&lt;br /&gt;
 socat -u TUN:10.0.1.1/24,tun-name=groundpituntx,iff-no-pi,tun-type=tun,iff-up udp-sendto:127.0.0.1:14800 &amp;amp;&lt;br /&gt;
 socat -u udp-listen:14801 TUN:10.0.1.1/24,tun-name=groundpitunrx,iff-no-pi,tun-type=tun,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig groundpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
 pi@groundpi:~ $ ssh 10.0.1.2&lt;br /&gt;
 pi@10.0.1.2's password: &lt;br /&gt;
 Linux airpi 4.19.118+ #1311 Mon Apr 27 14:16:15 BST 2020 armv6l&lt;br /&gt;
 pi@airpi:~ $ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Wifibroadcast/Equipements]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25128</id>
		<title>Explorer/RaspberryPi/Wifibroadcast/Run</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25128"/>
		<updated>2020-09-16T06:30:00Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;su root -c /home/pi/airpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
/home/pi/airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
chmod ugo+xwr airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 #iw wlan1 info&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14900 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14901 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 rm /tmp/camera*; \&lt;br /&gt;
 /usr/bin/raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -cd H264 -n -fl -ih -pf high -if both -ex sports -mm average -awb horizon -a ENAC -ae 22 -o - \&lt;br /&gt;
  | gst-launch-1.0 fdsrc \&lt;br /&gt;
    ! h264parse \&lt;br /&gt;
    ! video/x-h264,stream-format=byte-stream,alignment=au \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5600 streams. \&lt;br /&gt;
    ! shmsink socket-path=/tmp/camera1 wait-for-connection=false sync=false&lt;br /&gt;
 socat -u udp-listen:4243,reuseaddr,fork /dev/ttyAMA0,raw,echo=0,b115200 &amp;amp;&lt;br /&gt;
 socat -u /dev/ttyAMA0,raw,echo=0,b115200 udp-sendto:127.0.0.1:4242 &amp;amp;&lt;br /&gt;
 socat TUN:10.0.1.2/24,tun-name=airpituntx,iff-no-pi,tun-type=tun,su=pi,iff-up udp-sendto:127.0.0.1:14900 &amp;amp;&lt;br /&gt;
 socat udp-listen:14901 TUN:10.0.1.2/24,tun-name=airpitunrx,iff-no-pi,tun-type=tun,su=pi,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig airpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;#su root -c /home/pi/groundpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
/home/pi/groundpi.sh MY_GCS_IP&amp;lt;br /&amp;gt;&lt;br /&gt;
chmod ugo+xwr groundpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 if /bin/pidof -x &amp;quot;wfb_tx&amp;quot; &amp;gt;/dev/null ; then&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 #Update GCS_IP with yours&lt;br /&gt;
 #export GCS_IP=192.168.1.236&lt;br /&gt;
 GCS_IP=$1&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -c 127.0.0.1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -c $GCS_IP -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14800 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14801 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 gst-launch-1.0 udpsrc port=5600 \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5610 streams. \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! application/x-rtp, encoding-name=H264,payload=96 \&lt;br /&gt;
    ! rtph264depay ! video/x-h264,stream-format=byte-stream \&lt;br /&gt;
    ! fdsink \&lt;br /&gt;
  | /home/pi/wifibroadcast_osd/fpv_video/fpv_video &amp;amp;&lt;br /&gt;
 /home/pi/gst-rtsp-server-1.14.4/examples/.libs/test-launch \&lt;br /&gt;
    &amp;quot;\&amp;quot;udpsrc port=5610 do-timestamp=true ! application/x-rtp, encoding-name=H264,payload=96 ! rtph264depay ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1\&amp;quot;&amp;quot; &amp;quot;\&amp;quot; &amp;quot; &amp;amp;&lt;br /&gt;
 socat -u TUN:10.0.1.1/24,tun-name=groundpituntx,iff-no-pi,tun-type=tun,iff-up udp-sendto:127.0.0.1:14800 &amp;amp;&lt;br /&gt;
 socat -u udp-listen:14801 TUN:10.0.1.1/24,tun-name=groundpitunrx,iff-no-pi,tun-type=tun,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig groundpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
 pi@groundpi:~ $ ssh 10.0.1.2&lt;br /&gt;
 pi@10.0.1.2's password: &lt;br /&gt;
 Linux airpi 4.19.118+ #1311 Mon Apr 27 14:16:15 BST 2020 armv6l&lt;br /&gt;
 pi@airpi:~ $ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Wifibroadcast/Equipements]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25127</id>
		<title>Explorer/RaspberryPi/Wifibroadcast/Run</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/RaspberryPi/Wifibroadcast/Run&amp;diff=25127"/>
		<updated>2020-09-16T06:28:46Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;su root -c /home/pi/airpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
/home/pi/airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
chmod ugo+xwr airpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 #iw wlan1 info&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14900 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14901 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 rm /tmp/camera*; \&lt;br /&gt;
 /usr/bin/raspivid -t 0 -w 640 -h 480 -fps 30/1 -b 3000000 -g 5 -cd H264 -n -fl -ih -pf high -if both -ex sports -mm average -awb horizon -a ENAC -ae 22 -o - \&lt;br /&gt;
  | gst-launch-1.0 fdsrc \&lt;br /&gt;
    ! h264parse \&lt;br /&gt;
    ! video/x-h264,stream-format=byte-stream,alignment=au \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! rtph264pay name=pay0 pt=96 config-interval=1 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5600 streams. \&lt;br /&gt;
    ! shmsink socket-path=/tmp/camera1 wait-for-connection=false sync=false&lt;br /&gt;
 socat -u udp-listen:4243,reuseaddr,fork /dev/ttyAMA0,raw,echo=0,b115200 &amp;amp;&lt;br /&gt;
 socat -u /dev/ttyAMA0,raw,echo=0,b115200 udp-sendto:127.0.0.1:4242 &amp;amp;&lt;br /&gt;
 socat TUN:10.0.1.2/24,tun-name=airpituntx,iff-no-pi,tun-type=tun,su=pi,iff-up udp-sendto:127.0.0.1:14900 &amp;amp;&lt;br /&gt;
 socat udp-listen:14901 TUN:10.0.1.2/24,tun-name=airpitunrx,iff-no-pi,tun-type=tun,su=pi,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig airpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
/etc/rc.local&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;quot;#su root -c /home/pi/groundpi.sh &amp;amp;&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
/home/pi/groundpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
chmod ugo+xwr groundpi.sh&amp;lt;br /&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 if /bin/pidof -x &amp;quot;wfb_tx&amp;quot; &amp;gt;/dev/null ; then&lt;br /&gt;
   exit 1&lt;br /&gt;
 fi&lt;br /&gt;
 #Update GCS_IP with yours&lt;br /&gt;
 #export GCS_IP=192.168.1.236&lt;br /&gt;
 GCS_IP=$1&lt;br /&gt;
 ifconfig wlan1 down &lt;br /&gt;
 sleep 1&lt;br /&gt;
 iw dev wlan1 set monitor otherbss &lt;br /&gt;
 iw reg set DE &lt;br /&gt;
 ifconfig wlan1 up &lt;br /&gt;
 iw dev wlan1 set channel 36&lt;br /&gt;
 iw dev wlan1_DEV set txpower fixed 4000&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 1 -c 127.0.0.1 -u 5600 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 2 -u 4242 -c $GCS_IP -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 3 -u 4243 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_tx -K /home/pi/wifibroadcast-svpcom/drone.key -p 4 -u 14800 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 /home/pi/wifibroadcast-svpcom/wfb_rx -K /home/pi/wifibroadcast-svpcom/drone.key -p 5 -u 14801 -c 127.0.0.1 -k 1 -n 2 wlan1 &amp;amp;&lt;br /&gt;
 gst-launch-1.0 udpsrc port=5600 \&lt;br /&gt;
    ! tee name=streams \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! udpsink host=127.0.0.1 port=5610 streams. \&lt;br /&gt;
    ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=0 \&lt;br /&gt;
    ! application/x-rtp, encoding-name=H264,payload=96 \&lt;br /&gt;
    ! rtph264depay ! video/x-h264,stream-format=byte-stream \&lt;br /&gt;
    ! fdsink \&lt;br /&gt;
  | /home/pi/wifibroadcast_osd/fpv_video/fpv_video &amp;amp;&lt;br /&gt;
 /home/pi/gst-rtsp-server-1.14.4/examples/.libs/test-launch \&lt;br /&gt;
    &amp;quot;\&amp;quot;udpsrc port=5610 do-timestamp=true ! application/x-rtp, encoding-name=H264,payload=96 ! rtph264depay ! video/x-h264,stream-format=byte-stream,alignment=au ! rtph264pay name=pay0 pt=96 config-interval=1\&amp;quot;&amp;quot; &amp;quot;\&amp;quot; &amp;quot; &amp;amp;&lt;br /&gt;
 socat -u TUN:10.0.1.1/24,tun-name=groundpituntx,iff-no-pi,tun-type=tun,iff-up udp-sendto:127.0.0.1:14800 &amp;amp;&lt;br /&gt;
 socat -u udp-listen:14801 TUN:10.0.1.1/24,tun-name=groundpitunrx,iff-no-pi,tun-type=tun,iff-up &amp;amp;&lt;br /&gt;
 sleep 1&lt;br /&gt;
 ifconfig groundpituntx mtu 1400 up &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
 pi@groundpi:~ $ ssh 10.0.1.2&lt;br /&gt;
 pi@10.0.1.2's password: &lt;br /&gt;
 Linux airpi 4.19.118+ #1311 Mon Apr 27 14:16:15 BST 2020 armv6l&lt;br /&gt;
 pi@airpi:~ $ &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/RaspberryPi/Wifibroadcast/Equipements]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25118</id>
		<title>Explorer/PPRZ/Tunning</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25118"/>
		<updated>2020-08-28T06:50:18Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;Tunning the vertical loop&amp;lt;/big&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;GUIDANCE_V&amp;quot; prefix=&amp;quot;GUIDANCE_V_&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add following mode to telemetry file&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;mode name=&amp;quot;vert_loop&amp;quot; key_press=&amp;quot;v&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ROTORCRAFT_STATUS&amp;quot; period=&amp;quot;1.2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;DL_VALUE&amp;quot;          period=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ALIVE&amp;quot;             period=&amp;quot;0.9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF&amp;quot;               period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF_EXTENDED&amp;quot;      period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VERT_LOOP&amp;quot;         period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_Z&amp;quot;             period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS&amp;quot;               period=&amp;quot;.11&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_REF&amp;quot;           period=&amp;quot;5.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/mode&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Switch to NAV mode, takeoff, standby &amp;lt;br /&amp;gt;&lt;br /&gt;
Set telemetry from default to vert_loop &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plot in realtime&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/ground_segment/tmtc/messages &amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/plotter &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or post process ground log and data files&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/logplotter ~/Projects/paparazzi/var/logs/xx.log&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
1) Start with no KI, and no adaptation, and set NOMINAL_HOVER_THROTTLE, from manual flight &amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KP and KD&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;90&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;120&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;FALSE&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Set KP and KD&amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KI   &lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Set KI, and adaptation&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_NOISE_FACTOR&amp;quot; value=&amp;quot;1.&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_INITIAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25117</id>
		<title>Explorer/PPRZ/Tunning</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25117"/>
		<updated>2020-08-28T06:49:52Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''&amp;lt;big&amp;gt;Tunning the vertical loop&amp;lt;/big&amp;gt;'''&lt;br /&gt;
  &amp;lt;section name=&amp;quot;GUIDANCE_V&amp;quot; prefix=&amp;quot;GUIDANCE_V_&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add following mode to telemetry file&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;mode name=&amp;quot;vert_loop&amp;quot; key_press=&amp;quot;v&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ROTORCRAFT_STATUS&amp;quot; period=&amp;quot;1.2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;DL_VALUE&amp;quot;          period=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ALIVE&amp;quot;             period=&amp;quot;0.9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF&amp;quot;               period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF_EXTENDED&amp;quot;      period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VERT_LOOP&amp;quot;         period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_Z&amp;quot;             period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS&amp;quot;               period=&amp;quot;.11&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_REF&amp;quot;           period=&amp;quot;5.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/mode&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Switch to NAV mode, takeoff, standby &amp;lt;br /&amp;gt;&lt;br /&gt;
Set telemetry from default to vert_loop &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plot in realtime&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/ground_segment/tmtc/messages &amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/plotter &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or post process ground log and data files&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/logplotter ~/Projects/paparazzi/var/logs/xx.log&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
1) Start with no KI, and no adaptation, and set NOMINAL_HOVER_THROTTLE, from manual flight &amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KP and KD&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;90&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;120&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;FALSE&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Set KP and KD&amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KI   &lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Set KI, and adaptation&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_NOISE_FACTOR&amp;quot; value=&amp;quot;1.&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_INITIAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25116</id>
		<title>Explorer/PPRZ/Tunning</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25116"/>
		<updated>2020-08-28T06:49:08Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;Tunning the vertical loop&amp;lt;/big&amp;gt;&lt;br /&gt;
  &amp;lt;section name=&amp;quot;GUIDANCE_V&amp;quot; prefix=&amp;quot;GUIDANCE_V_&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add following mode to telemetry file&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;mode name=&amp;quot;vert_loop&amp;quot; key_press=&amp;quot;v&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ROTORCRAFT_STATUS&amp;quot; period=&amp;quot;1.2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;DL_VALUE&amp;quot;          period=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ALIVE&amp;quot;             period=&amp;quot;0.9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF&amp;quot;               period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF_EXTENDED&amp;quot;      period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VERT_LOOP&amp;quot;         period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_Z&amp;quot;             period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS&amp;quot;               period=&amp;quot;.11&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_REF&amp;quot;           period=&amp;quot;5.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/mode&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Switch to NAV mode, takeoff, standby &amp;lt;br /&amp;gt;&lt;br /&gt;
Set telemetry from default to vert_loop &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plot in realtime&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/ground_segment/tmtc/messages &amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/plotter &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or post process ground log and data files&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/logplotter ~/Projects/paparazzi/var/logs/xx.log&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
1) Start with no KI, and no adaptation, and set NOMINAL_HOVER_THROTTLE, from manual flight &amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KP and KD&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;90&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;120&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;FALSE&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Set KP and KD&amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KI   &lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Set KI, and adaptation&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_NOISE_FACTOR&amp;quot; value=&amp;quot;1.&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_INITIAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ&amp;diff=25115</id>
		<title>Explorer/PPRZ</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ&amp;diff=25115"/>
		<updated>2020-08-28T06:48:11Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;airframe file:&lt;br /&gt;
 &amp;lt;!DOCTYPE airframe SYSTEM &amp;quot;../../airframe.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;airframe name=&amp;quot;Quadricopter XP&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;description&amp;gt;&lt;br /&gt;
    * Autopilot:   Tawaki/ Apogee&lt;br /&gt;
    * Actuators:   4 in 1 Holybro BLHELI ESC&lt;br /&gt;
    * Telemetry:   XBee and Wifibroadcast (compagnon board)&lt;br /&gt;
    * GPS:         ublox M8P (optional DGPS) or Datalink&lt;br /&gt;
    * RC:          FrSky XM+ or Datalink&lt;br /&gt;
 &lt;br /&gt;
    IMU Apogee :    &lt;br /&gt;
      - MPU6050 (acc+gyro), &lt;br /&gt;
      - MPU9150 (acc+gyro+mag) = MPU6050 + AK8975&lt;br /&gt;
 &lt;br /&gt;
    MAG Apogee (AK8975 on I2C1) or on external GPS board (LIS3MDL on I2C1) or Datalink&lt;br /&gt;
 &lt;br /&gt;
    BARO Apogee (MPL3115A2 on I2C1)&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;/description&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;configure name=&amp;quot;PERIODIC_FREQUENCY&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;AHRS_PROPAGATE_FREQUENCY&amp;quot; value=&amp;quot;$(PERIODIC_FREQUENCY)&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;KILL_AS_FAILSAFE&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;amp;lt;!-- OPTION 1A &amp;amp; 1B --&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;apogee_1.0_chibios&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- OPTION 1C --&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!--&lt;br /&gt;
    &amp;lt;target name=&amp;quot;nps&amp;quot; board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- apogee_1.0_chibios --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 1A --&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_mpu9150.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_imu_apogee_mpu9150.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_target_flying.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_target_apogee.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 1B --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!--&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_lis3mdl.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_imu_apogee_lis3mdl.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_target_flying.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_target_apogee.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 1C --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!--&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_tawaki.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_mpu9150.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_lis3mdl.xml&amp;quot;/&amp;gt; &lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- tawaki_1.0 &amp;amp; apogee_1.0_chibios --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 2A --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_indoor.xml&amp;quot;/--&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 2B --&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_outdoor.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- OPTION 2C --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!--&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_target_nps.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- All targets --&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_stab_rate.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_stab_attitude.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_guidance.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_modules.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
flght_plan file:&lt;br /&gt;
 &amp;lt;!DOCTYPE flight_plan SYSTEM &amp;quot;../flight_plan.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;flight_plan alt=&amp;quot;148&amp;quot; ground_alt=&amp;quot;146&amp;quot; lat0=&amp;quot;43.5640917&amp;quot; lon0=&amp;quot;1.4829201&amp;quot; max_dist_from_home=&amp;quot;20&amp;quot; name=&amp;quot;Rotorcraft Optitrack (ENAC)&amp;quot; security_height=&amp;quot;0.3&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;header&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/header&amp;gt;&lt;br /&gt;
   &amp;lt;waypoints&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;HOME&amp;quot; x=&amp;quot;0.0&amp;quot; y=&amp;quot;0.0&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;GOAL&amp;quot; x=&amp;quot;2.0&amp;quot; y=&amp;quot;2.0&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;STDBY&amp;quot; x=&amp;quot;-0.7&amp;quot; y=&amp;quot;-0.8&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;TD&amp;quot; x=&amp;quot;0.8&amp;quot; y=&amp;quot;-1.7&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S1&amp;quot; x=&amp;quot;2.1&amp;quot; y=&amp;quot;2.8&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S2&amp;quot; x=&amp;quot;2.0&amp;quot; y=&amp;quot;-3.0&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S3&amp;quot; x=&amp;quot;-2.1&amp;quot; y=&amp;quot;-3.1&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S4&amp;quot; x=&amp;quot;-2.2&amp;quot; y=&amp;quot;2.8&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N1&amp;quot; x=&amp;quot;4.5&amp;quot; y=&amp;quot;5.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N2&amp;quot; x=&amp;quot;4.5&amp;quot; y=&amp;quot;-5.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N3&amp;quot; x=&amp;quot;-4.5&amp;quot; y=&amp;quot;-5.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N4&amp;quot; x=&amp;quot;-4.5&amp;quot; y=&amp;quot;5.2&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/waypoints&amp;gt;&lt;br /&gt;
   &amp;lt;sectors&amp;gt;&lt;br /&gt;
     &amp;lt;sector color=&amp;quot;red&amp;quot; name=&amp;quot;Net&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N1&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N2&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N3&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N4&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/sector&amp;gt;&lt;br /&gt;
     &amp;lt;sector color=&amp;quot;green&amp;quot; name=&amp;quot;Survey&amp;quot; type=&amp;quot;dynamic&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S1&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S2&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S3&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S4&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/sector&amp;gt;&lt;br /&gt;
   &amp;lt;/sectors&amp;gt;&lt;br /&gt;
   &amp;lt;modules&amp;gt;&lt;br /&gt;
     &amp;lt;module name=&amp;quot;nav&amp;quot; type=&amp;quot;survey_rectangle_rotorcraft&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/modules&amp;gt;&lt;br /&gt;
   &amp;lt;blocks&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Wait GPS&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavKillThrottle()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;while cond=&amp;quot;!GpsFixValid()&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Holding point&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavKillThrottle()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;attitude pitch=&amp;quot;0&amp;quot; roll=&amp;quot;0&amp;quot; throttle=&amp;quot;0&amp;quot; until=&amp;quot;FALSE&amp;quot; vmode=&amp;quot;throttle&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Start Engine&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavResurrect()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;attitude pitch=&amp;quot;0&amp;quot; roll=&amp;quot;0&amp;quot; throttle=&amp;quot;0&amp;quot; until=&amp;quot;FALSE&amp;quot; vmode=&amp;quot;throttle&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Takeoff&amp;quot; strip_button=&amp;quot;Takeoff&amp;quot; strip_icon=&amp;quot;takeoff.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;exception cond=&amp;quot;stateGetPositionEnu_f()-&amp;gt;z &amp;gt; 1.0&amp;quot; deroute=&amp;quot;Standby&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavSetWaypointHere(WP_STDBY)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;stay climb=&amp;quot;nav_climb_vspeed&amp;quot; vmode=&amp;quot;climb&amp;quot; wp=&amp;quot;STDBY&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Standby&amp;quot; strip_button=&amp;quot;Standby&amp;quot; strip_icon=&amp;quot;home.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;nav_set_heading_deg(0)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;stay wp=&amp;quot;STDBY&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;START&amp;quot; strip_button=&amp;quot;Go&amp;quot; strip_icon=&amp;quot;lookfore.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavSetWaypointHere(WP_GOAL)&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;StayGoal&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;stay wp=&amp;quot;GOAL&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block group=&amp;quot;extra_pattern&amp;quot; name=&amp;quot;Survey S1-S2 Sweep NS SET&amp;quot; strip_button=&amp;quot;SvySweep-NS&amp;quot; strip_icon=&amp;quot;survey_rect_ns.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;nav_survey_rectangle_rotorcraft_setup(WP_S1, WP_S3, 1, NS)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;deroute block=&amp;quot;Survey RECTANGLE RUN&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block group=&amp;quot;extra_pattern&amp;quot; name=&amp;quot;Survey S1-S2 Sweep WE SET&amp;quot; strip_button=&amp;quot;SvySweep-WE&amp;quot; strip_icon=&amp;quot;survey_rect_we.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;nav_survey_rectangle_rotorcraft_setup(WP_S1, WP_S3, 1, WE)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;deroute block=&amp;quot;Survey RECTANGLE RUN&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block group=&amp;quot;extra_pattern&amp;quot; name=&amp;quot;Survey RECTANGLE RUN&amp;quot; strip_button=&amp;quot;SvySweep CONT&amp;quot; strip_icon=&amp;quot;survey_rect_run.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;exception cond=&amp;quot;rectangle_survey_sweep_num == 1&amp;quot; deroute=&amp;quot;Standby&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;call fun=&amp;quot;nav_survey_rectangle_rotorcraft_run(WP_S1, WP_S3)&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;land here&amp;quot; strip_button=&amp;quot;Land Here&amp;quot; strip_icon=&amp;quot;land-right.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavSetWaypointHere(WP_TD)&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;land&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;go wp=&amp;quot;TD&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;flare&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;exception cond=&amp;quot;!nav_is_in_flight()&amp;quot; deroute=&amp;quot;KILL_LANDED&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;stay climb=&amp;quot;nav_descend_vspeed&amp;quot; vmode=&amp;quot;climb&amp;quot; wp=&amp;quot;TD&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;KILL_LANDED&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavKillThrottle()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;attitude pitch=&amp;quot;0&amp;quot; roll=&amp;quot;0&amp;quot; throttle=&amp;quot;0&amp;quot; until=&amp;quot;FALSE&amp;quot; vmode=&amp;quot;throttle&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
   &amp;lt;/blocks&amp;gt;&lt;br /&gt;
 &amp;lt;/flight_plan&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/PPRZ/Configuration]]&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Explorer/PPRZ/Tunning]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ&amp;diff=25114</id>
		<title>Explorer/PPRZ</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ&amp;diff=25114"/>
		<updated>2020-08-28T06:47:49Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;airframe file:&lt;br /&gt;
 &amp;lt;!DOCTYPE airframe SYSTEM &amp;quot;../../airframe.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;airframe name=&amp;quot;Quadricopter XP&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;description&amp;gt;&lt;br /&gt;
    * Autopilot:   Tawaki/ Apogee&lt;br /&gt;
    * Actuators:   4 in 1 Holybro BLHELI ESC&lt;br /&gt;
    * Telemetry:   XBee and Wifibroadcast (compagnon board)&lt;br /&gt;
    * GPS:         ublox M8P (optional DGPS) or Datalink&lt;br /&gt;
    * RC:          FrSky XM+ or Datalink&lt;br /&gt;
 &lt;br /&gt;
    IMU Apogee :    &lt;br /&gt;
      - MPU6050 (acc+gyro), &lt;br /&gt;
      - MPU9150 (acc+gyro+mag) = MPU6050 + AK8975&lt;br /&gt;
 &lt;br /&gt;
    MAG Apogee (AK8975 on I2C1) or on external GPS board (LIS3MDL on I2C1) or Datalink&lt;br /&gt;
 &lt;br /&gt;
    BARO Apogee (MPL3115A2 on I2C1)&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;/description&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;firmware name=&amp;quot;rotorcraft&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;configure name=&amp;quot;PERIODIC_FREQUENCY&amp;quot; value=&amp;quot;1000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;AHRS_PROPAGATE_FREQUENCY&amp;quot; value=&amp;quot;$(PERIODIC_FREQUENCY)&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;configure name=&amp;quot;KILL_AS_FAILSAFE&amp;quot; value=&amp;quot;1&amp;quot;/&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;amp;lt;!-- OPTION 1A &amp;amp; 1B --&amp;gt;&lt;br /&gt;
    &amp;lt;target name=&amp;quot;ap&amp;quot; board=&amp;quot;apogee_1.0_chibios&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!-- OPTION 1C --&amp;gt;&lt;br /&gt;
    &amp;amp;lt;!--&lt;br /&gt;
    &amp;lt;target name=&amp;quot;nps&amp;quot; board=&amp;quot;pc&amp;quot;/&amp;gt;&lt;br /&gt;
    --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;lt;/firmware&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- apogee_1.0_chibios --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 1A --&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_mpu9150.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_imu_apogee_mpu9150.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_target_flying.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_target_apogee.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 1B --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!--&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_lis3mdl.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_imu_apogee_lis3mdl.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_target_flying.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_target_apogee.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 1C --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!--&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_tawaki.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_mpu9150.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_board_apogee_lis3mdl.xml&amp;quot;/&amp;gt; &lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- tawaki_1.0 &amp;amp; apogee_1.0_chibios --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 2A --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_indoor.xml&amp;quot;/--&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!-- OPTION 2B --&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_outdoor.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- OPTION 2C --&amp;gt;&lt;br /&gt;
  &amp;amp;lt;!--&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_option_target_nps.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  --&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
  &amp;amp;lt;!-- All targets --&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_stab_rate.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_stab_attitude.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_guidance.xml&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;include href=&amp;quot;conf/airframes/ENAC/quadrotor/xp/xp_common_modules.xml&amp;quot;/&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/airframe&amp;gt;&lt;br /&gt;
&lt;br /&gt;
flght_plan file:&lt;br /&gt;
 &amp;lt;!DOCTYPE flight_plan SYSTEM &amp;quot;../flight_plan.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;flight_plan alt=&amp;quot;148&amp;quot; ground_alt=&amp;quot;146&amp;quot; lat0=&amp;quot;43.5640917&amp;quot; lon0=&amp;quot;1.4829201&amp;quot; max_dist_from_home=&amp;quot;20&amp;quot; name=&amp;quot;Rotorcraft Optitrack (ENAC)&amp;quot; security_height=&amp;quot;0.3&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;header&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/header&amp;gt;&lt;br /&gt;
   &amp;lt;waypoints&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;HOME&amp;quot; x=&amp;quot;0.0&amp;quot; y=&amp;quot;0.0&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;GOAL&amp;quot; x=&amp;quot;2.0&amp;quot; y=&amp;quot;2.0&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;STDBY&amp;quot; x=&amp;quot;-0.7&amp;quot; y=&amp;quot;-0.8&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;TD&amp;quot; x=&amp;quot;0.8&amp;quot; y=&amp;quot;-1.7&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S1&amp;quot; x=&amp;quot;2.1&amp;quot; y=&amp;quot;2.8&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S2&amp;quot; x=&amp;quot;2.0&amp;quot; y=&amp;quot;-3.0&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S3&amp;quot; x=&amp;quot;-2.1&amp;quot; y=&amp;quot;-3.1&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;S4&amp;quot; x=&amp;quot;-2.2&amp;quot; y=&amp;quot;2.8&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N1&amp;quot; x=&amp;quot;4.5&amp;quot; y=&amp;quot;5.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N2&amp;quot; x=&amp;quot;4.5&amp;quot; y=&amp;quot;-5.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N3&amp;quot; x=&amp;quot;-4.5&amp;quot; y=&amp;quot;-5.2&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;waypoint name=&amp;quot;_N4&amp;quot; x=&amp;quot;-4.5&amp;quot; y=&amp;quot;5.2&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/waypoints&amp;gt;&lt;br /&gt;
   &amp;lt;sectors&amp;gt;&lt;br /&gt;
     &amp;lt;sector color=&amp;quot;red&amp;quot; name=&amp;quot;Net&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N1&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N2&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N3&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;_N4&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/sector&amp;gt;&lt;br /&gt;
     &amp;lt;sector color=&amp;quot;green&amp;quot; name=&amp;quot;Survey&amp;quot; type=&amp;quot;dynamic&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S1&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S2&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S3&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;corner name=&amp;quot;S4&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/sector&amp;gt;&lt;br /&gt;
   &amp;lt;/sectors&amp;gt;&lt;br /&gt;
   &amp;lt;modules&amp;gt;&lt;br /&gt;
     &amp;lt;module name=&amp;quot;nav&amp;quot; type=&amp;quot;survey_rectangle_rotorcraft&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/modules&amp;gt;&lt;br /&gt;
   &amp;lt;blocks&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Wait GPS&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavKillThrottle()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;while cond=&amp;quot;!GpsFixValid()&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Holding point&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavKillThrottle()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;attitude pitch=&amp;quot;0&amp;quot; roll=&amp;quot;0&amp;quot; throttle=&amp;quot;0&amp;quot; until=&amp;quot;FALSE&amp;quot; vmode=&amp;quot;throttle&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Start Engine&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavResurrect()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;attitude pitch=&amp;quot;0&amp;quot; roll=&amp;quot;0&amp;quot; throttle=&amp;quot;0&amp;quot; until=&amp;quot;FALSE&amp;quot; vmode=&amp;quot;throttle&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Takeoff&amp;quot; strip_button=&amp;quot;Takeoff&amp;quot; strip_icon=&amp;quot;takeoff.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;exception cond=&amp;quot;stateGetPositionEnu_f()-&amp;gt;z &amp;gt; 1.0&amp;quot; deroute=&amp;quot;Standby&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavSetWaypointHere(WP_STDBY)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;stay climb=&amp;quot;nav_climb_vspeed&amp;quot; vmode=&amp;quot;climb&amp;quot; wp=&amp;quot;STDBY&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;Standby&amp;quot; strip_button=&amp;quot;Standby&amp;quot; strip_icon=&amp;quot;home.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;nav_set_heading_deg(0)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;stay wp=&amp;quot;STDBY&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;START&amp;quot; strip_button=&amp;quot;Go&amp;quot; strip_icon=&amp;quot;lookfore.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavSetWaypointHere(WP_GOAL)&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;StayGoal&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;stay wp=&amp;quot;GOAL&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block group=&amp;quot;extra_pattern&amp;quot; name=&amp;quot;Survey S1-S2 Sweep NS SET&amp;quot; strip_button=&amp;quot;SvySweep-NS&amp;quot; strip_icon=&amp;quot;survey_rect_ns.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;nav_survey_rectangle_rotorcraft_setup(WP_S1, WP_S3, 1, NS)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;deroute block=&amp;quot;Survey RECTANGLE RUN&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block group=&amp;quot;extra_pattern&amp;quot; name=&amp;quot;Survey S1-S2 Sweep WE SET&amp;quot; strip_button=&amp;quot;SvySweep-WE&amp;quot; strip_icon=&amp;quot;survey_rect_we.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;nav_survey_rectangle_rotorcraft_setup(WP_S1, WP_S3, 1, WE)&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;deroute block=&amp;quot;Survey RECTANGLE RUN&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block group=&amp;quot;extra_pattern&amp;quot; name=&amp;quot;Survey RECTANGLE RUN&amp;quot; strip_button=&amp;quot;SvySweep CONT&amp;quot; strip_icon=&amp;quot;survey_rect_run.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;exception cond=&amp;quot;rectangle_survey_sweep_num == 1&amp;quot; deroute=&amp;quot;Standby&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;call fun=&amp;quot;nav_survey_rectangle_rotorcraft_run(WP_S1, WP_S3)&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;land here&amp;quot; strip_button=&amp;quot;Land Here&amp;quot; strip_icon=&amp;quot;land-right.png&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavSetWaypointHere(WP_TD)&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;land&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;go wp=&amp;quot;TD&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;flare&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;exception cond=&amp;quot;!nav_is_in_flight()&amp;quot; deroute=&amp;quot;KILL_LANDED&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;stay climb=&amp;quot;nav_descend_vspeed&amp;quot; vmode=&amp;quot;climb&amp;quot; wp=&amp;quot;TD&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
     &amp;lt;block name=&amp;quot;KILL_LANDED&amp;quot;&amp;gt;&lt;br /&gt;
       &amp;lt;call_once fun=&amp;quot;NavKillThrottle()&amp;quot;/&amp;gt;&lt;br /&gt;
       &amp;lt;attitude pitch=&amp;quot;0&amp;quot; roll=&amp;quot;0&amp;quot; throttle=&amp;quot;0&amp;quot; until=&amp;quot;FALSE&amp;quot; vmode=&amp;quot;throttle&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/block&amp;gt;&lt;br /&gt;
   &amp;lt;/blocks&amp;gt;&lt;br /&gt;
 &amp;lt;/flight_plan&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Explorer/PPRZ/Configuration]]&lt;br /&gt;
[[Explorer/PPRZ/Tunning]]&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25113</id>
		<title>Explorer/PPRZ/Tunning</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25113"/>
		<updated>2020-08-27T07:30:07Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tunning the vertical loop&lt;br /&gt;
  &amp;lt;section name=&amp;quot;GUIDANCE_V&amp;quot; prefix=&amp;quot;GUIDANCE_V_&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add following mode to telemetry file&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;mode name=&amp;quot;vert_loop&amp;quot; key_press=&amp;quot;v&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ROTORCRAFT_STATUS&amp;quot; period=&amp;quot;1.2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;DL_VALUE&amp;quot;          period=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ALIVE&amp;quot;             period=&amp;quot;0.9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF&amp;quot;               period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF_EXTENDED&amp;quot;      period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VERT_LOOP&amp;quot;         period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_Z&amp;quot;             period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS&amp;quot;               period=&amp;quot;.11&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_REF&amp;quot;           period=&amp;quot;5.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/mode&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Switch to NAV mode, takeoff, standby &amp;lt;br /&amp;gt;&lt;br /&gt;
Set telemetry from default to vert_loop &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plot in realtime&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/ground_segment/tmtc/messages &amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/plotter &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or post process ground log and data files&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/logplotter ~/Projects/paparazzi/var/logs/xx.log&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
1) Start with no KI, and no adaptation, and set NOMINAL_HOVER_THROTTLE, from manual flight &amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KP and KD&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;90&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;120&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;FALSE&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Set KP and KD&amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KI   &lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Set KI, and adaptation&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_NOISE_FACTOR&amp;quot; value=&amp;quot;1.&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_INITIAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25112</id>
		<title>Explorer/PPRZ/Tunning</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25112"/>
		<updated>2020-08-27T07:24:19Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tunning the vertical loop&lt;br /&gt;
&lt;br /&gt;
Add following mode to telemetry file&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;mode name=&amp;quot;vert_loop&amp;quot; key_press=&amp;quot;v&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ROTORCRAFT_STATUS&amp;quot; period=&amp;quot;1.2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;DL_VALUE&amp;quot;          period=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ALIVE&amp;quot;             period=&amp;quot;0.9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF&amp;quot;               period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF_EXTENDED&amp;quot;      period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VERT_LOOP&amp;quot;         period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_Z&amp;quot;             period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS&amp;quot;               period=&amp;quot;.11&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_REF&amp;quot;           period=&amp;quot;5.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/mode&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Switch to NAV mode, takeoff, standby &amp;lt;br /&amp;gt;&lt;br /&gt;
Set telemetry from default to vert_loop &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plot in realtime&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/ground_segment/tmtc/messages &amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/plotter &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or post process ground log and data files&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/logplotter ~/Projects/paparazzi/var/logs/xx.log&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
1) Start with no KI, and no adaptation, and set NOMINAL_HOVER_THROTTLE, from manual flight &amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KP and KD&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;90&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;120&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;FALSE&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Set KP and KD&amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KI   &lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Set KI, and adaptation&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;15&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;TRUE&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_NOISE_FACTOR&amp;quot; value=&amp;quot;1.&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_INITIAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
	<entry>
		<id>http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25111</id>
		<title>Explorer/PPRZ/Tunning</title>
		<link rel="alternate" type="text/html" href="http://wiki.paparazziuav.org/w/index.php?title=Explorer/PPRZ/Tunning&amp;diff=25111"/>
		<updated>2020-08-27T07:22:21Z</updated>

		<summary type="html">&lt;p&gt;Xp31: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tunning the vertical loop&lt;br /&gt;
&lt;br /&gt;
Add following mode to telemetry file&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;mode name=&amp;quot;vert_loop&amp;quot; key_press=&amp;quot;v&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ROTORCRAFT_STATUS&amp;quot; period=&amp;quot;1.2&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;DL_VALUE&amp;quot;          period=&amp;quot;0.5&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;ALIVE&amp;quot;             period=&amp;quot;0.9&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF&amp;quot;               period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VFF_EXTENDED&amp;quot;      period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;VERT_LOOP&amp;quot;         period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_Z&amp;quot;             period=&amp;quot;.05&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS&amp;quot;               period=&amp;quot;.11&amp;quot;/&amp;gt;&lt;br /&gt;
      &amp;lt;message name=&amp;quot;INS_REF&amp;quot;           period=&amp;quot;5.1&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/mode&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Switch to NAV mode, takeoff, standby &amp;lt;br /&amp;gt;&lt;br /&gt;
Set telemetry from default to vert_loop &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plot in realtime&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/ground_segment/tmtc/messages &amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/plotter &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or post process ground log and data files&amp;lt;br /&amp;gt;&lt;br /&gt;
~/Projects/paparazzi/sw/logalizer/logplotter ~/Projects/paparazzi/var/logs/xx.log&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
1) Start with no KI, and no adaptation, and set NOMINAL_HOVER_THROTTLE, from manual flight &amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KP and KD&lt;br /&gt;
 &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;90&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;120&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;NOMINAL_HOVER_THROTTLE&amp;quot; value=&amp;quot;0.30&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;ADAPT_THROTTLE_ENABLED&amp;quot; value=&amp;quot;FALSE&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) Set KP and KD&amp;lt;br /&amp;gt;&lt;br /&gt;
=&amp;gt; in flight test, adjust KI   &lt;br /&gt;
   &lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KP&amp;quot; value=&amp;quot;300&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KD&amp;quot; value=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;define name=&amp;quot;HOVER_KI&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xp31</name></author>
	</entry>
</feed>