Difference between revisions of "GettingTheGCSRunningonAGumstixBoard"

From PaparazziUAV
Jump to navigation Jump to search
Line 343: Line 343:
  $ <nowiki>git clone https://github.com/paparazzi/paparazzi.git</nowiki>
  $ <nowiki>git clone https://github.com/paparazzi/paparazzi.git</nowiki>
  $ cd paparazzi
  $ cd paparazzi
  $ export PPRZ_HOME=/home/sergiu/paparazzi/
  $ export PPRZ_HOME=~/paparazzi/
  $ export PAPARAZZI_HOME=/home/sergiu/paparazzi/
  $ export PAPARAZZI_HOME=~/paparazzi/
  $ export PAPARAZZI_SRC=/home/sergiu/paparazzi/
  $ export PAPARAZZI_SRC=~/paparazzi/
  $ make ground_segment
  $ make ground_segment
  $ X&
 
Fine now lets start the X server
 
  $ X &
 
And make a display setting
 
  $ export DISPLAY=:0
  $ export DISPLAY=:0


run paparazzi center
Finally, it's time to party, let's run the Paparazzi center
 
$ cd ~/paparazzi
  $ ./paparazzi
  $ ./paparazzi
$ sw/ground_segment/cockpit/gcs  -b 192.168.209:2010
 
$ sw/ground_segment/cockpit/gcs
Add this to the session
$ sw/ground_segment/cockpit/gcs  -b 192.168.209:2010
 
  $ sw/ground_segment/cockpit/gcs -b 192.168.209:2010
  $ sw/ground_segment/cockpit/gcs -b 192.168.1:2010


= Experimental steps =
= Experimental steps =

Revision as of 07:25, 5 June 2013

Introduction

Would it not be great to have your small UAS in your backpack, throw it in the air and monitor and even adjust the flight via a small device in your pocket? If you think this would be awesome, read on, since that is what this page is all about. It is the first attempt and will not be about iPad, Android Phones, Amazon Kindles or the likes as a ground station. For this we have other wiki pages. No, we will use a trusted solution; A Gumstix board with Linux on it connected to a small screen.

Gumstix carrier board and touchscreen

Outcome

The outcome of our efforts will be to:

  1. Have the Paparazzi GCS running on a small Gumstix computer board so we can monitoring and adjust the flight of our unmanned aircraft with just a small simple device.
  2. Have fully correct instructions on how to get it to work on this wiki page.

{TODO add screenshot of working setup}

Hardware

What do you need to get your groundstation up and running:


{TODO add more links to Gumstix products}

  1. A gumstix board with a power supply
  2. 8 GB or higher capacity micro SD card, the faster the better
  3. USB to mini-USB cable
  4. Regular UTP network cable
  5. A small, or big screen, preferably with touch such as the 4.3" LCD panel that comes with the Chestnut board kit or this fully integrated Gumstix board
  6. Micro-SD to USB adapter or card reader
  7. A computer that runs Linux OS

Software

We will install the following on the micro SD card

  1. Ubuntu OS for Gumstix
  2. Support libraries
  3. Paparazzi main software

Conventions

Note: You can just copy the line(s) in the box and paste them in your terminal. But do not copy the $ or # sign at the beginning of a line. This symbol is just added on this page to show that the command is to be pasted at a terminal prompt as regular user($) or root user(#).

$  this is an example of how a regular user command for your terminal looks

Get the Operating System

Pre-requisites

Have the micro SD card at hand and download this custom OS with everything already installed for a gumstix board and Chestnut43 with touchscreen.

{TODO: provide an image with everything already fully installed}

Installation Steps

Unzip the downloaded OS via

$ gunzip gcsStix.img.gz

Insert micro SD card in an SD reader and plug it in a USB port of your PC, then on the terminal type:

$ dmesg 

