Building ROS on Nokia N900 mobile phone

This page describes how to install and build ROS on Nokia N900 mobile phone. N900 is a Linux-based phone, running a Debian distribution called Maemo 5. It allows Wifi and Bluetooth connections, can act as a USB host and has several sensors. This can make N900 a nice target for ROS...

Disclaimer

As always, tinkering with such a device can cause damages and harm your device. You may run out of space, potentially brick your device, etc... I'm not responsible for any of these, you've been warned.

Pre-requisites

In order to install ROS:

  • several dependencies have to be first installed. As of July 5th 2010, they are available from Maemo 5 extra-devel repository, so you'll have to enable it.

  • you will also need enough disk space to install ROS (~ 500MB), using a MMC card can be a good idea though usually very slow. You can also use "/opt" partition, which is not a fast memory partition but faster than an external memory card
  • finally, you'll need root privileges.

Preparing disk space

As previously stated, ROS requires approx. 500MB disk space. You'll need a "real" Linux partition for this, don't use a FAT32 one. N900 provides a lot of partitions, but the biggest one is FAT32. If you decide to use an external MMC memory card, format it as an ext3 partition (use dmesg in order to find out which device represents your MMC card, mine appears as /dev/mmcblk1):

# as root
mkfs.ext3 /dev/mmcblk1
mkdir /media/mmc1
mount /dev/mmcblk1p1 /media/mmc1
chown -R user:users /media/mmc1
 mount

Installing dependencies

Note: cross-compiling and installing dependencies was a long trial-and-error process, I hope I didn't forget any of them here...

In order to run rosinstall script and compile ROS, you'll need to install deb packages. Some already existed by the time I started this installation, others had to be built (cross-compiled). The ones I built are optified, this means they install in /opt and symlinks from / are created. This allows to preserve rootfs space, which is very small on N900 (256MB).

# as root:
# existing dependencies
apt-get install cmake make gcc g++ libc6-dev lsb-release pkg-config zlib1g-dev libx11-6 uuid-dev
# dependencies built for ROS (optified)
apt-get install libyaml python-yaml libapr1 libapr1-dev libaprutil1 libaprutil1-dev apache-log4cxx apache-log4cxx-dev libboost libboost-dev [[http://essaysexperts.com/|buy research paper]]

Once installed, several manual adjustments are needed to properly compile ROS:

# as root:
# libX11.so must be reachable
ln -s /usr/lib/libX11.so.6 /usr/lib/libX11.so

Installing ROS from ros-n900 APT repository

ros-n900 repository can be reached by configuring a new APT source. Follow instructions detailed here http://code.google.com/p/ros-n900/wiki/APTRepository

Installing ROS sources

Important: This installation tutorial was written using boxturtle_base.rosinstall.

First install subversion 1.6 on N900 (don't install subsverion_1.4):

# as root
apt-get install subversion

then follow usual instructions which can be found here. Use a Wifi connection to save money in your dataplan...

Compiling ROS

Everything should be ready to compile ROS. We'll avoid compiling rxtools. Why ? Because there's too much unmatched dependencies :) and because I doubt it's useful to have it on the device.

# as user:
roscd rxtools
touch ROS_NOBUILD

Then power your device, make sure no one will call you, and start compiling ROS:

roscd
rosmake -i

65 packages should be compiled (except rxtools). Don't warry about dependency warnings rosdep keeps giving. This is because rosdep can't match them on this device.

Installing and compiling ROS tutorials

Tutorials can be installed following standard installation instruction. You can also use ros-n900 repository and install tutorials from deb packages. They aren't compiled, so you can safely follow tutorials (and experience compilation time...)

Network configuration

This wiki page will help: http://www.ros.org/wiki/ROS/NetworkSetup.

N900, by default, won't reply to IMCP echo packet. If you want to check, make sure to enable IMCP packets:

# as root
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
ping 127.0.0.1 # this now should work

If you're using N900 connected to USB (usbnet), you may run into lots of troubles, due to network misconfiguration.

For example: if USB network instructions are followed, PC's IP will be 192.168.2.14 and N900's IP will be 192.168.2.15. Since 192.168.2.15 probably means nothing in term of hostname for N900, you'll need to use ROS_HOSTNAME.

export ROS_HOSTNAME=192.168.2.15 # you can put it in setup.sh
rosrun beginner_tutorials talker.py

Testing your ROS installation

  • run "roscore" on PC
  • run "rosrun turtlesim turtlesim_node" on PC
  • run "rosrun turtlesim draw_square" on N900

Do you see a tiny turtle drawing a square ?......

Wiki: N900ROS (last edited 2011-04-13 13:22:29 by PerryRodriguez)