37.汎用監視カメラへの進化 (2021.9.28-2021.10.25)

BOUHAN-TECの更なる進化として、カメラ部分の性能・機能向上を目指します。現在のカメラは固定状態のため、カメラの視界外に対しては効力がありません。そこで、カメラ自体の有効範囲を広げるために、カメラの首振り機能を追加したいと思います。左右方向の首振りをパン、上下方向の首振りをチルトと呼びますが、いずれもサーボモーターを使って自由な角度に変更できるようにします。最終的にはズーム機能も備えたいところですが、それには高い技術と知識が必要なため努力目標とします。パン・チルトが可能になると防犯カメラの用途が大きく広がります。例えば広範囲に渡って侵入者がいる位置や距離を把握するだけでなく、カメラによってその動作までもが逐一監視できます。更に録画して記録も残せることから、BOUHAN-TECは単なる防犯カメラから汎用監視カメラへと進化することになるのです。

現在のカメラの画角は、カメラ前方の中心軸に対してせいぜいプラス・マイナス30度(計60度)程度だと思われます。そのため、真横も真上も全くの範囲外となって、大きな死角ができてしまうわけです。そこで左右の首振りをプラス・マイナス90度可能にすると、斜め後ろ方向へも30度の画角が得られ、室内等では壁際に設置するとほぼ全体を見渡すことができるようになります。また、上下はある程度角度を制限しても、空中なので十分広範囲をカバーできることから、上に45度、下に15度(計60度)首振りできれば十分だと思われます。これらを一つの目安として、パン・チルト機能を実現するハードを作ります。さほど重量のあるものでも無いので、動力源としてラジコンカー等の市販サーボモーターを利用しようと思います。

カメラマウントとして手頃なものを見つけました。購入したものはマイクロサーボモーター2個付きのものでしたが、これがとんでもない代物で、サーボが期待通りに動かない商品でした。軸がくるくる回り続けるので後に確認したところ、どうやらローテーションサーボ(360度回転)だったようです。実際、デューティー比を変えてみると回転速度と方向が変化しました。誤って混入したのかとも思いましたが(ラベルだけは本来のサーボ)、停止状態の角度がずれているので、正規の(と言ってもコピー品ですが)不良品を安価に買い付けて、意図的に添付している可能性もあります。アナログサーボの回転角を決めるポテンショメーターが機能しないと指示した角度で停止しないので、それが原因ではないかと推測します。

仕方無いのでサーボだけ別に購入してセットしました。しかし、RasPiのソフトウェアPWMではブルブル震えて使い物になりません。最終的に安定して動作させるために、更にハードウェアPWMを導入することにしました。PCA9685と呼ばれるボードで、オリジナルはスイッチサイエンス製です。例によってamazonで売られているのはコピー品のようですが、実験用として十分機能することを期待しましょう。

i2c通信を使う製品なので、必要なライブラリをインストールします。
git clone https://github.com/adafruit/Adafruit_Python_PCA9685.git
cd Adafruit_Python_PCA9685
sudo python setup.py install

注意点ですが、このライブラリはPython2系がデフォルトとなっていると、そちらにインストールしようとします。しかし、インストールスクリプトが対応しないため、最後にsyntaxエラーが発生。対策として、もうPython3系しか使わないため、デフォルトを3系に変更することにしました。次のように操作しますが、念のため現状を調べてみました。

1.デフォルトのPythonのバージョンを調べる。
python --version
結果が例えばPython 2.7.16と出たら、モジュール類はPython2系にインストールされてしまいます。

そこでデフォルトをPython3系に変更します。
2.Python2のリンクを解除。
cd /usr/bin
sudo unlink python

3.続いてPython3へリンク。
(cd /usr/bin)
sudo ln -s python3 python

4.再度デフォルトのバージョンを調べる。
python --version
結果が例えばPython 3.7.3となればリンクの変更が成功です。上記のPCA9685のライブラリをインストールすれば、Python3系へ正しくインストールされるはずです。試してはいませんが、デフォルトを変更したくなければ
sudo python3 setup.py install
でも良いようです。

カメラマウンタの全体像は写真の通りです。RasPiのカメラモジュール程度なら大丈夫でしょうが、それ以外はトルク的にほとんど使い物にならないように思います。支えとなるサーボの軸自体が見るからに華奢で、少し負荷がかかるだけで壊れそうです。

カメラは常に首振り動作をして画角を確保することもできますが、プレビューを見る側にとっては視界が常に動いていて気分が悪くなることでしょう。それなりに無駄な電力も消費するため、あまり合理的な方法とは言えません。そこで、必要な時だけカメラの方向を変えることができるよう、普段は距離センサーを使って近接物体の方向と距離をチェックします。前方に対しては人感センサーを併用できるため、距離センサーを常にゆっくり左右に首振りすれば事足りそうです。距離センサーの値が最小値になれば、左右に関しては軸線上に検知物体があるはずなので、次はカメラ自体の方向を距離センサーと同じ角度まで左右に回転します(上下方向は水平にセット)。後はカメラとセンサーが連動する形で上下に回転して、更に距離センサーの値が最小になるように制御すれば、上下方向でも軸線が合うことになります。これらの動作をなるべく短時間に行い、相手を捕捉することで監視を行います。

そう考えてアイデアを練っていましたが、とりあえず現状では手動でカメラマウンタを操作することを優先することにしました。将来的には庭の監視システムとしてGARDEN-TECを企画していて、そちらでマウンタを制御するプログラムを紹介します。詳しくは「45.GARDEN-TEC個別テスト」をご覧下さい。