콘텐츠로 건너뛰기
STAGING SERVER
DEVELOPMENT SERVER

Optic Control#

Optic Control 기능을 사용하면 Lenses 등 광학 장치를 제어할 수 있습니다.

이 기능은 카메라, 조명 장치 및 광학 장치(예: 렌즈)가 서로 직접 통신할 수 있게 해주는 SLP 프로토콜을 기반으로 합니다.

정보

구형 Basler 조명(without ILC) 및 단종된 Basler Camera Lights에 대한 문서는 현재 Basler Product Documentation에 더 이상 포함되어 있지 않습니다. 이 제품들에 관한 정보가 필요한 경우, 여기를 클릭하여 다운로드할 수 있는 이전 릴리스의 오프라인 문서를 참조하십시오.

정보

dart M camera modules의 경우, 현재 Basler dart M 인터페이스 Board(Interface Board ⁠dart M GigE RJ45 PoE 또는 ⁠Interface Board dart M GigE RJ45 AUX 중 하나)를 사용하는 경우에만 Optic Control 기능을 사용할 수 있습니다.

기능 사용법#

Optic Control 기능을 사용하려면 다음 항목이 필요합니다.

  • 오토포커스 기능이 있는 Basler Lens.
    적합한 렌즈에 대한 정보는 Partner Liquid Lens 항목의 Optotune Lenses 또는 Partner Motorized Lenses 항목의 Computar LensConnect Series with Variable Focal Length 섹션을 참조하십시오.
  • 광학 렌즈를 카메라에 연결하기 위한 적합한 Basler Lens Sync Cable. Sync Cable을 사용하면 조명 장치와 렌즈를 부착하고 카메라의 단일 GPIO port를 통해 제어할 수 있습니다. 필요한 Basler Sync Cable은 작동하려는 주변 장치에 따라 다릅니다.
    사용 가능한 케이블 변형 및 지원되는 사용 사례에 대한 정보는 Basler Sync Cables를 참조하십시오.
  • Peripheral Device Control 기능이 포함된 펌웨어를 실행하는 호환 가능한 카메라.

광학 장치 초기화#

광학 장치를 사용하려면 먼저 초기화해야 합니다.

광학 장치를 초기화하는 방법:

  1. Preparing Peripheral Devices 및 Checking and Clearing Errors에 설명된 단계를 따르십시오.
  2. 제어할 광학 장치를 선택합니다.
    첫 번째 광학 장치의 경우, OpticControllerSelector (으)로 Optic1.
  3. 다음을 실행합니다. OpticControllerInitialize command를 설정하여 부착된 렌즈를 초기화합니다.
    렌즈 유형에 따라 내부 모터가 움직이는 것을 볼 수 있습니다. 초기화 시간도 렌즈 유형에 따라 다릅니다.
  4. 다음 항목을 모니터링합니다. OpticControllerStatus parameter. 초기화가 완료되면 이 parameter의 값은 Ready여야 합니다. 그렇지 않은 경우, 오류 확인 및 지우기 아래 내용을 참조하십시오.

연결된 렌즈에 따라 해당 렌즈가 지원하는 parameter만 구성할 수 있습니다.

아래 표에서는 광학 장치 내부에 있는 광학 컨트롤러가 가질 수 있는 가능한 상태에 대한 개요를 제공합니다.

Value 의미
Ready 광학 장치를 사용할 준비가 되었습니다.
Busy 광학 장치가 현재 작업을 처리 중이므로 일시적으로 새 command를 사용할 수 없습니다.
NotConnected 광학 장치가 카메라에 연결되어 있지 않거나 감지할 수 없습니다.
NotInitialized 광학 장치가 아직 초기화되지 않았습니다. 장치를 초기화하려면 다음을 실행하십시오. OpticControllerInitialize명령입니다.
Error 광학 장치에서 오류가 발생했습니다. 자세한 내용은 Error Statuses 표를 참조하십시오.
Initializing 광학 장치가 현재 초기화 중입니다. 이 과정에서 장치를 작동하지 못할 수 있습니다.

초점 구성#

수동 초점#

수동 포커스는 미리 정의된 설정 간에 반복해서 전환해야 할 때 가장 좋습니다. 자동 초점과 달리 여러 이미지를 분석할 필요가 없으므로 빠르게 작동합니다. 속도는 렌즈 유형에 따라 다릅니다.

  • 액체 렌즈는 일반적으로 약 20밀리초 만에 새로운 포커스로 전환됩니다.
  • 전동 렌즈의 경우 속도는 변경 폭에 따라 다릅니다.
    가장 가까운 포커스 위치에서 가장 먼 포커스 위치로 이동하는 것은 중간 위치 간을 전환하는 것보다 훨씬 오래 걸립니다.

