Raspiにwebカメラをリモート接続

ペリフェラル

ドローンの世界ではFPV(First Person View)といって、マルチコプターにカメラを取り付けて、映像を手元の受信機で見ることがとてもポピュラーです。

この装置の名称をVTXといいます。
多くの製品版のVTXは5.7GHzや5.8GHzの電波を使います。混信を嫌うからだと思います。
しかし、この周波数を使う場合、免許と移動局としての局申請が必要です。
5.7GHzの場合、第三種特殊陸上無線技師以上、5.8GHzは(業務で使わない限り)アマチュア無線技士の免許がいります。

したがってドローンの世界では、次の3種類で電波を使う例が多いです。

  1. ラジコン (多くの場合)2.4GHz帯
  2. テレメトリー(弱い電波でフライトコントローラーと通信する)。カンタンな場合はWiFi。遠くまで使いたい場合は920MHzや2.4Ghz
  3. VTX 5.7GHzや5.8GHz

TCP/IPに一本化

このような構成はあまりセンスがいいとはいえません。
私達が普段使っているインターネットの世界を見てみましょう。インターネットでは基本はTCP/IPを使います。そして同時に別アプリケーションを動かすことを可能にするために、ソケットという概念を用います。

 

有名なアプリケーションは使うソケットの番号が決まっています。HTTPは80番、FTPは20・21番、SMTPは25番、POP3は110番などなどがあり、ソケットで繋いでいる場合、平行して他のアプリケーションを使っていても通信は影響を受けません。

つまり、ドローンにおいても非公開独自プロトコルを使うのではなく、TCP/IPの経路を確保したらソケットを利用するべきなのです。

具体的に説明します。

Raspberry PIをコンパニオンコンピューターとして当サイトでは使用しています。Raspberry PI(以降、Raspiと略します)の接続を有線LANでもWIFIでもダイアルアップでも確保したら、徹底的にそれを使います。
具体的には

  • フライトコントローラーとの接続(テレメトリー)はMAVPROXYとポート5760を介して外部のGCS(Mission Planner)と接続します。
  • ビデオは簡易的なウェブサーバーを公開し、クライアントはhttpでポート8080で接続します。

こうすることで機能ごとに通信設備を購入することを避けられます。
さらにLTE接続していれば、そのまま距離を伸ばすことも可能です。

ビデオカメラ

ドローン用のビデオカメラは高価です。
軽量でジンバルまでついているので当然かとは思います。
しかし、水上を走るドローンから海中を眺める用途と、せっかくRaspiというコンピューターを使っているのであれば、Webカメラでいいのではないか?という着想は誰もが思いつきます。
Webカメラは安価でいろいろありますから、耐水にすればいいわけです。
100均で購入したケースに密封してみました。


LogitechのC270というとてもポピュラーなカメラです。USBケーブルを一旦はずしましたがカンタンに分解できました。

これをRaspiのUSBに接続し、lsusbコマンドを叩くと次のように表示されます。

Bus 001 Device 009: ID 046d:0825 Logitech, Inc. Webcam C270

おそらくこれは/dev/video0につながっています。(一台だけだから)

MJPG-Streamer

MJPG-Steramerという今回の目的のために存在するかのようなプログラムがあります。
ビデオストリームを簡易ウェブサーバーから見ることができます。

残念なことにMJPG-Streamerのメインラインは開発が終わっているようです。でも、ここまでできていれば不満はありません。
フォークしてラズパイ用に修正したものを今回は使います。
参考にした記事はこちらです。ポン吉さん、調査はタイヘンだったと思います。ありがとうございます。

sudo apt update
sudo apt install -y git cmake libjpeg-dev
cd ~
git clone https://github.com/neuralassembly/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental
make

このソフトはパラメーターファイル形式は取れず、すべて引数で指定します。
さっさとシェルスクリプトを作ったほうがいいと思います。
私の例です。

#!/bin/bash
cd ~/mjpg-streamer/mjpg-streamer-experimental
./mjpg_streamer -o './output_http.so -w ./www -p 8080' -i './input_uvc.so -d /dev/video0 -r 800x600 -fps 30 -q 10'

基本的にはこのままで動くと思います。
USBカメラによってビデオの画質のオプションパラメーターを設定したほうがよいかもしれません。
ポン吉さんのページを参照してください。

http://ipアドレス:8080

にアクセスすれば、冒頭に示したようなメニュー画面が表示されるでしょう。

実用上はLTE接続が必要でしょう

 

タイトルとURLをコピーしました