Raspberry Pi 3にROSを入れたい!
以前Raspberry Pi 2にROS(Robot Operating System)を入れていました。ROSって何という人は下記記事を参照下さい。
ただ、Raspberry Pi 2だとROSが重いのと、Raspberry Pi Camera Moduleを使えなかった(使い方が分からなかった)のであまり活用できていませんでした。そんなおり、いよいよRaspberry Pi 3でROSをセットアップする方法がネットに色々出てきたので、チャレンジしてみることにしました。
例によって実際に手を動かすと色々ハマったり分かったことがあったので、まとめておきます。
Raspberry Pi 3とROSでこんなことができる
まずはROSでどんなことができるかを紹介します。例えばRaspberry Piの純正カメラを使えるraspicam_nodeというノード(ソフト)を使うと、以下の写真のようにRaspberry Piのカメラの映像を別のROSを動かしたPCで表示することができます。
他のROSのパッケージを入れれば、カメラ画像を使ってマーカ認識したり、顔検出等もできます。つまりRaspberry Piを簡単にロボットの目として使うことができます。もし、Raspberry Piにモータとタイヤをつけて動けるようにすれば、そのままRaspberry Piの自律ロボットをつくることもできそうですね。
必要なもの
Raspberry Pi関連
Raspberry Pi 3Raspberry Pi 3の付属品(SDカード、Micro SDカード、AC電源、その他開発に必要なもの)や基本的なセットアップに関しては、下記記事を参照してください。
Raspberry Piを無線で接続したい場合は、以下も必要です [asin:B00ESA34GA:detail] PLANEX GW-USNANO2A
カメラモジュール ケースPC関連
UbuntuのインストールされたPC(バーチャルマシンでもOK)
Raspberry Pi 3へのROSインストール方法
ここからはRaspberry Pi 3へのROSインストール方法の説明です。宇宙語が続くので興味のある方のみご覧下さい。
まずRaspberry Pi 3にROSをインストールする方法として、RaspbianベースにROSをインストールする方法と、UbuntuベースにROSをインストールする方法の2種類があります。結論から言うと、UbuntuベースにROSを入れた方が良いです。Raspberry Pi 3の内蔵WiFiが使えなくなる問題はありますが、普通のROS同様apt-get
でパッケージをインストールできるので楽です。純正カメラも設定すれば使えるようになります。
Raspbianベースの場合は、最初から純正カメラも内蔵WiFiが使えるのは良いのですが、パッケージを全部ソースからビルドする必要があります。ROSは結構パッケージの依存関係が複雑なことが多いので、これはかなり辛いです。自分にはcamera_node
のビルドすら通すことができませんでした…
一応RaspbianベースとUbuntuベース両方のセットアップ方法を記載しますが、特にこだわりが無ければUbuntuベースをオススメします。こんなセットアップやってられないYO!という人は、全てセットアップを実施したUbuntu+ROSのイメージファイルを用意してありますので、最後のイメージファイルだけダウンロードしてもらってもOKですw
ROSインストール(Raspbian)
Raspberry Pi 3のRaspbian上にROSをインストールするにあたっては、以下サイトをめちゃくちゃ参考にしました(ほぼそのまま)。
Raspbianセットアップ
Raspberry PiへのRaspbianの基本的なセットアップは、手前味噌ですが下記記事参照下さい。
上記から変更する必要があるのは、raspi-config
で下記の通り、Boot
設定をTo Desktop
からTo CLI
(コマンドライン)に変更するのと
言語設定を下記の通り英語にします
さらにキーボード設定を変更します。下記の通りコマンド実行して
$ sudo dpkg-reconfigure keyboard-configuration
下記の通り設定します。
Generic 105-key (Intl) PC → Japanese → Japanese → The default for the keyboard layout → No compose key
以下コマンドで再起動して設定を有効にします。
$ sudo shutdown -r now
RaspbianへのROSセットアップと動作確認
続いてROSのセットアップです。参考サイトの通りに実行していけばインストールできます。私は面倒くさがりなのでスクリプトにしてGitHubにアップしました。
以下の3行のコマンドうてば自動でROSがセットアップされます。
$ git clone https://github.com/karaage0703/raspberry-pi-setup
$ cd raspberry-pi-setup
$ ./setup-ros-indigo-raspbian.sh
以下実行して、エラーなく実行されればOKです。
$ roscore
止めたい場合はCtrl + C
を入力すればOK。
Raspbianに関してはここまで。
ROSインストール(Ubunutu)
Raspbian 3にUbuntu上にROSをインストールするに当たっては、以下サイトをめちゃめちゃ参考にしました(ほぼ全て)
Ubuntuセットアップ
まずは、Raspberry Piに通常のRaspbianではなく、UbuntuというLinuxをインストールする必要があります。ここから、ハードルが高くて、上記サイトを探していけば全てやり方は書いてあるのですが、正直Linuxの操作に慣れている人でないとハードルが高いと思います(説明が理解できないと思う)。
ただ、なんと上記サイトの方が作成したRaspbeery Pi用のUbuntu 14.04のイメージファイルを公開して下さっています。まさに神!ありがたく下記サイトからダウンロードさせていただきましょう。
Ubuntu on Raspberry Piイメージファイル
上記イメージファイルをダンロードしたら、後はRaspbianと同様の要領で、SDカードを作成するだけです。ここらへんのやり方は、以下記事を参考にして下さい(Raspbian Jessie SDディスク作成のところです)。
具体的な書き込みのコマンドはイメージファイルrp3ubuntu1404.dd
と同じフォルダに移動して、以下実行しました
$ sudo dd if=rp3ubuntu1404.dd of=/dev/rdisk2 bs=1m
ユーザー名、パスワード共にデフォルトはubuntu
です。
続いてRaspbianのときと同様、キーボード設定を変更します。下記の通りコマンド実行して
$ sudo dpkg-reconfigure keyboard-configuration
下記の通り設定します。
Generic 105-key (Intl) PC → Japanese → Japanese → The default for the keyboard layout → No compose key
Ubuntuネットワーク設定(有線)
そして、ネットワーク設定です。最初、何故か有線ネットワークを繋げてもeth0
を認識できず悩んでいたら、以下サイトに情報がありました。
以下実行して、再起動すればOKのようです。
$ sudo rm /etc/udev/rules.d/70-persistent-net.rules
これで有線のLANケーブルをRaspberry Piに繋げれば、インターネットに繋がります(既に有線LANでネットワーク接続ができている前提です)。以下の設定に関しては、インターネットへの接続ができている前提で説明しています。
Ubuntuネットワーク設定(無線)
無線の設定です。Raspberry Pi 3内蔵のWiFiは、例によってUbuntuでは認識してくれないので、USB WiFiモジュールを使うのがよいです。Ubuntuで内蔵WiFi使うのは不可能ではないみたいなので、興味あるかたは色々調べて見るとよいと思います。
最初に以下コマンドで設定ファイルを編集します
$ sudo vi /etc/network/interfaces
以下をファイルの一番下に追加します
auto wlan0 iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wifi.conf wireless-power off
wifi接続に必要なパッケージをインストールして、wifiの設定ファイルを作成します。ssid
とpassword
のところは、ご自身の環境のSSIDとパスワードに書き換えて下さい
$ sudo apt-get install wpasupplicant $ sudo apt-get install wireless-tools $ sudo -s # wpa_passphrase ssid passowrd > /etc/wpa_supplicant/wifi.conf # exit
/etc/wpa_supplicant/wifi.conf
という設定ファイルが生成されたら成功です。
以下実行して、無線LANが認識されたら成功です。
$ sudo ifup wlan0
UbuntuへのROSセットアップと動作確認
続いて、UbuntuにROSをインストールしましょう。こちらも上記サイトの方がこちらのページで日本語でわかりやすくまとめて下さっています。英語が苦でない人は、ROS公式サイトのARMにROSをインストールするマニュアルを見ればOKです。
私は、例によって自動でセットアップするスクリプトを作成しましたので、以下3行のコマンド実行すれば、ノンストップでROSをインストールしてくれます。
$ git clone https://github.com/karaage0703/raspberry-pi-setup
$ cd raspberry-pi-setup
$ ./setup-ros-indigo-ubuntu.sh
Raspbianのときと同様、以下実行して、エラーなく実行されればOKです。
$ roscore
止めたい場合はCtrl + C
を入力すればOK。
raspicam_node セットアップ
Raspberry Piの標準のカメラをROSで使えるraspicam_node
という素晴らしいパッケージがあるのでこちらを使います。
https://github.com/UbiquityRobotics/raspicam_node/tree/indigo_safe
基本的には、上記のREADME
をもとに実施していけばインストールできます。例によって1〜6を自動で実行するスクリプトをraspberry-pi-setupのリポジトリに入れておいたので、楽したい方は使ってみてください。以下実行するだけです。
$ ./setup-ros-indigo-raspicam_node.sh
上記実行したら以下実行して
$ sudo -s $ echo 'SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"' > /etc/udev/rules.d/10-vchiq-permissions.rules $ usermod -a -G video `whoami` $ sudo shutdown -r now
以下実行して
$ cd ~ $ sudo apt-get install -y curl $ sudo curl -L --output /usr/bin/rpi-update https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update && sudo chmod +x /usr/bin/rpi-update $ sudo rpi-update $ sudo reboot
/boot/config.txt
を書き換え
start_x=1 gpu_mem=128
ここまでやって再起動
$ sudo shutdown -r now
これでRaspberry Piの純正カメラが使えるようになります。
いよいよカメラノードを起動します。以降は、複数コンソールを切り替える必要があります。まずは一つ目のコンソールで以下実行
$ roscore
次にAlt+F2
を押して、別のコンソールに切り替えて以下実行します。
$ rosrun raspicam raspicam_node
問題なければ、これでカメラノードが起動します。ちなみにroscore
を実行したコンソールに戻りたい場合はAlt+F1
です。
Alt+F3
を押して、別のコンソールで以下実行します。
$ rostopic list
以下のようなトピックが表示されればOK
/raspicam_node/camera/camera_info /raspicam_node/camera/image _image_transport
このように毎回コンソールを切り替えてログインするのも大変なので、仮想端末ソフトを使うと便利です。私はよくbyobu
というソフトを使っています。詳細は以下参照下さい。
ROS indigo(Ubuntu) on Raspberry Pi 3 イメージファイル
こんなん全部やってられないYO!という面倒くさがり屋の人のために、UbuntuベースにROSをセットアップまで実施したイメージファイルを作成したので公開します。配布されているUbuntuをベースにROSとraspicam_nodeのみ追加してあります(両方ともライセンスはBSDなので再配布は問題無い認識)。
無線LAN設定は実施していないので、使用したい方はご自身の設定に合わせて設定下さい。
イメージファイルは3G程度に縮小されているので、gpartedなどのパーティション管理ソフトでパーティションをリサイズして使って下さい(リサイズしなくても良いですが、SDカードの空き容量が無駄になってしまいます)。
公開は終了しました。
イメージファイルをSDに書き込む方法や、パーティションのリサイズに関しては下記記事を参照下さい。
ROSを使ってPCとRaspberry Piで通信を行う
ROSの良いところは、ROSのインストールされたマシン同士で、ROSのプロトコルを用いて簡単に通信やデータのやりとりができるところです。カメラのノード起動しただけだと面白くないので、別のPCでカメラの画像を可視化するということを行ってみたいと思います。以下Raspberry PiのIPアドレスは192.168.0.1
という前提で説明します。
今回は、Raspberry PiとPC(LIVA)を使います。
PCは昔はてなさんにプレゼントして頂いたものです!ちゃんと活用してますよ!
Raspberry Pi側の設定
基本的には、先ほどと同じなのですが、1行IPアドレスの設定を事前に行います。
まずRaspberry Piを立ち上げて、デフォルトのコンソールで以下実行
$ export ROS_IP=`hostname -I` $ roscore
Alt+F2
を押して、別のコンソールで以下実行
$ export ROS_IP=`hostname -I` $ rosrun raspicam raspicam_node
これでRaspberry Pi側は準備完了です。
PCへのROSセットアップと動作確認
PCにはROSとUbuntuがセットアップされている前提です。
Ubuntu PCへのROSのセットアップは以下参照下さい。
Ubuntu PCなんて持ってないよ!という人は、仮想化環境でも大丈夫です。以下参照下さい。
セットアップできたら、起動してターミナルで以下実行するだけです。
$ export ROS_MASTER_URI=http://192.168.0.1:11311 $ export ROS_IP=`hostname -I` $ rosrun image_view image_view image:=/raspicam_node/camera/image _image_transport:=compressed
後は、以下のようにRaspberry Piのカメラモジュールを対象に向けます(カメラモジュールはケースの中に入っています)
以下のようにPC側でRaspberry Piカメラの画像を表示できます。リアルタイムでプレビューしています
まとめ
ROSを使ってRaspberry Piの純正カメラで遊んでみました。リモートでカメラをモニタリングするだけなら、見守りカメラで使ったRPi-Cam-Web-Interface
だったり、リモートWiFiカメラで使ったmjpeg-streamer
といった技術もあるのですが、ROSでやると、ROSの豊富なパッケージと組み合わせて、画像処理だったりRaspberry Pi自体をロボットにしてしまったりと色々面白いことができそうですね。またいずれトライしてみたいなと思います。
ROSに関して色々知りたいという方は、まず以下の本が日本語の入門書としてわかりやすいかと思います。
最近Raspberry PiとROSの本も出ています。こちらもすごく良さそうな本です。なにせRaspberry Pi財団創設者のEben Upton氏推薦!実は既に購入しているのですが、発売されたのが、この記事を書いた後なのでこの記事自体は下記本の内容は何も反映されておりません(笑)
参考リンク
Raspberry pi 2(Raspbian Jessie)にROS indigo(ROS-Desktop,rqt,rviz)をインストールする - Flow-Developers
cmake error, poco was not found, Raspberry Pi, ROS Indigo - ROS Answers: Open Source Q&A Forum
yaml-cpp includes / libraries · Issue #24 · ros-perception/image_common · GitHub
c++ - fatal error: yaml-cpp/yaml.h: No such file or directory - Stack Overflow
http://g-action.gack2u.com/hexapod/software/ros-install/
raspberry pi 3で ROS Kinetic Kame を動かす - 空飛ぶロボットのつくりかた
関連記事
変更履歴
- 2017/05/02 cakin_make catkin toolsに関して追記