sabo laboratory

備忘録的な技術系ブログです。組み込み、ガジェットなどなどについて書いていきます。

Raspberry Pi にUbuntuを入れてROSを動かす

Raspberry Pi 2

ラズベリーパイ2が(とっくに前だが)ついに出た! 今回はかなりパワーアップして、さらにWindows10とUbuntuに公式に対応するとのことで、ぜひとも試してみたい! なにに使うのかという問題はさておいて・・・

Raspberry Pi2 Model B ボード&ケースセット (Standard, Clear)-Physical Computing Lab

まあ、ともあれ、Ubuntuが入るとなると、今まで慣れ親しんだことがいろいろできそう。 今回はラズパイにUbuntu14.04を入れて、何かと話題?なROS(Robot Operation System)を入れてみようと思う。 ROSについては、以下を参照。 ROSがラズパイサイズのコンピュータで動くとなれば、ロボットの可能性が大きく広がる!

Ubuntu 14.04

ラズパイへのUbuntuのインストール方法については、英語だが公式で解説がされているので、基本的にその記述に則ってやっていけば問題ない。 Qiitaにも投稿があったので、そちらも併用して参考にすれば、すんなりインストールできるだろう。

イメージをダウンロードしたあとは、下記サイトのようなSDカードへの書き込みソフトを利用して、データを書き込む。

そのあとは、Ubuntuの公式サイトの”Usage”の部分にしたがって進めていけば良い。

多少気をつける部分として、ユーザー名とパスワードは初期状態では下記のようになっている。

user:ubuntu
password:ubuntu

また、”Usage”の一番最初のコマンドのあとには、一度再起動しておいたほうが、無難だろう。

sudo fdisk /dev/mmcblk0
#一度再起動させる
sudo reboot

sudo resize2fs /dev/mmcblk0p2
sudo apt-get install linux-firmware

Ubuntuのデスクトップ環境(Xubuntu、Lubuntu、Kubuntu)については、もちろん個人の好みで構わないが、私の場合はLubuntuを選択した。 それぞれの違いにつては、下記サイトを参考のこと。

GLXエラー

Ubuntuを動かしていると途中でGLXエラーに遭遇した。 正確に言えば、この後のROSを動かしている途中で遭遇したが、対処はUbuntu導入直後にしておいたほうが良さそうなので、ここに記述。 エラーの内容については、以下のサイトと同じようなもの。

OpenGLの動作を確かめるために、glxinfoコマンドを実行してもエラーでる。

$ glxinfo
name of display: :0
Xlib:  extension "GLX" missing on display ":0".
Xlib:  extension "GLX" missing on display ":0".

対策のために、xserver-orgを再インストールする。

下記コマンドを実行。

sudo apt-get install xserver-xorg-video-fbturbo

ただ、このコマンド、よくよく見てみると、最初のUbuntuの公式インストールガイドにもちゃんと載っていたコマンドで、 今回のエラーについては、私が単純に手順をすっ飛ばしていたことが原因っぽい・・・。

なにはともあれ、これでUbuntuの動作環境は整った。

ROSのインストール

ROSも公式でラズパイ2の動作を確認している。インストールについては下記サイトを参照のこと。

上記のサイトはARMマイコン向けのROSインストール方法なのだが、私はこのことを知らなくて、普通にUbuntu向けのインストール手順を踏んだ。 標準Ubuntu向けのインストール手順は以下の通り。

それでも問題なく動いている。ARM向けでは、最小限の構成でインストールしてくれるみたいだが、SDカードが16GB以上あれば、フルパッケージでもへっちゃらだと思う。

とりあえず、これでラズパイでROSを動かすことができた。 ROSはノードと呼ばれる、アプリケーションの塊を、お互いにデータを通信させることで、複雑な動作を実現している。

この構成のおかげで、特定のノードを別のハードウェア上で動かしていても、通信さえできれば、全体を動作させることができる。

つまり、複数のラズパイを組み合わせることで、スパコンのような構成で、アプリケーションを動作させることも可能である。

次にやることリスト

ラズベリーパイでのUbuntu、ROSの動作が確認できたので、以下のことをやっていきたい。

  • PTAMの動作テスト
  • その他VisualSlamの動作テスト(ORB-SLAM)
  • ROSを利用したモータ制御
  • 旧ラズパイにもROSを導入(RaspbianOS上でもROSを動かす)
  • ラズパイ2つでROSのノード通信機能を使って負荷分散&協調制御

といっても、実は上二つはすでに動作を確認済み。 ただし、実時間で動かくことはやはりかなり厳しそう・・・。 VisualSlamがラズパイ上で動くなら、ロボットへの応用の幅がかなり広がるかなーと思っていたが。。。 まだまだ厳しそう。