wiki:Robotino3
Last modified 4 years ago Last modified on 11.04.2015 14:45:00

Robotino 3

Robotino 3 The Robotino 3 is an educational robot platform manufactured and sold by Festo Didactic. It is the most recent version released in 2014. It is used, for example, in the RoboCup Logistics League Sponsored by Festo. This page is about the version with a Core i5 processor, but we expect it to be similar if not the same on the Atom version.

Hardware

IO Port Layout

Robotino 3 IO Ports

Network Configuration

Wifi Setup

To use the USB stick that comes with the Robotino in client mode, i.e. to connect to an existing network with access point, you need to modify the configuration. Connect a display to the VGA port and a keyboard and modify the configuration locally. Unplug the USB stick, then edit /etc/network/interfaces. Look for the wlan0 configuration and change it to look like this:

auto wlan 0
iface wlan0 inet static
  address 172.26.108.xxx
  netmask 255.255.0.0
  gateway 172.26.108.1
  dns-nameservers 172.26.108.1
  wpa-ssid Carologistics
  wpa-psk yourpasswordhere

Set the appropriate IP address and WPA key. Then plug the USB adapter and the network should be available.

Other WLan cards

If other WLan cards like the TP-Link TL-WDN4800 is used, the apropiate drive needs to be installed, for the "TP-Link TL-WDN4800" this should work out of the box. If not, there is a description here. Then change the /etc/network/interfaces to that the 5G Network is used:

  wpa-ssid Carologistics-5G

And restart the WLan card:

sudo ifdown wlan0
sudo ifup wlan0

Set Hostname

By default all Robotinos are named "robotino", which is obviously a problem for more than one robotino. Therefore, change the hostname like this (Note: replace robotino-base-X with the hostname you want to set):

for f in /etc/hostname /etc/hosts; do \
  sudo sed -i -e 's/robotino/robotino-base-X/g' $f; \
done
sudo hostname robotino-base-X

Fawkes on the Robotino

The robot comes with Ubuntu 12.04 LTS. The instructions on FawkesOnUbuntu work in principal to install the required packages. Here we list modified instructions that also install updated GCC and Boost versions that allow for using more modern language features in our applications.

Some of the steps that will be performed are:

  • Setting an English locale
  • Installation of GCC 4.8 (the pre-installed compiler GCC 4.6 is lacking some features we use)
  • Installation of Boost 1.54 (the pre-installed version 1.46 lacks features and is incompatible with GCC 4.7 or newer)
  • Installation of a custom ROS version (re-compiled with new GCC and Boost versions, only minimal package set)

Setting English Locale

The Robotino is set to a German locale by default. This causes trouble, because we use English style decimals (dot instead of comma) in our configuration files. But API2 makes heavy use of Qt, which will setup the locale and afterwards such numeric values are read incorrectly. Therefore, we update the system-wide locale to English:

sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8

Upgrade GCC and Boost

This is based on the instructions found elsewhere on the net, just slightly adapted for GCC 4.8. The following command will install GCC 4.8 (in addition to the pre-installed 4.6) and make it the default:

sudo apt-get install software-properties-common python-software-properties
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.8 g++-4.8

sudo update-alternatives --remove gcc /usr/bin/gcc-4.6
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6

Then continue to upgrade Boost. Note that removing the old Boost version might require to uninstall some programs. In some cases, for example MongoDB, we re-install them later from our updated repository. Other packages you might have to rebuild yourself.

sudo add-apt-repository ppa:boost-latest/ppa
sudo apt-get update
sudo apt-get remove 'libboost.*'
sudo apt-get install libboost1.54-dev

Installing further prerequisites

# Add ROS package repository, required e.g. for bullet
sudo sh -c 'echo "deb http://files.fawkesrobotics.org/packages/robotino3/ubuntu precise main" > /etc/apt/sources.list.d/fawkes-robotino3.list'
wget http://files.fawkesrobotics.org/packages/robotino3/ubuntu/fawkes-robotino3.key -O - | sudo apt-key add -

# Repository which has a new version of libmicrohttpd
sudo add-apt-repository -y ppa:openvas/stable

# Recent CLIPS/clipsmm versions
sudo add-apt-repository -y ppa:timn/clips

sudo apt-get update
sudo apt-get upgrade

sudo apt-get install build-essential git-core g++ vim asciidoc doxygen \
  libmagic-dev libssl-dev libavahi-client-dev libsqlite3-dev libxml++2.6-2 libxml++2.6-dev \
  libdaemon-dev libmicrohttpd10-dev  liblua5.1-0-dev libtolua++5.1-dev yaml-cpp \
  libdc1394-22-dev libbluetooth-dev libbullet-dev libelf-dev \
  libjpeg-dev libtiff4-dev libjpeg8-dev libjpeg-turbo8-dev libpng12-dev libpcl-1.7-all-dev \
  libopencv-dev libopencv-objdetect-dev libopencv-highgui-dev libopencv-calib3d-dev \
  libopencv-features2d-dev libopencv-legacy-dev libopencv-contrib-dev \
  librrd-dev graphviz libgraphviz-dev flite1-dev libasound2-dev \
  libxmlrpc-c3-dev libgl1-mesa-dev freeglut3-dev libsdl1.2-dev liburg0-dev \
  libgtkmm-3.0-dev libcairomm-1.0-dev libgconfmm-2.6-dev \
  libclipsmm-dev libprotobuf-dev libprotoc-dev protobuf-compiler \
  mongodb-dev mongodb-server

