ITで遊ぶ

水中のGoproをコンピューターで操作する

去年からやっていることですが、水上ドローン(要するに無人船)で海中の写真を自動で撮影するシステムを開発しています。(うみねこカンパニー)

こう書くと探せば事例があってエラソーに「開発」なんていうものかよ?と思うでしょ。
ところが、これがまったく事例がない、もしくは企業秘密のようでインターネットでは見つからない(と思う)
そもそもカメラをコンピューターで操作しようという人がほとんどいないようです。(わかりませんが)

こんな感じの流れになります。

  1. ラジコンスイッチかパソコンの管理ソフトから写真撮影指令を船の制御コンピューターに送ります。
  2. 船の制御コンピューターはピンの電位を上げることでラズベリーパイに司令を出します。
  3. ラズベリーパイはGoProにWiFi経由で司令を送ります。

この3のラズベリーパイとGoProをWiFiで繋いでコマンドを送ることが、キーポイントです。

なぜならば私が調べた限り、GoPro以外にWIFIごしにAPIで操作できるカメラはありません。すべて独自のスマホアプリかUSBケーブルをつなぐだけであり、コンピューターからの制御はハナから考えていないのです。
USBケーブル接続が典型的で、空を飛ぶドローンはカメラとケーブルを介してシャッターのオンオフを送る単純な方法です。
しかし、カメラを耐水ケースに入れてしまうとUSBケーブルはつなげません。穴を開ければ確実に水圧でそこから水が侵入します。ケースに穴を開けないためにケースにWiFiのアンテナを取り付けるのです。

多くの人は「WiFiの電波は水中を飛ばないんじゃないの?」

電波についてあまり知らないので、このように考えるようです。
厳密には「電波は水中で著しく減衰する」が正しい表現です。

つまりGoProにWiFiのアンテナを密着するくらいの短距離であれば、問題なく水中のラズパイとWiFiで更新できます。
巷にはWiFiのケーブルだけで強引にスマホと水中カメラを結ぶケーブルが販売されていますが、あれは電波がとても弱いはずです。
私はこのようなWiFi USBドングルをラズパイ側に取り付け、カメラまでアンテナを延長しています。

この方法だと何十メートルでも取り付けたアンテナケーブルの長さだけ、GoProに電波が届きます。

今年もようやく暖かくなり春から水中写真を取るのですが、水中写真といえばお魚さんやサンゴをダイバーが撮影する例しかないようです。

海の環境を知るために、コンピューターでカメラを操作して写真を撮る技術は、これから絶対に必要になると思っています。

詳細はgithubに書きました

(2024/5 追記)私はGoPro11を持っています。これはGoPro12からはGPS機能がなくなったので、わざわざ11です。
しかし、水中ではGPSのような微弱な電波は届きません。
そこで、GoProが写真を撮るたびに、その写真のファイル名とフライトコントローラーから得たGPSデータをリストにして保管しています。(なのでRaspiとフライトコントローラーの間にMAV Linkを張らねばならなくなりました。)
陸上で写真のEXIFにGPSデータをバッチで書き込んでいます。
GOPRO APIで写真をダウンロードする機能はあるのですが、めちゃくちゃ遅いです。ですから撮影が終わってから一気にGPSデータを書き込むことにしました。
このようにバッチ処理というものは必要なことがあります。バッチ処理が時代遅れと声高にいう人は、システムというものを理解していないと思います。

 

関連記事

  1. DOAの落とし穴

  2. 小学生にプログラミング?言ってるおまえ、プログラム書けないだろ

  3. javascriptでfetchを使う時に考えたほうがいいこと

  4. Perl定石

  5. GUIアプリケーションを書く時のオブジェクトの設計

  6. MPASMがなくなった

  7. Linux Kernel Map

  8. Tkinterにおけるタイマー処理、ボタン処理