Install on raspberry: Difference between revisions

From Rsewiki
Line 111: Line 111:
=== Opencv 3 ===
=== Opencv 3 ===


Right not Opencv version 3 (3.4 for the time being (jan 2019)) is not installed using apt install opencv-dev,
Right now Opencv version 3 (3.4 for the time being (jan 2019)) is not installed using apt install opencv-dev,
so it must be installed manually, for a new installation use
so it must be installed manually, for a new installation use



Revision as of 07:42, 20 January 2019

Short note on installation of (parts of) mobotware on Raspberry Pi (or Beagle-bone)

For Beagle-bone skip to "Login" with adduser or installation o, the rest should work, as they are both almost the same processor and operating system. Note this guide is not pt. tested on beagle-bone.

Hardware schematics

Power and IO connections on version B+ can be found here: https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/Raspberry-Pi-B-Plus-V1.2-Schematics.pdf


Prerequisite

Make a SD-card bootable with NOOBS.

Make SD card a FAT32 partision, if not already

see http://qdosmsq.dunbar-it.co.uk/blog/2013/06/noobs-for-raspberry-pi/ for instruction to prepare any old or new SD-card

add boot-files to SD card

Then unpack NOOBS zip-file to the new disk, like

unzip NOOBS_v1_4_5.zip -d /media/xxx/yyyy

Reboot

That is all, Raspberry should boot on that.

or see instructions on e.g.: https://www.raspberrypi.org/help/noobs-setup/

Boot the raspberry and install the DEBIAN Linux.

Assuming DEBIAN is up and running - with internet access:

Configure

Raspberry

use raspi-config, start a terminal:

sudo raspi-config

Using raspi-config

Expand Filesystem (if not OK already)
Set keyboard layout
Enable Camera
Set hostname
Enable SSH
Enable i2c - load module as default
Disable Serial login
boot as a console with login
Update firmware

Beagle bone

login as root (no password)

After installing a boot-image on a microsd-card with debian, follow the instaructions to expand the boot image to use the full sd-card, as described in: http://elinux.org/Beagleboard:Expanding_File_System_Partition_On_A_microSD

Update operating system

Ensure you have internet access, then

sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot

Login

login as pi, password raspberry - password may have changed

or on beaglebone as root (no password)

add a user called local

sudo adduser local
sudo usermod -a --groups adm,cdrom,sudo,audio,video,plugdev,games,users,netdev,input,spi,gpio,i2c,dialout local 

switch user to local, and ensure groups are OK, and network is running

su - local
groups
ifconfig

Note the inet address.

Now it is possible to login (as local) from network.

Get access using hostname

You may change the hostname by changing the name in /etc/hostname. If you do so, then you should probably restart before the new hostname works.

Now from another PC on the local network

ping hostname.local

where "hostname" is replaced with the hostname in /etc/hostname.

Get filesystem on normal Linux PC

From another (Linux) PC, mount the raspberry filesystem

mkdir rpi  (where the filesystem will be mounted)
sshfs local@10.59.8.141: rpi    (replace IP number with inet address from above, or use sshfs local@hostnale.local: rpi)

Then in directory rpi the user files on the raspberry can be manipulated.

for other access, use (with IP address as found above, or IP replaced with hostname.local)

ssh -X local@10.59.8.141

Opencv 3

Right now Opencv version 3 (3.4 for the time being (jan 2019)) is not installed using apt install opencv-dev, so it must be installed manually, for a new installation use

sudo apt -y install cmake
sudo apt -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt -y install libxvidcore-dev libx264-dev
sudo apt -y install libgtk2.0-dev
sudo apt -y install libatlas-base-dev gfortran
# python installed by default
#sudo apt -y install python2.7-dev python3-dev
sudo apt -y install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
# video for linux
cd /usr/include/linux
sudo ln -s -f ../libv4l1-videodev.h videodev.h
# make a directory for the opencv source
cd
mkdir -p git
cd git
# get source
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.4.zip
unzip opencv.zip
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.4.zip
unzip opencv_contrib.zip
# you will need this - if you use python - takes some minutes
pip install numpy
# prepare compilation
cd ~/git/opencv-3.4/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
   -D CMAKE_INSTALL_PREFIX=/usr/local \
   -D INSTALL_PYTHON_EXAMPLES=ON \
   -D OPENCV_EXTRA_MODULES_PATH=~/git/opencv_contrib-3.4/modules \
   -D BUILD_EXAMPLES=ON ..
# inspect printout to see if needed features are enabled
# use -j2 option not to overload or overheat the processor (j2 means use 2 cores only)
# this probably takes an hour or so
make -j2
# install into /usr/local
sudo make install
# load environment settings
sudo ldconfig

