Raspberry pi model B(Raspbian wheezy版)にROS indigoをインストールする

この記事はRaspbian wheezy用のROS indigoビルドについて書いている。jessie用については別記事を参照のこと。

Raspberry piにROS/indigoをインストールする。現時点でRaspberry pi用のROSのバイナリパッケージは提供されていないようなので、直接ビルドしていくことになる。手順の概要は以下の通り。

  1. Raspbianをインストールする。
  2. ROSビルドの設定を行う。
  3. ROS本体をビルドする。

Raspbianのインストール

まず、Raspberry piのダウンロードページからNOOBSのZIPファイルをダウンロードする。
ダウンロードするしたZIPファイルを適当なフォルダに展開し、FATフォーマットされたSDカードにコピーする。
Raspberry piを適切にセットアップし、インターネット接続できるようにネットワークケーブルを接続したあと、NOOBSをコピーしたSDカードを挿入して起動する。
起動後の画面で日本語を選び、Raspbianのインストールを選んでインストールを始める。
このあたりの手順は、Raspberry piのセットアップページを参照する。
一般的なサイトで紹介している設定を済ませておくと良いだろう。

ROSビルドの設定

この手順はROSのページを参考にしている。要は忠実に一つずつこなしていくことだ。
2016/06/13追記
この記事はRaspberry piのOSであるRaspbianのバージョンがwheezyの頃の内容である。現時点でのRaspbianはjessieになるので、インストールするパッケージは異なる。この場合は別記事を参照してほしい。
なお、自分のRasperry piがどのバージョンのRaspbianで動作しているかどうかは、以下のコマンドで確認できる。

$ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 8.0 (jessie)
Release:	8.0
Codename:	jessie
$ 

Codenameの行に動作中のバージョンが表示される。
2016/06/13追記終了

リポジトリの設定と更新

ROSのリポジトリを設定し、認証キーを追加する。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu wheezy main" > /etc/apt/sources.list.d/ros-latest.list'
wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -

aptのパッケージインデックスを更新する。

sudo apt-get update
sudo apt-get upgrade

ビルド用パッケージのインストール

ビルドに必要なパッケージをインストールする。

sudo apt-get install python-setuptools python-pip python-yaml python-argparse python-distribute python-docutils python-dateutil python-setuptools python-six
sudo pip install rosdep rosinstall_generator wstool rosinstall

rosdepを初期化する。

sudo rosdep init
rosdep update

catkinのワークスペースを作成する。

mkdir ~/ros_catkin_ws
cd ~/ros_catkin_ws

Variantの選択

ここで、ROSのどんなパッケージをビルドするかを選ぶことになる。推奨されているvariantのはros_commだが、他にdesktopやrobotなどがある。目的に応じて好きなものを選べばよい。variantはREP 131のページで紹介されている。
適当なvariantを選んだら、以下のようなコマンドでインストールの設定を行う。なお、下はros_comm用のコマンドなので、選んだvariantに応じてros_commの部分(3カ所ある)をvariantの名前で置き換えて実行する。

rosinstall_generator ros_comm --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-ros_comm-wet.rosinstall
wstool init src indigo-ros_comm-wet.rosinstall

なお、Collada DOMが不要ならば以下のように –excludeの後ろに collada_parser と collada_urdf を追加する。

rosinstall_generator ros_comm --rosdistro indigo --deps --wet-only --exclude roslisp collada_parser collada_urdf --tar > indigo-ros_comm-wet.rosinstall
wstool init src indigo-ros_comm-wet.rosinstall

この時点で選んだvariantを間違えてしまった場合は、srcフォルダを削除して上のコマンドをやりなおせば良い。

必要なパッケージのインストール

ROSのビルドに必要だが、Raspbianではstableになっていないパッケージをそれぞれビルドしておく。まずは、その準備を行う。

sudo apt-get install checkinstall cmake
sudo sh -c 'echo "deb-src http://mirrordirector.raspbian.org/raspbian/ testing main contrib non-free rpi" >> /etc/apt/sources.list'
sudo apt-get update

libconsole-bridge-dev,liblz4-dev,liburdfdom-headers-devをインストールする。

mkdir ~/ros_catkin_ws/external_src
cd ~/ros_catkin_ws/external_src
sudo apt-get build-dep console-bridge
apt-get source -b console-bridge
sudo dpkg -i libconsole-bridge0.2_*.deb libconsole-bridge-dev_*.deb
apt-get source -b lz4
sudo dpkg -i liblz4-*.deb
git clone https://github.com/ros/urdfdom_headers.git
cd urdfdom_headers
cmake .
sudo checkinstall make install

最後のcheckinstallを行うと、以下のような設定が現れる。

