SSブログ

ミリ波レーダーを使った動体検知システム(3/5)

ミリ波レーダーを使った動体検知システム(2)」で作製したレーダーユニット(子機)を屋外に設置し、「Raspi3&3.5"Monitor一体型ユニットの製作」で作ったユニット(親機)を室内に置いて ネットワークを介して子機からのレーダーデータを受信して処理するようなシステムを作りました。図1にその構成を示します。

図1 レーダーシステム構成図
図1_レーダーシステム構成V1.0.jpg


ソフトウェア
ソフトウェアの機能としては、移動物体検出時に次のようなことができます。
・アラーム表示
・アラーム音発報
・アラームメール送信
・検出時間の記録
・検出グラフ表示の保存
また検出範囲を限定するための検出ゾーン設定も可能で、これらの機能は設定によってON/OFFできます。

プログラムのダウンロードは以下からできます。
- mmWaveRadar1.0_pkg(tar.gz)
- mmWaveRadar1.0_pkg(zip)
<2020.02.24 追記>
ミリ波レーダーを使った動体検知システム(4)」でMONO TWELITEにも対応したVer 2.0 をリリースしました。今後はそちらに統一します。
<2022.09.09 追記>
レーダー設定処理中にエラーが検出されることがります。
概要と対策はこちらを参照願います。
<追記終わり>

設定方法・使用方法はこちらを参照してください。
プログラムの処理フローと関数呼び出し関係はこちらを参照してください。

今回プログラムでは次のようなプログラミング要素を含んでいます。
インターネットで調べることが結構多く 時間も費やしました。リリースしたスケッチが 類似したことをプログラミングしている方の参考になれば幸いです。
(ただ正直なところ 、十分に理解せずに ネット上の例をちょっと改造して使ったらうまくいったというようなものもあり、もしかしたら正しい使い方ではない箇所があるかもしれませんのでご承知おきください。)

・シリアル通信でバイトデータ列を取り込む
・Python3 で UDPを使ってデータの送受信
・Python3 で Postfix 経由のメール送信
・Python3 と tkinter でGUI作成(ボタン、ラベル、テキストボックス、キャンバス等)
・Pythin3用に C/C++ソースのモジュール作成

何点か説明しておきます。

シリアル通信のバイト列の取り込みですが、最初は1パケット分取り込んでUDP送信しようとしたのですが分割されて送られてくるバイト列を結合することができず諦めました。array.array や bytearrayを使ったのですが結合できたと思ってもprintしてみるとリスト構成になっていたので、結局結合しないでそのまま転送することにしました。(結合しないとバイト列が保たれる。printすると分かります。)

UDPの前にTCPを試みました。通信はできましたが、親機・子機の一方のプログラムを止めると他方も止まってしまい不便でした。通信の確実さは下がるかもしれませんが一方的にデータを送り続けるUDPの方が良いと思い UDPを採用しました。

Postfix経由のメール送信はメリットがありそうです。 
検出があったときにアラームメールを送り且つ検出画面の保存を行う場合、pythonプログラムから直接smtpサーバーにアクセスするとその処理にかかる時間検出画面のデータセーブが出来ず取りこぼしが生じ得ます。しかしPostfixに送信すれば速やかにpythonプログラムは次の処理にかかれて、別スレッドでPostfixが送信してくれます。

子機のRaspberry piのデータ送信モードとして、レーダーパケットをそのまま転送するのではなく子機でパケット解析して検出点データのみを送るモードを作りました。
これは子機のRaspberry piをシリアルデータ受信とUDP転送のみに用いたのではもったいないので、検出点データを算出することも子機側で行って 親機のRaspberry piの処理に余裕を持たせるためです。
この処理によって送信するデータ量はかなり減り、将来的にはWiFiの代わりにMONO WirelessのTWELITEを使った送受信も可能になるのではないかと思っています。


使用感
使ってみるとまだ課題はあるものの家の中で外の人や車の動きが分って面白いです。
車の場合概して検出点が多く 遠くなるほど広がり(Ghostもあると思います)移動速度も速いですが、人の場合は検出点の広がり幅が狭く移動速度がゆっくりです。
(サンプルデータを RecData フォルダーに入れてありますので、Raspberry piがある方は RecordViewer.py を起動して見ることができます。)
ただ検出点が多いのは 本当の物体の位置が特定できないので検出ゾーンを作ってもゾーン内外判定の確実性が薄れてしまい、この点は課題です。
検出点が多く出るのは原理的なものなのか建物などの環境によるものなのかわかりませんが、理想的には検出物体の移動軌跡が一本の線で表示されることです。
それが理論的に可能なことなのかどうかわかりませんが、できたとしても高度な演算処理が必要になると思います。一方で現在の処理速度を考えると、これ以上の処理の追加はデータの取りこぼしが起きそうなのでちょっと心配です。 Pythonのスピードではちょっと厳しいかもしれません。
まだ検討はしてないのですが、レーダーの設定データを変更する事で改善の余地があるかもしれません。

このような課題はあるものの、雨のかからない倉庫やオフィス、ビニールハウス等に設置して侵入者の有無の判定をするだけ(検出ゾーン関係なく移動物体検出の有無だけで判定)であれば現在の性能でも実用化できるのではないかと思います。 更に雨対策をすれば畑などへ侵入する人や動物検知も可能だと思います。


===== 関連記事 =====
ミリ波レーダーを使った動体検知システム(1/5)
ミリ波レーダーを使った動体検知システム(2/5)
ミリ波レーダーを使った動体検知システム(4/5)
ミリ波レーダーを使った動体検知システム(5/5)
ポータブルミリ波レーダーの製作


>> ブログ記事一覧へ
nice!(0) 
共通テーマ:趣味・カルチャー

nice! 0