アカデミック 会社 イベント NI Developer Zone サポート ソリューション 製品とサービス お問い合わせ MyNI

ドキュメントタイプ: チュートリアル
NI 製品対応: 有り
発行日: 2009/08/18


フィードバック


はい いいえ

関連カテゴリ

関連リンク - Developer Zone

関連リンク - Products and Services

IEEE 1394用従来型NI-IMAQおよびNI-IMAQdxを使用したFireWire®カメラからの画像集録

評価数 0 | 5 段階中平均 0.00
言語 | 印刷

概要

このドキュメントでは、IEEE 1394(FireWire)をNI製品と一緒に使用する方法について説明します。

はじめに

IEEE 1394カメラは標準インタフェースで使いやすいため、マシンビジョン業界において急速に普及しています。ナショナルインスツルメンツでは、使いやすいAPIを使用してIEEE 1394カメラを制御できるハードウェアドライバを開発しました。このドキュメントでは、IEEE 1394カメラの詳細およびNI計測器ドライバとの併用方法について説明します。

IEEE 1394技術

履歴:
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では最大400Mbps、IEEE 1394bでは最大800Mbpsのレートで動作します。IEEE 1394ケーブルには、4ピン式と6ピン式があります。4ピン式バスは電源を供給しませんが、6ピンの場合は電源供給があります。通信はピアツーピアで、たとえばビデオカメラはPCによる介入なしにVCRと直接通信できます(デイジーチェーン接続)。また、1,023バスに対してアドレス指定ができ、バスあたり最大63デバイスまで接続できますが、実際に複数デバイスを接続した場合、指定機能にかかわらず使用できる帯域幅には限度があります。

データを転送できる距離はさまざまです。標準のIEEE 1394ケーブルは4.5メートルです。ワイヤレス技術を使用したり、IEEE 1394ケーブル間にハブを配置したりすることでデータ転送の距離を延長できます。以下は、IEEE 1394デバイスを長距離間で接続する場合のオプションです。

  • 42 m(ワイヤ、2ノード間で最長4 mまで)
  • 100+ m 光ケーブル(NEC)
  • 20+ m ワイヤレス(Philips)


非同期転送:
IEEE 1394バスには、2種類のデータ転送方法があり、1つは転送を保証する非同期転送で、もう1つは帯域幅を保証するアイソクロナス転送です。非同期データ転送は、データを受け取ったことを示す確認パケットを受信することで、すべてのデータが正常に転送されたことを保証します。デバイスが非同期転送モードに設定されていて、データを送信した後で確認パケットを受け取らなかった場合、デバイスはコマンドを再送信します。このデータ転送モードはデータが確実に転送されたことを保証します。しかし、再送信する場合もあるので、帯域幅は保証できません。


[+] 画像を拡大

次に、データの整合性は保証しますが、帯域幅は保証しない極端な例をあげてみましょう。バス上にデバイスが10個あり、そのうち9個は低速で100 Kbps、残りの1個は高速で6 Mbpsを必要と想定します。転送するデータの合計はおよそ7 Mbpsになります。一見、50 Mbpsをサポートできるバスではこの設定を使用して問題はないようですが、非同期転送モードではIEEE 1394はラウンドロビンバスアクセスを使用しています。ここで各パケットのサイズが1KBで、各デバイスがデータを転送するのに25μ秒かかると想定すると、高速デバイスは250μ秒毎に1KBのパケットしか送信することができず、スループットは4MB/sにすぎないことがわかります。この場合、デバイスはすべてのデータを送信できません。