0 -  Maintainer: [ root@raspberrypi ]
1 -  Summary: [ Package created with checkinstall 1.6.2 ]
2 -  Name:    [ urdfdom-headers ]
3 -  Version: [ 20150804 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ armhf ]
8 -  Source location: [ urdfdom_headers ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ urdfdom-headers ]
12 - Conflicts: [  ]
13 - Replaces: [  ]
Enter a number to change any of them or press ENTER to continue:

2番のNameをurdfdom_headersからliburdfdom-headers-devに変更する必要があるので、2 を入力してEnterを押し、次に liburdfdom-headers-dev と入力する。再度確認の設定が表示されたらそのまま Enter を押して続ける。

cd ..
sudo apt-get install libboost-test-dev libtinyxml-dev
git clone https://github.com/ros/urdfdom.git
cd urdfdom
cmake .
sudo checkinstall make install

最後のcheckinstallを行うと、以下のような設定が現れる。

0 -  Maintainer: [ root@raspberrypi ]
1 -  Summary: [ Package created with checkinstall 1.6.2 ]
2 -  Name:    [ urdfdom ]
3 -  Version: [ 20150804 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ armhf ]
8 -  Source location: [ urdfdom ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ urdfdom ]
12 - Conflicts: [  ]
13 - Replaces: [  ]
Enter a number to change any of them or press ENTER to continue:

2番のNameをurdfdomからliburdfdom-devに変更する必要があるので、2 を入力してEnterを押し、次に liburdfdom-dev と入力する。再度確認の設定が表示されたらそのまま Enter を押して続ける。

Collada DOMのインストール

variantsの選択時に Collada DOM を除外していなければ、以下を実行する。

cd ~/ros_catkin_ws/external_src
sudo apt-get install libboost-filesystem-dev libxml2-dev
wget http://downloads.sourceforge.net/project/collada-dom/Collada%20DOM/Collada%20DOM%202.4/collada-dom-2.4.0.tgz
tar -xzf collada-dom-2.4.0.tgz
cd collada-dom-2.4.0
cmake .
sudo checkinstall make install

checkinstallを行うと、以下のような設定が現れる。

0 -  Maintainer: [ root@raspberrypi ]
1 -  Summary: [ Package created with checkinstall 1.6.2 ]
2 -  Name:    [ collada-dom ]
3 -  Version: [ 2.4.0 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ checkinstall ]
7 -  Architecture: [ armhf ]
8 -  Source location: [ collada-dom-2.4.0 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ collada-dom ]
12 - Conflicts: [  ]
13 - Replaces: [  ]
Enter a number to change any of them or press ENTER to continue:

2番のNameをcollada-domからcollada-dom-devに変更する必要があるので、2 を入力してEnterを押し、次に collada-dom-dev と入力する。再度確認の設定が表示されたらそのまま Enter を押して続ける。

collada_urdfへのパッチ

Collada DOMをインストールした場合、以下のようにcollada_urdfへパッチを当てる必要がある。
Google Groupのエントリに添付されているパッチファイル(0001-fixed-arm-build.patch)をダウンロードし、ホームディレクトリにコピーしておく。
以下を入力してパッチを当てる。

cd ~/ros_catkin_ws/src/robot_model/collada_urdf/
patch -p1 < ~/0001-fixed-arm-build.patch

依存関係の解決

rosdepを実行して依存関係を解決する。

cd ~/ros_catkin_ws
rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:wheezy

上記を実行すると、python-rosdep, python-catkin-pkg, python-rospkg, python-rosdistro, sbclがない旨のエラーメッセージが表示されるが、これらはpip経由でインストールしているので無視してよい。

ROS本体のビルド

後は以下を入力して本体をビルドする。

cd ~/ros_catkin_ws
sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo

終わるまでひたすら待つしかない。SSH経由だとタイムアウトする可能性があるのでタイムアウトしないように設定するかコンソール経由でビルドする。

動作確認

.bashrcで初期化スクリプトを実行するようにする。

echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc

roscoreを起動する。

roscore
... logging to /home/pi/.ros/log/9781754e-3a9d-11e5-8b98-b827ebe98f3c/roslaunch-raspberrypi-11718.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://raspberrypi:42226/
ros_comm version 1.11.13
SUMMARY
========
PARAMETERS
 * /rosdistro: indigo
 * /rosversion: 1.11.13
NODES
auto-starting new master
process[master]: started with pid [11735]
ROS_MASTER_URI=http://raspberrypi:11311/
setting /run_id to 9781754e-3a9d-11e5-8b98-b827ebe98f3c
process[rosout-1]: started with pid [11748]
started core service [/rosout]

Ctrl-Zを押してプロセスを止め、プロンプトでbgを入力してバックグラウンド動作させる。

bg

トピックの一覧を表示させる。

rostopic list
/rosout
/rosout_agg

おそらく正常動作しているだろう。fgを入力した後、Ctrl-Cでroscoreの動作を止める。

fg
roscore
^C[rosout-1] killing on exit
[master] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
done

ここまでくるのにかなりの日数を要してしまった…