[Documentation] [TitleIndex] [WordIndex

For ROS diamondback on Natty click here.

ROS on Gumstix Overo with Ubuntu Lucid

This howto summarizes the process of compiling ROS for Ubuntu on the Gumstix. ROS is natively compiled on the Gumstix and all dependencies are installed as Ubuntu packages.

This is a straight forward solution and doesn't involve the process of cross-compilation. The only drawback is that the native compilation takes some time.

We use the Overo COM with a Tobi expansion board which is hooked up to the internet via Ethernet.

Setting up Ubuntu Lucid on Gumstix + ROS Dependencies

Ubuntu provides a tool to generate a rootfs for arm based systems. This will be used here to set up a lucid rootfs. We assume that you have already set up the Gumstix and prepared an SD card holding a FAT partition with a recent u-boot, MLO and the 2.6.34 kernel (see Gumstix documentation) as well as the ext3 partition where the Ubuntu image will go.

Generating image

The next steps are done on a regular computer running Ubuntu (must be Lucid = Ubuntu 10.04 - newer version probably work). First, install rootstock

sudo aptitude install rootstock

Second, Rootstock is used to build the rootfs image for the arm system. With "--seed" option you can specify additional packages to install into rootfs. This is used here to add the ros dependencies.

sudo rootstock --fqdn overo --login ubuntu --password 123 --imagesize 2G --seed openssh-server,vim,build-essential,python-yaml,cmake,subversion,wget,python-setuptools,pkg-config,python-dev,ntp,libboost-dev,libboost-all-dev,libapr1,libapr1-dev,libaprutil1,libaprutil1-dev,liblog4cxx10,liblog4cxx10-dev

If a very small image is wanted, build rootfs without "--seed" option. Rosdep can later be used to install anything necessary to build ROS once Ubuntu is running on the Gumstix.

If you wish to login through serial terminal add "--serial ttyS2". For connecting to wireless with Overo Air you should add "wireless-tools" and "wpasupplicant" to seed string. You will also need to install modules compiled for relavent kernel and obtain copies of the Marvel libertas_sdio wireless firmware binaries. See Here for firmware binaries and wifi connection info.

Rootstock now fetches packages, builds your image and installs dependencies (uses debootstrap and qemu).

Deploying image

When the rootfs is finished, extract the tarball to ext3 partition on SD card of Gumstix.

Boot the Gumstix, login with user and pw specified before. Set up Ethernet connection to Internet. Set up system as needed (sshd, user, ...).

Getting and compiling ROS

Prepare build an get ROS

From now on work as root on the Gumstix or use sudo.

Make folders for ros (do not move the ros root folder after compilation, this breaks paths of linked libraries e.g. rospack)

mkdir -p /opt/ros/cturtle/ros

Checkout ros cturtle

svn co https://code.ros.org/svn/ros/stacks/ros/tags/cturtle /opt/ros/cturtle/ros

Create setup.sh as usual and source

. setup.sh

Prevent build of rxtools which we will never use on Gumstix

touch /opt/ros/cturtle/ros/tools/rxtools/ROS_NOBUILD

If you want to exclude stuff from build add ROS_NOBUILD where needed.

Compile

Go to ros main folder and start compilations of ros (takes ~ 2-3h)

roscd
time rosmake

Once everything is build you are ready to use ROS. Everything works as usual.

Finalize installation

After initial compilation put ROS_NOBUILD in every folder that has been build. You need to delete all of them if you update ros and want to rebuild ROS. In that case don't forget to add ROS_NOBUILD to rxtools again...

Check first where ROS_NOBUILD will be added

cd /opt/ros/cturtle/ros && find | grep CMakeCache.txt$ | sed -e "s+build/CMakeCache.txt+ROS_NOBUILD+g"

then create ROS_NOBUILD files in all folder where “build/CMakeCache.txt” is present → thus package was build

cd /opt/ros/cturtle/ros && find | grep CMakeCache.txt$ | sed -e "s+build/CMakeCache.txt+ROS_NOBUILD+g" | xargs touch

Some packages will have throw SIGILL during serialization. (eg. imu_node) This can be fixed by adding -msoft-float to build flags. This is obviously not ideal as you lose the hardware floating point processor (if it has it). However, this issue hasn't entirely been fixed yet - see here for some details.


2024-11-16 14:38