メインコンテンツまでスキップ
バージョン: v24.05

デバイス情報へのアクセスと設定

このチュートリアルでは、Aravis APIを使用してデバイス情報を設定する方法を学びます。

前提条件

  • Aravis(SDKパッケージに含まれています)
  • GObject(SDKパッケージに含まれています)

チュートリアル

前回のチュートリアルでAravis APIを使用してデバイス情報を取得する方法を学びました。

一部のGenICamの機能、たとえばGainExposureTimeは書き込み可能ですので、これらの値を変更してカメラを制御しましょう。

必要なモジュールの読み込み

aravisヘッダーを含めるプロセスは、前回のチュートリアルとまったく同じです。詳細はデバイス情報へのアクセスと表示を参照してください。

デバイスへのアクセス

デバイスへアクセスするためのAPIは、前回のチュートリアルとまったく同じです。詳細はデバイス情報へのアクセスと表示を参照してください。

デバイスの現在の値の取得

最初に、GainExposureTimeの現在の値を知りたいです。前回のチュートリアルで学んだように、カメラを開いた後にarv_device_get_float_feature_valueを使用してカメラ情報を取得します。

for (unsigned int i = 0; i < n_devices; ++i){
const char* dev_id = arv_get_device_id (i);
ArvDevice* device = arv_open_device(dev_id, nullptr);

double current_gain = arv_device_get_float_feature_value(device, "Gain", &error);
if (error){
throw std::runtime_error(error->message);
}
printf("%20s : %lf\n", "Gain", current_gain);

double current_exposuretime = arv_device_get_float_feature_value(device, "ExposureTime", &error);
if (error){
throw std::runtime_error(error->message);
}
printf("%20s : %lf\n", "ExposureTime", current_exposuretime);
...
g_object_unref (device);
}

U3Vデバイスで定義された一般的なキーのいくつかは、以下の表にリストされています。

Feature NameDescriptionType
Gain画像センサのゲインDouble
ExposureTime画像センサの露光時間Double
ヒント

これらのフィーチャキーとタイプは、emvaによるSFNC(Standard Features Naming Convention)で定義されています。ただし、一部のデバイスには独自のフィーチャ、キー、またはタイプがあるかもしれません。すべてのアクセス可能なフィーチャを知るには、arv-tool-0.8を使用してください。詳細は利用可能なGenICam機能の一覧表示を参照してください。

一般的な名前(例):

  • Gainの代わりに、GainRawまたはGainAbsがあるかもしれません。
  • ExposureTimeの代わりに、ExposureTimeBaseAbsまたはExposureTimeRawがあるかもしれません。

一般的なタイプ(例):

  • GainまたはExposureTimeのタイプが整数の場合はarv_device_get_float_feature_valueの代わりに、arv_device_get_integer_feature_valueがあるかもしれません。
動作しない理由

arv-device-error-quarkがエラーを返す場合:

  • デバイスにキーがない(Not found (1)):フィーチャキーが正しいかどうかを確認してください。詳細は利用可能なGenICam機能の一覧表示を参照してください。
  • タイプが間違っていた(Not a ArvGcString (0)またはNot a ArvGcFlaot (0)):フィーチャのタイプが正しいかどうかを確認してください。詳細は利用可能なGenICam機能の一覧表示を参照してください。

デバイスの現在の値の設定

さて、arv_device_set_float_feature_valueのAPIを使用して、GainとExposureTimeの値を更新しましょう。

double new_gain = current_gain + 10.0;
arv_device_set_float_feature_value(device, "Gain", new_gain, &error);
if (error){
throw std::runtime_error(error->message);
}

double new_exposuretime = current_exposuretime + 20.0;
arv_device_set_float_feature_value(device, "ExposureTime", new_exposuretime, &error);
if (error){
throw std::runtime_error(error->message);
}

実際に値が更新されたかどうかを、デバイス情報を再度読み込むことで確認できます。

current_gain = arv_device_get_float_feature_value(device, "Gain", &error);
if (error){
throw std::runtime_error(error->message);
}
printf("%20s : %lf\n", "Gain", current_gain);

current_exposuretime = arv_device_get_float_feature_value(device, "ExposureTime", &error);
if (error){
throw std::runtime_error(error->message);
}
printf("%20s : %lf\n", "ExposureTime", current_exposuretime);

クローズ

Aravisの次の関数を使用すると、メモリリークを回避するためにリソースが解放されます。

g_object_unref (device);
ヒント

Aravis APIの代わりに、arv-toolも使用できます。詳細はAravisのツールを参照してください。

完全なコード

このチュートリアルで使用される完全なコードはこちらです。