GCS Configuration
Control Panel
The control panel is launched with the following command:
./sw/supervision/paparazzi.pl
and is used to launch individual portions of the GCS (Programs) or the entire GCS (Sessions) with the modem and map settings defined in /conf/control_panel.xml
Configuration Options
Here are the different Configuration Options for launching the GCS. They are a bit crude since they are simply pasted here from the code but give a good overview.
"-auto_ortho", Arg.Set auto_ortho, "IGN tiles path";
"-b", Arg.String (fun x -> ivy_bus := x), "Bus\tDefault is 127.255.255.25:2010";
"-center", Arg.Set_string center, "Initial map center (e.g. 'WGS84 43.605 1.443')";
"-center_ac", Arg.Set auto_center_new_ac, "Centers the map on any new A/C";
"-edit", Arg.Unit (fun () -> edit := true; layout_file := "editor.xml"), "Flight plan editor";
"-fullscreen", Arg.Set fullscreen, "Fullscreen window";
"-google_fill", Arg.Set GM.auto, "Google maps auto fill";
"-ign", Arg.String (fun s -> ign:=true; IGN.data_path := s), "IGN tiles path";
"-lambertIIe", Arg.Unit (fun () -> projection:=G.LambertIIe),"Switch to LambertIIe projection";
"-layout", Arg.Set_string layout_file, (sprintf "<XML layout specification> GUI layout. Default: %s" !layout_file);
"-m", Arg.String (fun x -> map_files := x :: !map_files), "Map XML description file";
"-maximize", Arg.Set maximize, "Maximize window";
"-mercator", Arg.Unit (fun () -> projection:=G.Mercator),"Switch to (Google Maps) Mercator projection, default";
"-mplayer", Arg.Set_string mplayer, "Launch mplayer with the given argument as X plugin";
"-no_alarm", Arg.Set no_alarm, "Disables alarm page";
"-no_google_http", Arg.Unit (fun () -> Gm.set_policy Gm.NoHttp), "Switch off Google Maps downloading";
"-ortho", Arg.Set_string get_bdortho, "IGN tiles path";
"-osm", Arg.Unit (fun () -> Gm.set_maps_source Gm.OSM), "Use OpenStreetMap database (default is Google)";
"-particules", Arg.Set display_particules, "Display particules";
"-plugin", Arg.Set_string plugin_window, "External X application (launched with the id of the plugin window as argument)";
"-ref", Arg.Set_string geo_ref, "Geographic ref (e.g. 'WGS84 43.605 1.443')";
"-speech", Arg.Set Speech.active, "Enable vocal messages";
"-srtm", Arg.Set srtm, "Enable SRTM elevation display";
"-track_size", Arg.Set_int Live.track_size, (sprintf "Default track length (%d)" !Live.track_size);
"-utm", Arg.Unit (fun () -> projection:=G.UTM),"Switch to UTM local projection";
"-wid", Arg.String (fun s -> wid := Some (Int32.of_string s)), "<window id> Id of an existing window to be attached to";
"-zoom", Arg.Set_float zoom, "Initial zoom";
Video plugin
The -mplayer option of GCS allows to the user to display a video stream in a window of the GCS. The video window can also be exchanged with the map by clicking anywhere inside the frame. Use the following line in your /conf/control_panel.xml to enable the video window.
path_to_ground_segment/cockpit/gcs -mplayer rtsp://localhost:7070/video
A useful example follows: If you have an Avermedia DVB-T usb tuner like the Aver-Tv Hybrid Volar HX (Avermedia finally released Ubuntu Linux drivers) then in order to use the usb tuner as video input to the GCS you have to complete the following steps:
First download and install the drivers and check that the Usb tuner works well by opening a console window and typing:
mplayer tv:// -tv driver=v4l2:width=320:height=240:norm=NTSC:input=1:device=/dev/video1:noaudio
Of course you must connect a video signal to the composite input first. Then close the console and remove the Usb tuner. Now it is time to configure the control_panel.xml file by editing the GCS command line. Locate the line in the "control_panel.xml" usually located in /Your Paparazzi directory/conf/ (mine is in "/paparazzi/conf/") that looks similar to the below line:
<program name="GCS" command="sw/ground_segment/cockpit/gcs -layout horizontal.xml">
Then edit it so it looks like this:
<program name="GCS" command="sw/ground_segment/cockpit/gcs -layout my_gcs_layout.xml -mplayer 'tv:// -tv driver=v4l2:width=320:height=240:norm=NTSC:input=1:device=/dev/video1:alsa:adevice=hw.2,0:amode=1:audiorate=48000:forceaudio:volume=100:immediatemode=0'">
The above line is one complete and uninterrupted line but it is just too long to show it in one line here. (There is a space after the"-tv" like this "-mplayer 'tv:// -tv driver=v4l2:...." ). This will load the mplayer, select the composite video input of the tuner and enable the sound input. Please remember to change the "NTSC" with "PAL" if you do not use the NTSC video system (if your airborne camera is PAL for example). Read the mplayer documentation so you can tweak the resolution etc. later to suit your particular setup. The resolution above is set to 320x240 here but you can set it to 640x480 by replacing the numbers in the command line above.
Finally you have to add the plugin widget to your GCS layout configuration file. If you noticed the GCS command line in the "control_panel.xml" file, a part of it reads "-layout horizontal.xml" so our configuration file is the "horizontal.xml" which is located always in "/Your Paparazzi directory/conf/gcs/" (mine is in "/paparazzi/conf/gcs/"). Open the file and add or uncomment the below line (in "horizontal.xml" the plugin widget is there but commented out):
<widget NAME="plugin" SIZE="300"/>
Now the file should look like this:
<rows> <widget size="500" name="map2d"/> <columns> <rows size="375"> <widget size="200" name="strips"/> </rows> <widget size="400" name="aircraft"/> <widget name="alarms"/> <widget NAME="plugin" SIZE="300"/> </columns> </rows>
All the above work fine in Ubuntu 10.04 LTS but probably the same method should work fine on different versions too.
Layout
The layout of the different components (map, strips, ...) of the gcs is configurable through a style XML file located in conf/gcs/. The specification is done via a combination of rows and columns. The default layout is given in the horizontal.xml file:
<!DOCTYPE layout SYSTEM "layout.dtd"> <layout width="1024" height="768"> <rows> <widget size="500" name="map2d"/> <columns> <rows size="350"> <widget size="120" name="strips"/> <widget name="alarms"/> </rows> <widget size="400" name="aircraft"/> <widget size="00" name="plugin"/> </columns> </rows> </layout>
Default size (1024x768) of the whole window is specified in the root of the tree. The window is then divided in two rows:
- the map2d with a requested height of 500
- a set of columns containing
- a set of rows of width 350 divided into
- the strips frame of height 120
- the alarms frame
- the notebook frame (aircraft) of width 400
- the video plugin frame
- a set of rows of width 350 divided into
This second example (left_col.xml) sets the map and the notebook on the right and the other frames in a left column:
<!DOCTYPE layout SYSTEM "layout.dtd"> <layout width="1024" height="768"> <columns> <rows size="360"> <widget size="120" name="strips"/> <widget size="300" name="plugin"/> <widget name="alarms"/> </rows> <rows> <widget name="map2d"/> <widget name="aircraft"/> </rows> </columns> </layout>
This layout file is chosen with the -layout option:
path_to_ground_segment/cockpit/gcs -layout left_col.xml