RaspberryPiのmotion動体検知の実用化に向けて
このところRaspberryPi(以下Raspi)にはまっている。これを電子工作というのにはちょっと抵抗があるが、システム開発と言うのも何か大げさだ。まあ、Raspiは簡単にI/Oピンをいじれるマシンなので電子工作と言っても間違いではないだろう。
巷(ちまた)には、Raspiに関する情報は溢れかえっている。しかし実用的な工作まで解説しているサイトは意外に少ない。あっても、詳しいのは導入までの工程で、そのあとの作業について解説しているところが少ないのだ。
監視カメラに使うといっても、電源や、設置場所、耐天候対策、映像データの蓄積・管理など、検討すべき項目は数多い。この分野も既に専門家による大きな市場ができているので、素人が立ち入る場所がなくなっている。アマチュアがちょっと手軽にやってみるときの情報が少ないのは仕方がないのかもしれない。
それに、アマチュアは作って動くところまでが楽しみで、動いてしまうと急激に興味が薄れるものだ(かく言う所長もその傾向を否定できない)。しかも、応用の方向は個人によって千差万別なので、参考にならないことが多い。このあたりは自分なりに開拓していくしかないのだろう。
それはともかく、やっとmotionで想定した通りの動体検知システムが動き始めた。この監視カメラの運用までは、まだやることが沢山あるが、とりあえず一段落したのでブログに報告する。例によって時系列でまとめてあるので、話題が飛び飛びになることはご勘弁願いたい。
サブネット越しの名前解決(3/8/2017)
直前の記事は、Raspi3をWiFiでつなぎ、SAMBAサーバーを動かすところまでだった。WiFiそのものは何事もなく動き、映像ストリーミングも快調に流れるのだが、SAMBAがなぜか通らない。撮りためるmotionの映像データは、何もしないとすべてRaspi3のSDカードに収容されるので、SDカードの耐久性が心配で、別のメディアを用意しておきたい。
SAMBAにしておけば、リモートから監視映像を確認することもできるので一石二鳥だ。というので、SAMBAにこだわっているのだが、有線なら通るSAMBAが無線のWiFiではつながらないのである。
WiFiルーターはブリッジで使っている(はずな)ので、同一のサブネットだと思うのだが、どうもSAMBAサーバーでは別のネットになるらしく、WindowsがRaspiを見つけられない。
調べてみると、ウェブでは既知の問題点らしく、色々なところで解決法が紹介されている。要約すると以下のようになる。
(1)直接、PCでSAMBAサーバーのIPアドレスを指定してリモートドライブを定義する。WiFi越しでも通る(はずだ)。
(2)PC側のhostsファイルにサーバー名とIPアドレスを登録する。Windowsにもhostsファイルがあるとは知らなかった。しかし、これがとんでもないところにある。C:\Windows\system32\drivers\etcという深いパスの下にある。
(3)PC側のlmhostsファイルにサーバー名を登録する。これが正道なのだろう。lmhostとは、NetBIOSというWindowsのネットワークサービスの名前解決法である。このファイルも、hostsファイルと同じディレクトリにある。
それぞれ試してみた。(1)は問題なく動いた。但し、固定アドレスをいちいち打ち込むのは運用上うまくない。他をあたってみた。(2)は、最初このファイルを変更することが出来なかった。さらに調べて、管理者権限が必要とわかり、エディター(Terapad)を管理者権限で実行させて変更に成功した。これも問題なくPCはサーバーを見つけてくれた。
(3)も(2)と同じやりかたで、ホスト名とIPアドレスのセットを登録すると、WiFiでもSAMBAが動くようになった。一番、もっともらしい(3)にする。
Raspi3不調。OS入れ直し(3/9/2017)
Raspi3の新機能のうち、まだ試していない機能がある。Bluetoothである。ただ、現在は、Bluetoothは、シリアルコンソールのUARTとぶつかるということで、停止している。実際に、ウェブにあるBluetooth関連のコマンドはエラーで戻って先に進まない。
しかし、情報によれば、シリアルコンソールは、RaspiのBIOSにあたるconfig.txtに、クロックを固定する core_freq=250という設定だけで正常に戻るというのである。しかもBluetoothも動くという。
今、Bluetoothを使う必要はないのだが、この方法が果たして有効なのかを確認するためBluetoothを動かしてみた。確かに、Bluetoothのセットアップコマンドは有効になり、Bluetoothが動き始めたような感じになった。
ところが、Bluetoothのディバイスを持ち出して動作を試そうとしている間に、何故かRaspiそのものが正常にブートしなくなったのである。延々とエラーメッセージを吐き出すだけでブートが終わらない。ログインプロンプトまで行かないので何もできない。
これまで加えたUART関連の変更(config.txtはPCから操作できる)を少しづつ元に戻してみるが、現象は変わらない。一番最初まで戻ったが、同じ状態である。恐らく何らかのBluetoothの設定ファイルが作られてしまい元に戻らないのだろう。設定ファイルをいじろうにもシステムが立ち上がらないので手の施しようがない。暫し途方に暮れる。
余計なことをして、全く先に進めなくなってしまった。こういうときの一番の解決法は、OSを作り直すことだ。あれこれ悩んでいるくらいなら最初からシステムSDカードを作り直す方が手っ取り早い。
手元に16GBのSDカードが見つかった(安売りショップで余りの安さに衝動買い)ので、今度はここに本格的なRaspbianをインストールしなおすことにする。ウェブを改めて調べる。どうも以前と様子が違ってOSのインストール方法が変わったようだ。
NOOBSって何だ?(3/10/2017)
RasPiも例によって横道からつまみ食いをして動かしてきたので、最近の動向が良く見えていない。このNOOBSというやつが良くわからない。ウェブをさらにさまよい、これが複数のOSを選択インストールできる最新の方法であることがわかった。
以前やっていたOSのカーネルをイメージファイルで、そっくりコピーする方式はどこへ行ったのだろう。ちょっと探したところでは見つけることが出来なかった。で、このNOOBS方式(ノービス、初心者向けということか)を試してみることにする。
どうもこいつは、HDMIケーブルを使った画像デスクトップを要求するようだ。Raspiのデスクトップは、この前のSharpの7インチIGZOパネルを用意していたが、これが新しいOSで動くためには、またあのconfig.txtに修正を加える必要がある。面倒なので、PCのディスプレイと共用にする。
太いPC用のHDMIケーブルを接続し、SDカードに展開したファイル群に起動をかける。よーし、画面にそれらしい起動画面があらわれた。ここではおなじみのRaspbianを選ぶ。他の選択肢にも興味をそそられたが他のは情報が圧倒的に少ないので選択の余地はない。
Windowsと同じようなビルド画面が延々と続き、数十分でセットアップは終了した。そうか段々こいつもWindowsに似てきたな。キーボードとマウスをUSBハブにつけ準備を整える。順調にデスクトップが立ち上がる。ウェブブラウザーは既に日本語化されていた。
それにしてもあらためてRaspi3の速さを実感する。1920x1080の画面がスムーズに動く。ネットサーフィンも全くストレスなしに楽しめる。Linuxで動かす分にはもう十分な実用性があるように思えた。
新しいOSはデスクトップからでしか動かない?(3/13/2017)
デスクトップからの立ち上げには成功した。ところがシリアルから立ち上がるコンソールが動かないのである。SSHは動くが、シリアルは無反応である。シリアルはハードに直結しているので、ネットがおかしくなったり、デスクトップがおかしくなった時の緊急時のために動かしておきたい。
ウェブを探していたら、何と、Raspi3からはシリアルはオプションで通常はdisableだという。(ここがとても参考になった。)
あわてて、デスクトップの仮想ターミナルで、raspi-configを入力し、シリアルをenableにしようとした。なんと、そこにはシリアルを有効にする項目がないのである。ありゃー、これはどういうことなのだ?
気を落ち着けて、ウェブの説明を最初から読み直す。なになに、デスクトップの「設定」メニューにはシリアルのenable/disableボタンがあるではないか。画面から「設定」を選び、最初のconfig.txtの部分を開く。ほんとだ。ちゃんとある。
これをenableにして、rebootをかける。おおー、コンソールにブートメッセージが戻ってきた。やれやれ、これで一安心である。それにしても、以前のイメージファイルからのOSは何だったのか。
Raspi3は少しづつ元に戻る。マウントの制作(3/15/2017)
OSを入れ直して、さらにWiFi化や、SAMBAサーバー、motionのインストールなど原状復帰の作業を進める。そのかたわら、定点監視カメラの本格的な実装に向けた工作も始めた。
まず、ヨドバシでカメラ用の安い三脚(¥4000)を手に入れ、マウント台をアクリル板から自作する。マウントへのRaspiの固定は当初は輪ゴムで良いだろう。本格的にはいずれ別の方法を考える。
久しぶりのアクリル工作である。楽しい。アクリル板からRaspiを載せる10X8(cm)の台座と、固定用の1/4インチボルト(これは万国共通のようである)を埋め込む2枚のホルダーを切り出す。以前、USBカメラを固定するのに使った方式と全く同じやり方である。
これを2液混合のエポキシ系接着剤で接合した。乾燥のため一日放置し、これで丈夫になっただろうと実際に三脚に付けてみた。これが何と、少し力をかけただけでポロッと簡単にはがれてしまった。
えー、エポキシ系ってアクリルにはつかないのか。前のUSBカメラのときは問題なかったのに。あわててGoogle先生にお伺いを立てる。接着面があまり滑らかだと接着力が落ちるらしい。そういえば前のUSBカメラの表面は梨地だった。
そこでアクリル板の接合面を紙やすり(#200以下)で表面が曇るまでこすり、念のため別の新しい2液混合の接着剤にしてやり直してみた。今度も一日乾燥させる。試してみた。うむ、今度は大丈夫なようだ。
ついでに、近くのDIY店で、滑り止めのゴムシート(厚さ1ミリ、商品名エラストマーシート)を買ってきて、台座に合わせて貼り付ける。これは強力だった。輪ゴム程度の固定でしっかりカメラは固定された。よし、これで定点カメラの固定は万全になった(屋内専用)。
カメラモジュールのパイロットLEDの明度を下げる(3/17/2017)
定点カメラにするためには直しておきたいところがある。カメラモジュール正面のLEDだ。動き出すと赤く光るのでわかりやすいが、カメラの正面に煌々と赤い光が点くのはまるで威嚇しているようにみえてまずい。
このLEDをソフト的に消すことはできる。設定ファイルのconfig.txtで、disable_camera_led=1とすれば消えるが、カメラが動いているかどうかの確認が出来なくなるのも困る。
そこで、LEDの位置を変えようとカメラモジュール基板を色々調べる。カメラチップのピンがビアを通して正面に出ている。これを利用して裏に移すことを考えたが、裏面にはスペースが余りない。しかもこれはかなりな手間だ。
で、結論はLEDの制限抵抗を増やして暗くすることにした。基板についている抵抗は220オームである。どれくらいの抵抗が良いのか、適当な赤LEDをブレッドボードに差して(同色なら似たような特性と仮定)試してみる。
10Kオームくらいでも結構明るく輝く。100Kではさすがに暗すぎる。久しぶりに例の低温ハンダを持ち出す。LEDのところに広がらないよう細心の注意を払ってハンダをつける。よーし、簡単に抵抗ははずれた。低温ハンダをハンダ吸い取り線で入念に除去する。
部品箱の中から昆虫採集のように残してあったチップ抵抗のコレクションから10KΩを探し出し、交換する。パターンは1005だったが、手持ちの1608でも実装可能だった。交換作業は30分もかからなかった。
試してみる。うん、10Kでも明るすぎるくらいだが、これくらいなら目立たないで良い。いや、くだらない作業だったが、何かとても充実した気持ちになった。
本格的なmotionの設定。画像はとれたが管理が大変(3/22/2017)
準備が進んできたので、いよいよ、motionの監視用のソフト仕様の検討に入る。motion.confの膨大な設定パラメーターを、我慢して最初から読みはじめる。
バージョンに新旧があるようで少し混乱するが、読み込んでみるとそう難しい構造ではなかった。大きく分けると静止画(動きを確認したところでのスナップショット)と、その前後の動画の2種類をアクションごとに保存していくようだ。
沢山のパラメーターがある(動きを検知する前の画像の処理とか、動かなくなってからの動画の記録をどこで止めるとか)。
管理的には、スナップショットの静止画と、動画は別々のフォルダーに残しておきたいが、これはどうも無理なようだ。
記録を始める動きの範囲の大小は、実際に動かして見て決めるしかないだろう。ファイルの置き場所は、SAMBAのHDDに指定する。とりあえず、以下のようなパラメーターで監視を始めることにする(変更したところのみ)。
width 640 (320) Raspi3ならこれくらい画像を大きくしても十分見られる
height 480 (240)
framerate 12 (2) あまり大きくすると時間遅れが大きくなるようだ
netcam_keepalive on (off) HTTP/1.1を使ってストリーミングの性能向上
threshold 3000 (1500) これはとりあえず。これでも結構敏感に反応する
pre_capture 1 (0) 検知する前の画像も記録する。
event_gap 5 (60) 検知したあと、不感となる時間(秒数)
max_movie_time 10 (0) 動画記録の最大時間(秒数) 0は制限なし
output_captures best (on) 検知した一連の画像のうち最大変化量の静止画を残す
output_debug_pictures on (off) 静止画を検知するときの2値化した画像で残す
ffmpeg_output_movies on (off) 検知した時の動画を記録する
locate_motion_mode on (off) 検知した画像の部分を4角で囲む
target_dir /SAMBAファイルのパス (/var/lib/motion)記録データの保存場所
stream_motion on (off) ストリーム配信をする
stream_maxrate 20 (1) ストリーム映像のフレームレート
stream_localhost off (on) ストリーム配信を自分以外にもする
webcontrol_localhost off (on) 各種パラメーターの設定を自分以外でも変更可能
以上の設定で、工作ルームでのテストでは、手を振ったり、動いたりすれば確実に画像が記録されるのを確認した。これが実際の道路を移して所定の画像がとれるのかはわからない。
このあとは三脚をサンルームの道路に面した場所に置き、観測を開始することにする。さて、どんな映像がとれるか、久しぶりにわくわくする気分である。このあたりで今回の記事は一区切り。次回をお楽しみに。
| 固定リンク
「電子工作」カテゴリの記事
- 生存証明2(2022.10.19)
- 生存証明(2022.01.23)
- パソコン連動テーブルタップの修理を諦めて自作(2021.02.16)
- 半年ぶりのブログ更新に漕ぎつけた(2019.09.19)
- 研究所活動は停滞したままでCCDカメラ顕微鏡導入など(2019.02.08)
「Raspberry」カテゴリの記事
- 脱線が止まらない。RaspiでPythonに熱中(2018.03.12)
- CNCマシン(2) 切削を始めるも、Raspi Zero Wへ思わぬ脱線(2018.02.21)
- RaspberryPi3の電源問題はOSの不具合だった(2017.06.12)
- RaspberryPi 3の電源事情好転せず。ESP32に手を出す(2017.05.19)
- motionの動体検知はRaspi3の電源が安定しない(2017.04.16)
コメント