Difference between revisions of "Qwip"

From PaparazziUAV
Jump to navigation Jump to search
 
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<categorytree style="float:right; clear:right; margin-left:1ex; border: 1px solid gray; padding: 0.7ex;" mode=pages>Tools</categorytree>
__TOC__
= QWIP, a Quick Web Interface for Paparazzi =
= QWIP, a Quick Web Interface for Paparazzi =
[[Image:qwip_screenshot.png|thumb|screenshot]]
[[Image:qwip_screenshot.png|thumb|screenshot]]
Source is hosted on github: [https://github.com/paparazzi/qwip qwip repo]
== Introduction ==
== Introduction ==


Line 44: Line 49:
==== Compile and Run server ====
==== Compile and Run server ====


build pc_gs_server
: build pc_gs_server
<pre>
<pre>
paul@paul-Inspiron-1210:/var/www$ make server/pc_gs_server
paul@paul-Inspiron-1210:/var/www$ make server/pc_gs_server
Line 55: Line 60:
</pre>
</pre>


build ivy_gs_gateway
: build ivy_gs_gateway
<pre>
<pre>
paul@paul-Inspiron-1210:/var/www$ make server/ivy_gs_gateway
paul@paul-Inspiron-1210:/var/www$ make server/ivy_gs_gateway
Line 62: Line 67:
</pre>
</pre>


#run pc_gs_server
: run pc_gs_server
cd server
<pre>
<pre>
cd server
paul@paul-Inspiron-1210:/var/www/server$ ./pc_gs_server  
paul@paul-Inspiron-1210:/var/www/server$ ./pc_gs_server  
Starting initialization
Starting initialization
Line 73: Line 78:
</pre>
</pre>


#If you need to kill off the shared memory area
: If you need to kill off the shared memory area


  run ipcs to find it
  run ipcs to find it
Line 80: Line 85:
  kill it with "sudo ipcrm -m 37453850"
  kill it with "sudo ipcrm -m 37453850"


==== Testing CGI ====


==== Testing CGI ====
First, start paparazzi and run a simulation (Microjet in this example).


Now we can call the cgi program to see if it returns something useful.
<pre>
<pre>


[[Category:Software]] [[Category:Projects]]
paul@paul-Inspiron-1210:/var/www/cgi-bin$ export QUERY_STRING="req=fleet"
paul@paul-Inspiron-1210:/var/www/cgi-bin$ export QUERY_STRING="req=fleet"
paul@paul-Inspiron-1210:/var/www/cgi-bin$ ./update_qwip
paul@paul-Inspiron-1210:/var/www/cgi-bin$ ./update_qwip
Line 112: Line 120:
</content>
</content>
</pre>
</pre>
I'm still hunting for why everything is zeroes :-( ([[User:Paulcox|Paulcox]] 10:25, 9 February 2011 (CET))


==== Testing with browser ====
==== Testing with browser ====
Line 123: Line 133:
tail -f /var/log/boa/error.log
tail -f /var/log/boa/error.log


127.0.0.1 - - [08/Feb/2011:23:38:46 +0000] "GET /cgi-bin/update_qwip?req=fleet HTTP/1.1" 404 0 "http://localhost/" "Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Ubuntu/10.10 Chromium/9.0.597.84 Chrome/9.0.597.84 Safari/534.13"
127.0.0.1 - - [08/Feb/2011:23:38:46 +0000] "GET /cgi-bin/update_qwip?req=fleet  
HTTP/1.1" 404 0 "http://localhost/" "Mozilla/5.0 (X11; U; Linux i686; en-US)  
AppleWebKit/534.13 (KHTML, like Gecko) Ubuntu/10.10 Chromium/9.0.597.84  
Chrome/9.0.597.84 Safari/534.13"
</pre>
</pre>


Line 129: Line 142:


# additional functionality in qwip will require recoding much of the current ocaml ground station logic in c, which isn't the easiest language for processing xml.  
# additional functionality in qwip will require recoding much of the current ocaml ground station logic in c, which isn't the easiest language for processing xml.  
#The alternative might be running the ocaml groundstation code on the gumstix, but the use of the ivy may bog down the omap more than we would like. This is as of yet unknown because no one has to date been able to compile the paparazzi ocaml code for an ARM target. there is ocaml code running on ARM in the wild (found some mldonkey binaries which run well on an overo), and I've built the ocaml compiler following instructions [http://psellos.com/ocaml/compile-to-iphone.html here] so maybe we're close?
#The alternative might be running the ocaml groundstation code on the gumstix, but the use of the ivy may bog down the omap more than we would like.
#how does this fit in with the pow (paparazzi on the web) project?
#how does this fit in with the pow (paparazzi on the web) project?
[[Category:Tools]]

Latest revision as of 02:33, 15 July 2013

QWIP, a Quick Web Interface for Paparazzi

screenshot

Source is hosted on github: qwip repo

Introduction

The qwip software is a simple collection of software that presents a basic ground station interface in a web browser.

Various groundstation elements

  1. Position on map (googlemaps api)
  2. Battery level
  3. flight time
  4. RC status
  5. datalink settings

Modes

It can operate in two modes :

  1. boa and qwip run on Lisa/Overo (primary motivation for this project)
    In this configuration the qwip "server" sw running on overo communicates with the stm32 autopilot.
  2. boa and qwip run on PC groundstation (for debugging or if you don't have a gumstix/lisa)
    Here the qwip software attaches to the ivy bus to get aircraft info\

In either case, the "server" software places data in a shared memory area for a boa cgi program ("update_qwip") to access. The cgi program is accessed by the browser javascript code.

Architecture

Insert pretty block diagrams here

Remote ground stations

Finally, the qwip "server" can communicate with remote ground stations (paparazzi ocaml-based servers) to become aware of additional aircraft and display them to the browser user.

Quickstart

PC-based installation and usage

  1. sudo apt-get install libevent-dev
  2. install boa and enable configuration in boa.conf (cgi, etc)
  3. place qwip sw in /var/www or use links, etc (mindful of permissions)
  4. take a look at makefile and edit hardcoded paths to point to the right places
  5. take a look at source and make sure hardcoded aircraft names/paths available

Compile and Run server

build pc_gs_server
paul@paul-Inspiron-1210:/var/www$ make server/pc_gs_server
cc -Wall -std=gnu99 -I/home/paul/paparazzi -I/home/paul/paparazzi/sw/include `pkg-config glib-2.0 --cflags`  -DDISABLE_SPI_LINK -DFMS_PERIODIC_FREQ=512 server/gs_server.c server/gs_shm.c server/qwip_gs_link.c server/qwip_settings.c /home/paul/paparazzi/sw/airborne/fms/fms_spi_link.c /home/paul/paparazzi/sw/airborne/fms/fms_periodic.c /home/paul/paparazzi/sw/airborne/math/pprz_geodetic_double.c -o server/pc_gs_server -lm -levent  `pkg-config glib-2.0 --libs` `pcre-config --libs`
server/gs_server.c: In function ‘main_init’:
server/gs_server.c:77: warning: passing argument 1 of ‘g_strlcpy’ from incompatible pointer type
/usr/include/glib-2.0/glib/gstrfuncs.h:109: note: expected ‘gchar *’ but argument is of type ‘char (*)[128]’
server/gs_server.c:85: warning: passing argument 1 of ‘strcpy’ from incompatible pointer type
/usr/include/string.h:128: note: expected ‘char * restrict’ but argument is of type ‘char (*)[128]’
build ivy_gs_gateway
paul@paul-Inspiron-1210:/var/www$ make server/ivy_gs_gateway
gcc -Wall -std=gnu99 -I/home/paul/paparazzi -I/home/paul/paparazzi/sw/include `pkg-config glib-2.0 --cflags` server/ivy_gs_gateway.c server/gs_shm.c /home/paul/paparazzi/sw/airborne/math/pprz_geodetic_double.c -o server/ivy_gs_gateway `pkg-config glib-2.0 --libs` `pcre-config --libs` -lglibivy -lm
paul@paul-Inspiron-1210:/var/www$ cd server/
run pc_gs_server
cd server
paul@paul-Inspiron-1210:/var/www/server$ ./pc_gs_server 
Starting initialization
fms_periodic : hs sched_setscheduler failed : Operation not permitted (1)
gs server listening on port 4343
fms_periodic : hs sched_setscheduler failed : Operation not permitted (1)
Entering mainloop
If you need to kill off the shared memory area
run ipcs to find it
look for a line with 0x2b at the start (this is the shared mem key in hex)
0x0000002b 37453850   root       777        7116936    0      
kill it with "sudo ipcrm -m 37453850"

Testing CGI

First, start paparazzi and run a simulation (Microjet in this example).

Now we can call the cgi program to see if it returns something useful.


[[Category:Software]] [[Category:Projects]]
paul@paul-Inspiron-1210:/var/www/cgi-bin$ export QUERY_STRING="req=fleet"
paul@paul-Inspiron-1210:/var/www/cgi-bin$ ./update_qwip
Content-type: application/xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<content>
  <time_running>1396 s</time_running>
  <aircrafts>
    <aircraft name="Microjet"/>
  </aircrafts>
</content>

paul@paul-Inspiron-1210:/var/www/cgi-bin$ export QUERY_STRING="req=flight_param"

paul@paul-Inspiron-1210:/var/www/cgi-bin$ ./update_qwip
Content-type: application/xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<content>
  <time_running>0 s</time_running>
  <cpu_time>0.0 s</cpu_time>
  <supply>0.0 V</supply>
  <radio_control>ok</radio_control>
  <latitude>0.0000000</latitude>
  <longitude>0.0000000</longitude>
</content>

I'm still hunting for why everything is zeroes :-( (Paulcox 10:25, 9 February 2011 (CET))

Testing with browser

  1. open a browser and point it to "localhost"

(see image at top)

check boa logs for errors and access

tail -f /var/log/boa/access.log
tail -f /var/log/boa/error.log

127.0.0.1 - - [08/Feb/2011:23:38:46 +0000] "GET /cgi-bin/update_qwip?req=fleet 
HTTP/1.1" 404 0 "http://localhost/" "Mozilla/5.0 (X11; U; Linux i686; en-US) 
AppleWebKit/534.13 (KHTML, like Gecko) Ubuntu/10.10 Chromium/9.0.597.84 
Chrome/9.0.597.84 Safari/534.13"

Future Direction

  1. additional functionality in qwip will require recoding much of the current ocaml ground station logic in c, which isn't the easiest language for processing xml.
  2. The alternative might be running the ocaml groundstation code on the gumstix, but the use of the ivy may bog down the omap more than we would like.
  3. how does this fit in with the pow (paparazzi on the web) project?