Install on raspberry: Difference between revisions

From Rsewiki
No edit summary
 
(141 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
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


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.

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

Add boot-files to SD card

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

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)

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.

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.

Configure

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)

Update operating system

Ensure you have internet access, then

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