다음 항목에 언급된 모든 렌즈는 기능 사용법 위에서 언급한 렌즈는 다음을 사용한 포커스 제어를 지원합니다. FocusStepper 파라미터. 파라미터 값은 직접적인 물리적 의미를 갖지 않습니다. 대신 렌즈가 지원하는 포커스 범위가 정수 범위에 매핑되며, 0 은(는) 가장 가까운 포커스 거리에 해당하고 최대값 FocusStepper 은(는) 가장 먼 포커스 거리에 해당합니다.

일부 캘리브레이션된 렌즈는 다음을 사용한 포커스 제어도 지원합니다. FocalPower 파라미터. 이 파라미터는 렌즈의 광학 파워를 디옵터 단위로 지정하는 부동 소수점 값입니다.

자동 초점#

카메라는 렌즈 포커스를 자동으로 조절하여 이미지에서 가장 선명한 초점을 얻을 수 있습니다. 카메라의 이미지 센서로 캡처한 이미지를 사용합니다.

정보

자동 초점

  • 자동 초점은 이미지 기반이며 사용자 정의 ROI(Region of Interest) 내에서 작동합니다. 자동 초점에는 ROI 3을 사용해야 합니다.
  • 자동 초점 ROI에는 크기 제한(최대 256 x 256픽셀)이 있으며 전체 이미지 영역을 커버할 수 없습니다. 결과적으로 자동 초점은 전체 이미지가 아니라 구성된 Auto Function ROI 내의 이미지 데이터만 평가합니다.
  • 자동 초점 프로세스에는 여러 이미지 획득이 필요합니다. 따라서 초점을 맞추는 데 필요한 시간은 카메라의 프레임 레이트에 크게 좌우됩니다. 일반적으로 프레임 레이트가 높을수록 자동 초점 동작이 빨라집니다.

정보

자동 초점을 위한 이미지 요구 사항

  • 자동 초점이 안정적으로 작동하려면 이미지에 충분한 대비가 있어야 합니다.
  • 균일하거나 대비가 낮은 표면은 정확한 초점 조절에 필요한 이미지 세부 정보를 제공하지 못할 수 있습니다.
  • 가장자리, 바코드, 텍스트 및 기타 뚜렷한 구조물은 자동 초점 성능과 정확도를 크게 향상시킬 수 있습니다.

오토포커스를 사용하려면 다음을 수행하십시오.

  1. 오토포커스 파라미터는 다음 위치에 있습니다. Auto Function Control 기능 트리 카테고리입니다.
    이 카테고리를 열어 조정하십시오.
  2. 컬러 카메라에서는 다음을 사용하십시오. BslAutoFocusColorSelect 파라미터는 오토포커스에 사용할 컬러 채널을 선택합니다.
    렌즈의 초점 거리는 빛의 파장에 따라서도 달라지므로, 최적의 초점 설정은 빨간색, 초록색, 파란색 빛에 따라 약간씩 다릅니다. 대부분의 애플리케이션에서는 기본 설정인 Green이(가) 좋은 선택입니다.
  3. 사용 BslAutoFocusStepperLowerLimit 및 BslAutoFocusStepperUpperLimit 카메라가 검색하는 초점 범위를 제한하려면 다음을 수행하십시오.
    개체가 나타날 거리 범위를 알고 있는 경우, 두 한계값을 해당하는 값으로 설정하십시오. FocusStepper 값을 지정하십시오. 이렇게 하면 오토포커스 속도가 크게 빨라질 수 있습니다.
  4. 다음을 사용하십시오. FocusAutoMode 파라미터를 사용하여 카메라가 초점을 자동으로 제어하는 방식을 선택하십시오.
    • 이름이 다음으로 시작하는 모드에서는 ImageBased, 카메라가 이미지 데이터를 분석하여 현재 씬의 초점을 평가합니다. ImageBased 은(는) 기본 모드이며 대부분의 상황에 적합합니다. 카메라는 최적의 초점을 찾기 위해 포커스 위치를 단계별로 이동하면서 이미지를 캡처합니다.
    • ImageBasedFast 은(는) 캡처되는 이미지 수를 줄여 오토포커스가 더 빨리 완료되도록 하지만, 정확도가 떨어지고 불리한 조건에서는 최적점을 놓칠 수 있습니다.
    • ImageBasedAccurate 은(는) 특히 상하한 포커스 제한과 함께 사용할 때 정확도를 향상시킬 수 있습니다.
  5. Auto Function ROI 기능을 사용하여 오토포커스에 사용할 ROI 3을 선택하십시오.
    오토포커스용 ROI 3은 최대 256 x 256 픽셀 크기로 제한됩니다. 더 작은 값도 사용할 수 있습니다.
  6. 이미지 그랩을 시작하십시오.
    오토포커스에는 이미지 취득이 필요합니다.
  7. 설정 FocusAuto (으)로 Once 오토포커스를 시작하려면 다음을 수행하십시오.
    카메라는 이미지를 그랩하는 동안 초점을 조정합니다. 작업이 완료되면 다음을 설정합니다. FocusStepper 을(를) 찾은 최적의 값으로 설정하고 다음을 재설정합니다. FocusAuto (으)로 Off.