アイソクロナス転送:
アイソクロナスデータ転送は、帯域幅を保証しますがデータの整合性は保証しません。各デバイスがバス上に設置されると、デバイスはバスの帯域幅を要求します。デバイスが要求する帯域幅の大きさはパケットのサイズ(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 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の電力が必要です。ホストコンピュータでカメラが検知されない場合、すべてのカメラに電力が供給されていないことを表しています。

形式:

  • Format 0: VGA非圧縮(最大640×480)
  • Format 1: VGA非圧縮(最大1024×768)
  • Format 2: VGA非圧縮(最大1600×1200)
  • Format 3、4、5: 予約済み
  • Format 6: 静止画像の保存
  • Format 7: カメラ固有の形式

各形式にはYUV 4:4:4, RGB, Mono 8など複数のモードが含まれます。4:4:4は、各3つのカラープレーンで適用される圧縮度を示します。4の値はそれぞれ圧縮が適用されていないことを示し、各カラープレーンのデータは1バイト(8ビット)で表されます。値が2の場合は、それに対応するカラーぺーンが4ビット(非圧縮カラーぺーンの半分)に圧縮されたことを示します。

NI-IMAQdx

NI-IMAQdxは、ナショナルインスツルメンツが提供するハードウェアドライバで、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は、画像入力ソフトウェアパッケージの一部で、ni.comから購入することができます。

ハードウェアオプション

NI-IMAQdxを使用してIEEE 1394カメラから集録を行うには、2つのハードウェアオプションがあります。NI 145x Compact Vision System、またはPCに差し込むNI IEEE 1394ボート、または他社製のボードを使用することができます。

NI-145xは、LabVIEW Real-Timeで動作する強固なCompact Machine Vision Systemです。以下のような主機能があります。

  • 検査速度を向上した組み込み式高性能プロセッサ
  • 3つの内蔵IEEE 1394カメラ入力
  • イーサネット、シリアル、デジタルI/Oを介してNI Compact FieldPointおよびその他のデバイスとの統合
  • 使用中のビジョンアプリケーションに最適なソフトウェアを選択
  • NI Vision Builder for Automated Inspectionで構成
  • NI LabVIEWとVision開発モジュールによるプログラミング

弊社では、NI Compact Vision SystemsまたはNI IEEE 1394インタフェースデバイスと簡単に接続できるBasler社製のさまざまなIEEE 1394カメラを提供しています。また、Industrial Camera Advisorを検索して、ご使用のNI製品でサポートされているか確認できます。

カメラの取り付け、構成、および使用

取り付け:
ハードウェアの取り付けおよび構成については、ハードウェアのドキュメントを参照してください。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パターンの詳細が説明されています。

Bayer Encoding for Color Images

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をは1番近い定義値に強制し、その値を表示します。フレーム/秒による最大フレームレートは次の数式を使用して計算します: (バイト単位のパケットサイズ × 8000) / (幅×高さ×深度ピクセルバイト)

メモ: カメラによっては、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カメラのスナップを実行する方法を示したものです。このサンプルでは、IMAQ2.6.0より新しいバージョンに組み込まれた画像表示制御を使用しています。


[+] 画像を拡大
フロントパネル


ブロックダイアグラム

ドライバをインストールすると、CVI、Visual Basic、およびCでの集録方法を示したサンプルプログラムもインストールされます。NI-IMAQdxドライバを呼び出す方法の詳細は、ユーザマニュアルおよび関数リファレンスマニュアルを参照してください。

メモ: Developer Zoneのサンプルコードからもサンプルプログラムをダウンロードすることが可能です。

トリガ:
DCAM準拠IEEE 1394カメラの一部はトリガをサポートしています。これは旧バーションのIEEE 1394カメラ用NI-IMAQから変更された機能です。次のブロックダイアグラムでは従来型ドライバを示しており、この概念を簡単に説明しています。このプログラムは、上記のスナップサンプルプログラムに「IMAQ1394 Configure Trigger」VIを追加しています。CVI、Visual BasicまたはCでは、「IMAQ1394ConfigureTrigger」関数を使用します。この関数は、アイソクロナスコマンドをカメラに送信し、外部コネクタ上に信号を待機するように伝えます。


[+] 画像を拡大

このサンプルでは、カメラモードにMode 0を使用しています。DCAM仕様で指定されているトリガには4つのモードがあります。すべてのカメラが全部のモードをサポートしているわけではありません。

  • モード0: カメラは、外部トリガ入力の立ち下がりエッジから集録を開始します。持続時間は「シャッター」属性で指定されます。
  • モード1: カメラは、外部トリガ入力の立ち下がりエッジから集録を開始します。集録時間は外部トリガのLOW状態と同じです。
  • モード2: カメラは、外部トリガ入力の立ち下がりエッジから集録を開始します。集録は、N 番目の外部トリガ入力の立ち下がりエッジで停止します。(Nは制御パラメータで定義されます。)
  • モード3: これは内部トリガモードです。カメラは内部トリガをかけます。サイクル時間は、最速フレームレートのサイクル時間をN(パラメータ)倍した時間です。持続時間は「シャッター」属性で指定されます。
  • トリガを無効にすることもでき、その場合カメラは即座に集録を開始します。

Mode 0~4を使用している場合、カメラに直接接続されている外部デジタル信号が必要です。他社製のIEEE 1394プラグインデバイスを使用している場合、ユーザがこのデジタル信号を提供する必要があります。CVSを使用の場合、ユーザはデジタルI/Oポートを使用してカメラに接続した信号のタイミングを制御します。また、NI製のデジタルデータ集録デバイスはトリガの生成にも使用できます。

IMAQdxでのトリガ関数は、下のブロックダイアグラムに示すようにプロパティノードを使用して制御されます。詳細については、IMAQdxサンプルプログラムの「Triggered Grab」VIを参照してください(NI Example Finderから入手可能)。


[+] 画像を拡大

関連トピック:
How can I tell if my FireWire camera is supported by NI-IMAQ for IEEE 1394?
最新NI-IMAQdxドライバのダウンロード

IEEE 1394カメラ帯域幅表

IEEE 1394帯域幅比較表は下記のExcelファイルのリンクを参照してください。

FireWireは、米国およびその他の国におけるApple, Inc.の登録商標です。

Downloads

firewirebandwidthallocation.xls

評価数 0 | 5 段階中平均 0.00
言語 | 印刷

法律関連事項
本チュートリアル(以下「チュートリアル」という)は、National Instruments(以下「NI」という)によって作成されたものです。本チュートリアルは、NIにてサポートされていますが、本チュートリアルの内容に関するテストや検査が完全に行われていない可能性があり、チュートリアルの品質について、もしくは、関連製品およびドライバの各改訂版に対するサポート継続については、何らの保証も適用されません。本チュートリアルは、いかなる保証もなく「作成された状態のまま」で提供されており、ni.com/jpの使用条件に特別に規定されている特定の制約事項に従うものとします。 (http://ni.com/legal/termsofuse/japan/ja/)