Install on raspberry

From Rsewiki
(Difference between revisions)
Jump to: navigation, search
(main Makefile)
 
(144 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Short note on installation of (parts of) mobotware on Raspberry Pi
+
Back to [[Robobot]]
  
=== Prerequisite ===
+
Back to [[Flexbot]]
  
First install 2012-10-28-wheezy-raspbian on the raspberry Pi flashdisk and expand the flash-disk to at least 4GB - see the instructions on e.g.: http://elinux.org/RaspberryPiBoardBeginners
 
  
Assuming this is up and running - with internet access
+
== Prerequisite ==
  
=== Configure ===
+
* Raspberry pi - version 3 or 4
 +
* SD-card preferably at least 16Gb
 +
* Monitor with HDMI (version 3) or micro HDMI (version 4) cable
 +
* keyboard - and optional a mouse
 +
* Access to network (wired or wifi)
 +
* Power - either an USB charger or cable to a PC (micro USB (version 3) or USB-C (version 4)
  
Using ''raspi-config''
+
It should be possible to start using USB or wifi connection from a PC without extra screen or keyboard, find solutions on internet - I have not tried.
Expand Filesystem
+
Enable Camera
+
Set hostname
+
Enable SSH
+
Enable i2c - load module as default
+
Disable Serial login
+
  
reboot
+
====Make SD card a FAT32 partision, if reusing an old card====
  
=== Login ===
+
A new SD-card is fine as is, else
  
login as ''pi'', password ''raspberry''
+
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 a user called ''local''
+
====Add boot-files to SD card====
  
sudo adduser local
+
=====RPI imager =====
sudo usermod -a --groups adm,cdrom,sudo,audio,video,plugdev,games,users,netdev,input,spi,gpio local
+
  
switch user to ''local'', and ensure groups are OK, and network is running
+
Version 10 (buster) is easily installed using the 'Raspberry pi imager',
 +
on Linux install with
  
  su - local
+
  snap install rpi-imager
  groups
+
  rpi-imager
ifconfig
+
  
Note the inet address.
+
and follow the screen
  
Now it is possible to login (as ''local'') from network.
+
=====manual =====
  
Do '''NOT''' login as root for running mobotware (not needed and could mess up configuration).
+
or
  
=== Packages needed for Mobotware RHD/MRC ===
+
Get the install zip-file from https://www.raspberrypi.org/downloads/noobs/  
  
The following packages needs to be installed - e.g. using apt-get like:
+
Then unpack NOOBS zip-file to the new disk (use the newest version), like
 +
for the network version
 +
unzip NOOBS_lite_v3_5_1.zip -d /media/xxx/yyyy  or
 +
unzip ~/Downloads/raspberry/NOOBS_lite_v3_5_1.zip  (if you are on the empty flash)
 +
or for the full version
 +
unzip NOOBS_v3_5_1.zip -d /media/xxx/yyyy  or
 +
unzip ~/Downloads/raspberry/NOOBS_v3_5_1.zip  (if you are on the empty flash)
  
sudo apt-get install subversion
+
====Reboot====
  
Package list for RHD and MRC:
+
* Insert SD card on Raspberry,
 +
* Mount a heatsink - especially needed on version 4,
 +
* Connect monitor, keyboard and (USB) power
  
subversion  (to fetch mobotware from SVN)
+
That is all, Raspberry should boot on that, and take some time to prepare the SD-Card.
libexpat-dev  (RHD)
+
Or see instructions on e.g.: https://www.raspberrypi.org/help/noobs-setup/
pciutils-dev  (RHD)
+
libncurses-dev (RHD)
+
bison          (MRC)
+
libsdl-dev    (MRC)
+
telnet        (MRC test)
+
sudo apt-get install subversion libexpat-dev pciutils-dev libncurses-dev bison libsdl-dev telnet
+
  
=== Additional for AURS (e.g. camera server) ===
+
* Boot the raspberry and install the Raspberry Pi OS full (Debian).
 +
* On the bottom of the screen select keyboard layout and language,
  
Package list
+
Settings
cmake
+
libopencv-dev
+
libreadline-dev
+
libudev-dev
+
libusb-dev
+
libv4l-dev
+
python-dev
+
libgstreamer0.10-dev
+
libboost-dev
+
libboost-system-dev
+
sudo apt-get install cmake libopencv-dev libreadline-dev libudev-dev libusb-dev libv4l-dev python-dev libgstreamer0.10-dev libboost-dev libboost-system-dev
+
  
=== Get Mobotware ===
+
* Leave the pi password as is (for future reuse)
 +
* Select language (prefer English - also for future reuse)
 +
* select wifi access - if not using a cable.
  
Get and unpack mobotware - see main page of this wiki for info
+
==Usefull Linux commands==
  
Either from SVN - if you have access, or from our lab-computers as a mobotware-XXX.tar.gz file, where XXX is version number.
+
Here are some common commands in Linux
  
unpack if a .gz file
+
ls    (directory file list)
 +
cd    (change to home directory)
 +
cd some_directory    (change to a subdirectory)
 +
exit  (logout, e.g. of a ssh session)
 +
grep -n string_to_look_for_in_a_file  *.cpp    (find a string in a file, e.g. a variable or a function)
 +
sudo some_command    (execute a command as "root" - root is a superuser with administrator rights to everything)
 +
pkill some_application_name  (stop (or kill) a running process with name "some_application_name")
 +
pgrep some_application_name  (see if a process is running - good to use before a kill)
 +
mv  from_file to_file    (rename a file)
 +
cp  from_file to_file    (copy a file)
 +
rm  some_file            (remove (delete) a file)
 +
nano some_file          (simple text editor)
 +
zip, unzip              (pack or unpack files -  try zip --help  to see how.
 +
top    (see process load and memory usage)
 +
make    (compile all as described in the "Makefile" in the same directory)
 +
make -j4 (compile using up to 4 CPU cores - faster if more files need to be compiled)
  
tar -xzf mobotware-XXX.tar.gz
+
All commands have an online help if you add --help or -h after the command.
 +
If this is not enough, then try
 +
man ls
 +
to get the manual page for the ls command.
  
this makes a mobotware directory with all the files.
+
== Configure ==
  
=== Modify makefiles ===
+
==== Raspberry ====
  
Not all parts of Mobotware runs on a raspberry, so some parts must be removed from the Makefiles:
+
use raspi-config, start a terminal:
  
Enter the mobotware directory
+
sudo raspi-config
  
cd mobotware-XXX
+
Using ''raspi-config''
 
+
  Enable Camera
==== main Makefile ====
+
  Set hostname (one word, no space)
 
+
  Enable SSH
  nano -w Makefile
+
  Disable Serial login
 
+
  boot as a console with login
Change this section
+
  Update firmware
 
+
  Set locale to "en_DK.UTF-8 UTF-8" (danish keyboard, but English language)
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
+
cruizcore simstage3
+
 
+
==== Camera server libraries Makefile ====
+
 
+
goto AURS library
+
 
+
  cd mobotwareXXX/trunk/libs/
+
nano -w Makefile
+
 
+
in this section
+
BASELIBS = ../include ../lib \
+
  ugen4 urob4 umap4 ucam4 \
+
  liblineext dglib freenect \
+
  aulibextractfeatures utils \
+
  ../src/ulmsserver
+
 
+
remove
+
freenect  (kinect library)
+
 
+
==== AURS application Makefile ====
+
 
+
Goto the src directory
+
 
+
cd mobotwareXXX/trunk/src/
+
nano -w Makefile
+
 
+
Change line
+
 
+
apps = auclient  auservertest  ucamserver  uclient  ulmsserver  userver qclient
+
to
+
apps = auclient  auservertest  ucamserver  uclient  ulmsserver  userver
+
 
+
==== AURS plugins Makefile ====
+
 
+
Goto plugin directory
+
 
+
cd mobotwareXXX/trunk/plugin/
+
nano -w Makefile
+
 
+
in the section
+
 
+
plugins := auavoid auavoidk auball auballkl  audrivepos  augps    \
+
    aukeep    aulaserifscan      aupar    aurhdif  \
+
    austereo  auvarmrc  ucamif \
+
    aucamcog  aucron    auefline    augraphplan \
+
    aukinect  aulobst  aumapobst aupoly      auroaddrive \
+
    ausmr      locater  ulmspassable \
+
    aucamfocus audisp    aufile    auimu    \
+
    aulaserif  aulocalize2 \
+
    auobj3d    aupplfinder        aurule    \
+
    ausockbin  autof    mapbase  ulmsv360    aucamrectify aupipi \
+
    aulaserbox aufzclass auviewer aupcp aupcltest auv4lgst \
+
    aucroprow  autof2    auptgrey \
+
    aulocalize
+
 
+
remove
+
aukinect (5th line)
+
auviewer aupcp aupcltest (11th line)
+
auptgray (12th line)
+
 
+
=== Build ===
+
Build the needed parts of mobotware, e.g.:
+
cd ~/mobotwareXXX
+
make
+
 
+
This should now compile with warnings only
+
 
+
(augraphplan.h not found may complain,
+
but try a make more, then t 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
+
 
+
==== setup path ====
+
 
+
Add the mobotware bin-directory into default PATH in /etc/profile
+
 
+
  sudo nano -w /etc/profile
+
 
+
append the 2 PATH lines with :/usr/local/smr/bin, like:
+
 
+
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/smr/bin"
+
 
+
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"
+
 
+
=== 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):
+
 
+
  <?xml version="1.0" ?>
+
  <!--
+
    Configuration file for
+
    Robot Hardware Daemon
+
-->
+
<!-- Starting RHD Configuration -->
+
<rhd>
+
  <!-- *** Core Components Configuration *** -->
+
  <!-- Sheduler configuration -->
+
  <sheduler>
+
    <period value="12000"/><!--in usec-->
+
    <type value="LXRT"/><!--"usleep","itimer","LXRT" -->
+
  </sheduler>
+
  <!-- Server configuration -->
+
  <server>
+
    <port value="24902"/>
+
    <clients number="10" allwriters="1"/>
+
  </server>
+
  <!-- *** Plugins Configuration *** -->
+
  <plugins basepath="/usr/local/smr/lib/rhdplugin/">
+
    <!--
+
    Add your plugin here after this comment and
+
    leave joycontrol and log - they may be usefull.
+
    -->
+
    <joycontrol enable="true"
+
                    lib="libjoycontrol.so.1"
+
                    critical="false"
+
                    safety="1">
+
      <joystick port="/dev/input/js0"/>
+
      <!-- speed:
+
          maxfwd is max speed reference value send to device
+
          maxturn is max turn-angle angle-vel send to device
+
          fastBut is button number on joypad (0..10)
+
          slowFactor used when fastBut is not pressed (0.1 .. 1.0) 1.0 is default -->
+
      <speed maxfwd="900"
+
          maxturn="900"
+
          fastBut="5"
+
          slowFactor="0.3"/>
+
      <!-- deadband for joy-controll in joy-control units (+/- 32000) -->
+
      <deadband max="767" min="-767"/>
+
      <control enable="true"/>
+
    </joycontrol>
+
    <!-- rhdlog will open a file rhdlog.txt and write all symbol values here as fast as possible.
+
            it may not keep up writeing with the tick interval specified (can be changed online)
+
            interval = 0 (default) for no log - can be set online from rhdtest or MRC.
+
            interval = N if N=1 every tick, N=2 every other, N=3..
+
            File is created in default directory.
+
            After each write operation the data is flushed to disk (using fflush()).
+
            each line starts with a unix timestamp (gettimeofday) - set at tick call -->
+
    <rhdlog enable="true"
+
          lib="rhdlog.so.1"
+
          critical="false"
+
          interval="1"
+
          safety="2"
+
          debug="0">
+
    </rhdlog>
+
  </plugins>
+
</rhd>
+
 
+
=== Test Mobotware ===
+
 
+
==== RHD ====
+
Start RHD
+
 
+
rhd
+
 
+
It should end saying "RHD is running"
+
 
+
(Stops with ctrl-C)
+
 
+
==== MRC ====
+
 
+
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.
+
 
+
==== Camera server ====
+
 
+
Start the camera server
+
 
+
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
+
 
+
Pres q to quit
+
 
+
===MRC test===
+
Start the MRC (while the RHD is running) using socket interface:
+
./mrc -t1
+
In another terminal window use telnet to connect to the MRC
+
telnet localhost 31001
+
MRC commands like
+
eval $time
+
Should now be avilable
+
  
If all this is OK, then the raspberry Pi is running, and you only need to connect it to your robot througt an appropriate set of rhd plug-ins and make a MRC script to make it run.
+
=== Update operating system ===
  
===Performance===
+
Ensure you have internet access, then
  
The RHD and MRC running in idle with an update rate of 100 HZ is consuming about 3-4% CPU load each.
+
sudo apt-get update
 +
sudo apt-get dist-upgrade
 +
sudo reboot

Latest revision as of 09:54, 24 December 2021

Back to Robobot

Back to Flexbot


Contents

[edit] Prerequisite

  • Raspberry pi - version 3 or 4
  • SD-card preferably at least 16Gb
  • Monitor with HDMI (version 3) or micro HDMI (version 4) cable
  • keyboard - and optional a mouse
  • Access to network (wired or wifi)
  • Power - either an USB charger or cable to a PC (micro USB (version 3) or USB-C (version 4)

It should be possible to start using USB or wifi connection from a PC without extra screen or keyboard, find solutions on internet - I have not tried.

[edit] Make SD card a FAT32 partision, if reusing an old card

A new SD-card is fine as is, else

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

[edit] Add boot-files to SD card

[edit] RPI imager

Version 10 (buster) is easily installed using the 'Raspberry pi imager', on Linux install with

snap install rpi-imager
rpi-imager

and follow the screen

[edit] manual

or

Get the install zip-file from https://www.raspberrypi.org/downloads/noobs/

Then unpack NOOBS zip-file to the new disk (use the newest version), like for the network version

unzip NOOBS_lite_v3_5_1.zip -d /media/xxx/yyyy  or
unzip ~/Downloads/raspberry/NOOBS_lite_v3_5_1.zip  (if you are on the empty flash)

or for the full version

unzip NOOBS_v3_5_1.zip -d /media/xxx/yyyy  or
unzip ~/Downloads/raspberry/NOOBS_v3_5_1.zip  (if you are on the empty flash)

[edit] Reboot

  • Insert SD card on Raspberry,
  • Mount a heatsink - especially needed on version 4,
  • Connect monitor, keyboard and (USB) power

That is all, Raspberry should boot on that, and take some time to prepare the SD-Card. Or see instructions on e.g.: https://www.raspberrypi.org/help/noobs-setup/

  • Boot the raspberry and install the Raspberry Pi OS full (Debian).
  • On the bottom of the screen select keyboard layout and language,

Settings

  • Leave the pi password as is (for future reuse)
  • Select language (prefer English - also for future reuse)
  • select wifi access - if not using a cable.

[edit] Usefull Linux commands

Here are some common commands in Linux

ls     (directory file list)
cd     (change to home directory)
cd some_directory    (change to a subdirectory)
exit   (logout, e.g. of a ssh session)
grep -n string_to_look_for_in_a_file  *.cpp     (find a string in a file, e.g. a variable or a function)
sudo some_command    (execute a command as "root" - root is a superuser with administrator rights to everything)
pkill some_application_name  (stop (or kill) a running process with name "some_application_name")
pgrep some_application_name  (see if a process is running - good to use before a kill)
mv  from_file to_file    (rename a file)
cp  from_file to_file    (copy a file)
rm  some_file            (remove (delete) a file)
nano some_file           (simple text editor)
zip, unzip               (pack or unpack files -  try zip --help   to see how.
top     (see process load and memory usage)
make    (compile all as described in the "Makefile" in the same directory)
make -j4 (compile using up to 4 CPU cores - faster if more files need to be compiled)

All commands have an online help if you add --help or -h after the command. If this is not enough, then try

man ls

to get the manual page for the ls command.

[edit] Configure

[edit] Raspberry

use raspi-config, start a terminal:

sudo raspi-config

Using raspi-config

Enable Camera
Set hostname (one word, no space)
Enable SSH
Disable Serial login
boot as a console with login
Update firmware
Set locale to "en_DK.UTF-8 UTF-8" (danish keyboard, but English language)

[edit] Update operating system

Ensure you have internet access, then

sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox