Full installation instructions

From Rsewiki
(Difference between revisions)
Jump to: navigation, search
(ROBOBOT mission C++)
(Raspicam)
 
(26 intermediate revisions by one user not shown)
Line 7: Line 7:
  
 
[[Install on raspberry]] first section (prerequisites).
 
[[Install on raspberry]] first section (prerequisites).
 +
 +
===Opencv 3.4===
 +
 +
It should be OK just to install libopencv-dev - in December 2020 this installs version 3.2.0
 +
 +
sudo apt install libopencv-dev
 +
 +
To find the installed version of OpenCV try
 +
 +
pkg-config --modversion opencv
 +
 +
To install newer OpenCV version 3.4  (as of Jan 2020 it is version 3.4.9)
 +
 +
cd
 +
mkdir -p git
 +
cd git
 +
# this method will install version 4.2 - that is not fully compatible (jan 2020)
 +
# git clone https://github.com/opencv/opencv.git
 +
# git clone https://github.com/opencv/opencv_contrib.git
 +
# use this to get a version compatible with opencv 3.4
 +
# get source (jan 2020)
 +
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
 +
# compile the lot, but ommit python3 support, as the compile will fail (as of jan 2020)
 +
cd opencv
 +
mkdir build
 +
cd build
 +
# create makefiles, also for all modules in the opencv_contrib (e.g. ArUco code detect)
 +
# cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_opencv_python3=OFF -D OPENCV_EXTRA_MODULES_PATH=~/git/opencv_contrib/modules ..
 +
cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_opencv_python3=OFF -D OPENCV_EXTRA_MODULES_PATH=~/git/opencv_contrib-3.4/modules ..
 +
# 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 more than an hour.
 +
# if the compilation crashes about halfway or so, it is probably due to lack of memory
 +
#    then just start the compile again, and it is likely to continue (at least for a while)
 +
make -j2
 +
# install into /usr/local
 +
sudo make install
 +
# load environment settings
 +
sudo ldconfig
  
 
===Raspicam===
 
===Raspicam===
 +
 +
NB! this should not be needed
  
 
A rather short raspberry pi camera API is available from https://www.uco.es/investiga/grupos/ava/node/40.
 
A rather short raspberry pi camera API is available from https://www.uco.es/investiga/grupos/ava/node/40.
Line 15: Line 59:
 
or get the file from sourceforge with no GUI, with:
 
or get the file from sourceforge with no GUI, with:
  
  wget --no-check-certificate -O raspicam-0.1.6.zip https://downloads.sourceforge.net/project/raspicam/raspicam-0.1.6.zip?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fraspicam%2F%3Fsource%3Dtyp_redirect&ts=1486483484&use_mirror=netix
+
cd ~/Downloads
 
+
  wget --no-check-certificate -O raspicam-0.1.9.zip https://downloads.sourceforge.net/project/raspicam/raspicam-0.1.9.zip?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fraspicam%2F%3Fsource%3Dtyp_redirect&ts=1486483484&use_mirror=netix
or part of mission files on SVN (version 0.1.6)
+
  
 
Once fetched and available on the raspberry, then
 
Once fetched and available on the raspberry, then
 
 
Unpack and install:
 
Unpack and install:
  unzip raspicam-0.1.6.zip
+
  unzip raspicam-0.1.9.zip
  cd raspicam-0.1.6
+
  cd raspicam-0.1.9
 
  mkdir build
 
  mkdir build
 
  cd build
 
  cd build
Line 38: Line 80:
  
 
(needs a re-logon to be activated, or repeat on the command line)
 
(needs a re-logon to be activated, or repeat on the command line)
 
===Userland-master===
 
 
-- Maybe already installed, or not needed.
 
 
To be able to install mobotware (not used pt on ROBOBOT)
 
 
Follow the guide under REGBOT for userland-master install - [[Install on raspberry]]
 
  
 
===DNSMASQ===
 
===DNSMASQ===
Line 88: Line 122:
 
===Sound===
 
===Sound===
  
To use the sound system install
+
====festival====
  
sudo apt install espeak
+
Easy understandable voice, but takes time to generate
sudo apt-get install sox libsox-fmt-all
+
and require two intermediate files
  
The first speaks english using a command like
+
sudo apt install festival
 +
echo "The brown fox jumps over lazy dog" > aaa.txt
 +
text2wave aaa.txt -o aaa.wav
 +
aplay aaa.wav
  
espeak -s120 -ven+f3 -a30 "This robot speaks English with a female voice and amplitude 30, at speed 120."
+
====Music files====
  
Code for other languages can be found at http://espeak.sourceforge.net/languages.html
+
This part works
  
The second line allows to play sound files, like
+
Play sound files, like
  
 +
sudo apt-get install sox libsox-fmt-all
 
  play -v0.1 music.mp3
 
  play -v0.1 music.mp3
  
This line plays the a mp3 file with volume reduced by a factor 0.1.
+
This line plays an mp3 file with volume reduced by a factor 0.1.
The at startup the blue button on the gamepad playes the file in /home/local/Music/music.mp3.<br>
+
The at startup the blue button on the gamepad plays the file in /home/local/Music/music.mp3.<br>
This is a symbolic link to some real music (Radetzky marsch in this case):
+
This is a symbolic link to some real music (Radetzky Marsch in this case):
  
 
  ls ~/Music
 
  ls ~/Music
Line 112: Line 150:
 
  ln -s radetzky-marsch_Schloss-Schoenbrunn-Konzerte_Wien_full-length.mp3 music.mp3
 
  ln -s radetzky-marsch_Schloss-Schoenbrunn-Konzerte_Wien_full-length.mp3 music.mp3
  
====Sound level====
+
===Sound level===
  
 
On a Raspberry pi version 3+ (not tested on other versions)
 
On a Raspberry pi version 3+ (not tested on other versions)
Line 132: Line 170:
 
  amixer set PCM 100% unmute
 
  amixer set PCM 100% unmute
  
====Regbot GUI====
+
===Regbot GUI===
  
 
To run the regbot gui on the raspberry the following package is needed
 
To run the regbot gui on the raspberry the following package is needed
  
sudo apt install python-pyqtgraph
+
Additional python packages used
  
To start the GUI
+
* python-pyqtgraph
 +
* python-qt4-gl
 +
* python-serial
 +
* python-scipy
  
  cd ~/regbot/qtgui
+
  sudo apt install python-pyqtgraph python-qt4-gl python-serial python-scipy
python regbot.py
+
  
Connect to network localhost or kill the bridge and connect directly to "/dev/ttyACM0" (not com5 as is the default serial connection).
 
  
=== ROBOBOT bridge ===
+
=====* no python-pyqtgraph =====
  
This software connects and combines access to REGBOT, gamepad and the small o-led display.
+
On my 14.04 32 bit ubuntu the python-pyqtgraph package was not found using apt-get, so I
  
Get the software - if not there already.
+
downloaded from http://www.pyqtgraph.org/
 +
the debian package ''python-pyqtgraph_0.9.10-1_all.deb'' and installed using:
  
  svn checkout svn://repos.gbar.dtu.dk/jcan/regbot/robobot_bridge robobot_bridge
+
  sudo dpkg -i python-pyqtgraph_0.9.10-1_all.deb
  
To update - if there is a newer version
+
sudo apt install python-pyqtgraph
  
cd ~/robobot_bridge
+
To start the GUI
svn up
+
  
Go to the build directory to build. "make" and "sudo make install" will maybe do.
+
cd ~/regbot/qtgui
 +
python regbot.py
  
cd ~/robobot_bridge
+
Connect to network localhost or kill the bridge and connect directly to "/dev/ttyACM0" (not com5 as is the default serial connection).
mkdir -p build
+
cd build
+
cmake ..
+
make
+
sudo make install
+
 
+
To make the bridge start at reboot, then add
+
 
+
sudo nano /etc/rc.local
+
 
+
add the line just before "exit 0", or everything if empty (make rc.local executable - probably is)
+
 
+
#!/bin/sh -e
+
#
+
# rc.local
+
#
+
# This script is executed at the end of each multiuser runlevel.
+
# Make sure that the script will "exit 0" on success or any other
+
# value on error.
+
#
+
# In order to enable or disable this script just change the execution
+
# bits.
+
#
+
# By default this script does nothing.
+
# Print the IP address
+
_IP=$(hostname -I) || true
+
if [ "$_IP" ]; then
+
  printf "My IP address is %s\n" "$_IP"
+
fi
+
# this line is needed if on DTU internal network do get decent date and time
+
# as this channel otherwise is blocked
+
htpdate -q www.linux.org www.freebsd.org
+
# start bridge
+
cd /home/local/robobot_bridge/build && ./robobot_bridge -a &
+
exit 0
+
 
+
The bridge may be running already, to test use pgrep
+
 
+
pgrep bridge
+
 
+
If a process number is shown, then it is running.
+
To stop the bridge (if not needed or changed)
+
 
+
sudo pkill bridge
+
 
+
You may then run the bridge from the console
+
 
+
cd ~/robobot_bridge/build
+
sudo ./robobot_bridge
+
 
+
It will then show status on the console.
+
 
+
To list the message database, then press 's' and return. For full functionality see help (h) and "help".
+
 
+
bridge >> s
+
Regbot bridge: regbot OK=1, Joy OK=1, Oled OK=1, socket=1 (port 24001 on thit), clients=0
+
#recorded 7 items:
+
  item 0 is  servo, upds=  0, dt=0.000s, valid=0, time=1.023s ''
+
                            Servo control for robot 'servo n p' n:servo, p:position.
+
  item 1 is    pse, upds=5077, dt=0.026s, valid=1, time=135.344s '0.00160638 -1.66499e-05 -0.020729 0.0016065 1.8485'
+
                            Robot pose [x [m], y [m], h [rad], tilt [rad]].
+
  item 2 is    hbt, upds=213, dt=0.626s, valid=1, time=135.231s '3142.04 11.8582 0 0 0 289'
