カメラインターフェースとFPGA

はじめに

FPGAは画像処理が得意であり、重たい計算を低消費電力で、リアルタイム保証をしながら計算できます。 FPGAを使って高速で応答性の良い画像処理をしたいという人も多いでしょう。この時、正しくカメラを選定しないと、せかっくのFPGAの性能を生かせません。世の中にはコンピューターやFPGAボードなどに接続可能なカメラインターフェース規格が多数あります。
しばしこの選択は重要になるので、どのようなものがあるのか私が知っていたり調べたりした範囲で紹介したいと思います。

さまざまなカメラインターフェース

それではインターフェース別に見ていきましょう。

USB

経験上、インターフェースとして最初にUSBを思いつく人が多いようですので最初に書きます。
ここで民生のUSBカメラと、産業用カメラの違いにも触れておきます。

Webカメラ(UVCカメラ)

パソコンなど民生機器においては、もっともよく見かけるいわゆるUSBカメラとかWebカメラと呼ばれるのがこれになります。UVC(USB Video Class)に対応しており、だいたいどのOSでも挿せば動きます。私もパソコンではリモート会議などでこんなやつを使っています。

ただし、実はこれ FPGA に繋ごうとするととても面倒なのです。なぜなら受信側はUSBホストスタックを一式搭載しないと受信できないからです(FPGAがデバイス側になるならもう少し楽な模様ですが)。
多くの場合 Zynq などの Linux の動作するCPU入りFPGAを用意してから受信することになります。CPUで受信してからFPGAに画像を渡すのもなかなかナンセンスです。
また、USBハブにいろいろな機器を同時に繋げてしまう関係上、リアルタイム保証もタイミング保証もありません。それどころか複数機器が同じUSBバスにある時の調停やポーリングなどがミリ秒オーダーだったりします。
残念ながら当サイトのようなFPGAを使ったマイクロ秒オーダーの計測にはとても使えないわけです。
ステレオカメラなどマルチカメラをやるときも同様です。PCに複数のWebカメラを繋いでも正確にシャッタータイミングを合わせるなどの機能はありませんので、バラバラにシャッターが切られます。動くものに対して時刻の違う画像だと3角測量などもできなくなります。
またほとんどがローリングシャッターカメラであったりもします。

産業用USBカメラ

ただしUSBカメラの中でも産業用カメラは少しだけ毛色が変わります。

iDS社、Balser社、CIS社、東芝テリー社など、思いつく産業用カメラメーカーさん各社出されている気がします。こちらはグローバルシャッターのものや、モノクロ/赤外対応なども多いです。
産業用カメラとWebカメラの一番の違いは、専用のソフトウェアインターフェースで、露光時間やゲインなど細かな制御ができることで、何百ものカメラパラメータを設定できるようなものも珍しくありません。
なにより外部制御端子をオプションで備えていることが多く、外部からシャッタータイミングをトリガとして入力したり、カメラ側から露光信号を外部に出して照明を制御したりできます。
つまりこれらの信号をFPGAで仲介すれば、外部機器と同期するアクティブセンシングなどがある程度可能になります。
ある程度と書いたのは、画像読み出しがやはりWebカメラと同じUSBの課題を持っており、他の方式と比べると遅延が大きい為です。ですのでシャッター/照明/アクチュエーターなどセンシング制御だけFPGAなどでリアルタイム制御を行い、撮影した画像は少し遅れて処理するなどで成り立つシステムに適しています。

Ether(LAN)

次は Ether (LAN) をインターフェースに使うものです。

IPカメラ

LANでつなぐカメラと言うとこれを思いつく人も多いでしょう。よく監視カメラなどで使われるのがこちらです。

Webブラウザでアクセスできるように HTTPサーバーを内蔵していることが多いようです。
こちらはFPGAに繋ぐというよりは、TCP/IPでアクセスするものであり、FPGAに繋ぎたい場合はZynqなどCPU入りのSoCデバイスからアクセスることになると思います。

GigE-Vision

一方、画像処理目的で利用可能で、産業用カメラのインターフェースとしてEther を使おうというのが GigE-Vision です。

こちらは産業カメラに Ether という多用途に普及しているケーブルやスイッチ類のインフラを使えるのが最大の利点です。
最近は 2.5G や 5G 以上のものも出てきており、PoE(Power-on-Ether)とあわせて、利便性とある程度実用的な速度を備えたものがあり、iDS社、 Balser社、など各社いろいろなラインナップを出しているようです。
特出する点として、多くのものが PTP などに対応しており、LAN のみで厳密なシャッタータイミング制御が行えるものも多い点があります。
ただし、ネットワークスイッチを超えられるように TCP/IP などとの互換性や再送制御なども入っているため、それなりの遅延はありそうです。
また当然ながら TCP/IP のプロトコルスタックに準じたものが必要なので、多くの場合USB同様に、Zynq など Linux の動くCPUで受けてから FPGA に渡すことになってしまうようです。
ただし、調べるとOKIアイディーエスさんなどがFPGA版の開発もされているようです。
Wikipediaにも「この規格を実装したハードウェアの開発・製造・販売やソフトウェアの配布には、年間ライセンス料の支払いが必要となる」と書かれている通り、個人には手が出しにくいものになっています。

CameraLink

次に古典的な産業用カメラの規格として CameraLink を紹介しておきます。GigE Vision 登場のはるか以前からあり、ある程度の長距離を伝送することもできます。