Packages needed for Mobotware RHD/MRC

The following packages needs to be installed - e.g. using apt-get like:

sudo apt-get install subversion

Package list for RHD and MRC (paste the last line to a terminal window):

subversion  (to fetch mobotware from SVN)
libexpat-dev   (RHD)
pciutils-dev   (RHD)
libncurses-dev (RHD)
bison          (MRC)
libsdl-dev     (MRC)
telnet         (MRC test)
sshfs          (may be a good idea to access filesystem from another PC)
sudo apt-get install subversion libexpat-dev pciutils-dev libncurses-dev bison libsdl-dev telnet sshfs

Additional for AURS (e.g. camera server)

Package list - opencv removed as newer version installed above (paste the last line to a terminal window)

cmake
# libopencv-dev
libreadline-dev
libudev-dev
libusb-dev
# libv4l-dev
python-dev
libgstreamer0.10-dev
libboost-dev
libboost-system-dev
python-opencv          (not needed, but nice)
sudo apt-get install cmake libreadline-dev libudev-dev libusb-dev libgstreamer0.10-dev libboost-dev libboost-system-dev python-opencv

Python

Further python image processing install

sudo pip install Image

Camera driver source

(not for beaglebone)

To use the raspberry camera (and compile the aupicam plugin) the userland sourcecode (from https://github.com/raspberrypi/userland):

git clone https://github.com/raspberrypi/userland.git userland-master

the version at October 2015 crashes when closing the camera, to avoid this, with no observed side effects, comment out a line:

In file userland-master/interface/mmal/util/mmal_util.c, remove the ' if (!vcos_verify(!port->is_enabled)) ' line:

/** Destroy a pool of MMAL_BUFFER_HEADER_T */
void mmal_port_pool_destroy(MMAL_PORT_T *port, MMAL_POOL_T *pool)
{
  if (!port || !port->priv || !pool)
     return;
  LOG_TRACE("%s(%i:%i) port %p, pool %p", port->component->name,
            (int)port->type, (int)port->index, port, pool);
/*   if (!vcos_verify(!port->is_enabled)) */     <-------------------comment out this line
  {
     LOG_ERROR("port %p, pool %p destroyed while port enabled", port, pool);
     mmal_port_disable(port);
  }
  mmal_pool_destroy(pool);
}

You can compile without the change, but may experience that camera server crashes when changing parameters and when closing.

Now:

cd ~/userland-master
mkdir build
cd build
cmake ..
make
sudo make install

This will copy the needed header and library files to /opt/vc and other places.

Mount filesystem

As an option, mount the home directory on raspberry-pi to your local PC for easy file modification.

On your PC type make a directory for the filesystem

mkdir rpi
sshfs local@10.59.8.141: rpi
ls rpi

with your IP address or IP replaced by hostname.local.

Unmount with

fusermount -u rpi

Mobotware

Get and unpack mobotware - see main page of this wiki for info

Either from SVN - if you have access, or from our lab-computers as a mobotware-XXX.tar.gz file, where XXX is version number.

unpack if a .gz file and make a symbolic link to "mobotware" to make this guide work.

tar -xzf mobotware-XXX.tar.gz
ln -s mobotware-XXX mobotware

or, if from SVN:

svn co svn://repos.gbar.dtu.dk/jcan/mobotware mobotware

this makes a mobotware directory with all the files.

Modify makefiles

Not all parts of Mobotware runs on a raspberry, so some parts must be removed from the Makefiles:

Enter the mobotware directory

cd mobotware-XXX

main Makefile

nano -w Makefile

Change this section

APPSUBDIRS = aumat/trunk \
   aurobotservers/trunk/include \
   aurobotservers/trunk/libs \
   mapbase/trunk \
   rhd/trunk \
   mrc/trunk \
   hakoclient/trunk  \
   aurs-plugins/aumanager aurs-plugins/aumrcobst aurs-plugins/auplanner/trunk \
   aurs-plugins/auzoneobst \
   aurobotservers/trunk \
   simulator/trunk

delete the lines

hakoclient/trunk  (GUI for HAKO tractor)
simulator/trunk   (simulator will not run on raspberry)

so that it looks like

APPSUBDIRS = aumat/trunk \
   aurobotservers/trunk/include \
   aurobotservers/trunk/libs \
   mapbase/trunk \
   rhd/trunk \
   mrc/trunk \
   aurs-plugins/aumanager aurs-plugins/aumrcobst aurs-plugins/auplanner/trunk \
   aurs-plugins/auzoneobst \
   aurobotservers/trunk

Remember to remove the last back-slash

RHD plugins Makefile

cd rhd/trunk/plugins
nano -w Makefile

In this section

PLUGINLIST := auserial gps crossbow fogyro hakocan smrdserial rflex \
             rs232linesensor powercube esm slugs usbiss sf9dof \
             joycontrol gdm8246 buspiratei2c buspiratead \
             herkulex saberandmagenc imu gps2\
             smrarm rhdlog hexakopter gbprofibus roboteq gpsSocket \
             fieldsteer fielddrive fieldfrontenc \
             dynamixel cruizcore simstage3

Remove

gbprofibus
simstage3

server Plug-ins etc.

Some servers and plug-ins are excluded from raspberry pi (qclient, kinect and point-cloud related plug-ins) in the respective Makefiles.

Build

Build mobotware:

cd ~/mobotwareXXX
make

This should now compile with warnings only

(augraphplan.h not found may appear, but try one more make, then it usually works @todo - find out why)

install

The easyest way to use Mobotware is then to install into /usr/local/smr.

This is done by

sudo make install

There will be a few error messages related to the uncompileable modules: qclient, hakoclient, simserver and libstage, this is OK.

setup path

Add the mobotware bin-directory into default PATH in /etc/profile

sudo nano -w /etc/profile

append the PATH line with :/usr/local/smr/bin two places, like:

...
if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/smr/bin"
else
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/usr/local/smr/bin"
fi
...

And add mobotware AURS library path into .bashrc

nano -w ~/.bashrc

append a line like this

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/smr/lib"

To make this work, you have to logout and login again.

Make a Mobotware test configuration

Logout and login to ensure that the PATH settings gets implemented

Make a directory to run from

mkdir ~/live
cd ~/live

Copy a robot configuration file

cp -r /usr/local/etc/mobotware/calib .

make a rhdconfig.xml file with this content (loads a joystick and log plugin only). Look in mobotware/build/config for specific versions for different robots.

<?xml version="1.0" ?>
<rhd>
 <sheduler>
   <period value="12000"/>
   <type value="LXRT"/>
 </sheduler>
 <server>
   <port value="24902"/>
   <clients number="10" allwriters="1"/>
 </server>
 <plugins basepath="/usr/local/smr/lib/rhdplugin/">
   <joycontrol enable="true" 
                   lib="libjoycontrol.so.1" 
                   critical="false" 
                   safety="1">
     <joystick port="/dev/input/js0"/>
     <speed maxfwd="900" 
          maxturn="900"
          fastBut="5"
          slowFactor="0.3"/>
     <deadband max="767" min="-767"/>
     <control enable="true"/>
   </joycontrol>
   <rhdlog enable="true"
         lib="rhdlog.so.1"
         critical="false"
         interval="1"
         safety="2"
         debug="0">
   </rhdlog>
 </plugins>
</rhd>

Test Mobotware

RHD

Hardware abstraction layer (Robot Hardware Daemon)

Start RHD

rhd

It should end saying "RHD is running"

(Stops with ctrl-C)

MRC

Mobile Robot Control.

While the RHD is running (in another terminal)

start the MRC

cd ~/live
mrc

This should show a list of options

-press 5 to quit

Laser scanner server

Start laser scanner server

ulmsserver

There will be some errors as there is no laserscanner ...

Press enter a few times to get a prompt ">>"

Type

help

this should show a list of loaded plugins, like

...
Available commands (from currently loaded modules):
- push q server help shelp module do BASH alive quit exit
- scanGet scanPush scanSet
- odoPose odoPosePush
- mapPose mapPosePush
- utmPose utmPosePush
- var varPush
- poly
- mapbase
- settable addline setinitpose setinitcov localizeMHF localize resetlocalizer outputdist odoposeupdate resample localizeUKF
...

Try e.g.

scanget fake=3

this should show a lot of HEX numbers and a few more errors.

Press q to quit

Camera server

Copy the camera server configuration for raspberry camera (otherwise a default ucamserver.ini will be created without the raspberry plugins).

cp ~/mobotware/build/config/raspberry/ucamserver.ini .

Start the camera server - and optionally load the camera plug-in.

ucamserver

This should end with something like this

Camera_server 2.1966 (May  1 2015 13:42:21 jca@oersted.dtu.dk)
- on port 24920
- type h for help, q for quit

If camera is available, then use

poollist

to se if camera is running.

Pres q to quit

Code change

Every time you recompile any module, it is not implemented until you also run

cd ~/mobotware
sudo make install

To implement newly compiled modules right away, change a symbolic link:

cd /usr/local
sudo rm smr
sudo ln -s ~/mobotware/build smr