# Fix a bug in the PCL 1.7 pkg-config files
for f in people segmentation visualization; do \
  sudo sed -i -e 's/pcl_geometry-1.7 //' /usr/lib/pkgconfig/pcl_$f-1.7.pc; \
done

# Install ROS stuff
sudo apt-get install ros-fuerte-actionlib ros-fuerte-pcl ros-fuerte-geometry \
  ros-fuerte-image-common ros-fuerte-image-transport-plugins \
  ros-fuerte-navigation

echo "source /opt/ros/fuerte/setup.bash" >> ~/.bashrc
source /opt/ros/fuerte/setup.bash

Install and setup ccache

Install ccache and add ccache to your bashrc

sudo apt-get install -y ccache

echo 'export PATH="/usr/lib/ccache:$PATH"' | tee -a ~/.bashrc \ && source ~/.bashrc && echo $PATH

which g++ gcc

The output should be something like:

/usr/lib/ccache:/opt/ros/fuerte/bin:/usr/lib/ccache:/opt/ros/fuerte/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

/usr/lib/ccache/g++
/usr/lib/ccache/gcc

Now set the Limits of ccache:

ccache -F 0 && ccache -M 2

You can disply the status with ccache -s and empty the cache with ccache -C -z

A note about rebuilt ROS packages

ROS packages have to be rebuilt to adapt them to Boost 1.54. The major change was to update the build dependencies with the following (and similar) changes:

sed -i -e 's/libboost-all-dev/libboost1.54-all-dev/g' debian/control

As package sources we have used code.ros.org (look into the stacks for package source files), sources from the packages.ros.org (via apt-get source, unfortunately source is provided for a few packages only), and an ROS PPA. The situation is really unsatisfying for older ROS and Ubuntu versions. We use an old ROS version for compatibility with other projects and to avoid the catkin burden, and for Ubuntu we use the version supported by Festo for the Robotino (for now).

Disabling OpenRobotino daemons

The OpenRobotino daemons would interfere with Fawkes' own driver modules for the hardware, therefore we need to disable them. We also disable the webinterface as it is no longer operational afterwards and we can use Fawkes webview.

sudo update-rc.d -f joystick.sh remove
sudo update-rc.d lighttpd disable
sudo su -c "echo manual > /etc/init/fleetcomd.override"

for f in 99-camd2.rules 99-ftdid.rules 99-joystick.rules; do
  sudo sed -e 's/^\(.\)/#\1/' -i /etc/udev/rules.d/$f
done

Fixing Socket Permissions

By default OpenRobotino API 2 uses a Unix domain socket to communicate with local clients. But the socket has permissions that allow only root processes to communicate with other services. To fix this execute:

sudo cat <<EOM >>/etc/init/rpcd.conf
post-start script
  sleep 5
  chmod 666 /tmp/__REC__RPC__12080__
end script

EOM

This will add a little script that is executed after rpcd (which creates the socket) to allow reading and writing by every user. Afterwards, you can run Fawkes again as the robotino user.

Getting Fawkes

Afterwards you can continue with the Getting Started Guide to start Fawkes. The ultimate quickstart to clone the repository and checkout the robotino3 branches is:

git clone git://git.fawkesrobotics.org/fawkes.git
cd fawkes
git checkout -b robotino3 origin/timn/robotino3

(Note: if git is blocked on your network, use http://git.fawkesrobotics.org/fawkes.git instead.)

To use the private repository for the Carologistics RoboCup team use (please note that you must have provided your SSH public key to the repository admin).

git clone --recursive git@git.fawkesrobotics.org:fawkes-robotino.git
cd fawkes-robotino
git checkout -b robotino3 origin/timn/robotino3
git merge origin/tneumann/robotino3-new-base
# And now in the sub-module
cd fawkes
git checkout -b robotino3 origin/timn/robotino3

To use the Carologistics specific udev rules and modifications of the standard robotino setup check out the repository for the root directory.

sudo -s
eval "$(ssh-agent -s)"
ssh-add /home/robotino/.ssh/id_rsa
cd /
git init
git remote add origin git@git.fawkesrobotics.org:robotino-base-rootdir.git
git fetch
git checkout -t origin/master

Test Run: Moving the Robotino with a xbox controller

Connect the XBox 360 controller receiver to a free USB port. Then start Fawkes loading the required plugins. When you press any button the robot will move on joystick input.

robotino@robotino:~/fawkes/bin$./fawkes -p m-base-joy

Attachments