こちらの記事について、内容・翻訳・視点・長さなど、皆様のご意見をお送りください。今後の記事製作の参考にしたいと思います。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
こちらの記事の感想をお聞かせください。
Raspi Cam Web Interface, MQTT, Node-REDによるリモート監視
Raspberry Pi Came v2が発売された際、解像度や画質の高さが大変評判だったので、手元のラズパイを使って何かを作りたくなった。
そこで、ワークショップで使ってたレーザーカッターの内部動作を動画で観察できるウェブカメラを考えてみた。これがあれば、スタッフ全員がマシン内で何が起こっているのか見ることができる。この記事では、カメラ用のアクリル製筐体を自作し、ビデオストリーミングとモーション検知のソフトウェアの開発にチャレンジしている。
First steps
ウェブカメラの最適な場所を判断するために、まず適切にカメラモジュールをRaspberry Piに接続する。最新のRaspbianイメージファイル(執筆時はJessie 2016-05-27)をSDカードに書き込み、ここの手順に従い構築されていた。
次のコマンドを実行し、ソフトウェアをアップデートした。
$ sudo apt-get update
$ sudo apt-get upgrade
次に、カメラモジュールを有効にし、raspi-conigを使用しファイルシステムがSDカード全体に収まるように拡張した。
$ sudo raspi-config
Piはwpa_supplicant.conf ファイルを編集して、無線インターフェースを使用し自分のネットワークに接続できるようにした。(簡素化のためにnano editorを使用した。)
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
そして、ファイルの最後に次を追加した。
network={
ssid=”yourNetworkSSID”
psk=”yourPassword”
}
ファイルは保存し閉じ、次にPiがヘッドレスを実行しネットワーク上で制御するために静的IPアドレスを設定した。これはJessieと旧バージョンのRaspbianと比べて単純だ。編集が必要なファイルは dhcpcd.confのみだ。
$ sudo nano /etc/dhcpcd.conf
次の文をファイルの最後に追加した。
interface wlan0
static ip_address=10.0.10.21 /24
static routers=10.0.10.1
static domain_name_servers=10.0.10.1
ローカルネットワークに必要なIPアドレス情報を変更する必要があることに注意。
ファイルを保存し、システムを再起動した。
システムをリブートした後、IPアドレスを確認するためifconfigコマンドを使用して、Piにログインし直す。
次に、コマンド raspistillを使用して、カメラが正しく機能しているかを確認するテストを行うことができる。
Building the webcam
Rpi Cam Web InterfaceはPiカメラの使用を簡素化するソフトウェアで、ブラウザベースのインターフェースで制御する。GitHubリポジトリで利用できき、ここの指示に従ってPiにインストールすることができる。一度インストールすると、ネットワーク経由でインターフェースにアクセスできる。テストするには、同じネットワークに接続されたコンピュータでブラウザウィンドウを開き、IPアドレスをアドレスバーに入力する。
Webインターフェースとカメラからのビデオストリームが表示される。
ネットワークを介してビデオをストリーミングしてカメラを動かす際に、置き場所について注意する必要がある。カメラのカッティングベッド全体をカバーする、メンテナンスが容易でレーザーカッター内に収納する必要がある。
過去にプロジェクトでPi cameraを使用してが、新しいカメラモジュールも以前のモデルと同じ取り付け穴があり、レーザーカッターエンクロージャーにすでに適切な設計があった。モバイルバッテリーと組み合わせることで、カメラの最適な場所をテストするのに便利なコードレスな方法で行うことが可能。
残念ながら、レーザーカッターエンクロージャーが比較的コンパクトなためカッティングベッドを完全にカバーする位置を見つけることはできなかった。レーザーカッターの外にカメラを取り付けるか他の方法が必要だった。Piカメラモジュールに広角レンズを取り付けるという解決策を見つけた。これらのレンズは携帯電話のカメラの付属品として一般に販売されて、ネットでも入手可能。
カッティングベッドの監視はよくできるようになったが、ガントリーの移動で汚れずにマシン内部にフィットするにはまだ大きすぎた。そのため、カメラとレンズのみをカッティングエリア取り付けることにした、Piは残りの電子部品の隣に配置した。50cmのリボンケーブルを使用することで簡単になった。
カメラとレンズホルダーの新しいデザインが作成、レーザーカットされた。そのファイルはここで入手可能。Piはアクリル板に取り付けた。これらはレーザーカッターケースを変更することなく、シンプルで再配置可能な接着ネオジウムを使用して保持している。
Motion detection to GPIO control
Raspi Cam Web Interfaceの表面をこするとカメラ設定や機能が表示される、クールな機能としてモーション検知機能がある。そこには調整用変数がたくさんあり、このドキュメントでカバーされている。しかし簡単にはじまれるものではない。
ビデオ録画、写真キャプチャなどは動き検出に基づき簡単に設定が可能。MQTTを使用してメッセージブローガーに公開する場合、モーション開始と停止時のコマンドを実行するオプションもある。
MQTTもしくはMessage Queueing Telemetry TransportはMachine-to-Machine(M2M)またはIoT(Internet of Things)接続プロトコルで軽く、バッテリー電力とネットワーク帯域幅が品質や接続の信頼性がないときに使用される。Andy Stanford-Clark博士とArlen Nipper博士によって1999年に発明され、今では Oasis Standardである。詳細はMQTTのWebサイト参照
ネットワークにNode-REDのインスタントと動作するMosquitoなどのローカルMQTTブローカーがあると仮定する。MQTTとNode-REDの古いポストを参照してもよいかもしれない。
以下の手順では、Webcam PiにMosquittoクライアントツールをインストールし、ネットワーク経由でブローカーにメッセージを発行する必要がある。
たとえば、発行コマンドは以下のようになる。
$ mosquitto_pub -d -t 'laser/motion' -m “1” -h '10.0.10.21'
これによって、IPアドレス10.0.10.21上で実行されているブローカーに対して、ペイロード「1」のメッセージがトピック「laser / motion」に公開される。Webインターフェース上のコマンドラインから['Edit motion settings]メニューに移動すると、on_event_startフィールドにコピーされ、モーションが検出されるたびに実行される。ペイロード2番目のコマンドはon_event_endフィールドにコピーすることができる。
次にNODE-RED内に単純なフローを作成し、メッセージペイロードをGPIO出力ノードに渡すことができる。このペイロード’1’はGPIOピンをHighに設定し、ペイロード’0’はLowに設定する.
このGPIOピンは、レーザーカッターの状態を示すためにさまざまなものに接続することができる。簡易化のためをLED beaconを選び、トランジスタを介して切り替えた。
Reliable Pi
ラズベリーパイがシャットダウンされずに電源がオフにされると、SDカードを破壊し、起動できなくなる可能性がある。Piはレーザーカッターに取り付け、電力を取り込んでいるため、正規のシャットダウンでない方法で電源がオフになる可能性が高いため、解決策が必要。
SDカードの破壊から守るには、ファイルシステムを読み取り専用としてマウントする方法がある。そうすることで、プログラムの動作を停止させることができる。目標は、プログラムが物理的なSDカードではなく、RAMベースのファイルシステムに書き込むことができるようにすることで、カードは破壊されない。
オンライン上で読み取り専用としてPiのファイルシステムをマウントする方法のガイドはたくさんある。読み取り専用(RO)と読み書き(RW)を素早く切り替えるためのエイリアスを使用する方法を含む、この方法 を用いることにした。
ファイルシステムがROに変更されると、Webカメラインターフェースはもはや機能しなくなった。調査の結果、最初にカメラインターフェースを初期化するスクリプトstart.shが起動時にいくつかのログファイルを書き込もうとしていることが分かった。これらのログファイルの場所を変更するには、最初に/etc/rc.localを編集した。
$ sudo nano /etc/rc.local
2つの行を追加して、/tmpfs/パーテーション(RAM内)にlogsと呼ばれる新しいフォルダを作成する。
mkdir -p /dev/shm/logs
次の行はユーザに(Rpi-Web-Cam-Interfaceで使用されている)’www-data’にread/write accessを与える。
chown www-data:www-data /dev/shm/logs
次に、config.phpを編集して、カメラソフトウェアによって書き込まれたログの場所を変更する。
$ sudo nano /var/www/html/config.php
デバッグファイルとスケジュールログの格納場所を定義する2行を/dev/shm/logsディレクトリに変更する必要がある。上の図参照。
上記の変更を加えることで、start.shはエラーなく実行されるが、webインターフェースはまだロードされない。Apacheの問題を疑い、手動で始めようと試みた。
$ sudo apachectl start
これによって、ログファイルを作成できないというエラーが発生した。Apacheのログファイルの場所を/dev/shm/logsに変更して同様の変更を行った。
$ sudo nano /etc/apache2/envvars
この行を変更した。
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX
to:
export APACHE_LOG_DIR=/dev/shm/logs
変更を保存してエディターを終了して、Apacheは次のコマンドで起動可能となる。
$ sudo apachectl start
これはwebカメラインターフェースが変更によって成功したことを示す。再確認するために、Raspiを再起動した。再起動後、webインターフェースは以前のようにカメラからライブビデオストリームと動き検出機能を使用して期待どおり起動するはずである。
このすべては現在、読み取り専用のファイルシステムを待つPiで実行されて、RAM内の/tmpfs/partitionのみ書き込まれる。
In summary
更新されたRaspbery Pi用のカメラモジュールは、元のカメラモジュールのすべての利便性と実用性を備え、パフォーマンスが大幅に向上する。この素晴らしいRpi-Cam-Web-Interfaceと組み合わせることで、カスタマイズ可能なWebカメラを構築することがこれまでになく簡単になった。
レーザーカッターでPiとカメラが動いている限り、たとえばマシンが使用されているときのロギングやランタイム時間計測などを多くの機能を簡単に追加可能となる。他のペリフェラルやセンサもPiに接続することができる。たとえば有効的な拡張としては温度センサや煙センサなどがある。
注意:カメラはレーザーカッターを人間が観察するのと変わりとなるわけではない。マシンの側を離れていても、責任はあなたの行動にあることに注意。