[170074.104194] sd 7:0:0:0: [sdb] Write Protect is off
[170074.104199] sd 7:0:0:0: [sdb] Mode Sense: 0b 00 00 08
[170074.104999] sd 7:0:0:0: [sdb] No Caching mode page present
[170074.105005] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[170074.107904] sd 7:0:0:0: [sdb] No Caching mode page present
[170074.107911] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[170074.109282]  sdb: sdb1 sdb2
[170074.112159] sd 7:0:0:0: [sdb] No Caching mode page present
[170074.112165] sd 7:0:0:0: [sdb] Assuming drive cache: write through
[170074.112169] sd 7:0:0:0: [sdb] Attached SCSI removable disk
[170074.904553] kjournald starting.  Commit interval 5 seconds
[170074.916813] EXT3-fs (sdb2): using internal journal
[170074.916823] EXT3-fs (sdb2): recovery complete
[170074.916826] EXT3-fs (sdb2): mounted filesystem with ordered data mode

Note: for my local machine the micro SD card was mounted on /dev/sdb as shown in the code above. Be aware of what you are doing at the next steps, as dd can completely overwrite your hard drive or other devices. Where sdX is the SD reader device found with the command above, replace sdX with your specific device in the following commands and /path/to/file with the path to your previously downloaded Gumstix image file.

$ SDCARD=/dev/sdX
$ sudo dd if=/path/to/file/gcsStix.img of=$SDCARD bs=64k

This will take several minutes depending on your configuration and when this is done, safely remove the micro SD card from your computer by right clicking on it and select eject. Then, insert the micro SD card into the Gumstix micro SD slot.

Connecting peripherals

When you have a Linux version running on your Gumstix, you can add a LCD, or a mouse, or a keyboard. First, install CuteCom on your local machine running on a terminal:

To set up your LCD you must follow these steps:

  1. Connect LCD flex cable to Gumstix connector
  2. Attach USB-to-mini-USB cable to both your local machine and Gumstix board.
  3. Power up Gumstix board
  4. Install and start cutecom
$ sudo apt-get install cutecom
$ cutecom

A window will pop up and you must adjust the pull-down menu settings as follows: Device will usually be either /dev/ttyUSB0 or /dev/ttyUSB1 . You can figure this out by typing on your command prompt:

dmesg|tail

Note: This command lists the last connected devices. Baud rate must be set to 115200, data bits to 8, stop bits to 1, parity to none, handshake none checked, open for both reading and writing checked, apply settings when opening checked, choose "CR,LF end line" and Char delay 1ms.

Click on Open device and your connection should start. If you encounter any problems, but you are sure you did everything right, check if your Gumstix board overheated or restart it.

Connect through CuteCom to the Gumstix, restart the board and hit a key within 5 seconds:

Hit any key to stop autoboot: 5

Then type the following in the CuteCom command prompt:

setenv defaultdisplay lcd43

Or, if you are using a 3.5" screen (such as the LCD panel with the Palo35):

setenv defaultdisplay lcd35

You can save this setting for future boots by saving it:

saveenv

Finally, continue with the boot process by typing in CuteCom command prompt:

boot

Connect to the Gumstix through the network

If you want to send files to the Gumstix, you can do it via a ssh connection. In order to do this, both devices, your computer and the Gumstix must be connected to the same network. Once you've done this, you can start setting up the connection. In order to do so you need to know the IP address of the Gumstix.

The first thing you need in order to get rid of the USB to mini-USB cable and its physical limitations is to create a user and set a password for it and install openssh. Please feel free to replace "sergiu" with whatever username you choose, but keep in mind that you must replace it everywhere you encounter "sergiu".

useradd -c "Sergiu S" -m -s "/bin/bash" -G sudo sergiu

Note: -G option will add the user to the specified group.

$ passwd sergiu

You will be asked to enter a password and confirm it. Type your password, then hit CTRL + Enter key combination and then retype your password. If successful, you will get this message:

passwd: password updated successfully
$ sudo apt-get install openssh-server

Once you have accomplished this, you must discover the Gumstix ip address, typing on CuteCom:

$ ifconfig -a 

Note: if you can't use this command for any reason you can get a list with all the IP addresses on the network using 'arp -a' on your machine. Among the data returned, you will see something like this:

eth0      Link encap:Ethernet  HWaddr 00:15:c9:28:c9:ff  
          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::215:c9ff:fe28:c9ff/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3960 errors:0 dropped:0 overruns:0 frame:0
          TX packets:727 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3734905 (3.7 MB)  TX bytes:63765 (63.7 KB)
          Interrupt:80 

