3

Pointgrey Firefly MV (正確には FFMV-03M2M/C) を使用しており、シャッターが開始するたびに外部デバイスをトリガーしたいと考えています。データシートによると、カメラは IIDC 1.31 をサポートし、トリガーおよび/またはストロボ信号出力として使用できる 4 つの GPIO も提供します。IIDC規格のセクション 4.11.3 で説明されているように、IIDC を使用してこれらのストローブ信号出力を構成できる必要があります。

私のアプリケーションは C++ で実装されており、libdc1394を使用してカメラへのアクセスと制御を行っています。これまでのところ、すべてうまく機能していますが、ストロボ信号出力を設定することができません。私が libdc と IIDC を理解している限り、次のように最初の出力を有効にすることができるはずです (cameraは有効なへのポインターですdc1394camera_t)。

dc1394error_t err;
uint64_t strobe_offset = 0x200;
uint32_t strobe_settings = 0;

err = dc1394_get_strobe_register(camera, strobe_offset, &strobe_settings);
if (err == DC1394_SUCCESS) {
    /* Set bits 6 (strobe on) and 7 (active-high level)
       IIDC uses msb 0, so we need to shift by 25/24 instead of 6/7 */
    strobe_settings = strobe_settings | (1 << 25) | (1 << 24);

    err = dc1394_set_strobe_register(camera, strobe_offset, strobe_settings);

}

if (err != DC1394_SUCCESS) {
    log(LOG_ERROR, "Failed to set strobe.");
}

これによりエラーは発生しませんが、ストロボ信号出力もオンになりません (カメラがフレームをキャプチャしている場合でも)。また、別のオフセット (0x204、0x208、および 0x20C) を使用して他のすべての出力を試しましたが、役に立ちませんでした。次に、 と のすべての在庫照会フィールドを確認しましたStrobe_CTRL_InqStrobe_[0123]_Inq、すべてストロボ信号出力が存在すると報告されています。しかし興味深いことに、 のOn/Off_InqフィールドはStrobe_[0123]_Inq、出力をオンまたはオフに切り替えることができPolarity_Inqないことを示していますが、極性設定を変更できることを示しています (ストロボ信号出力がオンの場合にのみ設定を変更できるため、実際にはできません)。スイッチオン)。Pointgrey が提供する Windows ベースのドライバー ユーティリティを使用して出力を構成しようとしましたが、問題なく動作します。

私が間違っているかもしれないアイデアはありますか?それとも、このカメラはこの点で IIDC と互換性がありませんか?

更新:わかりました、ストロボ出力を有効にする 3 つの方法を試しました: 元のコードを使用し、回答で提案されているように絶対オフセット 0x1300 を使用し、PointGrey レジスタ リファレンス マニュアルに記載されているようにオフセット 0x1110/0x1114 を使用します。また、遅延、持続時間、および/または方向を設定してみました (PIO をストロボ出力と混同しないでください)。これまでのところ、レジスタとフラグの組み合わせは機能しません。libdc1394 のバグであるか、PointGrey が独自のドライバーで他の魔法を実行している可能性があります。とりあえずあきらめて、外部デバイスをトリガーするための別の解決策を見つけようとします。

4

1 に答える 1

2

(アクセス可能、テクニカルリファレンスにアクセスできない)カメラのドキュメントを閲覧すると、GPIOの方向、つまり入力か出力かを設定する必要があるようです。ドキュメントでは、0x11F8のPIO_DIRECTIONレジスタについて説明しています。ここで、下位ビットはIOが入力(0)または出力(1)のどちらであるかを制御します。おそらくあなたの問題は方向が設定されていないということですか?

http://ptgrey.com/support/downloads/documents/TAN2005002_Output_strobe_signal_pulse.pdf

カメラレジスタマップを標準と比較すると、カメラはこれをサポートしているようです。libdc1394にget/set_strobe_registerAPIのドキュメントが見つかりません。おそらく、カメラで文書化されたレジスタオフセットを使用してgetまたはset_registerを使用すると、より適切に機能します。オフセットとして0x200をどのように計算しましたか?

このhttp://www.cs.unc.edu/Research/stc/FAQs/Cameras_Lenses/PtGrey/DcamRegisterRefManual.pdfは、0x1300でアクセスしようとしているレジスタを文書化しているため、「ストロボ」にアクセスするために適用される既知の固定オフセットがある可能性があります。 「登録?繰り返しになりますが、おそらくset_registerを使用すると、すべてのカメラレジスタに直接アクセスできるため、文書化されている古いセットを使用できます。

もう1つは、ストロボの遅延とカウントを設定する必要があるということです。

于 2011-02-13T00:02:23.757 に答える