Building ROS on Nokia N900 mobile phone
Contents
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://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 ?......