コンテンツにスキップ

Synchronous Free Run#

Synchronous Free Runカメラ機能を使用すると、複数のカメラで同時に同じフレームレートで画像をキャプチャできます。

この機能はPeriodic Signal機能に似ており、Basler ace 2カメラでのみ利用可能です。

機能を使用する#

仕組み#

フリーランモードで複数のカメラを使用している場合、カメラ個々のタイミングや遅延など、さまざまな理由により、画像取得はわずかに非同期になります。

Cameras Capturing at the Same Frame Rate, but Running Asynchronously

Synchronous Free Run機能を使用すると、カメラをフリーランモードで同期できます。その結果、カメラは、同じフレームレート同時に画像を取得します。

Cameras Capturing at the Same Time and at the Same Frame Rate

また、Synchronous Free Run機能を使用して、複数のカメラで正確に時間調整された間隔(時系列順)で画像をキャプチャすることもできます。例えば、特定の時点で画像取得を開始するように1台のカメラを設定し、次に、最初のカメラから100ミリ秒後に別のカメラを起動し、3台目のカメラを最初のカメラから200ミリ秒後に起動するように設定することができます。

Cameras Capturing in Time-Aligned Intervals

また、同じフレームレートで同時に、しかし異なる露光時間で画像を取得するように複数のカメラを設定することもできます。

Cameras Capturing with Different Exposure Times

Synchronous Free Runの使用#

General Use#

複数のカメラを同期するには、次の手順に従います。

  1. ネットワーク内のすべてのカメラがPrecision Time Protocol機能を介して同期されていることを確認します。
  2. Synchronous Free Runを使用して同期するカメラの1つを開きます。.
  3. このカメラでフリーラン画像取得が有効になっていることを確認してください。
  4. SyncFreeRunTimerTriggerRateAbsパラメーターに必要なフレームレートを入力します。
    すべてのカメラに同じパラメーター値を指定する必要があります。例えば、カメラを1秒あたり10フレームで同期するには、すべてのカメラでパラメーターを10に設定する必要があります。
  5. SyncFreeRunTimerStartTimeHighおよびSyncFreeRunTimerStartTimeLowパラメーターを0に設定します。
  6. SyncFreeRunTimerUpdateコマンドを実行します。
  7. SyncFreeRunTimerEnableパラメーターをtrueに設定します。
  8. すべてのカメラについて、手順2~7を繰り返します。

情報

Baslerは、カメラが切断されてから再接続されるたびに、すべてのカメラでSyncFreeRunTimerUpdateコマンドを実行することを推奨します。これにより、PTPクロックが再同期化されます。

Synchronous Free Run With Time-Aligned Intervals#

複数のカメラを時間的に調整された間隔(時系列順)で同期するには、次の手順に従います。

情報