Now you should be able to connect using:

$ ssh sergiu@192.168.0.100 {TODO USERNAME change}

You will be asked to type the password you previously set for the user.

Working With Gumstix

Note: You may get some errors during this installation. This depends on how well you are cooling down your system, how much RAM you have on your platform and so on. If you get errors when trying install a large number of packages/libraries at once, try to divide them into smaller groups.

1. Add a swap file Due to lack of RAM memory it is possible to see errors like this:

==== ERROR [while installing ocamlfind.1.3.3] ====
Internal error:
  # opam-version    1.0.1 (1.0.0-84-g9b3ff34)
# os              linux
opam: "fork" failed: Cannot allocate memory
'opam install ocamlfind' failed.

The solution to this problem is to create a swap file. For this case I created a 512 MB swap file, but you should adapt its size to the size of your SD card and the needed memory size.

Execute these commands to create and mount a swap file:

sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288 (will create 512 MB swap file)
sudo mkswap /swapfile1
sudo chown root:root /swapfile1
sudo chmod 0600 /swapfile1
sudo swapon /swapfile1

Note: this will remove the swap file each time you shutdown. If you need the file, you have to repeat the swapon command after each boot. An alternative would be to have it mounted every time you boot the system. For more explanations you can go to this website

2. Autologin

Remove the login prompt

You may want to set your OS to auto-login. Why? Because there may be times you don't have a keyboard for the Gumstix around. You can find a good explanation of this here .

$ sudo locale-gen en_US.UTF-8
$ sudo apt-get install vim nano # (or use your favorite editor)

Note: if you get an error at this step, use the --fix-missing option as recommended.

$ sudo vim /etc/lightdm/lightdm.conf

Edit the autologin-user line by replacing the username with your own

autologin-user=sergiu

and add this line:

autologin-user-timeout=0

or the right locale for your keyboard. If this didn't solve your problem, you may want to read here more about it.

3. More Memory

Remove the Lightdm GUI manager in order to free memory

$ sudo apt-get remove lightdm

After this step you must reboot.

4. More speed

Remove processes not needed

$ sudo killall -9 NetworkManager  #(for faster system), {TODO in start the config? still needed?}

Because the size of the original image was 4.3 GB, you have to execute the following set of instructions to resize the partition to 8 GB:

5. Add more space

{TODO make an 8GB OS image not 4GB then delete this text}

  1. Insert the micro SD card in your local machine´s card reader
  2. Use gparted to increase the size of the partition
$ sudo gparted

Install the prerequsites

Installing one package at a time is the best path to succes since it is likely during installation that you will be asked to re-run some of the commands with the "--fix-missing" option.

$ sudo apt-get install gtk2-engines-pixbuf
$ sudo apt-get install make
$ sudo apt-get install gcc
$ sudo apt-get install g++
$ sudo apt-get install libgsl0-dev
$ sudo apt-get install gnuplot
$ sudo apt-get install libgnomecanvas2-dev
$ sudo apt-get install bzip2
$ sudo apt-get install git
$ sudo apt-get install libusb-dev
$ sudo apt-get install speech-dispatcher
$ sudo apt-get install glade
$ sudo apt-get install imagemagick 
$ sudo apt-get install libpcre3-dev
$ sudo apt-get install git-core
$ sudo apt-get install python-usb
$ sudo apt-get install python-lxml
$ sudo apt-get install python-wxgtk2.8
$ sudo apt-get install m4
$ sudo apt-get install python-yaml 
$ sudo apt-get install subversion
$ sudo apt-get install libglade2-dev libgnomeui-dev libgnomecanvas2-dev librsvg2-dev libgtkspell-dev libcanberra-gtk-dev --fix-missing
$ sudo apt-get install libsdl1.2-dev

Create a subdirectory where you will download and install all the libraries and other software tools needed. To keep your home dir tidy use a develop directory to store all the relevant downloads.

$ mkdir ~/develop
$ cd ~/develop/

OCAML

