ICub machines configuration
In this page we describe the setup of the computers connected to the iCub robot, which all share a common network disk and configuration.
See iCub machines configuration/Archive for obsolete information.
Operating system installation
Ubuntu LTS, default settings and partitioning. The first user to be created must be called icub, to make the distributed setup possible: for NFS network mount, this user has to have uid 1000 and guid 1000.
In order to add a user:
- either use the Ubuntu graphical frontends
- or use a Terminal:
sudo adduser icub sudo usermod -aG sudo icub # gives sudo privileges
Other operations
Network configuration
See also: VisLab network, ISR computing resources.
Configure a static IP as explained in one of the following subsections, depending if the machine is a desktop or a server one.
Also, it is recommended to set up the /etc/hosts
file as follows:
10.10.1.41 icubbrain1 10.10.1.42 icubbrain2 10.10.1.50 pc104 10.10.1.51 icub-cuda 10.10.1.53 icub-laptop
You should be able to do ping icubbrain1
, in addition to ping icubbrain1.visnet
Desktop machines
With the graphical Network Manager (https://help.ubuntu.com/14.04/ubuntu-help/net-fixed-ip-address.html), configure the connection "Auto eth0" IPv4 as follows:
Address | Netmask | Gateway | DNS Servers | notes |
---|---|---|---|---|
10.10.1.x | 255.255.255.0 | 10.10.1.254 | 10.0.0.1, 10.0.0.2 | visnet (iCub machines) |
10.0.x.y | 255.255.0.0 | 10.0.0.254 | 10.0.0.1, 10.0.0.2 | isrnet (rest of ISR) |
Servers
Edit /etc/network/interfaces
like this:
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.x.y.z # put your IP here, see above table netmask 255.255.x.y # see above table network 10.10.1.0 broadcast 10.10.1.255 gateway 10.10.1.254 dns-nameservers 10.0.0.1 10.0.0.2
In some versions of Ubuntu, to configure DNS you also need to edit /etc/resolvconf/resolv.conf.d/head
like this:
nameserver 10.0.0.1 nameserver 10.0.0.2
then run:
sudo resolvconf -u
Dependencies
Installing the icub-common metapackage is sufficient. It is a bundle of the following packages (for more details see here and here):
sudo apt-get install build-essential libace-dev libgsl0-dev libncurses5-dev gfortran libtinyxml-dev sudo apt-get install git-core subversion ssh gcc g++ make cmake-curses-gui sudo apt-get install qttools5-dev qtdeclarative5-dev qtdeclarative5-controls-plugin qtdeclarative5-dialogs-plugin qtmultimedia5-dev qtdeclarative5-qtmultimedia-plugin qtquick1-5-dev libqt5svg5
iCub Simulator dependencies: SDL and ODE.
The GTK versions of graphical YARP programs will be discontinued in 2015 (replaced by Qt equivalents). If you still want to obtain the old programs during compilation, do:
sudo apt-get install libgtkmm-2.4-dev
Environment variables
- Create a file called ~/.bashrc_iCub like this one. Usually you do not need all of the following variables and settings, just a subset.
# /usr/local/src/robot directory can be mounted from NFS, or created manually with permissions: sudo chown icub.icub /usr/local/src/robot -R export ROBOT_CODE=/usr/local/src/robot export ICUBcontrib_DIR=$ROBOT_CODE/icub-contrib-common/build export YARP_ROOT=$ROBOT_CODE/yarp export YARP_DIR=$YARP_ROOT/build export ICUB_ROOT=${ROBOT_CODE}/icub-main export ICUB_DIR=${ICUB_ROOT}/build export icub_firmware_shared_DIR=${ROBOT_CODE}/icub-firmware-shared/build export YARP_DATA_DIRS=${YARP_DIR}/share/yarp:${ICUB_DIR}/share/iCub:${ICUBcontrib_DIR}/share/ICUBcontrib export FIRMWARE_BIN=${ROBOT_CODE}/icub-firmware/build export IPOPT_DIR=$ROBOT_CODE/Ipopt-3.11.9 export OpenCV_DIR=$ROBOT_CODE/opencv-2.4.9/build #export OpenCV_DIR=$ROBOT_CODE/opencv-2.4.9/build-cuda # for opencv_gpu
# if your modules rely on icub-contrib-common (such as POETICON++), set the following: export ICUBcontrib_DIR=$code/icub-contrib-common/build export PATH=$PATH:$YARP_DIR/bin:$ICUB_DIR/bin:$ICUBcontrib_DIR/bin export YARP_DATA_DIRS=$YARP_DIR/share/yarp:$ICUB_DIR/share/iCub:$ICUBcontrib_DIR/share/ICUBcontrib
# himrep, IOL, stereo-vision, SiftGPU, Lua export SIFTGPU_DIR=~/SiftGPU # note: SiftGPU installed outside NFS export LIBSVMLIN_DIR=${ROBOT_CODE}/himrep/liblinear-1.91 ### DO NOT REMOVE ';;;' ### export LUA_PATH=";;;${ROBOT_CODE}/rFSM/?.lua;${ICUBcontrib_DIR}/share/ICUBcontrib/contexts/interactiveObjectsLearning/LUA/?.lua" export LUA_CPATH=";;;$YARP_ROOT/bindings/build-lua/?.so"
export PATH=$PATH:$ICUB_DIR/bin:$YARP_DIR/bin:$ICUBcontrib_DIR/bin export PATH=$PATH:${ROBOT_CODE}/rFSM/tools:${ICUBcontrib_DIR}/share/ICUBcontrib/contexts/interactiveObjectsLearning/LUA export PATH=$PATH:${YARP_ROOT}/bindings/build-lua # CUDA export PATH=$PATH:/usr/local/cuda-6.5/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-6.5/lib64
export YARP_ROBOT_NAME=iCubLisboa01
# To enable tab completion on yarp port names if [ -f $YARP_ROOT/scripts/yarp_completion ]; then source $YARP_ROOT/scripts/yarp_completion fi
- Then, before the following line of /etc/bash.bashrc
[ -z "$PS1" ] && return
add this:
# per-user environment variables (non-interactive and interactive mode) source $HOME/.bashrc_iCub
The reason why we use the above custom file (as opposed to the standard ~/.bashrc) is that we want to enforce the variables both during interactive and non-interactive sessions, such as commands launched via yarprun
from another machine.
Additional software
OpenCV
Ubuntu packages
sudo apt-get install libcv-dev libhighgui-dev libcvaux-dev libopencv-gpu-dev
This is the easiest way to install OpenCV, however some machines may require a custom manual compilation instead (see below).
Manual compilation
- on most machines: download OpenCV 2.4.3 or higher, create a build directory, CMake, set WITH_CUDA=OFF, compile, set OpenCV_DIR to the path of OpenCV-x.y.z/build, for example:
export OpenCV_DIR=$code/OpenCV-2.4.3/build
- on CUDA machines, in order to compile CUDA-enabled modules: create a build-cuda directory, CMake, set WITH_CUDA=ON, compile, set OpenCV_DIR to the path of OpenCV-x.y.z/build-cuda
YARP and iCub
If you work with the robot, use the volume shares exported from the NFS server.
In other cases:
Follow the instructions on the iCub software article. When compiling, do not use sudo make install
but simply make
(we have configured the PATH variable to find the latest compiled binaries, and we do not want two copies of the same thing on the system).
- yarp CMake configuration
CMAKE_BUILD_TYPE Release CREATE_GUIS CREATE_LIB_MATH
// to enable 640x480@30Hz images with Bayer encoding // install libraw1394-dev libdc1394-22-dev then enable CREATE_OPTIONAL_CARRIERS ENABLE_yarpcar_bayer_carrier
- icub-main CMake configuration
CMAKE_BUILD_TYPE Release // on servers, do http://wiki.icub.org/wiki/Installing_IPOPT then enable ENABLE_icubmod_cartesiancontrollerclient ON ENABLE_icubmod_cartesiancontrollerserver ON ENABLE_icubmod_gazecontrollerclient ON
- final configuration
yarp namespace /icub
yarp conf 10.10.1.53 10000
(yarpserver runs on iCub laptop)
- special machines such as pc104 need different flags
CUDA
Prerequisites
sudo apt-get install freeglut3-dev libdevil-dev libglew-dev sudo apt-get purge libcudart* // because we will manually install it # optional, for older CUDA versions: sudo apt-get install linux-generic linux-headers-$(uname -r)
Troubleshooting: http://askubuntu.com/questions/410604/installing-nvidia-drivers-with-pkg1-run-ends-with-no-version-h-found
CUDA Toolkit, SDK and Examples
- stop X servers:
sudo service gdm stop
(orlightdm stop
depending on configuration) - download and install NVIDIA CUDA Toolkit from http://docs.nvidia.com/cuda (not from Ubuntu packages)
- if you obtain the error "Toolkit: Installation Failed. Using unsupported Compiler.", use the override option:
./cuda_6.0.37_linux_64.run --override
- output of successful installation (version 6.0):
Driver: Installed Toolkit: Installed in /usr/local/cuda-6.0 Samples: Installed in /home/icub Please make sure that - PATH includes /usr/local/cuda-6.0/bin - LD_LIBRARY_PATH includes /usr/local/cuda-6.0/lib64, or, add /usr/local/cuda-6.0/lib64 to /etc/ld.so.conf and run ldconfig as root To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-6.0/bin To uninstall the NVIDIA Driver, run nvidia-uninstall
- troubleshooting:
SiftGPU
- download it from http://cs.unc.edu/~ccwu/siftgpu/
- unzip it - typically in your home directory, not in the NFS shared folder
- compile with
make
- if you obtain "unspecified launch failure" and 0 sift features/matches, check that the X server is running:
sudo service gdm start
(orlightdm start
depending on configuration) - if you obtain the error "/usr/local/cuda/bin/nvcc: Command not found", this can help:
sudo ln -s /usr/lib/nvidia-cuda-toolkit /usr/local/cuda
. See also http://askubuntu.com/questions/231503/nvcc-compiler-setup-ubuntu-12-04 - run the test program
SimpleSIFT
- it should work via ssh, as well as in a local session - example of successful execution:
$ ./SimpleSIFT Unable to create OpenGL Context! For nVidia cards, you can try change to CUDA mode in this case NOTE: changing maximum texture dimension to 32768 [SiftGPU Language]: CUDA Image size : 800x600 Image loaded : ../data/800-1.jpg #Features: 3347 #Features MO: 3910 [RUN SIFT]: 0.339 Image size : 640x480 Image loaded : ../data/640-1.jpg #Features: 2372 #Features MO: 2767 [RUN SIFT]: 0.208 NOTE: changing maximum texture dimension to 32768 [SiftMatchGPU]: CUDA 2247 sift matches were found;
- define
export SIFTGPU_DIR=~/SiftGPU
or similar in your iCub bashrc file, so that libsiftgpu.so is found by IOL modules
Caffe
Follow https://github.com/robotology/himrep/ README_Caffe.md. Dependencies:
sudo apt-get install libblas-dev libboost-dev libprotobuf-dev libgoogle-glog-dev libgflags-dev libhdf5-dev libleveldb-dev libsnappy-dev liblmdb-dev
himrep
Clone https://github.com/robotology/himrep, follow the instructions to compile liblinear
, CMake, make install
IOL
sudo apt-get install lua5.1 liblua5.1-dev
- clone rFSM (no need to compile anything here)
Clone https://github.com/robotology/iol, CMake, make install
stereo-vision
Clone https://github.com/robotology/stereo-vision, CMake with USE_SIFT_GPU=ON, make install
Best practices
Edit XML files locally, in /home/icub/.local/share/yarp
To install robot-specific XML files, compile icub-main (just make
) then use commands like yarp-config robot --import-all
(installs all files) or yarp-config robot --import iCubLisboa01 affordancesExploration.xml
(installs specific files)
To install application conf/*.ini files, compile a project (e.g., icub-main, poeticon, iol) then use commands like yarp-config context --import-all
(installs all files) or yarp-config context --import actionsRenderingEngine
(installs the files of specific applications)
More information: