Pc104/Archive

From ISRWiki
Revision as of 16:20, 25 November 2011 by Giovanni Saponaro (talk | contribs) (→‎Old 2011 notes: archive: boot scripts)
Jump to navigation Jump to search

Between 2009-05-21 and 2009-05-26, we did some experiments with Ubuntu Server 8.04 'Hardy Heron' on a 4GB Flash IDE memory attached to the pc104 CPU board. The objective was to get rid of the laptop (icubsrv) dependency, however there are still a couple of problems with libraries in YARP which at present are unsolved: dragonfly cameras and Canbus.

If you want to look at the current setup, go back to pc104.

Ubuntu Server 8.04 Installation

First of all, we changed the BIOS setting First Boot Device to: USB-CDROM. We had a Ubuntu Server 8.04 CD inside the drive. (It is apparently possible to boot and install directly from a Flash memory, but a CDROM installation is easier.)

Here is our configuration on Ubuntu Server 8.04:

  • hostname: pc104
  • automatic partitioning (which will partition the 4GB drive into an ext3 and a swap partition)
  • username: icub
  • no HTTP proxy
  • software selection: OpenSSH (which includes scp to copy files among machines), nothing else

After a while, the CDROM will eject automatically. Remove it and, after reboot, change the BIOS boot sequence settings to the default, which is:

  • Primary Boot Device: Hard Disk
  • Second Boot Device: Disabled
  • Third Boot Device: Disabled

At this point we have a minimal Linux system (474MB).

Network

Change the IP to 10.10.1.50 by editing /etc/network/interfaces in the following way:

  auto lo
  iface lo inet loopback
  auto eth0
  iface eth0 inet static
  address 10.10.1.50
  netmask 255.255.255.0
  network 10.10.1.0
  broadcast 10.10.1.255
  gateway 10.10.1.254

Add the following lines in /etc/hosts (besides the already-existing lines):

  10.10.1.52	chico2
  10.10.1.1	cortex1
  10.10.1.2	cortex2
  10.10.1.3	cortex3
  10.10.1.4	cortex4
  10.10.1.5	cortex5
  10.10.1.6	cortex6

Then, copy the content of directory ~/.ssh/ from a machine we have used in the past to connect to pc104 (e.g., icubsrv or chico2) to the pc104 itself. This will permit passwordless login sessions, necessary for yarprun and demos. On the other machines of the network which we use to connect to pc104 (e.g., chico2, cortex cluster) you might need to delete a line of your ~/.ssh/known_hosts file (the "offending line" which contains an old key -- follow the ssh error message and just delete that line). Now, passwordless logins to pc104 should be no problem from the other machines.

After the installation

Install the following packages:

  sudo apt-get install gcc g++ cmake make cvs subversion ssh libace-dev libgsl0-dev

Write this at the bottom of ~/.bashrc

  export ICUB_DIR=/home/icub/iCub
  export ICUB_ROOT=$ICUB_DIR
  export YARP_DIR=/home/icub/yarp2
  export YARP_ROOT=$YARP_DIR
  export PATH=$PATH:$ICUB_DIR/bin
  export PATH=$PATH:$YARP_DIR/bin

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/.bash_env

Now create a file ~/.bash_env (used by non-interactive sessions, namely commands launched via yarprun from another machine) containing these variables:

  export ICUB_DIR=/home/icub/iCub
  export ICUB_ROOT=$ICUB_DIR
  export YARP_DIR=/home/icub/yarp2
  export YARP_ROOT=$YARP_DIR
  export PATH=$PATH:$ICUB_DIR/bin
  export PATH=$PATH:$YARP_DIR/bin

Old 2011 notes

It boots from a read-only memory (using a Debian Live distribution), therefore it is necessary to mount an external partition to make permanent changes to files and perform basic I/O. This is accomplished by mounting an external partition on the pc104 at boot time.

Booting and mounting

After that, it runs the scripts that are found in icubsrv's /exports/code-pc104/pc104/hooks directory. You can use those scripts for making some configuration permanent on pc104 and/or to run programs. They set up the yarp namespace, configure the keys for passwordless log-ins, etc.

About the hook scripts

The common version of the hook scripts is located in the RobotCub repository, under /usr/local/src/robot/iCub/pc104/startupscripts/opencall/hooks (available, for example, on icubsrv). The procedure is to copy them to icubsrv's /exports/code-pc104/pc104/hooks and then to customize VisLab-specific settings there.

Software

  • Custom yarp2 configuration
 CMAKE_BUILD_TYPE Release
 CREATE_DEVICE_LIBRARY_MODULES ON
 CREATE_GUIS ON // probably not needed
 CREATE_LIB_MATH ON
 CREATE_YARPSERVER3 ON
 ENABLE_yarpmod_portaudio ON
 ENABLE_yarpmod_serial
 ENABLE_yarpmod_serialport
  • Custom iCub configuration
 BUILD_TESTING ON
 CMAKE_BUILD_TYPE Release
 ENABLE_icubmod_canmotioncontrol ON
 ENABLE_icubmod_cartesiancontrollerclient ON // not needed! this is for the servers
 ENABLE_icubmod_cartesiancontrollerserver ON
 ENABLE_icubmod_cfw2can ON
 ENABLE_icubmod_dragonfly2 ON
 ENABLE_icubmod_icubarmcalibrator ON
 ENABLE_icubmod_icubhandcalibrator ON
 ENABLE_icubmod_icubheadcalibrator ON
 ENABLE_icubmod_icublegscalibrator ON
 ENABLE_icubmod_logpolarclient ON
 ENABLE_icubmod_logpolargrabber ON
 ENABLE_icubmod_pcan ON // for the old head, now called iCubLisboa02
 ENABLE_icubmod_xsensmtx ON

Additional RobotCub software

iCub: downloading the repository

In /home/icub, do:

 cvs -d vislab@cvs.robotcub.org:/cvsroot/robotcub co iCub

For now, don't compile iCub but start installing YARP instead.

YARP

Type this from our homedir:

  cvs -d:pserver:anonymous@yarp0.cvs.sourceforge.net:/cvsroot/yarp0 login
  cvs -z3 -d:pserver:anonymous@yarp0.cvs.sourceforge.net:/cvsroot/yarp0 co -P yarp2
  cd yarp2

Enter yarp2/conf and do:

  cp ExternalModules.cmake.template ExternalModules.cmake

then write the following lines in ExternalModules.cmake:

  SET(EXTERNAL_MODULES icub)
  SET(icub_DIR "/home/icub/iCub/src/modules")

We now have to install two FireWire IEEE-1394 libraries needed by dragonfly and dragonfly2: libraw1394 and libdc1394. Rather than installing the Ubuntu packages, we compile them manually. Do these two sequences of commands from icub's home dir (pay attention: ./configure has a --prefix option). First libraw1394:

  wget http://www.linux1394.org/dl/libraw1394-2.0.2.tar.gz <-- or a newer version from  http://www.linux1394.org/
  tar xzvf libraw1394-2.0.2.tar.gz
  cd libraw1394-2.0.2/
  ./configure --prefix=/usr
  make
  sudo make install

As for libdc1394, we follow the instructions in $ICUB_DIR/src/modules/dragonfly2/linux/readme.txt:

  wget http://downloads.sourceforge.net/libdc1394/libdc1394-2.1.0.tar.gz?modtime=1200479950&big_mirror=0
  tar xzvf libdc1394-2.1.0.tar.gz
  cd libdc1394-2.1.0/

followed by

  ./configure --prefix=/usr

which must say

  Configuration (libdc1394):
  libraw1394 support (Linux legacy):  Enabled <-- required by yarpdev. If you obtain 'Disabled', check the libraw1394 installation
  Juju support (Linux new):           Enabled
  Mac OS X support:                   Disabled (Mac OS not detected)
  Windows support:                    Disabled (Windows not detected)
  IIDC-over-USB support:              Disabled (libusb-1.0 not found)

then, finally,

  make
  sudo make install

Note: by default, in Ubuntu, only the administrator has access to the FireWire camera device files in /dev. So we need to manually add user icub into the video and disk groups:

  sudo usermod -a -G video icub
  sudo usermod -a -G disk icub

TODO: fix libdc1394 (yarpdev is giving "Can't set DC1394_CAPTURE_FLAGS_DEFAULT", both with dragonfly and dragonfly2) TODO: fix the following modules -> lib_plxapi (Canbus)

Now

  ccmake .

In CMake, type 'c' (whenever necessary) and turn on the following modules only:

  CREATE_DEVICE_LIBRARY_MODULES
  CREATE_LIB_MATH
  ENABLE_icubmod_canmotioncontro
  ENABLE_icubmod_dragonfly2
  ENABLE_icubmod_icubarmcalibrat
  ENABLE_icubmod_icubheadcalibra
  ENABLE_icubmod_icublegscalibra
  ENABLE_icubmod_pcan
  ENABLE_icubmod_xsensmtx
  ENABLE_yarpmod_serial
  ENABLE_yarpmod_serialport
  MERGE_DEVICE_LIBRARY_MODULES

iCub: compiling and installing

Enter iCub/ and do:

 ccmake .
 c

Enable these modules only:

 BUILD_IN_ROOT

(to be completed)