ロボットの環境設定
以下の記事の続きです。
基本は以下の参考書と作者の補足ブログに全部書いてありますが、一部はまったところなどを中心に記載していきます。
また、以下のRaspberry Pi2の基本的な設定は完了している前提ですので、まずは下記の記事の通り基本的なセットアップは完了してからでお願いいたします。以降の記事はWheezyというバージョンをインストールした前提で記載されているので注意下さい。
WebIOPiインストール
最新のバージョン(0.7.1)がRaspberry Pi 2に対応していないらしいです。作者のブログに補足として対応方法が記載されていました。こういう作者のアフターケアが素晴らしいです。
http://raspibb.blogspot.jp/2014/11/blog-post.html
まずは普通にWebIOPiをインストールします。作者の本には、ファイルのダウンロードをRaspberry Piで行えと書いてありますが、別に普通のPCでよいです。以下のサイトで最新版(0.7.1)をダウンロードします。
WebIOPi - Browse Files at SourceForge.net
ダウンロードしたファイル(WebIOPi-0.7.1.tar.gz)をRaspberry Piにファイルを転送します(SFTP等で)。その後、ファイルをraspberry pi上で以下のコマンドで解凍してやりましょう。
$ tar xvzf WebIOPi-0.7.1.tar.gz
次にパッチを当てます。同じフォルダで以下の要領でパッチを当てれば良いようです。
$ wget https://dl.dropboxusercontent.com/u/69652790/bb/WebIOPi-0.7.1.patched.tgz $ tar zxf WebIOPi-0.7.1.patched.tgz $ cd WebIOPi-0.7.1/ $ sudo ./setup.sh
知らずに普通にインストールしちゃったーという人も、もう一回パッチを当てて setup.shを走らせれば正しくインストールされるようです。パッチといっても2行くらい書き換えるだけみたいなので、ネットで調べて手動でやってもよいかもしれません。お好きな方で。
後は以下でWebIOPiのコンテンツディレクトリに一般ユーザ(以下はデフォルトのpiの例)が書き込めるように権限を設定してやります
$ sudo chown -R pi /usr/share/webiopi/htdocs
以下のコマンドでパスワードの設定もお忘れなく
$ sudo webiopi-passwd
ここまでできたら起動して動作確認しましょう。起動は以下。
$ sudo /etc/init.d/webiopi start
動作確認のため、Raspberry PiのWebIOPiにアクセスします。例えば IPアドレスが192.168.0.1
だった場合は、ブラウザでhttp://192.168.0.1:8000/
にアクセス。設定したユーザー名とパスワードを入力するとWebIOPiの画面が表示されます。
一通り動作確認ができたら以下を実行して自動起動するようにしましょう
$ sudo update-rc.d webiopi defaults
WiringPiとWiringPi2-Pythonのインストール
Raspberry Piは精度の高いPWMを1ポートだけ使えるのですが、その制御に必要なライブラリがWiringPi及びWiringPi2-Pythonらしいです。作者のブログに記載あるのですが、WibIOPiがpython3で動く関係でWiringPi2もその対応の必要があります。ただ、python3対応はWebIOPiのインストールが終わってないとエラーが出るらしいので、WebIOPiインストールしてからWiringPiとWiringPi2-Pythonをまとめてインストールするのがよいでしょう。
以下でWiringPiのインストール
$ git clone git://git.drogon.net/wiringPi
$ cd WiringPi
$ ./build
次にWiringPi2-Pythonのインストール
$ cd $ sudo apt-get update $ sudo apt-get install python-dev python-setuptools $ git clone https://github.com/Gadgetoid/WiringPi2-Python.git $ cd WiringPi2-Python $ sudo python setup.py install $ sudo python3 setup.py install
最後の行がpython3対応らしいです。
Webiopiのスクリプト修正
本の通りに/etc/webiopi/config
の[script]
を書き換えたら何故か起動しませんでした。スクリプト単体で起動したら、日本語の行でつまづいているっぽいので、スクリプトの文頭に日本語が大丈夫になるおまじないを追記したら起動するようになりました。以下を一行目に追記してください
# -*- coding: utf-8 -*-
ツイートさせる
この記事を参考にtwというツイッタークライアントを入れることで、とりあえずRaspberry Piからツイートさせることはできました。偉大なる先人に感謝。
シャットダウンボタン追加
本の通り/etc/init.d/rc.local
にスクリプト置くのも楽なのですが、正しいLinuxの作法に則り以下にしました。
動画ストリーミング
ロボットのカメラ映像をWiFi経由で飛ばすために、ロボットが動画をストリーミングする設定をします。まずは、本の通り以下のコマンド実行してmjpg streamer
をダウンロードします
$ sudo apt-get update $ sudo apt-get install libjpeg62-dev cmake $ git clone https://github.com/jacksonliam/mjpg-streamer.git mjpg-streamer $ cd mjpg-streamer/mjpg-streamer-experimental $ make $ cd .. $ sudo mv mjpg-streamer-experimental /opt/mjpg-streamer
アンインストールは以下とのこと
$ sudo rm -r /opt/mjpg-streamer
あとはこのmjpg-streamer
を実行するプログラムを用意します。これも親切な本の作者さんが用意してくださっています。作者のブログからダウンロードできる10-02-stream.sh
というスクリウプトです。スクリプトの中身は以下のような感じです。
#!/bin/bash if pgrep mjpg_streamer > /dev/null then echo "mjpg_streamer already running" else LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i "input_raspicam.so -fps 15 -q 50 -x 640 -y 480" -o "output_http.so -p 9000 -w /opt/mjpg-streamer/www" > /dev/null 2>&1& echo "mjpg_streamer started" fi
これもシャットダウンスクリプトと同じ要領で自動起動してやります。具体的には以下ね。
$ sudo cp 10-02-stream.sh /usr/local/bin/stream.sh $ sudo chmod 755 /usr/local/bin/stream.sh
コピーして、実行権限を与えています
次に自動起動用のスクリプト作成。
$ sudo vi /etc/init.d/stream
/etc/init.d/strem
の中身は以下のような感じ。コピペして下さい。例外処理とかは全然考えていませんが、自分しか使わないからよいかなという適当な感じです。
### BEGIN INIT INFO # Provides: stream # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start Stream at boot time # Description: Start Stream at boot time ### END INIT INFO #! /bin/sh # /etc/init.d/stream DAEMON=/usr/local/bin/stream.sh NAME=mjpg_streamer case "$1" in start) echo -n "Starting mjpg_streamer" $DAEMON ;; stop) echo -n "Stopping mjpg_streamer" killall $NAME ;; esac exit 0
次に実行権限を与えましょう
$ sudo chmod 755 /etc/init.d/stream
以下のコマンドでstream.sh
がちゃんと起動と終了すること確認。
$ sudo /etc/init.d/stream start $ sudo /etc/init.d/stream stop
あとは、以下のコマンドでstream.sh
が自動起動するようになります。
$ sudo update-rc.d stream defaults
再起動して$ ps aux | grep stream
でそれっぽいプロセスが動いていたら成功。
スクリプトは以下のサイトを参考にしました。感謝。
init.d スクリプトを書こう
インターネット経由でロボット操作
本だと、基本ローカルなネットワーク内で操作することのみ紹介していますが。インターネット経由でも操作することができます。やり方記載しますが、ちゃんと設定しないと家庭のネットワークのセキュリティホールになったり、悪意のある人にRaspberry Piをのっとられたりしてしまうのでちゃんと運用するのであればセキュリティの知識は身につけてから実践しましょう。
といっても、やることはルータWebIOPi
で使用しているポート 8000とmjpg-streamer
で使用しているポート 9000を解放するだけです。ルータによって設定の仕方は違いますが、例えば以下のような感じです。
IPアドレスは raspberry piでifconfig
コマンド実行して確認してください。毎回確認するのも面倒くさいので、raspberry piのipアドレス固定してもよいかもしれませんね。あとはルータのステータス画面で、グローバルなipアドレスを確認してipアドレス直打ちでRaspberry Piにアクセスしてあげましょう。グローバルなipが100.200.300.400
だったら、ブラウザで100.200.300.400:8000
にアクセスすればOKです。
グローバルIPがもらえない環境やセキュリティ上ルータのポート解放したくない場合だと、Weavedというサービスを使って比較的セキュアにWeavedのサーバー経由でRaspberry Pi 2にアクセスことができます(トンネルを掘るような感じかな?)。試しにWeaved経由でやってみたのですが、ポートの関係でカメラ画像は表示することができませんでした。多分うまいやり方あると思うのですが、私にはわかりませんでした。
次回予告
次はいよいよロボットのアプリ。
公開しました(2015/10/24追記)