$ wget http://caml.inria.fr/pub/distrib/ocaml-4.00/ocaml-4.00.1.tar.gz
$ tar -xvzf ocaml-4.00.1.tar.gz 
$ cd ocaml-4.00.1
$ ./configure
$ make world
$ make opt
$ make ocamldoc
$ make ocamlbuild.native
$ make ocamlbuild.byte
$ sudo make install
$ sudo make installopt
$ ocaml -version  #(make sure you have the right version, meaning 4.00.1)
$ cd ~/develop

Opam tool

  1. Install the OCAML Opam tool
$ git clone https://github.com/OCamlPro/opam.git
$ cd opam
$ ./configure 
$ make (because of overheating you may get some errors, but keep doing 'make')
$ sudo make install
$ cd ~/develop
$ opam init
$ eval `opam config env`

Please select yes.

$ sudo opam install ocamlfind
$ sudo opam install lablgtk 
$ sudo opam install pcre-ocaml
$ sudo opam install ocamlnet
$ sudo opam install xml-light

portability-support

  1. Get paparazzi-portability-support related files
$ sudo apt-get install  debhelper devscripts fakeroot build-essential autoconf automake autotools-dev dh-make xutils lintian pbuilder dh-ocaml tcl-dev libxt-dev libXt-devel
$ cd ~/develop
$ git clone https://github.com/paparazzi/paparazzi-portability-support.git
$ cd paparazzi-portability-support/linux/
$ sudo ./develenv.sh
$ cd ivy/
$ svn checkout http://svn.tls.cena.fr/svn/ivy/ivy-c/trunk ivy-c
$ cd ivy-c/src/

Patchthe Makefile with : Patch content: --- Makefile.orig 2013-05-23 16:36:45.000000000 +0000 +++ Makefile 2013-05-23 16:32:22.000000000 +0000 @@ -28,6 +28,11 @@ FPIC= endif +MACHINE = $(shell uname -m) +ifeq ("$(MACHINE)", "armv7l") + FPIC = -fPIC +endif + ifndef PREFIX export PREFIX=/usr/local

$ make all
$ sudo make install

IVY

IVY is a simple protocol and a set of open-source libraries and programs that allows applications to broadcast information through text messages, with a subscription mechanism based on regular expressions. The project can be found at: http://www2.tls.cena.fr/products/ivy/

In the paparazzi project, Ivy is used to send telemetry data to where ever you want.

NOTE: Do not confuse this IVY with the Apache Ivy project.

Ivy-OCAML

The Ivy-ocaml is a Library that make it possible to use Ivy via the Ocaml language.

$ cd ~/develop/paparazzi-portability-support/linux/ivy/
$ svn checkout http://svn.tls.cena.fr/svn/ivy/ivy-ocaml/trunk ivy-ocaml
$ cd ivy-ocaml/
$ make
$ sudo PATH=$PATH make install


Ivy-python

The ivy-python package makes it possible to use the IVY libraries from within the Python programming language. The ivy-python package is architecture independent, so it can be downloaded from the Ubuntu or Debian paparazzi repository. However since this is the from scratch page we will download it from the official source repository via

$ cd ~/develop/paparazzi-portability-support/linux/ivy/
$ svn co http://svn.tls.cena.fr/svn/ivy/ivy-python/trunk ivy-python
$ cd ivy-python/
$ sudo python setup.py install

Main sourcecode

Now all the prequisites are installed, finally we can grab a copy of the full Paparazzi project

$ cd ~
$ git clone https://github.com/paparazzi/paparazzi.git
$ cd paparazzi
$ export PPRZ_HOME=~/paparazzi/
$ export PAPARAZZI_HOME=~/paparazzi/
$ export PAPARAZZI_SRC=~/paparazzi/
$ make ground_segment

Fine now lets start the X server

$ X &

And make a display setting

$ export DISPLAY=:0

Finally, it's time to party, let's run the Paparazzi center

$ cd ~/paparazzi
$ ./paparazzi

Add this to the session

$ sw/ground_segment/cockpit/gcs -b 192.168.1:2010

Experimental steps

{TODO: Describe STEPS}

{install python} {install ivy python} {install kivy}

Compile example

Source of Example

X11 server to display on LCD

Testing

Next

The next step will be to make onboard video work in the GCS.

Links

Links to related information