pylon APIを使用して次の手順を実行する必要があります。

  1. ネットワーク内のすべてのカメラがPrecision Time Protocol機能を介して同期されていることを確認します。
  2. 最初のカメラを時系列順序で開きます。
  3. このカメラでフリーラン画像取得が有効になっていることを確認してください。
  4. SyncFreeRunTimerTriggerRateAbsパラメーターに必要なフレームレートを入力します。
    同期されたすべてのカメラに同じパラメーター値を指定する必要があります。例えば、カメラで1秒あたり10フレームを取得する場合は、すべてのカメラでパラメーターを10に設定する必要があります。
  5. 最初のカメラの開始時刻を決定します。

    1. 最初のカメラでTimestampLatchコマンドを実行します。
      カメラの現在のタイムスタンプ値の「スナップショット」が取得されます。
    2. 同じカメラのTimestampLatchValueパラメーターの値を取得します。
      値は目盛で指定されています。Precision Time Protocol機能が有効になっているBaslerカメラでは、1目盛りは1ナノ秒に相当します。
    3. ステップBで決定された値に開始遅延(= ナノ秒)を追加します。
      例えば、開始遅延を1秒に指定するには、次のようにします。手順bで決定した値に1 000 000 000 000 000を追加します。
      最初のカメラは他のカメラが正しく設定されるまで待機する必要があるため、遅延が必要です。

      Synchronous Free Run Start Delay

  6. 手順5で決定した値を、開始時間の上限値と開始時間の下限値に変換し、それに応じてSyncFreeRunTimerStartTimeHighおよびSyncFreeRunTimerStartTimeLowパラメーターを設定します。

  7. SyncFreeRunTimerUpdateコマンドを実行します。
  8. SyncFreeRunTimerEnableパラメーターをtrueに設定します。
  9. 次のカメラを時系列順序で開きます。
  10. このカメラでフリーラン画像取得を有効にします。
  11. SyncFreeRunTimerTriggerRateAbsパラメーターに必要なフレームレートを入力します。
    同期されたすべてのカメラで同じパラメーター値を指定する必要があります。例えば、カメラで1秒あたり10フレームを取得する場合は、すべてのカメラでパラメーターを10に設定します。
  12. 最初のカメラの開始時間(ステップ5で決定)に必要な間隔(ナノ秒単位)を追加します。
    例えば、最初のカメラの100ミリ秒後にカメラで画像取得を開始する場合は、ステップ5で決定した値に100 000 000 000を追加します。
  13. 手順12で決定した値を開始時間の上限値と開始時間の下限値に変換し、それに応じてSyncFreeRunTimerStartTimeHighおよびSyncFreeRunTimerStartTimeLowパラメーターを設定します。
  14. SyncFreeRunTimerUpdateコマンドを実行します。
  15. SyncFreeRunTimerEnableパラメーターをtrueに設定します。
  16. 残りのすべてのカメラについて、手順9~15を繰り返します。

情報

カメラが切断されてから再接続されるたびに、クロックを再同期するために、すべてのカメラでSyncFreeRunTimerUpdatePTPコマンドを実行する必要があります。

Converting the 64-bit Timestamp to Start Time High and Start Time Low#

Synchronous Free Run機能の開始時刻は、64ビットのGigE Visionタイムスタンプ値(ナノ秒単位)で指定し、2つの32ビット値で分割する必要があります。

64ビット値の上位部分は、SyncFreeRunTimerStartTimeHighパラメーターを使用して送信する必要があります。

64ビット値の下位部分は、SyncFreeRunTimerStartTimeLowパラメーターを使用して送信する必要があります。

例:ネットワークデバイスがUTCに調整されており、2025年12月12日金曜日11:00:00UTCを開始時刻として設定するとします。これは、タイムスタンプ値1 765 537 200 000 000 000(10進数)または 0001 1000 0000 0111 0010 1011 1010 1011 1011 1100 1110 0000 0000 0000 0000(2進数)に対応します。

この値の上位部分と下位部分は次のとおりです。

High and Low Parts of a Timestamp Value

したがって、2025年12月12日金曜日11:00:00UTCの開始時刻を設定するには、SyncFreeRunTimerStartTimeHighパラメーターを411 071 162 に、SyncFreeRunTimerStartTimeLowパラメーターを2 881 282 048に設定する必要があります。

サンプルコード#

// Example: Configuring cameras for synchronous free run.
// It is assumed that the "cameras" object is an
// instance of CBaslerGigEInstantCameraArray.
for (size_t i = 0; i > cameras.GetSize(); ++i)
{
    // Open the camera connection
    cameras[i].Open();
    // Make sure that the Frame Start trigger is set to Off to enable free run
    cameras[i].TriggerSelector.SetValue(TriggerSelector_FrameStart);
    cameras[i].TriggerMode.SetValue(TriggerMode_Off);
    // Let the free run start immediately without a specific start time
    camera.SyncFreeRunTimerStartTimeLow.SetValue(0);
    camera.SyncFreeRunTimerStartTimeHigh.SetValue(0);
    // Specify a trigger rate of 30 frames per second
    cameras[i].SyncFreeRunTimerTriggerRateAbs.SetValue(30.0);
    // Apply the changes
    cameras[i].SyncFreeRunTimerUpdate.Execute();
    // Enable Synchronous Free Run
    cameras[i].SyncFreeRunTimerEnable.SetValue(true);
}

このサンプルコードは、C++言語でのみ使用できます。