정보

이 FocalPower 파라미터는 연결된 렌즈가 보정된 광학 파워 값을 제공하는 경우에만 사용할 수 있습니다. 이 파라미터에 대한 지원 여부는 렌즈 제조업체에 따라 다릅니다.

자동 초점 속도 향상#

오토포커스에 소요되는 시간을 줄이려면 다음 권장 사항을 고려하십시오.

  • 초점 제한 설정 (BslAutoFocusStepperLowerLimit 및 BslAutoFocusStepperUpperLimit) 자동 포커스가 최적의 포커스 위치를 검색하는 범위를 제한합니다.
  • 자동 포커스 동작 중에 Image ROI를 줄이면 달성 가능한 프레임 레이트를 최대화하고 자동 포커스가 더 빨리 완료되도록 할 수 있습니다.
  • 빠른 포커스 조정을 지원하는 고속 렌즈를 사용하십시오.

조리개 구성#

렌즈가 조리개 제어를 지원하는 경우, ApertureStepper 파라미터를 사용하여 조리개 개방을 조정할 수 있습니다. 파라미터 값은 물리적 조리개(f-number)를 나타내지 않습니다. 대신 렌즈가 지원하는 조리개 범위를 정수 범위로 매핑하며, 여기서 값이 0 는 가장 넓은 조리개 개방에 해당하고 최대 ApertureStepper 값은 최소 조리개 개방을 나타냅니다.

초점 거리 구성#

렌즈가 초점 거리 제어를 지원하는 경우, FocalLengthStepper 파라미터를 사용하여 초점 거리, 즉 줌을 조정하십시오. 파라미터 값은 직접적인 물리적 의미를 갖지 않습니다. 대신 렌즈가 지원하는 초점 거리 범위를 정수 범위로 매핑하며, 여기서 0은 가장 짧은 초점 거리에 해당하고 최대 FocalLengthStepper 값은 렌즈가 지원하는 가장 긴 초점 거리에 해당합니다.

초점 거리를 변경한 후에는 포커스 위치가 이동할 수 있으므로 포커스를 다시 조정해야 할 수 있습니다.

오류 확인 및 지우기#

Error Statuses#

이 BslPeripheralDeviceErrorStatus 파라미터는 다음 값을 가질 수 있습니다.

Value 의미
Communication Error 광학 장치와 카메라 간의 데이터 전송에 결함이 있는 경우 통신 오류가 발생합니다. 이는 너무 긴 케이블을 사용했거나 라인에 노이즈가 너무 많기 때문일 수 있습니다.
Connection Lost 이전에 연결되었던 광학 장치와의 연결이 끊어졌습니다. 예를 들어 케이블이 느슨해진 경우에 발생할 수 있습니다.
No Error 오류가 감지되지 않았습니다.
Not Connected 광학 장치가 카메라에 연결되어 있지 않거나 아직 열거되지 않았습니다. 실행: BslPeripheralEnumerateDevices 장치를 열거하는 명령입니다.
지원되지 않는 장치 버전입니다. 광학 장치가 현재 카메라와 호환되지 않습니다. 펌웨어 업데이트 가능 여부를 확인하려면 지원팀에 문의하십시오.

샘플 코드#

정보

코드 샘플은 펌웨어에 Peripheral Devices Control 기능이 포함된 ace 2, boost R 및 dart M 카메라에만 적용됩니다.

ace 2, boost R, dart M Cameras#
// Select and initialize the optic controller.
camera.OpticControllerSelector.SetValue(OpticControllerSelector_Optic1);
camera.OpticControllerInitialize.Execute();

// Set focus position manually using stepper (0 = nearest focus position).
camera.FocusStepper.SetValue(1000);

// Set focus position manually using focal power (0 = nearest focus position).
camera.FocalPower.SetValue(1.0);

