|
|
(21 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| Short note on installation of (parts of) mobotware on Raspberry Pi (or Beagle-bone)
| | Back to [[Robobot]] |
| | |
| | Back to [[Flexbot]] |
|
| |
|
|
| |
|
Line 10: |
Line 12: |
| * Access to network (wired or wifi) | | * 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) | | * 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==== | | ====Make SD card a FAT32 partision, if reusing an old card==== |
Line 18: |
Line 22: |
|
| |
|
| ====Add boot-files to 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/ | | Get the install zip-file from https://www.raspberrypi.org/downloads/noobs/ |
Line 31: |
Line 49: |
| ====Reboot==== | | ====Reboot==== |
|
| |
|
| That is all, Raspberry should boot on that.
| | * Insert SD card on Raspberry, |
| | * Mount a heatsink - especially needed on version 4, |
| | * Connect monitor, keyboard and (USB) power |
|
| |
|
| or see instructions on e.g.: https://www.raspberrypi.org/help/noobs-setup/
| | 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 DEBIAN Linux. | | * Boot the raspberry and install the Raspberry Pi OS full (Debian). |
| | * On the bottom of the screen select keyboard layout and language, |
|
| |
|
| Assuming DEBIAN is up and running - with internet access:
| | 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 == | | == Configure == |
Line 48: |
Line 100: |
|
| |
|
| Using ''raspi-config'' | | Using ''raspi-config'' |
| Expand Filesystem (if not OK already)
| |
| Set keyboard layout
| |
| Enable Camera | | Enable Camera |
| Set hostname | | Set hostname (one word, no space) |
| Enable SSH | | Enable SSH |
| Enable i2c - load module as default
| |
| Disable Serial login | | Disable Serial login |
| boot as a console with login | | boot as a console with login |
| Update firmware | | Update firmware |
| Set locale to "en_DK.UTF-8 UTF-8" (danish keyboard, but english language) | | Set locale to "en_DK.UTF-8 UTF-8" (danish keyboard, but English language) |
| | |
| ==== 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 === | | === Update operating system === |
Line 72: |
Line 115: |
| sudo apt-get dist-upgrade | | sudo apt-get dist-upgrade |
| sudo reboot | | 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
| |
|
| |
| === Packages needed ===
| |
|
| |
| sudo apt install cmake
| |
| sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk2.0-dev
| |
| sudo apt install libatlas-base-dev gfortran alsa-tools jackd1
| |
| sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev subversion libreadline-dev htpdate aptitude
| |
| # video for linux had some error, maybe this will help
| |
| cd /usr/include/linux
| |
| sudo ln -s -f ../libv4l1-videodev.h videodev.h
| |
| # opencv
| |
| # sudo apt install libopencv-dev (sorry, installs opencv 2.4 (jan 2020), with no ArUco code support)
| |
|
| |
| ==== NB! Stop here if you install ROBOBOT ====
| |
|
| |
| ==== Opencv ====
| |
|
| |
| As of June 2019 opencv 3.2 is installed using line above - NO, it is back to 2.4 on noops 3.2.1 (jan 2020/jca)
| |
|
| |
| Newer version of Opencv could be installed manually if you really need functions not available in 3.2.
| |
| For newer installation use
| |
|
| |
| # make a directory for the opencv source
| |
| cd
| |
| mkdir -p git
| |
| cd git
| |
| # get source
| |
| wget -O opencv-3.4.zip https://github.com/Itseez/opencv/archive/3.4.zip
| |
| unzip opencv-3.4.zip
| |
| wget -O opencv_contrib-3.4.zip https://github.com/Itseez/opencv_contrib/archive/3.4.zip
| |
| unzip opencv_contrib-3.4.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 ===
| |
|
| |
| Package list for RHD and MRC (paste the last line to a terminal window):
| |
|
| |
| 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
| |
|
| |
| === 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" ?>
| |
| <!--
| |
| 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 ====
| |
|
| |
| 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
| |