レゴの原則によるトリガー
知らない人はいないでしょう。カラフルなプラスチック製ブロックで、組立方式は特許を取得しています。思うままにブロックを組み合わせて、自由な発想で組み立てられます。レゴの原則は、シンプルながら独創性が高く、成功を導くカギであることが判明しました。マシンビジョンの世界でも、この原則を大いに利用しています。
背景
マシンビジョン分野での汎用プログラミングインターフェースとして、GenICam はマシンビジョンカメラのあらゆる機能を標準化し、抽象化しています。Standard Feature Naming Convention (SFNC) の対象として、このようなビジョンカメラ機能向けの多数の実装規則が含まれるようになり、無数のマシンビジョン用途向けの多彩なビルディングブロックシステムが記述されています。この接続オプションにより、これまでほとんど考慮されることがなかったマシンビジョン標準化に付加価値が生まれました。とりわけ、画像撮影のトリガーについて、まだ発見されていない多くの可能性が眠っています。IDS では、ビジョンカメラに標準的なトリガー機能の大多数を搭載し、ユーザーの自由な発想を支援しています。
まだ発見されていない可能性
現在のカメラトリガー信号は単なるハードウェアラインではなく、カメラファームウェアで画像撮影をマイクロ秒単位で開始します。GenICam と SFNC によって、トリガー信号は、定義された動作と多彩な利点を持つ、抽象化信号定義となりました。トリガーのアクティブ化信号 (ソフトウェア) をトリガー対応デバイス入力 (ハードウェア) から分離することで、トリガーのアプリケーションが一層多彩になりました。さらに、画像撮影は外部ソースに制限されなくなりました。カウンター、タイマー、生成された PWM 信号またはソフトウェアイベントも、信号発生デバイスとなり得ます。
Vision Firmware V1.5 のリリースに伴い、IDS カメラのトリガー設定に多数の機能が追加されました。このた め、トリガーソースに無数の接続オプションが可能になりました(露出時間または画像撮影の制御、カウンター またはタイマーの開始など)
トリガーの使用例
タイマー、カウンター、PWM、UserOutput などの機能ブロックも、柔軟に相互接続できます。すると、ビジョンカメラで画像撮影を制御する無数の可能性が生まれます。次の使用例は、IDS ビジョンカメラ (Vision Firmware V1.5) を使用して実装できる多数のトリガーオプションのうちの、ほんの数例です。GenICam ノードツリーを使用して IDS Vision Cockpit で直接再構成できるように記述されています。
非循環画像撮影
コンベアベルトで、さまざまな種類のパーツが搬送されています。光バリアがパーツの画像撮影をトリガーし、パーツを識別するためにバーコードを読み出します。
特性:
- トリガー信号はソフトウェアまたはハードウェアトリガーなどです。
- 非循環トリガー信号は、パーツや距離が異なるために発生します。
- トリガー信号の直後に、露出を伴う撮影が開始されます。
- 鮮明な画像を生成するには、照明条件とコンベアベルトの速度に合わせて露出時間をプリセットします。
- 各トリガー信号について画像は 1 枚だけ撮影されます。
- 撮影と読み出しの時間中は、他のトリガー信号は受理されません。
パラメーター設定
AcquisitionMode = Continuous
ExposureTime = 15000
TriggerSelector = ExposureStart
TriggerMode = On
TriggerSource = Line0
AcquisitionStart コマンドは、トリガー信号を受信するようシステムを設定します。
撮影の開始
Execute AcquisitionStart
"Line0" が TriggerSource として設定されている場合、外部ハードウェアトリガーソースで、光バリアまたはボタンから信号を使用して、露出を開始できます。
"Software" が TriggerSource の場合、ソフトウェアトリガーコマンドを使用します。
撮影
TriggerSource = Software
Execute TriggerSoftware
AcquisitionStop コマンドは撮影モードを終了します。
撮影停止
Execute AcquisitionStop
すでに開始された撮影は、AcquisitionStop コマンドの実行時に、完全に露出されて転送されます。
信号/時間の図
遅延付き画像撮影
コンベアシステムで、構造上の理由からトリガーセンサーをカメラの横に取り付けられない場合、画像撮影を遅延して開始する必要があります。遅延時間はコンベアの速度によって異なります。
特性:
- トリガー信号はソフトウェアまたはハードウェアトリガーなどです。
- 画像撮影は、トリガー信号に関する遅延 (TriggerDelay) 付きの指定された露出時間で開始します。
- TriggerDelay 時間を設定できます (マイクロ秒単位で 0 ~約 16 秒)。
- 各トリガー信号について画像は 1 枚だけ撮影されます。
- 個々のトリガー信号は非循環的に発生します。
- TriggerDelay および撮影中には、その他のトリガー信号は受信されません。
パラメーター設定
AcquisitionMode = Continuous
ExposureTime = 15000
TriggerSelector = ExposureStart
TriggerMode = On
TriggerSource = Line0
TriggerDelay = 500
これらのトリガー設定で、露出は Line0 トリガー信号が発生してから 500 µs 後にならないと開始しません。
TriggerDelay は、その他の任意の TriggerSelector または TriggerSource と一緒に使用できます。
AcquisitionStart コマンドは、トリガー信号を受信するようシステムを設定します。
撮影の開始
Execute AcquisitionStart
"Line0" が TriggerSource として設定されている場合、外部ハードウェアトリガーソースで、光バリアまたはボタンから信号を使用して、露出を開始できます。
AcquisitionStop コマンドは撮影モードを終了します。
撮影停止
Execute AcquisitionStop
すでに開始された撮影は、AcquisitionStop コマンドの実行時に、完全に露出されて転送されます。
信号/時間の図
スケーリングされたトリガー
プリントウェブを IDS カメラを使ってラインスキャンモードで撮影します。エンコーダーでサイクルタイムを指定し、撮影をマシンの速度と同期して、ピクセルを同じサイズに維持できます。ただし、エンコーダーの周波数はライン周波数と同じではないため、サイクルタイムをトリガープリスケーラーで短縮する必要があります。
特性:
- 入力信号がソフトウェアまたはハードウェアトリガー経由で受信されます。
- トリガー信号によって、各画像撮影の指定された露出時間が開始します。
- 各トリガー信号について画像は 1 枚だけ撮影されます。
- x 番目のトリガー信号を TriggerDivider で処理できます。
ExposureStart の開始信号は、画像は信号 4 つについて 1 枚のみ、Line0 で撮影されるように設定されます。
パラメーター設定
AcquisitionMode = Continuous
ExposureTime = 15000
TriggerSelector = ExposureStart
TriggerMode = On
TriggerSource = Line0
TriggerDivider = 4
acquisition を手動で開始すると、システムがトリガー信号を受信する準備が整います。
撮影の開始
Execute AcquisitionStart
"Line0" が TriggerSource として設定されている場合、プリントウェブエンコーダーなどの外部ハードウェアトリガーソースで、露出を開始できます。
AcquisitionStop コマンドは撮影モードを終了します。
撮影停止
Execute AcquisitionStop
すでに開始された撮影は、AcquisitionStop コマンドの実行時に、完全に露出されて転送されます。
信号/時間の図
撮影時間のトリガー
使用例:水滴の落下を観察したい場合を考えます。水滴が画像領域に入ると、光バリアによって検出され、画像撮影が開始します。画像が撮影され、落下する水滴の表面の動きが録画されます。水滴が画像領域から出たときに、画像の下端にある 2 番目の光バリアによって撮影が終了します。
特性:
- トリガー信号のアクティブフェーズ中に、画像は連続的に撮影されます。
- フレームレートと露出時間は固定です。
- 撮影される画像数は、信号のアクティブフェーズの時間と設定されたフレームレートによって決定されます。
撮影設定
AcquisitionMode = Continuous
AcquisitionFrameRate = 30
ExposureTime = 1000
TriggerSelector = AcquisitionStart
TriggerMode = On
TriggerSource = Line0
TriggerActiviation = RisingEdge
TriggerSelector = AcquisitionStop
TriggerMode = On
TriggerSource = Line0
TriggerActiviation = FallingEdge
AcquisitionStart コマンドは、トリガー信号を受信するようシステムを設定します。
撮影の開始
Execute AcquisitionStart
"Line0" が TriggerSource (立ち上がりエッジ) として設定されると、連続撮影が開始します。トリガー信号のエッジが "Line0" に達すると、連続撮影は終了します。
すでに開始された撮影は、AcquisitionStop コマンドの実行時に、完全に露出されて転送されます。
信号/時間の図
循環トリガー
使用例:物体の移動の様子を低速度撮影によって録画したい場合を考えます。露出時間は指定した長さに調整されます。
特性:
- 循環トリガー信号は、タイマーまたは PWM 信号によって生成できます。
- 高周波数信号 (最大 100 kHz) については、PWM 信号の使用をお勧めします。
- 低周波数信号 (たとえば毎分 1 フレーム) には、オプションのトリガー信号でタイマーを使用できます。
- 追加の制御可能な信号レベル (UserOutput など) を使用して、タイマーを一定の間隔で再起動できます。
- トリガー信号によって、各画像撮影の指定された露出時間が開始します。
- 各トリガー信号について画像は 1 枚だけ撮影されます。
パラメーター設定
AcquisitionMode = Continuous
ExposureTime = 15000
TriggerSelector = ExposureStart
TriggerMode = On
TriggerSource = Timer0Start
TriggerDivider = 6
Timer0 は 10 秒間 (10,000,000 µs) 実行するように設定されます。UserOutput0 の信号レベルは "LevelHigh" に設定されている場合、Timer0 は常に再起動されます。ディバイダートリガーと組み合わせることで、6 番目のタイマーだけが、開始すると撮影が実行されます。
タイマー設定
TimerSelector = Timer0
TimerDuration = 10000000
TimerTriggerSource = UserOutput0
TimerTriggerActivation = LevelHigh
acquisition を手動で開始すると、システムがトリガー信号を受信する準備が整います。ただし、タイマーが実行を開始するまで撮影は開始されません。
撮影の開始
Execute AcquisitionStart
UserOutput0 が True (=LevelHigh) に設定されると、タイマーは開始し、最初のフレームが即座に撮影されます。最初に TimerReset コマンドを実行することを推奨します。これにより、最初の間隔も完全な長さにリセットできます。
撮影停止
TimerSelector = Timer0
Execute TimerReset
UserOutput0 = True
これらの設定を使用して、AcquisitionStop が実行されるか、UserOutput0 が False (=LevelLow) に設定されるまで、毎分 1 枚の画像が撮影されます。
撮影停止
UserOutput0 = False
Execute AcquisitionStop
すでに開始された撮影は、AcquisitionStop コマンドの実行時に、完全に露出されて転送されます。
信号/時間の図
トリガーされた露出時間
使用例:カメラは、直接処理されて評価された画像を提供します。ここで画像の露出が過剰か過小かを判定することもできます。パルスジェネレーターを使用して、カメラのパラメーターを変更せずに、次の撮影の露出時間を動的に調整できます。
このタイプの撮影は、「レベル制御露出」または「バルブモード」とも呼ばれています。
特性:
- トリガーパルス幅によって露出時間が決まります。
- 露出開始トリガーが開始した後 (この場合は Line0 の立ち上がりエッジ)、即座に露出が開始します。
- 露出は、トリガー信号が指定する時間まで持続します。
- 露出の最小時間は TriggerControlledExposureTimeMin で定義された時間です。
- 露出の最大時間は TriggerControlledExposureTimeMax です。
- 各トリガー信号について画像は 1 枚だけ撮影されます。
撮影設定
AcquisitionMode = Continuous
TriggerSelector = ExposureStart
TriggerMode = On
TriggerSource = Line0
TriggerActivation = RisingEdge
TriggerSelector = ExposureEnd
TriggerMode = On
TriggerSource = Line0
TriggerActivation = FallingEdge
TriggerControlledExposureTimeMin = 500
TriggerControlledExposureTimeMax = 1000000
パラメーター TriggerControlledExposureTimeMin または TriggerControlledExposureTimeMax を使用して、露出時間を用途に適した時間範囲に制限します。これにより、露出時間の不足や超過を防げます。
AcquisitionStart コマンドは、トリガー信号を受信するようシステムを設定します。
撮影の開始
Execute AcquisitionStart
"Line0" が TriggerSource として設定されている場合、外部パルスジェネレーターが撮影の露出を制御できます。
AcquisitionStop コマンドは撮影モードを終了します。
撮影停止
Execute AcquisitionStop
すでに開始された撮影は AcquisitionStop コマンドの実行時に完全に転送されます。
インターリーブ画像撮影
トリガー制御された露出時間は、使用するカメラのセンサーに応じて、「インターリーブ」処理できます (インターリーブ画像撮影)。センサーは読み出し時間中に点灯し、次の撮影に備えられます。このため、フレームレートの最大化が可能です。TriggerControlledExposureTimeMin パラメーターも、インターリーブの程度を決定します。次の法則が成り立ちます。
- 設定された TriggerControlledExposureTimeMin が高いほど、インターリーブの程度が高くなります。
- TriggerControlledExposureTimeMin が読み出し時間より長いと、インターリーブの程度はこれ以上増えません。
信号/時間の図
最速の計数された画像シーケンス
使用例:カメラは、品質検査を受けるためにコンベアベルト上を搬送されるパーツを撮影します。技術的な理由から光源を固定する手段がないため、露出時間を変えて 3 枚の画像を短時間で連続して撮影します。このうち最適な露出の画像を分析します。
特性:
- 各トリガー信号について、複数の画像を短時間で連続して撮影します (「バースト」)。
- トリガー信号はソフトウェアまたはハードウェアトリガーなどです。
- 露出時間はプリセットされています。
- 一連の画像は、センサーが許容する最速で撮影されます。
- カウンターを画像シーケンスの計数ツールとして使用して、必要な数の画像を取得できたら撮影を自動的に終了します。
- カウンターがアクティブになっているときは、他のトリガー信号は処理されません。
撮影用のパラメーターは、カウンターが「アクティブ」で計数中に画像が撮影されるように設定されます。露出時間は事前に設定しておく必要があります。
パラメーター設定
AcquisitionMode = Continuous
ExposureTime = 15000
TriggerSelector = ExposureStart
TriggerMode = On
TriggerSource = Counter0Active
TriggerActivation = LevelHigh
カウンターは、外部ハードウェア信号 (Line0) によってトリガーされます。終了値 (Duration) は必要な画像シリーズの数に設定されます。計数は ExposureStart イベントに基づきます。開始信号 (CounterTrigger) によって、同時にカウンターのリセットも実行されます(カウンターリセット)。
パラメーター設定
CounterSelector = Counter0
CounterTriggerSource = Line0
CounterResetSource = CounterTrigger
CounterEventSource = ExposureStart
CounterDuration = 3
acquisition を手動で開始すると、システムが準備されます。ただし、カウンターがアクティブになるまで撮影は開始されません。
撮影の開始
Execute AcquisitionStart
ハードウェアトリガー (Line0) を使用して一連の画像を撮影できるようになりました。カウンターがプリセットされた終了値に達すると、撮影は自動的に停止します。
AcquisitionStop コマンドは撮影モードを終了します。
撮影停止
Execute AcquisitionStop
すでに開始された撮影は、AcquisitionStop コマンドの実行時に、完全に露出されて転送されます。
信号/時間の図
固定フレームレートによる計数された画像シーケンス
使用例:カメラを信号機に取り付けて使用し、信号が赤のときに停止線を横切った車両の動きを録画します。フレームレートを調整した一連の画像から、速度、ブレーキ操作、方向の変更について判断を下せます。これにより、低速で停止線をうっかり通り越して停止した運転手と、停止せずに本当に交通違反を犯した運転手とを、見分けることができます。
特性:
- トリガー信号ごとに、定義された数の画像が撮影されます。
- トリガー信号はソフトウェアまたはハードウェアトリガーなどです。
- 露出時間はプリセットされています。
- 画像シリーズは指定されたフレームレートで撮影されます。
- カウンターを画像シーケンスの計数ツールとして使用して、必要な数の画像を取得できたら撮影を自動的に終了します。
- カウンターがアクティブになっているときは、他のトリガー信号は処理されません。
撮影用のパラメーターは、カウンターが「アクティブ」で計数中に画像が撮影されるように設定されます。露出時間とフレームレートは事前に設定しておく必要があります。
ハードウェアトリガー (Line0) が画像シリーズの録画を開始します。この処理は、Counter0 終了値に達すると、自動的に停止します。
パラメーター設定
AcquisitionMode = Continuous
AcquisitionFrameRate = 30
ExposureTime = 30000
TriggerSelector = AcquisitionStart
TriggerMode = On
TriggerSource = Line0
TriggerSelector = AcquisitionStop
TriggerMode = On
TriggerSource = Counter0End
カウンター終了値 (Duration) は必要な画像シリーズの数に設定されます。計数は FrameStart イベントに基づきます。開始信号 (CounterTrigger) によって、同時にカウンターのリセットも実行されます(カウンターリセット)。
パラメーター設定
CounterSelector = Counter0
CounterTriggerSource = AcquisitionStart
CounterResetSource = CounterTrigger
CounterEventSource = FrameStart
CounterDuration = 3
acquisition を手動で開始すると、システムが準備されます。
撮影の開始
Execute AcquisitionStart
ハードウェアトリガー (Line0) が画像シリーズを開始します。
AcquisitionStop コマンドは撮影モードを終了します。
撮影停止
Execute AcquisitionStop
すでに開始された撮影は、AcquisitionStop コマンドの実行時に、完全に露出されて転送されます。
信号/時間の図
最速の時間制御された画像シーケンス
使用例:異なる表面への水滴の衝突を調べる場合を考えます。このためには、水滴が画像領域内に落下したときに撮影をトリガーします。この場合、衝突による動きを録画するため、撮影のフレームレートは、指定した時間について最大に設定します。
特性:
- 各トリガー信号について、複数の画像を短時間で連続して撮影します (「バースト」)。
- トリガー信号はソフトウェアまたはハードウェアトリガーなどです。
- 露出時間はプリセットされています。
- 一連の画像は、センサーが許容する最速で撮影されます。
- タイマーを画像シーケンスの計数ツールとして使用して、必要な数の画像を取得できたら撮影を自動的に終了します。
- タイマーがアクティブになっているときは、他のトリガー信号は処理されません。
「バースト」の速度とデータ量に応じて、データインターフェースの最大帯域幅を超過することがあります。そのため、このようなバーストを設定できるか確認し、設定できる場合は、バーストの持続時間と、個々のバースト間に必要な間隔を確認します。
撮影用のパラメーターは、Timer0 が「アクティブ」で実行中に画像が撮影されるように設定されます。つまり、撮影後にセンサーの準備が整い次第、次の撮影が即座に開始されます。
撮影設定
AcquisitionMode = Continuous
ExposureTime = 15000
TriggerSelector = ExposureStart
TriggerMode = On
TriggerSource = Timer0Active
TriggerActivation = LevelHigh
タイマーは、外部ハードウェア信号 (Line0) の立ち上がり信号エッジによってトリガーされます。持続時間 (TimerDuration) は丁度 1 秒 (1 s = 1000000 µs) に設定されます。
タイマーの設定
TimerSelector = Timer0
TimerDuration = 1000000
TimerTriggerSource = Line0
TimerTriggerActivation = RisingEdge
acquisition を手動で開始すると、システムがトリガー信号を受信する準備が整います。
撮影停止
Execute AcquisitionStart
ハードウェアトリガー (Line0) を使用して一連の画像を撮影できるようになりました。タイマーがプリセットされた時間に達すると、撮影は自動的に停止します。
AcquisitionStop コマンドは撮影モードを終了します。
撮影停止
Execute AcquisitionStop
すでに開始された撮影は、AcquisitionStop コマンドの実行時に、完全に露出されて転送されます。
信号/時間の図
固定フレームレートによる時間制御された画像シーケンス
使用例:応答時間、動作、決定など、特定のイベントが発生したときのテスト対象の反応を分析し、テストします。このためには、外部トリガー信号を受信したときに画像撮影を開始します。事前定義された時間で、適切なフレームレートで画像が撮影され、応答が記録されます。
特性:
- 複数の画像を指定された時間で撮影します。
- トリガー信号はソフトウェアまたはハードウェアトリガーなどです。
- 露出時間はプリセットされています。
- 画像シリーズは指定されたフレームレートで撮影されます。
- タイマーを画像シーケンスの計数ツールとして使用して、必要な数の画像を取得できたら撮影を自動的に終了します。
- タイマーがアクティブになっているときは、他のトリガー信号は処理されません。
連続撮影 (10 fps) は外部トリガー信号 (Line0) で開始し、同時に開始した Timer0 の時間が経過すると終了します。
撮影設定
AcquisitionMode = Continuous
ExposureTime = 15000
AcquisitionFrameRate = 10
TriggerSelector = AcquisitionStart
TriggerMode = On
TriggerSource = Line0
TriggerActivation = RisingEdge
TriggerSelector = AcquisitionEnd
TriggerMode = On
TriggerSource = Timer0End
TriggerActivation = RisingEdge
タイマーは、画像撮影 (AcquisitionStart) が開始したときにトリガーされ、丁度 1 秒 (1 s = 1000000 µs) に設定されます。
タイマーの設定
TimerSelector = Timer0
TimerDuration = 1000000
TimerTriggerSource = AcquisitionStart
TimerTriggerActivation = RisingEdge
acquisition を手動で開始すると、システムがトリガー信号を受信する準備が整います。
撮影停止
Execute AcquisitionStart
ハードウェアトリガー (Line0) を使用して一連の画像を撮影できるようになりました。タイマーがプリセットされた時間に達すると、撮影は自動的に停止します。追加のハードウェアトリガーはそれぞれ、新しい一連の画像を開始します。
AcquisitionStop コマンドは撮影モードを終了します
撮影停止
Execute AcquisitionStop
すでに開始された撮影は、AcquisitionStop コマンドの実行時に、完全に露出されて転送されます。
信号/時間の図
トリガーのヒント
次のヒントとメモは、ミスを防ぎ、トリガー機能の動作をよりよく理解するためのものです。
- インデントされたパラメーターは、複数回発生し、親ノードごとに異なる値を持つ場合があります。
- 必ず、非アクティブ (OFF) にする必要がないトリガーソースを設定してください。
- すでに開始された画像撮影は、制御信号がそのうち終了しても、常に完全に露出および転送されます。
- トリガーパラメーターを設定するには、画像撮影を停止する必要があります (AcquisitionStop)。設定したトリガーをその後も使用するには、画像撮影を再度開始する必要があります (AcquisitionStart)。
- トリガーモードが有効になっている場合 (TriggerMode = ON)、AcquisitionStart コマンドによって画像撮影は "ready" に設定されます。画像撮影は、設定された TriggerSource. に定義されたトリガー信号でのみ開始します。
- 画像を連続してトリガーする場合、通常、AcquisitionMode は continuous に設定されます。それ以外の場合、1 枚の画像 (Single Frame) または X 枚の画像 (Multi Frame) が撮影されると、画像撮影は自動的に終了します。
- "UserOutputs" を使用して、外部トリガー信号を簡単にシミュレーションできます。
外部トリガー信号のシミュレーション
複雑なトリガーアプリケーションをテストしたいのにハードウェア信号がない場合は、トリガー信号をシミュレーションできます。このためには、UserOutput を Line (ハードウェア入力) に設定し、出力として設定します。すると、UserOutput を使用して、ハードウェア信号が存在するかのように Line をアクティブ化および非アクティブ化できるようになります。
例: シミュレーションされた Line2 上のハードウェアトリガー
撮影設定
TriggerSource = Line2
Line2 は、UserOutput0 からの信号入力による出力と同様に、設定されます。
ライン設定
LineSelector = Line2
LineMode = Output
LineSource = UserOutput0
画像撮影がアクティブになると、システムはトリガーを受理する準備ができます。
撮影の開始
Execute AcquisitionStart
UserOutput0 のオンとオフを切り替えると、Line2 上のトリガー信号がアクティブになり、アプリケーションがトリガーされます。UserOutputValue がアクティブになると信号が作成されます。
撮影の開始
UserOutputSelector = UserOutput0
UserOutputValue = true
UserOutputValue = false
まとめ
IDS GigE Vision Firmware V1.5 のリリースにより、IDS は IDS ビジョンカメラを大幅に強化し、GenICam Standard Feature Naming Convention から多数の標準機能を追加しました。IDS Vision Cockpit では、理想的なデモツールも提供しています。ここで説明したトリガーの使用例を再構成し、徹底的にテストできます。
詳細情報や新しい IDS Vision Firmware のダウンロードについては、IDS のダウンロードページにある。
IDS Vision Suite 1.1 をインストール済みの場合は、対応するファームウェアファイル (*.guf) をダブルクリックするだけで、IDS GigE Vision カメラのファームウェアアップデートを簡単に開始できます。