// Set aperture (0 = maximum aperture opening).
camera.ApertureStepper.SetValue(50);

// Set focal length (0 = shortest focal length).
camera.FocalLengthStepper.SetValue(200);

// Configure the autofocus ROI.
camera.AutoFunctionROISelector.SetValue(AutoFunctionROISelector_ROI3);
camera.AutoFunctionROIUseFocus.SetValue(true);
camera.AutoFunctionROIWidth.SetValue(128);
camera.AutoFunctionROIHeight.SetValue(128);
camera.AutoFunctionROIOffsetX.SetValue(840);
camera.AutoFunctionROIOffsetY.SetValue(480);

// Use the green color channel for focus evaluation.
camera.BslAutoFocusColorSelect.SetValue(BslAutoFocusColorSelect_Green);

// Restrict the autofocus search range.
// Limiting the range speeds up the focusing process.
camera.BslAutoFocusStepperLowerLimit.SetValue(800);
camera.BslAutoFocusStepperUpperLimit.SetValue(1200);

// Configure autofocus behavior.
camera.FocusAutoMode.SetValue(FocusAutoMode_ImageBased);

// Start autofocus.
camera.FocusAuto.SetValue(FocusAuto_Once);
INodeMap& nodemap = camera.GetNodeMap();
// Select and initialize the optic controller.
CEnumParameter(nodemap, "OpticControllerSelector").SetValue("Optic1");
CCommandParameter(nodemap, "OpticControllerInitialize").Execute();

// Set focus position manually using stepper (0 = nearest focus position).
CIntegerParameter(nodemap, "FocusStepper").SetValue(1000);

// Set focus position manually using focal power (0 = nearest focus position).
CFloatParameter(nodemap, "FocalPower").SetValue(1.0);

// Set aperture (0 = maximum aperture opening).
CIntegerParameter(nodemap, "ApertureStepper").SetValue(50);

// Set focal length (0 = shortest focal length).
CIntegerParameter(nodemap, "FocalLengthStepper").SetValue(200);

// Configure autofocus ROI.
CEnumParameter(nodemap, "AutoFunctionROISelector").SetValue("ROI3");
CBooleanParameter(nodemap, "AutoFunctionROIUseFocus").SetValue(true);
CIntegerParameter(nodemap, "AutoFunctionROIWidth").SetValue(128);
CIntegerParameter(nodemap, "AutoFunctionROIHeight").SetValue(128);
CIntegerParameter(nodemap, "AutoFunctionROIOffsetX").SetValue(840);
CIntegerParameter(nodemap, "AutoFunctionROIOffsetY").SetValue(480);

// Use the green color channel for focus evaluation.
CEnumParameter(nodemap, "BslAutoFocusColorSelect").SetValue("Green");

// Restrict the autofocus search range.
// Limiting the range speeds up the focusing process.
CIntegerParameter(nodemap, "BslAutoFocusStepperLowerLimit").SetValue(800);
CIntegerParameter(nodemap, "BslAutoFocusStepperUpperLimit").SetValue(1200);

// Configure autofocus behavior.
CEnumParameter(nodemap, "FocusAutoMode").SetValue("ImageBased");

// Start autofocus.
CEnumParameter(nodemap, "FocusAuto").SetValue("Once");
// Select and initialize the optic controller.
camera.Parameters[PLCamera.OpticControllerSelector].SetValue(PLCamera.OpticControllerSelector.Optic1);
camera.Parameters[PLCamera.OpticControllerInitialize].Execute();

// Set focus position manually using stepper (0 = nearest focus position).
camera.Parameters[PLCamera.FocusStepper].SetValue(1000);

// Set focus position manually using focal power (0 = nearest focus position).
camera.Parameters[PLCamera.FocalPower].SetValue(1.0);

// Set aperture (0 = maximum aperture opening).
camera.Parameters[PLCamera.ApertureStepper].SetValue(50);

// Set focal length (0 = shortest focal length).
camera.Parameters[PLCamera.FocalLengthStepper].SetValue(200);

// Configure autofocus ROI.
camera.Parameters[PLCamera.AutoFunctionROISelector].SetValue(PLCamera.AutoFunctionROISelector.ROI3);
camera.Parameters[PLCamera.AutoFunctionROIUseFocus].SetValue(true);
camera.Parameters[PLCamera.AutoFunctionROIWidth].SetValue(128);
camera.Parameters[PLCamera.AutoFunctionROIHeight].SetValue(128);
camera.Parameters[PLCamera.AutoFunctionROIOffsetX].SetValue(840);
camera.Parameters[PLCamera.AutoFunctionROIOffsetY].SetValue(480);

