keimlab’s diary

KEIMLABの電気・電子・制御の開発備忘録と日常生活記録

Raspberry Pi にRaspbian環境でROSをインストール

目次

はじめに

オープンソースで開発が進められているROS(Robot Operating System)がロボット製作に便利であるという情報を聞きつけ、試してみたくなった&勉強したいので、自宅RaspberryPiにインストールしてみます。

環境

・ボード : Raspberry Pi 3 Model B Rev 1.2
・SDカード : 32GB
・OS : Raspbian GNU/Linux 10 (buster)
・日本語環境にてセットアップ
Raspberry Pi専用の7inchタッチパネル搭載 ※ただし、SSH接続で遠隔操作しているため、あまり関係なし

インストール手順

前準備

1. dirmngrをインストールする(リポジトリにアクセスするために必要?)

sudo apt-get install dirmngr

2.ROSリポジトリのセットアップ

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3.Bootstrapの依存関係を解消するために必要なパッケージをインストール

sudo apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake

4.rosdepの初期化を行う

sudo rosdep init
rosdep update

ROSセットアップ

1.catkin ワークスペースを作成する

mkdir -p ~/ros_catkin_ws
cd ~/ros_catkin_ws

2.ROSインストールに必要なパッケージを集める

rosinstall_generator ros_comm --rosdistro kinetic --deps --wet-only --tar > kinetic-ros_comm-wet.rosinstall
wstool init src kinetic-ros_comm-wet.rosinstall

3.collada_urdfの代わりにassimpを入れる(?)

mkdir -p ~/ros_catkin_ws/external_src
cd ~/ros_catkin_ws/external_src
wget http://sourceforge.net/projects/assimp/files/assimp-3.1/assimp-3.1.1_no_test_models.zip/download -O assimp-3.1.1_no_test_models.zip
unzip assimp-3.1.1_no_test_models.zip
cd assimp-3.1.1
cmake .
make
sudo make install

※makeにまぁまぁ時間が掛かるので待つ(30分くらい?)

4.rosdepで依存関係を解消する

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

5.catkinワークスペースをビルドする

sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic -j2

※ビルドしている最中にメモリ不足でエラーが出て止まるらしいので、"-j2"オプションを入れておく。

6.以下のようなエラーが出てしまった...

make[2]: *** [CMakeFiles/rospack.dir/build.make:76: CMakeFiles/rospack.dir/src/rospack_backcompat.cpp.o] Error 1
/home/pi/ros_catkin_ws/src/rospack/src/utils.cpp:31:10: fatal error: boost/tr1/unordered_set.hpp: No such file or directory
#include <boost/tr1/unordered_set.hpp>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/rospack.dir/build.make:102: CMakeFiles/rospack.dir/src/utils.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:371: CMakeFiles/rospack.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
<== Failed to process package 'rospack':
Command '['/opt/ros/kinetic/env.sh', 'make', '-j4', '-l4']' returned non-zero exit status 2

Reproduce this error by running:
==> cd /home/pi/ros_catkin_ws/build_isolated/rospack && /opt/ros/kinetic/env.sh make -j4 -l4

Command failed, exiting.

どうもrospackというのはboostというライブラリに依存しているようで、boost1.58のバージョンが必要らしい。使用していたRaspbian(Buster)では、boost1.67だったので、互換性なくmakeが通らなかった模様。ros wikiに書かれているとおり、

sudo apt remove libboost1.67-dev
sudo apt autoremove
sudo apt install -y libboost1.58-dev libboost1.58-all-dev
sudo apt install -y g++-5 gcc-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 20
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++
sudo apt install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake

7.再度ビルドする

sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic -j2

これでエラーを吐くことなく、終了することができました。

動作確認

1.起動時にROSのセットアップが走るように設定

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

2.以下のコマンドでroscoreを動かしてみます。

roscore

これで以下のような表示がされれば、ROSが正常にインストールされています。
ここまでお付き合いいただきありがとうございます。お疲れ様でした。

... logging to /home/pi/.ros/log/da6fa3ac-8a2b-11ea-a636-b827eb1690ee/roslaunch-raspberrypi-19512.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:46695/
ros_comm version 1.12.14


SUMMARY
========

PARAMETERS
 * /rosdistro: kinetic
 * /rosversion: 1.12.14

NODES

auto-starting new master
process[master]: started with pid [19522]
ROS_MASTER_URI=http://raspberrypi:11311/

setting /run_id to da6fa3ac-8a2b-11ea-a636-b827eb1690ee
process[rosout-1]: started with pid [19535]
started core service [/rosout]

失敗事項

Desktop版を入れようとしたところ、OpenCVのmakeに失敗をしているようで、以下のようなエラーが出て、先に進めず。 自力では解決負荷だったため、Desktop版を諦め、ROS-Comm版を入れることに...残念。 

おわりに

まずは、ROSを試験する土台を立てることができました。これからはROSでのアプリケーション作成をやってみます。

感想

久しぶりにLinuxでのロボットを動かす環境の構築をやってみて、大学・大学院時代のRTAIのセットアップに苦労していた頃を思い出しました。Webサイトで掲載されている日本語情報を頼りにしても、想定外のエラーが出てしまうことがあり、結局は、公式サイトの英語記事を読みながら進めていって、何とか、インストールすることができました。海外サイトの英語と格闘しながら進めていくのには、粘り強い忍耐が必要ですね。もっとさらっと進められるだけのスキルがあればよいのですが、まだまだ力及ばずのところばかりです。

参考サイト

wiki.ros.org