ドローンも大事ですが、近頃は漁業の調査を助けるツールを作ることも大事だと考えています。
GoProからビデオストリームをダウンロードして表示すると、遅延がすさまじく諦めました。
そこでGoproとはまったく別に単なる水中カメラを作ることにしました。
USBカメラを延長する
USBカメラをRaspberry PIに接続し。同じく接続したHDMIディスプレイで見ることを考えます。
USB2.0をLANケーブルで延長できるUSBエクステンダーが数社から出ています。安いものはUSB1.0なので使い物になりませんからご注意を。
カメラがまっすぐ沈むようにする工夫が必要です。
水中に晒すことができるUSBカメラはすでに持っています。DWEのUSBカメラです。
水深400メートルまでOKらしいですが、ケーブルは2メートルくらいしかついていません。笑
その代わり水中で最適になる画質調整がされているとのことです。地上で見るとちょっと赤い?
このカメラもいい例なのですが、売られている製品はオーバースペックなものが多いです。
USBエクステンダー
全体像はこんな感じです。
USBエクステンダーはソフトウェアからは見えません。Raspberry PIのUSBポートにカメラがつながっていると考えてOK
カメラを動かすためにはふたつの考慮事項があります。
ひとつはカメラのデータを表示するソフトウェア。Raspberry PI標準のRaspian OSのデスクトップ版を作成すると、ffmpegやffplayがすでに導入されています。
出回っている動画ソフトのほとんどがffmpegの力を借りています。ここではffplayを使います。
まず、次のようなシェルスクリプトをRaspiのホームディレクトリに作ります。
今、/home/tsukasa/startcamera.shを以下のとおり作ったとします。
#!/bin/bash /usr/bin/ffplay -i /dev/video0 -video_size hd1080 -an
このスクリプトを実行すると、カメラで写っているものがディスプレイに表示されます。2秒3秒の遅れはあります。
次にこのスクリプトをどのタイミングで開始するか、です。
ぱっと考えるとカメラをUSBポートに差し込んだ時にudevでスクリプトを動かせばいいように思いますが、なにも表示されません。
ですからGUIがスタートしたらこのスクリプトを起動することにしました。
Raspberry PIのディスプレイを司るディスプレイサーバーはX11ではありません。BookWormからWaylandとなっています。さらに最近のディストリビューションではwaylandの実装のひとつであるLabwcが標準らしいです。
困ったことにこのサーバーごとにプログラムを自動スタートさせるやり方が違うのです。
今、どのディスプレイサーバーなのかは、sudo raspi-config -> Advanced Option ->Waylandと進み、X11, Wayfire, Labwcのいずれかを選ぶことになっています。とりあえずLabwcを指定します。
Labwcの自動スタートは~/.config/labwc/autostartに記述します。おそらくautostartファイルはないので作ります。
bash /home/tsukasa/startcamera.sh &
と書きます。
これでカメラとディスプレイをあらかじめ接続したRaspberry PIを起動すると画面にカメラデータが表示されます。
USBエクステンダー
レシーバ側はカメラを取り付けます。電源供給が必要です。いろいろ似た機種を探しましたが電源が不要なものは見つかりませんでした。一万円以下であったら教えてほしいです。
現時点ではこのエクステンダーとバッテリーパックを同じ防水ボックスに入れています。
箱は金属のほうがいいですよ。理由は軽いと浮きやすい。コネクターをがっしり取り付けやすいからです。