// Use the green color channel for focus evaluation.
camera.Parameters[PLCamera.BslAutoFocusColorSelect].SetValue(PLCamera.BslAutoFocusColorSelect.Green);

// Restrict the autofocus search range.
// Limiting the range speeds up the focusing process.
camera.Parameters[PLCamera.BslAutoFocusStepperLowerLimit].SetValue(800);
camera.Parameters[PLCamera.BslAutoFocusStepperUpperLimit].SetValue(1200);

// Configure autofocus behavior.
camera.Parameters[PLCamera.FocusAutoMode].SetValue(PLCamera.FocusAutoMode.ImageBased);

// Start autofocus.
camera.Parameters[PLCamera.FocusAuto].SetValue(PLCamera.FocusAuto.Once);
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
/* Select and initialize the optic controller. */
errRes = PylonDeviceFeatureFromString(hdev, "OpticControllerSelector", "Optic1");
CHECK(errRes);
errRes = PylonDeviceExecuteCommandFeature(hdev, "OpticControllerInitialize");
CHECK(errRes);

/* Set focus position manually using stepper (0 = nearest focus position). */
errRes = PylonDeviceSetIntegerFeature(hdev, "FocusStepper", 1000);
CHECK(errRes);

/* Set focus position manually using focal power (0 = nearest focus position). */
errRes = PylonDeviceSetFloatFeature(hdev, "FocalPower", 1.0);
CHECK(errRes);

/* Set aperture (0 = maximum aperture opening). */
errRes = PylonDeviceSetIntegerFeature(hdev, "ApertureStepper", 50);
CHECK(errRes);

/* Set focal length (0 = shortest focal length). */
errRes = PylonDeviceSetIntegerFeature(hdev, "FocalLengthStepper", 200);
CHECK(errRes);

/* Configure autofocus ROI. */
errRes = PylonDeviceFeatureFromString(hdev, "AutoFunctionROISelector", "ROI3");
CHECK(errRes);
errRes = PylonDeviceSetBooleanFeature(hdev, "AutoFunctionROIUseFocus", 1);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "AutoFunctionROIWidth", 128);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "AutoFunctionROIHeight", 128);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "AutoFunctionROIOffsetX", 840);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "AutoFunctionROIOffsetY", 480);
CHECK(errRes);

/* Use the green color channel for focus evaluation. */
errRes = PylonDeviceFeatureFromString(hdev, "BslAutoFocusColorSelect", "Green");
CHECK(errRes);

/* Restrict the autofocus search range. */
/* Limiting the range speeds up the focusing process. */
errRes = PylonDeviceSetIntegerFeature(hdev, "BslAutoFocusStepperLowerLimit", 800);
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "BslAutoFocusStepperUpperLimit", 1200);
CHECK(errRes);

/* Configure autofocus behavior. */
errRes = PylonDeviceFeatureFromString(hdev, "FocusAutoMode", "ImageBased");
CHECK(errRes);

/* Start autofocus. */
errRes = PylonDeviceFeatureFromString(hdev, "FocusAuto", "Once");
CHECK(errRes);
# Select and initialize the optic controller.
camera.OpticControllerSelector.Value = "Optic1"
camera.OpticControllerInitialize.Execute()

# Set focus position manually using stepper (0 = nearest focus position).
camera.FocusStepper.Value = 1000

# Set focus position manually using focal power (0 = nearest focus position).
camera.FocalPower.Value = 1.0

# Set aperture (0 = maximum aperture opening).
camera.ApertureStepper.Value = 50

# Set focal length (0 = shortest focal length).
camera.FocalLengthStepper.Value = 200

# Configure autofocus ROI.
camera.AutoFunctionROISelector.Value = "ROI3"
camera.AutoFunctionROIUseFocus.Value = True
camera.AutoFunctionROIWidth.Value = 128
camera.AutoFunctionROIHeight.Value = 128
camera.AutoFunctionROIOffsetX.Value = 840
camera.AutoFunctionROIOffsetY.Value = 480

# Use the green color channel for focus evaluation.
camera.BslAutoFocusColorSelect.Value = "Green"

# Restrict the autofocus search range.
# Limiting the range speeds up the focusing process.
camera.BslAutoFocusStepperLowerLimit.Value = 800
camera.BslAutoFocusStepperUpperLimit.Value = 1200

# Configure autofocus behavior.
camera.FocusAutoMode.Value = "ImageBased"

# Start autofocus.
camera.FocusAuto.Value = "Once"

또한 pylon Viewer를 사용하여 파라미터를 손쉽게 설정할 수 있습니다.