IEEE 1394カメラは標準インタフェースで使いやすいため、マシンビジョン業界において急速に普及しています。NIでは、使いやすいAPIを使用してIEEE 1394カメラを制御できるハードウェアドライバを開発しました。このドキュメントでは、IEEE 1394カメラの詳細およびNI計測器ドライバとの併用方法について説明します。
FireWire (Sonyではi.LINK) として知られるIEEE 1394は、汎用高速シリアルバスとして1989年にApple社によって開発された高性能シリアルバスです。このバスは当時大きな期待をもって迎えられ、PC市場でどのように普及するのか注目の的でした。長い間、もう1つの新しい技術であるUSBとの比較が検討されてきましたが、次第にUSBはマウスやキーボードの接続を含む低速I/O用のシリアルバスとして使用されるようになり、IEEE 1394はデジタルビデオやビデオカメラなどの高帯域幅アプリケーションでよく使用されるようになりました。最近では工業用カメラでもこのバスを取り入れ、現在多くのIEEE 1394カメラが市場に出回っています。
IEEE 1394バスには、PCIやISAのような従来型内部PCバスよりも使用しやすい特徴がいくつかあります。IEEE 1394を使用して接続されているデバイスはホットプラグ可能なので、デバイスを取り付けまたは取り外しするたびにPCの電源を切る必要がありません。このバスには、デバイスの自動検索機能もあり、ユーザはデバイスを取り付けるだけで手動で構成を行う必要なく、ソフトウェアがデバイスを検索してインストールします。
このバスはRS232もしくはUSBに比べて高速で、IEEE 1394aでは最大400 Mbps、IEEE 1394bでは最大800 Mbpsのレートで動作します。IEEE 1394ケーブルには、4ピン式と6ピン式があります。4ピン式バスは電源を供給しませんが、6ピンの場合は電源供給があります。通信はピアツーピアで、たとえばビデオカメラはPCによる介入なしにVCRと直接通信できます (デイジーチェーン接続)。また、1,023バスに対してアドレス指定ができ、バスあたり最大63デバイスまで接続できますが、実際に複数デバイスを接続した場合、指定機能にかかわらず使用できる帯域幅には限度があります。
データを転送できる距離はさまざまです。標準のIEEE 1394ケーブルは4.5メートルです。ワイヤレス技術を使用したり、IEEE 1394ケーブル間にハブを配置したりすることでデータ転送の距離を延長できます。以下は、IEEE 1394デバイスを長距離間で接続する場合のオプションです。
IEEE 1394バスには、2種類のデータ転送方法があり、1つは転送を保証する非同期転送で、もう1つは帯域幅を保証するアイソクロナス転送です。非同期データ転送は、データを受け取ったことを示す確認パケットを受信することで、すべてのデータが正常に転送されたことを保証します。デバイスが非同期転送モードに設定されていて、データを送信した後で確認パケットを受け取らなかった場合、デバイスはコマンドを再送信します。このデータ転送モードはデータが確実に転送されたことを保証します。しかし、再送信する場合もあるので、帯域幅は保証できません。
以下に、データの整合性は保証しますが、帯域幅は保証しない極端な例を挙げてみましょう。バス上にデバイスが10個あり、そのうち9個は低速で100 Kbps、残りの1個は高速で6 Mbpsを必要と想定します。転送するデータの合計はおよそ7 Mbpsになります。一見、50 Mbpsをサポートできるバスではこの設定を使用して問題はないようですが、非同期転送モードではIEEE 1394はラウンドロビンバスアクセスを使用しています。ここで各パケットのサイズが1 KBで、各デバイスがデータを転送するのに25 μ秒かかると想定すると、高速デバイスは250 μ秒ごとに1 KBのパケットしか送信することができず、スループットは4 Mbpsにすぎないことがわかります。この場合、デバイスはすべてのデータを送信できません。
アイソクロナスデータ転送は、帯域幅を保証しますがデータの整合性は保証しません。各デバイスがバス上に設置されると、デバイスはバスの帯域幅を要求します。デバイスが要求する帯域幅の大きさはパケットのサイズ (KB/パケット単位) によって決まります。バスは125 μ秒サイクルに分割されます。各サイクルは非同期サイクルの開始パケットで開始されます。アイソクロナス帯域幅を要求するデバイスには、各サイクルで1つのパケットが保証されます。各デバイスからパケットが送信されると、サイクルの残りを使用して別の非同期転送を行うことができます。全体でみると、各サイクルの約80%がアイソクロナスデータ転送に使用されます。受信側はパケットを受信したという確認を行わないため、データがバスで確実に転送されたかどうか保証できません。しかし、一方で受信されるデータは送信されたデータと合っていることが保証されます。ほとんどの場合 (特にバス上にデバイスが2つしかない構成の場合)、転送は正常に行われます。
IEEE 1394デバイスは特定のレートでデータを転送できますが、アイソクロナス転送の場合、データは複数のサイクルに分割されるので、実際のスループットは異なる方法で計算する必要があります。アイソクロナス転送の各サイクルは125 μ秒であるため、1秒間に8000サイクルあることになります。また、各デバイスは1サイクルにつき1つのパケットを送信します。このため、1秒あたりのバイト数におけるスループットはバイト単位のデバイスのパケットサイズに8000をかけたものになります。
バスの合計帯域幅は、1394バス上のすべてのデバイス間で共有されます。1394a仕様では、デバイスは400、200、100 Mbpsで実行可能で、1394b仕様では800 Mbpsが追加されます。200および100の構成は、レガシー (従来型) デバイスのためにあります。各デバイスには、コントローラを実行するバス速度と必要な帯域幅を含むレジスタセットがあります。帯域幅の割り当ては、バスをリセットするときに行われます。バスリセットは、デバイスが接続されたとき、バスに電源が投入されたとき、デバイスが明示的にバスリセットのコマンドを送信したときに行われます。そのデバイスに十分な帯域幅がない場合、アイソクロナスチャンネルにはアクセスできませんが、バスには検出されます。
全体的スループットはホストコンピュータのバス帯域幅によって決まることに注意してください。ホストにPCIバスがあり、別のPCIデバイスが帯域幅を使用していると、IEEE 1394からPCIバスへ400~800 Mbpsの速度で転送できない場合があります。
IEEE 1394 DCAM (デジタルカメラ仕様) は、IEEE 1394 Trade Associationによって管理されています。この仕様はIEEE 1394の物理バスおよびデータ転送プロトコルに組み込まれています。これによって画像形式のセットを定義し、カメラ内部の制御と通信を記録します。また、デジタルビデオ伝送にアイソクロナスプロトコルを使用すると指定します。必要な帯域幅が保証されるので、ビデオにはアイソクロナスプロトコルが適しています。アイソクロナスプロトコルを使用することで、コンピュータに転送されたフレームが最新のフレームであることが保証されます。データ整合性は保証されませんが、ケーブルが短く、ノイズがほとんどない環境下でバス上に他のデバイスがない場合、データの整合性にほとんど影響はありません。
最新のDCAM仕様は1.3で、1つのバス上に最高16台のカメラまで使用できます。またYUV (ピクセルあたり8、12、16または24ビット) およびRGB (ピクセルあたり24ビット) の圧縮標準を含む標準解像度とカラーフォーマットも使用できます。この仕様では、トリガ、ゲイン、シャッター速度などの標準機能の実装方法も定義しています。この仕様で定義されたフレームレートは1.875 fps~60 fpsの範囲になります。これらの設定が選択されると、カメラは各アイソクロナス転送で送信されるパケットのサイズを自動的に割り当てます。このパケットサイズは固定値で、カメラが消費するアイソクロナス帯域幅の量を決定します。アイソクロナス転送では、すべてのデバイスがパケットを125 μ秒内に納める必要があります。
また、DCAMにはformat 7というオプションがあり、ベンダは画像の形式を定義できます。このモードでは、異なる解像度を異なるフレームレートで取得でき、パケットサイズも変更することができます。各カメラには、離散的なパケットサイズのセットがありますが、ユーザは複数のパケットサイズの中から各解像度とフレームレートに対応するサイズを選択することができます。別の形式では、フレームレートや画像サイズを変更することによってのみパケットサイズを変更できます。
バスに接続できるカメラの数は、各デバイスのバケットサイズと各パケットが転送される速度 (400~800 Mbps) によって決定されます。前述したように、パケットサイズはカメラ設定の現状によって決まります。format 7モードの場合は、ユーザがパケットサイズを制御できます。1つ以上のカメラが大きなパケットを処理するように構成されていると、バスに接続できるカメラの数が制限されます。バスが各カメラに帯域幅を割り当てられない場合、カメラのフレームレートまたはビット深度を小さくする必要があります。または、format 7を使用して、送信するパケットサイズを指定することもできます。パケットサイズを設定する際は、次の事項に注意します。
画像をカメラからホストに転送する時間は速めることができます。これは、パケットサイズを大きくすることで可能ですが、各アイソクロナス転送で他のカメラが転送できるパケット帯域幅が制限されます。フレームレートが低いと、パケットサイズを小さくすることができます。これによって画像の転送時間が長くなりますが、フリーの帯域幅が増えるので他のデバイスが125 μ秒内にパケットを送信できるようになります。下の2つの図を比較してみます。最初の図では、カメラ1は大量の帯域幅を予約しており、250 μ秒内にフルイメージを転送します。しかし、設定したパケットサイズが大きいので、2台目のカメラが使用できる帯域幅が十分にありません。
次の図では、カメラ1のパケットサイズが半分になっています。こうすることで、フレームの転送時間を500 μ秒に増やして全体のフレームレートも保持することができます。2台目のカメラを使用できるだけの帯域幅もフリーになります。この例では、両方のカメラに同じ量のデータがあり、IEEE 1394バスを介して転送する必要があります。
複数のカメラを使用する際に、注意するもう一点は、各カメラの電力消費量です。カメラへの電源がPCIバスから供給されている場合、複数のカメラに供給できる電力がありません。複数カメラを使用する場合、外部電源があるハブを使用してIEEE 1394ポートを拡張することを推奨します。標準的なカメラでは、3~ 5 Wの電力が必要です。ホストコンピュータでカメラが検知されない場合、すべてのカメラに電力が供給されていないことを表しています。
各形式にはYUV 4:4:4、RGB、Mono 8など複数のモードが含まれます。4:4:4は、各3つのカラープレーンで適用される圧縮度を示します。値4はそれぞれ圧縮が適用されていないことを示し、各カラープレーンのデータは1バイト (8ビット) で表されます。値が2の場合は、それに対応するカラープレーンが4ビット (非圧縮カラープレーンの半分) に圧縮されたことを示します。
NI-IMAQdxは、NIが提供するハードウェアドライバで、IEEE 1394バスとの低レベルインタフェースを行います。このドライバには、LabVIEW VI、Vision AssistantおよびVision Builder AIのプラグインサポート、またLabWindows/CVIおよびMicrosoft Visual Studio用のAPIサポートが含まれています。また、Compact Vision Systemに接続されているカメラの構成に必要とされるサポートファイルもインストールされます。インストール完了後、Measurement & Automation ExplorerでIEEE 1394カメラを構成します。このドライバには各アプリケーション開発環境に対応したサンプルプログラムが含まれており、IEEE 1394カメラを使用した集録をすぐに開始できるようになります。NI-IMAQdxは、レガシー (従来型) IEEE 1394カメラ用NI-IMAQドライバもインストールします。
NI-IMAQdxは、Vision Acquisition Softwareパッケージの一部で、ni.comから購入することができます。
NI-IMAQdxを使用してIEEE 1394カメラから集録を行うには、2つのハードウェアオプションがあります。NI 145x Compact Vision System、またはPCに差し込むIEEE 1394ボードを使用することができます。 NIフレームグラバデバイスまたは他社製のボードを使用することができます。
NIでは、NI Compact Vision SystemまたはNI IEEE 1394インタフェースデバイスと簡単に接続できるさまざまなマシンビジョンハードウェアを提供しています。
取り付け
ハードウェアの取り付けおよび構成については、ハードウェアのドキュメントを参照してください。Compact Vision Systemを使用している場合、デバイスに添付のクイックスタートガイドおよびプログラムフォルダ (スタート→すべてのプログラム→National Instruments→Vision→ドキュメント→NI 1450ユーザマニュアル) にインストールされているNI 1450ユーザマニュアルを参照してください。
ハードウェアの取り付け後、次の手順を実行してIEEE 1394カメラを構成します。
1.Measurement & Automation Explorer (MAX) を起動し、F5キーを押して画面を更新します。
2.MAXのツリー構図から、デバイスとインタフェースフォルダの横にあるプラスマークをクリックします。Compact Vision Systemを使用している場合、このシステムは「リモートシステム」の下に表示されます。コンピュータに接続されたIEEE 1394デバイスを使用している場合、マイシステムの下に表示されます。
3.IMAQdxデバイスフォルダの横にあるプラスマークをクリックすると、IEEE 1394デバイスに接続されているカメラの一覧が表示されます。
メモ: レガシー (従来型) IEEE 1394カメラ用NI-IMAQを使用する場合、デバイス (カメラ) を右クリックして使用するドライバを指定します。CVSでは、カメラが両方のカテゴリに自動的に表示されます。
4.MAX画面の上部にある「Snap」ボタンをクリックすると、1つの画像を集録してウィンドウに表示し、「Grab」ボタンをクリックすると連続画像を表示できます。画像はヒストグラム表示でき、ディスクに保存も可能です。
5.MAXウィンドウの下部には4つのタブがあり、それぞれIMAQドライバがカメラから直接読み取るオプションが表示されています。変更できる値もありますが、これらのオプションはカメラ製造元で定義されたものです。上の図に示した「Camera Information」のタブには、カメラに関する情報が含まれています。下に示す「Acquisition Attributes」タブでは、「Video Modes」と「Time-out」の値を変更することができます。Format 7 (下で説明) を使用する場合、「Packet Size」と「Region of Interest」も変更することができます。
メモ:NI Compact Vision Systemを使用している場合、Format 7以外のフォーマットでも「Region of Interest」を変更することができます。これはバス内で転送されるデータ量を変化させるのではなく、アプリケーションソフトウェアがメモリに読み込むデータ量のみを変更させます。Compact Vision SystemでFormat 7を使用した場合、PCでの動作と同じように動作します。
下に示す「Camera Attributes」タブでは、「Brightness」や「Gain」などのカメラオプションを選択することができます。
4つ目に「Bayer Color」タブでは、「Bayer」フォーマットで画像を出力するカメラ用です。この場合、フィルタのグリッドがセンサの上に配置されているため、各ピクセルは1色しか検知しません。他の2色の値は、隣接するピクセルの色の値を補間することで決定されます。以下のドキュメントで、Bayerパターンの詳細が説明されています。
6.必要な位置にカメラを設定した後、MAX画面の上部にある「Save」ボタンをクリックします。
7.MAXを閉じます。
Format 7を構成する
他のフォーマットを使用している場合、モードによってパケットサイズ、フレームレート、Region of Interestは固定されています。しかしformat 7では、パケットサイズまたはRegion of Interestを変更してカメラが予約する帯域幅の量を制御することができ、したがって最大フレームレートを制御できます。上の図にMAXの「Video」タブが表示されています。このタブでFormat 7の以下のアイテムを選択します。
1.「Video」モードでFormat 7を選択します。
2.必要な「Region of Interest」を選択します。
3.「Packet Size」を選択します。
「Packet Size」はFormat 7で変更することができますが、 選択できる値はカメラの製造元が出荷時に定義した値のみです。MAXは自動的にPacket Sizeを一番近い定義値に強制し、その値を表示します。フレーム/秒による最大フレームレートは次の数式を使用して計算します。(バイト単位のパケットサイズx8000) / (幅x高さx深度ピクセルバイト)
メモ: カメラによっては、Format 7モードを使用する場合にカメラのトリガをかけることが必要な場合があります。
プログラミング
NI-IMAQdxドライバは、ユーザマニュアルと関数リファレンスマニュアル (Windowsのスタートメニューからアクセス可能) をインストールします。LabVIEWを使用している場合、IEEE 1394カメラの集録をプログラミングできるVIのパレットもインストールされます。このパレットの名前はIMAQdxです。これには、構成、高レベルVI、低レベルVI、トリガ、IEEE 1394カメラのレジスタへのアクセスが含まれます。
IMAQdxパレットには、レガシー (従来型) IEEE 1394カメラ用NI-IMAQのサブパレットがあります。IMAQdxは、最新かつ最も完全なドライバであり、新たな開発には必ずこれを使用する必要があります。従来型ドライバおよび関数呼び出しは下位互換性があり、旧バージョンで作成したプログラムも動作します。しかし、IMAQdxの関数呼び出しを優先して使用するよう促すためにこれらの関数はグレーアウトされています。
またNI-IMAQdxは、「Snaps」、「Grabs」、「Sequences」、「Triggers」などを行うVIの使用方法を示したさまざまなサンプルプログラムもインストールします。LabVIEWでは、ヘルプ→サンプルを検索にアクセスすると、下の図に示すNIサンプルファインダが開きます。 ハードウェア入力と出力を参照する際、IMAQdx用とIEEE 1394用従来型NI-IMAQ用に別々のフォルダがあります。
次のフロントパネルおよびブロックダイアグラムは、LabVIEWでIEEE 1394カメラのスナップを実行する方法を示したものです。このサンプルでは、IMAQ 2.6.0より新しいバージョンに組み込まれた画像表示制御を使用しています。
フロントパネル
ブロックダイアグラム
ドライバをインストールすると、CVI、Visual Basic、およびCでの集録方法を示したサンプルプログラムもインストールされます。NI-IMAQdxドライバを呼び出す方法の詳細は、ユーザマニュアルおよび関数リファレンスマニュアルを参照してください。
メモ: ni.comでも、該当するすべてのプログラミング環境を含む、多数の有用なサンプルプログラムをオンラインで見つけることができます。
トリガ
DCAM準拠IEEE 1394カメラの一部はトリガをサポートしています。これは旧バーションのIEEE 1394カメラ用NI-IMAQから変更された機能です。次のブロックダイアグラムでは従来型ドライバを示しており、この概念を簡単に説明しています。このプログラムは、上記のスナップサンプルプログラムに「IMAQ1394 Configure Trigger」VIを追加しています。CVI、Visual BasicまたはCでは、「IMAQ1394ConfigureTrigger」関数を使用します。この関数は、アイソクロナスコマンドをカメラに送信し、外部コネクタ上に信号を待機するように伝えます。
このサンプルでは、カメラモードにMode 0を使用しています。DCAM仕様で指定されているトリガには4つのモードがあります。すべてのカメラが全部のモードをサポートしているわけではありません。
モード0~4を使用している場合、カメラに直接接続されている外部デジタル信号が必要です。他社製のIEEE 1394プラグインデバイスを使用している場合、ユーザがこのデジタル信号を提供する必要があります。CVSを使用の場合、ユーザはデジタルI/Oポートを使用してカメラに接続した信号のタイミングを制御します。また、NI製のデジタルデータ集録デバイスはトリガの生成にも使用できます。
IMAQdxでのトリガ関数は、下のブロックダイアグラムに示すようにプロパティノードを使用して制御されます。詳細については、IMAQdxサンプルプログラムの「Triggered Grab」VIを参照してください (NIサンプルファインダから入手可能)。
関連項目
最新版のNI-IMAQdx