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

ペリフェラル
image_print

ドローンの世界では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カメラは安価でいろいろありますから、耐水にすればいいわけです。
LogitechのC270というとてもポピュラーなカメラなどです。USBケーブルを一旦はずしましたがカンタンに分解できました。

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

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

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

Raspberry PIでビデオストリーミングサーバーを動かす場合、非力なCPUなので軽いストリーミングサービスが好ましいです。

MJPG-Streamer

2024年3月のbookworm以降、うまくインストールできません。libjpeg8-devがもうないので、libjpeg62-turbo-devをaptで事前にインストールしておきます。

git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental

mjpg-streamerはひとつしかサブフォルダーがありません。

cd ~
mv ./mjpg-streamder/mjpg-streamer-experimental ./mjpg-streamer-experimental

で移動しました。

cd mjpg-streamer-experimental
make
sudo make install

パラメーターが多いのでスクリプトを書きます。サンプルはstart.shで存在します。

以下が私が設定したものです。

PORT="8080"
ID="tsukasa"
PW="password"
SIZE="1280x720"
FRAMERATE="30"
export LD_LIBRARY_PATH=/user/tsukasa/mjpg-streamer-experimental 
mjpg_streamer \
-o "output_http.so -w ./www -p $PORT -c $ID:$PW" \
-i "input_uvc.so -f $FRAMERATE -r $SIZE -d /dev/video0 -y -n"

Morion

Motionはいろいろできるらしいですが、最低限は以下で動作はします。

sudo apt update
sudo apt install -y motion

ここでカメラをUSBポートに差し込み、lsusbしてみます。
もし、cameraとして認識していればmotionで使える可能性が高いです。

sudo nano /etc/motion/motion.conf

で以下を修正します。

  1. daemon を on
  2. framerate を 1000
  3. Stream_port を 8081
  4. Stream_localhost を off
  5. webcontrol_localhost を off
  6. width を 640
  7. hight を 480
  8. post_capture を 5

ctrl+O で yを押し、保管。Ctrl+Xで終了

sudo service motion restart

します。

そして

sudo motion

します。

外部から

192.168.179.6:8081

すると、画像が転送されてくるハズ

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

(出典:How to Make Raspberry Pi Webcam Server and Stream Live Video || Motion + Webcam + Raspberry Pi

もし、/var/log/motion/motion.logを見てvideo0をオープンしようとしている。ls /dev/video*で

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