M5Camera WiFi ストリーミングをやってみた

FPVドローンをやるようになってから、なんとか 5.8GHz 使わずに無免許でできる方法はないかを考えてきた。
5.8GHz はそこそこ安いし、簡単だし、まあ便利なんだけど、免許とか業務利用とか同時利用3機までとか心底めんどう。
低遅延で、5.8GHz VTX システムと同じように、複数の環境で受信できるのが望ましい。

そうなるとまあ WiFi ベースなんですね。
なんかねえかと探した先に見つかったのが WebRTC。
■WebRTC Native Client Momo がスゲエ
https://papalagi.org/blog/archives/635
Momoスゴイ。解像度高く低遅延でオープンソース。
ラズパイのGPUを使って H264 をエンコして転送する。
ドローンの FPV カメラとして利用するには、H264 はあまり適さず、VP8 か VP9 が必要な感じ。(ハードウェアエンコ効かなくなってしまう)
そこそこの解像度欲しいとなると、Jetson nano を積みたくなり、それだとちっこいドローンには難しい。
たしかに DokeyCar のたぐいはみんな Jetson nano とかですね。
85mmクラスのドローンでラズパイゼロが載せられる限界。
搭載してみた。

愛すべき雑な仕事。
そういえばカッコイイマウンタも作ったような…

遅延は200msぐらいで、解像度も720pぐらいだが、まあなんとか実用というレベルにはなった。
しかしラズパイは Linux なんでブートの時間長い。電源ブチ切りもちょっと気になる。
なお余談ですが、ラズパイゼロに 1S Lipo から電源供給する時は、電子工作とドローン界隈逆なので注意。
https://papalagi.org/blog/archives/740

もっと軽い WiFi カメラないものか。
で、今回 M5camera(わずか5g)を活用する方法が盛り上がっていたので試したみた。
M5camera は ESP32 に OV2640 という2万画素のカメラモジュールをつけたもの。
解像度はそこそこ、MotionJpeg になっちゃうが、パッケージがシンプルだし、軽いし、安い。(2000円弱)

果たしてやり方とは。ズバリこちら!
■LovyanGFXとJpgLoopAnimeでM5StackとM5Cameraの全画面WiFi動画ストリーミング実験
https://www.mgo-tec.com/blog-entry-lgfx-jpgloopanime-m5stack-m5camera01.html
mgo-tecさんは M5 を始めとするマイコンを使って様々な作例を作られる方で、いつも参考にさせてもらっている。
M5camera が出てからストリーミングができないか、いろいろやられていた。
LovyanGFXはらびやんさん作成の M5 向けグラフィックライブラリで、界隈ではスゴイスゴイと繰り返し聞いていた。
この両名が悪魔合体して、M5camera のストリーミングをいっきに実用レベルに引き上げた形だ。

さあやってみよう。
M5cameraがストリームサーバになって、M5Stackが表示します。
M5Stackで素早く描画するために LavyamGFX が活躍するという構成です。
リンク先はあらためてコチラで補足することはないぐらい丁寧に書かれているので、上記リンクを熟読して作成してください。
jpgWriteRow は 1.0.6 だと 203行ですかね。(動きました)
あと先日のライブラリアップデートで 「WiFi.h」が 2つになってどっちやねん!エラーがあるので、ESP32用でないのは消すなりするといいです。(雑)

早速動かしてみました。想像以上によく動く。
M5Stackの画面にグリグリ動くとちょっと感動しますね。
だいたい遅延は100msぐらいでしょうか。この手のモノとしては少ない遅延です。
やはり動き速くなると時折コマ落ちが発生するようです。
なおストリームの出力先はPCのブラウザでもいけます。
ドローンに載せてどんな感じか後日検証してみましょう。

ブラウザはM5cameraのIPアドレス叩けば出ます。