Wikipedia にある通り、仕様入手が容易で昔からあるI/Fです。 Balser社、CIS社、東芝テリー社など、比較的老舗のカメラメーカーにラインナップが多いようです。
特徴としてはI/F信号が単なるLVDS なのでFPGAに簡単に接続できる事です。またイメージセンサーからの信号をかなり遅延なく出力することができます。
7:1 のシリアライズが特徴ですが例えばAMD社の XAPP585 などのように、FPGAメーカーは各社接続可能です。
課題としては古い規格なので、ケーブル二本使うFull規格でも速度が 6.8Gbps が上限と言ったところと、そもそも新しいカメラでは採用されなくなってきて入手性が悪化している点でしょうか。
ただしFPGAとの親和性はピカイチですので、中古などで安く入手できる機会があればねらい目かもしれません。

CoaXPress

つぎはCoaXPressです。オープンな規格であり、ロイヤリティーフリーとの事です。
FPGAのSERDESを使って遅延なく映像伝送できるものが多そうです。

ただし、課題として、FPGAに直結できるわけではなく、外付けのレシーバICが必要になりそうです。またIPコアも有償のものが多く、カメラも高価なものが多そうです。その割にそこまで高速でも無いようなのでやや微妙な規格には思いました。
ただしオープンな仕様という点ではすべて自作する場合は選択肢となりえる気はします。

SLVS-EC

ソニーさんなどがイメージセンサーメーカーが主導しているのが SLVS-EC です。KR-260 に搭載されたことでFPGA界隈では有名かもしれません。CISさんなどもカメラを作られているようです。
特徴としては、イメージセンサーが直接このI/Fを持つため非常に低コストで高速である事です。多くのFPGAのSERDESに接続可能で、規格上は 60Gbps なども可能なようです。
現状での課題は、仕様がオープンではないことと、対応しているイメージセンサーはNDAを結ばないとデータシートの手に入らないことでしょうか。
他のクローズな規格も同様ですが、仕様が手に入らない場合は無償で使えるIPなどが整備されていないと、個人でオープンハードウェアを目指す当サイトでは手が出しづらいところです。

MIPI

次がMIPI規格です。もともと携帯電話などの内部での映像伝送用で規格はオープンではないのですが、幸い多くの場合FPGAメーカーが無償IPを提供しており、使うだけならあまり困ることはありません。またラズベリーパイカメラに採用されたことで安価なカメラモジュールが沢山出回っており、フレキケーブルも含めて安価で取り扱いやすいです。
電気的にも直結可能なFPGAが多く、1レーンで 2.5Gbps 程度まで対応しているものもあり、4レーン使えば 10Gbps が視野に入りますので、コスパは良さそうです。

当サイトでも、

などの記事を書いてきましたし、FPGAマガジンでも記事を書かせて頂いたことがあります。
課題は殆どがローリングシャッターである点なのですが、普通の産業用カメラのように使えるものを当サイトでは下記に開発中です。

HDMI

どちらかと言うとディスプレイのイメージを持たれるかとは思いますが、ハンディームービーや一眼レフカメラなどが備えていることも良くあります。
遅延と言う点では民生用のカメラは内部での映像生成に時間がかかるのでとても遅いのですが、FPGAに接続しやすいという利点があります。HDMI規格はクローズな規格ですが、オープン仕様のDVI も出せる場合が多く、適当なツールでEDIDを作成して用意しておけば DVI の T.M.D.S 信号として信号を出してくれます。多くのFPGAはFPGA直結でダイレクトに T.M.D.S が受けられますので、デコードプログラムを書くか持ってくるかすれば FPGA に画像を取り込めます。
また一部には産業用カメラっぽいHDMIカメラもあるようです。
当サイトでも、下記などで民生ムービーのHDMIでFPGAに繋いででテクスチャマッピングのテクスチャに使ったりしております。

SDI

SDIは放送局の機材や監視カメラなどで使われる規格です。

AMDなどでもIPを提供しており、確か無償で使えたと思います。
ただしマシンビジョンと言うよりは人間が観るための映像伝送が主なので、少し用途が違う感じはします。

NTSC/PAL

ここまできたら書いておかねばという事で、古きアナログ伝送規格です。
といっても最新のHDMI規格なども、これらの信号の垂直同期/水平同期のタイミングや、インターレース/ノンインターレースなどしっかい継承していたりします。
アナログなので遅延も少なく、デコードICを入れればFPGAにも繋がりますので、案外まだまだ利用価値があるかもしれません。

PCI Express

こちらも少し特殊なものですが、例えばこちらのように、PCI-Express に繋ぐカメラもあるようです。

こちらはPCについているインターフェースの中で、LANやUSBに比べて圧倒的に低遅延で高速に繋がるものですので、CPU/GPUベースでFPGAのようなリアルタイム画像処理をしたい場合には適しています。
ただしFPGAへの画像入力に使うにはやはりCPU経由となりがちな気はしております。

おわりに

カメラインターフェースの種類はもちろんこれだけではありませんが、思いつくものをざっと紹介させて頂きました。
また思いついたらいろいろ書き足していくかもしれませんが、FPGAとカメラを組み合わせて、リアルタイムビジョンや、画像センシングがやりたいという方の、カメラ探しの一助になれば幸いです。
当サイトは、下記のような、現実空間に入り込めるリアルタイムコンピューティングを目指しており、イメージセンサーと計算機の間のインターフェースとして、引き続き可能性を模索していきたいと思います。

コメント

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