2021年初にROS(Melodic)を初代ラズパイ(Stretch)でも動かしてみた


はじめに

ARM11ベースのRaspberry Piは、Zeroシリーズとして今も健在で、かつ、ROSのインストールの成功事例が既にいくつも報告されています。1 

Zeroシリーズで動くならRaspberry Pi Model B (初代ラズパイ)モデルでも動かせるのではないかと思いネット上の記事を探したのですが、こちらはあまり報告例が見当たりません。単に、機材が古すぎるからでしょうが・・・

そこで、Zeroの事例を参考に自分でも実際にやってみたところ、少し設定を変更すれば初代ラズパイでもROSのコアをインストール/動作をさせることができました。2021年になってすでに過去の産物扱いの初代ラズパイですが、家に転がして飾っておくだけなのはもったいないという方のために、作業の備忘録を兼ねて、自分で実際に行ったインストール手順を簡単にご紹介します。

(追記 2021/1/5)誤字脱字、launch.pyのファイルフォルダ表記漏れ等を修正しました。

ROS入りRaspberry Pi Zero用OSイメージのダウンロード

手っ取り早くStretch + Melodicを試したい方には、すでにRaspberry Pi Zero用にRaspbian StretchにROS MelodicをインストールしたOSのイメージファイルを配布している方がいらっしゃいますので、まずは以下の記事をご確認ください。
Installing ROS Melodic on Raspbian Stretch

(2021/1/12追記)
ダウンロードしたイメージでupdateを行うと、こちらでもROSの認証エラーが発生しますので、認証キーの再取得をしてください。やり方は、後述と同じです。

$ sudo apt-key del F42ED6FEAB17C654
$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

初代ラズパイ向けの修正

上記サイトからダウンロードしたZIPイメージを4GB以上のSDカードに焼いて初代ラズパイを起動すれば、すんなりとRaspbianが立ち上がります。単純なROSノードを起動させるだけであればこれでも使用できます。ただし、ROSCOREは、Zeroなら起動したのですが、初代ラズパイでは起動する途中でプロセスがダウンしてしまいました。

実際に発生した現象は、こちらの報告事例と同じです。パイソンがROSCOREの立ち上がりを待ちきれずにタイムアウトしてしまうために発生しました。

解決方法は、こちらの記事こちらの記事を参考にしました。具体的な作業を次に示します。

$ sudo nano /opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/launch.py

#_TIMEOUT_MASTER_START = 10.0 #seconds   ###コメントアウト
_TIMEOUT_MASTER_START = 100.0 #seconds   ###追加

あと、こちらの記事を参考にして、スワップファイルのサイズも元に戻しておきました。

$ sudo nano /etc/dphys–swapfile

CONF_SWAPSIZE=100       ###追加
# CONF_SWAPSIZE=1024    ###コメントアウト

ファイルを保存して、スワップサイズの変更を有効にします。

$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
$ free -m

以上で、初代ラズパイでROS(Melodic)のコア部分(ROS Core)がインストールした環境が入手できます。

さらに、衝動が抑えきれない方のために・・・

ROSを使用するのに、上記のような方法で環境を入手するのは、ubuntuapt-getROSをインストールするのと実質的な違いはないとも思いますが、どうせなら、自分でも一通りの手順を踏んでみたいという好奇心旺盛な方のために、冒頭でご紹介したサイトで紹介されているインストール手順を進める上で変更が必要だった手順やコマンドをいくつかご紹介します。

これは、思いのほか重要な情報で、特に強調したい点です。ROS.orgのステップ・バイ・ステップの手順通りにやっても記事が古いためか必ず失敗します。途中で作業が失敗した場合の原因を考えるうえでも有益な情報で、インストールの最後までたどり着くための羅針盤のようなものでした。ソフトウェアごとのバージョンの組み合わせについての知識なしに作業をするのは無謀であると同時に時間の無駄だと痛感しました。

  • 作業は、全体でほぼ半日以上かかります。特にrosdepの初期化(Initializing rosdep)作業だけで数時間かかりました。時間には、十分に余裕があるときに行いましょう。(追加の注意点は後述します。)
  • スワップメモリの拡張(100→1024)は、OSを最初に起動した際にやっておいても作業中のトラブルはありませんでした。インストール作業完了後には、元に戻しておきました。
  • 初回起動時のraspi-configでは、SSHだけを使えるようにしました。Windows PCからSSHで接続すれば、画面のコピペで作業できますので作業効率が上がります。
  • オーバークロックは今回は使用しませんでした。その他OSの初期設定は、できるだけ変更せず、ロケールや言語、キーボード配列も変えないようにしました。

  • SDカードは、8GBMicro SDを利用しました。2

rosdepの初期化作業前の追加作業

一番時間のかかる作業で途中でエラーが起きるとやり直すのが大変です。以下の作業を事前に加えて、コマンドも以下のように少し変更してみてください。

$ sudo apt-key del F42ED6FEAB17C654
$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
$ rosdep install --from-paths src --ignore-src --rosdistro melodic -y --skip-keys-"python-pycryptodome" --os=debian:stretch

最初の二つのコマンドは、認証キーのエラー対策です。以下の記事を参考にさせていただきました。
ROS melodicインストール時のキーエラー (NO_PUBKEY F42ED6FBAB17C654)

python-pycryptodomeは、Melodicで使用されていますがStretchのdebには標準搭載されていないようです。pipでインストールする方法もあるようですが、私は、以下のROS Answerの記事を参考にして、プロセスをスキップさせました。
Pycryptodome

おわりに

実は、このテーマは、2020年にさんざん時間をかけて調べたり試したりしたものの、うまくいかなかった「道楽」の一つです。やっぱり、他人の書いた手順や実験結果だけをうのみにして、よく内容を理解せずに作業をしていたのが失敗の原因でした。ですので、REP 3のような「仕様」にかかわる情報の存在を知らずにいたのに、たまたまネット検索で偶然見つけられたのは幸運であるとともに、昨年までのやり方を大いに反省しました。


  1. ROS(melodic)をRaspberry Pi + Raspbian(stretch)にインストールする方法 

  2. ひと昔では信じられないほど新品が安く(税込みで350円くらい)入手できました。個人的な意見ですが、OSの実験ではSDカードのドライブの削除やパティションの再構築をしてフル・フォーマットをやり直したりするので、時間の節約のためにも、メモリカードはできるだけ小さいものを使用しています。