+
                            Heartbeat [time [sec], battery voltage [V].
+
  item 3 is    joy, upds=  6, dt=0.000s, valid=1, time=1.101s '1 0 8 11 0 0 -32767 0 0 -32767 0 0 0 0 0 0 0 0 0 0 0 0 0'
+
                            0 Joystick position, running, manual override, Axis count, Button count, A1, A2 ... An, B1, B2 ... Bn
+
  item 4 is    rc=, upds=  0, dt=0.000s, valid=0, time=1.025s ''
+
                            Remote control for robot 'rc=m v t'  m:manual override, v:velocity, t:turn velocity.
+
  item 5 is      #, upds=  0, dt=0.000s, valid=0, time=2.026s ''
+
                          (no description)
+
  item 6 is <alive, upds=133, dt=1.002s, valid=1, time=135.192s 'last="0.00028"/>'
+
                          (no description)
+
UServerPort::printStatus: running=1, clientsCnt=0, activeCnt=0, loops=0
+
 
+
bridge >> h
+
Bridge between a Regbot robot and joystick and socket clients
+
Runs on Linux PC and raspberry (preferably in rc.local - runs here an oled display too if available).
+
After start console has a cmd. line with following commands:
+
    q: quit
+
    s: status of data items etc
+
    h: this help
+
    help: help for the bridge
+
Longer lines are send to handler as message.
+
 
+
bridge >> help
+
UBridge::responder: key=help get responder=3
+
# Robobot_bridge help:
+
# Commands are all single line text staring with a keyword
+
#    (up to 6 characters) followed by text or numbers:
+
# Main topics:
+
#    robot      Sends all rest of the line to the robot, see 'robot help' for options
+
#    bridge      See 'bridge help' for options
+
#    oled L xxx  Prints xxx (up to 20 chars) on line L (2..7) on oled
+
#    client      See 'client help' for options
+
#    q          quit
+
#    h          Console help
+
#    help        This help
+
# All lines starting with '#' are assumed to be comments
+
# All commands are stored as a data item with keyword as ID
+
# All data items has reserved subcommands, see:
+
#    item h      Help for data item 'item'
+
bridge >>
+
 
+
===USB as SOCKET for REGBOT client===
+
 
+
Skip this section - for use without robobot_bridge only.
+
 
+
This is not compatible with use of ROBOBOT_BRIDGE, so '''don't use it''' here
+
 
+
To use the REGBOT client through (not on) the raspberry pi, the serial connection /dev/ttyACM0 on the raspberry can be converted to a network port by SOCAT. So install:
+
 
+
sudo apt install socat
+
 
+
Add the following line to /etc/rc.local
+
 
+
socat TCP-LISTEN:24001,fork,reuseaddr FILE:/dev/ttyACM0,raw,echo=0 &
+
 
+
This creates a TCP socket server, listening to port 24001 and piping /dev/ttyACM0 to the socket (with no local echo). This only takes the data from the /dev/ttyACM0 when a client is connected to the socket.
+
 
+
Works after a reboot, or the same line on the command prompt.
+
 
+
This is good for configuring the REGBOT (in REGBOT client connect wifi to IP of robot, e.g. 192.168.0.2).
+
  
 
== File sharing for development ==
 
== File sharing for development ==

Latest revision as of 13:55, 24 December 2020

Back to Robobot


Contents

[edit] Installation instruction on the raspberry

Install raspberry pi version of Linux on a micro-SD, instructions can be found here:

Install on raspberry first section (prerequisites).

[edit] Opencv 3.4

It should be OK just to install libopencv-dev - in December 2020 this installs version 3.2.0

sudo apt install libopencv-dev

To find the installed version of OpenCV try

pkg-config --modversion opencv

To install newer OpenCV version 3.4 (as of Jan 2020 it is version 3.4.9)

cd
mkdir -p git
cd git
# this method will install version 4.2 - that is not fully compatible (jan 2020)
# git clone https://github.com/opencv/opencv.git
# git clone https://github.com/opencv/opencv_contrib.git
# use this to get a version compatible with opencv 3.4
# get source (jan 2020)
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
# compile the lot, but ommit python3 support, as the compile will fail (as of jan 2020)
cd opencv
mkdir build
cd build
# create makefiles, also for all modules in the opencv_contrib (e.g. ArUco code detect)
# cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_opencv_python3=OFF -D OPENCV_EXTRA_MODULES_PATH=~/git/opencv_contrib/modules ..
cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_opencv_python3=OFF -D OPENCV_EXTRA_MODULES_PATH=~/git/opencv_contrib-3.4/modules ..
# 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 more than an hour.
# if the compilation crashes about halfway or so, it is probably due to lack of memory
#    then just start the compile again, and it is likely to continue (at least for a while)
make -j2
# install into /usr/local
sudo make install
# load environment settings
sudo ldconfig

[edit] Raspicam

NB! this should not be needed

A rather short raspberry pi camera API is available from https://www.uco.es/investiga/grupos/ava/node/40. And can be downloaded from https://sourceforge.net/projects/raspicam/files/,

or get the file from sourceforge with no GUI, with:

cd ~/Downloads
wget --no-check-certificate -O raspicam-0.1.9.zip https://downloads.sourceforge.net/project/raspicam/raspicam-0.1.9.zip?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fraspicam%2F%3Fsource%3Dtyp_redirect&ts=1486483484&use_mirror=netix

Once fetched and available on the raspberry, then Unpack and install:

unzip raspicam-0.1.9.zip
cd raspicam-0.1.9
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig

The library is installed in /usr/local, and therefore to make cmake find it the path needs to be added to startup configuration, in file ~/.bashrc

nano ~/.bashrc
add at the end:
export CMAKE_PREFIX_PATH=/usr/local/lib

(needs a re-logon to be activated, or repeat on the command line)

[edit] DNSMASQ

To enable the ROBOBOT to be connected directly to a PC, then it is easier if the ROBOBOT provides an IP for the PC.

Install DNSMASQ

sudo apt install dnsmasq

allow dnsmasq to provide IP to pear-to-pear networks Edit the /etc/dnsmasq.conf (nano is a small text editor, fine for editing configuration files owned by Linux root)

sudo nano /etc/dnsmasq.conf
find and change/add the following line (a bit down, eg to serch use: ctrl-W dhcp-range)
dhcp-range=192.168.17.100,192.168.17.150,12h

To work, the eth0 must have an IP, if noone provides one, change /etc/dhcpcd.conf (dhcp client deamon) to have a default IP, if no DHCP server is available

Edit of /etc/dhcpcd.conf to have a fall back behaviour for eth0 and eth1.

sudo nano /etc/dhcpcd.conf
Add the following lines at the end (uncomment and modify):
# define static profile
profile static_eth0
static ip_address=192.168.17.1/24
# static routers=192.168.0.1
# static domain_name_servers=192.168.0.1

# fallback to static profile on eth0
interface eth0
fallback static_eth0 

This will also give a default IP for an eventual second network (usb-to-cable) if needed

Now, after a reboot, you should be able to connect a PC directly with at network cable to a PC, and the PC should get an IP from the raspberry, so now

ssh local@192.168.17.1

[edit] Sound

[edit] festival

Easy understandable voice, but takes time to generate and require two intermediate files

sudo apt install festival
echo "The brown fox jumps over lazy dog" > aaa.txt
text2wave aaa.txt -o aaa.wav
aplay aaa.wav

[edit] Music files

This part works

Play sound files, like

sudo apt-get install sox libsox-fmt-all
play -v0.1 music.mp3

This line plays an mp3 file with volume reduced by a factor 0.1. The at startup the blue button on the gamepad plays the file in /home/local/Music/music.mp3.
This is a symbolic link to some real music (Radetzky Marsch in this case):

ls ~/Music
   radetzky-marsch_Schloss-Schoenbrunn-Konzerte_Wien_full-length.mp3
cd ~/Music
ln -s radetzky-marsch_Schloss-Schoenbrunn-Konzerte_Wien_full-length.mp3 music.mp3

[edit] Sound level

On a Raspberry pi version 3+ (not tested on other versions)

$ amixer
 Simple mixer control 'PCM',0
   Capabilities: pvolume pvolume-joined pswitch pswitch-joined
   Playback channels: Mono
   Limits: Playback -10239 - 400
   Mono: Playback 400 [100%] [4.00dB] [on]

An thus:
Setting the sound level can be done by:

amixer set PCM 0dB unmute

Setting to maximum (100%) is about the same as setting 4dB (may be too much for amplifier).

amixer set PCM 100% unmute

[edit] Regbot GUI

To run the regbot gui on the raspberry the following package is needed

Additional python packages used

  • python-pyqtgraph
  • python-qt4-gl
  • python-serial
  • python-scipy
sudo apt install python-pyqtgraph python-qt4-gl python-serial python-scipy


[edit] * no python-pyqtgraph

On my 14.04 32 bit ubuntu the python-pyqtgraph package was not found using apt-get, so I

downloaded from http://www.pyqtgraph.org/ the debian package python-pyqtgraph_0.9.10-1_all.deb and installed using:

sudo dpkg -i python-pyqtgraph_0.9.10-1_all.deb
sudo apt install python-pyqtgraph 

To start the GUI

cd ~/regbot/qtgui
python regbot.py

Connect to network localhost or kill the bridge and connect directly to "/dev/ttyACM0" (not com5 as is the default serial connection).

[edit] File sharing for development

Mirror the local disk on the Raspberry to a PC, make all file editing here, and then on a terminal connection to the robot to compile the software.

[edit] Share files from windows

On the windows computer install "winscp" and use it to copy files to and from the raspberry disk as needed.

There are other methods too.

[edit] Share files on Linux

On a Linux PC use sshfs for sharing. Make an empty directory for the mapped disk, and then mount

mkdir robobotdisk
sshfs local@192.168.0.2: robobotdisk

Unmount with

fusermount -u robobotdisk

Or use "sudo unmount robobotdisk"

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox