fumiLab

fumimakerが作ったもの、やったことについて書いていきます。

レースドローン向け低遅延映像伝送システムのご紹介

gazou

本記事では2021年度IPA未踏プロジェクトで採択されたプロジェクトの実装物について簡単にご紹介させて頂きたいと思います.まずは実装物をご覧ください.

えっこれだけ!?と思われたかもしれませんが,これだけですorz

でも,これを作るのに非常に苦労しました.本システムの性能を以下に示します.

項目
FPGAボード Ultra96-V2
FPGA Ultrascale+ Zynq MPSoC
CPU ARM Cortex-A53
カメラ Digilent Pcam 5C
解像度 1280*720 px
カメラ周波数 30Hz
帯域 100Mbps程度
レイテンシ(送信機) 0.74ms

背景

レースドローンというものがあります.これは結構高速に飛行していてクラスによっては150km/h以上で飛行することもあります.レースドローンはオンボードカメラ(FPVカメラ)映像をヘッドマウントディスプレイやモニターで見ながら一人称視点で操縦します.レースドローンにおいて,映像伝送遅延は重要で低遅延はパイロットの快適な操縦体験に繋がります.

Image from Gyazo

現状のレースドローンではアマチュア無線バンドを使った5.8GHzアナログ映像伝送システムというものが使われており,低遅延に映像伝送ができる反面,ドローン自身のモーターやモータードライバによる放射ノイズやマルチパスにより画質が劣化するという問題があります.また,見通し範囲内でのドローン操縦に限定されます(この問題について,海外では送信パワーでごり押すという手法が取られているようですが)

レースドローンが使える低遅延かつデジタルIP映像伝送が欲しい!と思ったのが今回のきっかけになります.なお,既存のドローン向けデジタル映像伝送ではDJI FPVなどありますが,IP使ってドローンにマウントできる30msくらいのものはあまり見当たりません.

映像伝送システムの遅延について

映像伝送システムの遅延は以下のように整理できます.映像伝送システムにおいて遅延の大きな要因はフレームバッファです.このフレームバッファを使わず,処理をパイプライン化することで低遅延化を図りました.今回は映像送信機についてハードウェア実装しました.

Image from Gyazo

システム概要・解説

簡単にですがシステム概要の解説をします.

低遅延のためには圧縮しないのが一番ですが,試作では720p60Hzにおいて1.3Gbps程度必要になってしまうなど現実的ではありません.通常映像圧縮ではH.264に代表されるフレーム間圧縮が用いられますが,フレーム間圧縮は1フレーム~2フレーム程度の遅延が発生してしまい,30Hzの映像では33ms, 60Hzの映像では16.6msの遅延が発生してしまいます.今回は1フレーム内で圧縮処理を完結できるフレーム内圧縮(Motion JPEG圧縮)を実装することにしました.更に,1フレーム待たず8ライン単位でパイプライン処理することで更に遅延を削減します.

以下のようなシステムを構築しました.そのうち公開したいと考えています.JPEG EncoderはOpen CoresのVerilog JPEG Encoderをベースに改良し実装しています.

Image from Gyazo

実装結果

動いている様子はこちらです.

gazou

遅延時間の測定ができるシステムやHDMIディスプレイの遅延時間を測定できるシステムを実装し,測定をしたところ,カメラからディスプレイまでのEnd to Endで30.2msで映像伝送できていることがわかりました.そのうち,ハードウェア実装した映像送信機のレイテンシは0.78msで,映像送信機とディスプレイのレイテンシがほとんどを占めることがわかりました.この数値はアナログ映像伝送に近い数値で,IP映像伝送でありながら,従来のデジタル映像伝送システムとほとんど同等の遅延であることがわかりました.(余談: 未踏プロジェクトではディスプレイ遅延を除いた数値で33.2msとしていましたが,映像受信機について未踏プロジェクト後に更に改良をすすめ,ディスプレイ遅延込のEnd to Endで30msの遅延を実現しました.ディスプレイなしでは24ms程度となっています.)

HDMIディスプレイの遅延を測定するプロジェクトを公開したのでよろしければ合わせて御覧ください.

fumimaker.net

Image from Gyazo

今後

受信機についてもハードウェア化し,カメラからディスプレイ送信までフルハードウェア化することでさらなる低遅延を狙います.現状ではソフトウェアで実装している受信機で20ms程度の遅延が発生しているところ,送信機側と同じく1ms程度に抑えることができると考えられます.つまり,(送受信機)2ms+ネットワーク遅延+ディスプレイ遅延に抑えられるということになります.ワクワクします!

今回のプロジェクトでは実装で時間切れとなってしまったので今後は実際にドローンに搭載して飛行させたり,自動運転車など無人移動体にも使ってみたいと考えています.

まとめ

簡単にですが,実装物についてご紹介させていただきました.今後はフルハードウェア化するために頑張りたいと思います.本プロジェクトは公開するつもりなので,公開したらまたご報告します.

未踏プロジェクトでは頑張って頑張って頑張り抜いてなんとかなりましたが,今後はエレガントに問題を解決することを抱負としています.

今日は以上です.