|
|
(21 intermediate revisions by one 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
| |
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.
Version 10 (buster) is easily installed using the 'Raspberry pi imager',
on Linux install with
Then unpack NOOBS zip-file to the new disk (use the newest version), like
for the network version
All commands have an online help if you add --help or -h after the command.
If this is not enough, then try
to get the manual page for the ls command.