콘텐츠로 바로 가기
STAGING SERVER
DEVELOPMENT SERVER

Triggered Image Acquisition#

트리거 방식의 촬영은 이미지를 지속적으로 촬영하는 것이 아니라 특정 시점에 촬영해야 할 때 사용됩니다.

트리거 기능이 없으면 카메라가 자유롭게 작동하기 때문에 중요한 순간을 놓칠 수 있습니다. 트리거 기능을 사용하면 외부 이벤트가 카메라를 작동시켜 정확히 적절한 순간에 피사체를 포착합니다.

이를 통해 다음 사항이 보장됩니다:

  • 이미지는 현실 세계와 동기화됩니다.
  • 측정 결과는 재현 가능합니다.
  • 시스템은 결정론적으로 동작한다.

트리거로 사용할 수 있는 외부 이벤트의 예시:

  • 특정 위치에 도달하는 이동 물체
  • 부품을 감지하는 센서
  • 자동화 시스템의 PLC 신호
  • 조명 펄스 또는 스트로브 현상

이 시각화 자료는 일반적인 워크플로우를 요약한 것입니다:

Trigger → Exposure → Readout → Transfer → Application

셔터 버튼을 누르면 카메라가 노출을 시작합니다. 이 데이터는 센서에서 읽어와 사전 처리된 후 호스트로 전송됩니다. 마지막으로, 이 데이터는 애플리케이션으로 전달됩니다.

대표적인 사용 사례#

다음과 같은 상황에서는 트리거 기반 수집을 사용하십시오:

  • 타이밍이 매우 중요합니다. 이미지는 물리적 사건과 정확히 일치해야 합니다. 예를 들어, 고속 선별 작업의 경우입니다.
  • 움직임을 정확하게 정지시켜야 합니다. 예를 들어, 컨베이어 벨트 검사 시처럼 빠르게 움직이는 물체를 동일한 위치에서 포착해야 할 때입니다.
  • 이 공정은 외부 시스템에 의해 제어됩니다. PLC, 센서, 엔코더 또는 기타 하드웨어가, 예를 들어 로봇 공학 응용 분야에서와 같이, 데이터를 수집할 시점을 결정합니다.
  • 결정론적 동작이 필요합니다. 각 트리거는 정의된 타이밍에 따라 정확히 하나의 프레임을 생성해야 합니다(예: 측정 시스템의 경우).

Software Trigger#

소프트웨어 트리거를 사용하면 외부 하드웨어 이벤트 대신 소프트웨어 호출을 통해 노출을 시작할 수 있습니다. 이는 트리거 원인이 하드웨어 이벤트가 아닌 컴퓨팅 시스템의 상태 변화인 경우에 유용합니다. 일반적으로 하드웨어 트리거만큼 정밀하지는 않지만, 대부분의 경우 충분한 성능을 발휘합니다. 가장 큰 장점은 컴퓨팅 시스템의 출력을 카메라에 연결하는 것보다 더 간편하다는 점입니다.

camera.TriggerSelector.Value = "FrameStart"
camera.TriggerMode.Value = "On"
camera.TriggerSource .Value = "Software"
camera.ExecuteSoftwareTrigger()

예시: 주기적 소프트웨어 트리거 (1 Hz)#

다음 예제에서는 소프트웨어 트리거를 사용하여 매초마다 이미지 노출을 시작합니다.

import time
from pypylon import pylon

def process(image):
    h, w = image.shape[:2]
    center_pixel = image[h // 2, w // 2]
    print("Center pixel:", center_pixel)

with pylon.InstantCamera(pylon.FirstFound) as camera:

    # Open is necessary before accessing the parameters.
    camera.Open()

    # Enable trigger mode.
    camera.TriggerSelector.Value = "FrameStart"
    camera.TriggerMode.Value = "On"
    camera.TriggerSource.Value = "Software"

    camera.StartGrabbing(pylon.GrabStrategy_OneByOne)

    while camera.IsGrabbing():
        camera.ExecuteSoftwareTrigger()

        with camera.RetrieveResult(2000) as grab_result:
            if grab_result.GrabSucceeded():
                image = grab_result.Array
                process(image)
            else:
                print("Grab failed:", grab_result.ErrorDescription)

        time.sleep(1.0)

Hardware Trigger#

사용 사례에 따라 소프트웨어 트리거가 충분히 정밀하지 않거나, 이미 하드웨어 신호가 준비되어 있는 경우, 하드웨어 트리거를 사용하는 것이 가장 좋은 방법입니다.

이 경우, 카메라 모델에 따라 트리거 입력으로 사용할 수 있는 입력 단자가 하나 이상 제공됩니다. 상승 에지 또는 하강 에지를 사용하여 카메라의 노출 시작과 같은 이벤트를 트리거할 수 있습니다.

camera.TriggerSource.Value = "Line1"
camera.TriggerSelector.Value = "FrameStart"
camera.TriggerActivation.Value = "RisingEdge"

예시: 하드웨어 트리거 기반 데이터 수집#

다음 예제에서는 가장 먼저 발견된 카메라의 1번 입력 라인을 사용하여 노출을 시작하고 중앙 픽셀을 출력합니다.

from pypylon import pylon

def process(image):
    height, width = image.shape[:2]
    center_pixel = image[height // 2, width // 2]
    print("Center pixel:", center_pixel)

with pylon.InstantCamera(pylon.FirstFound) as camera:

    # Open is necessary before accessing the parameters.
    camera.Open()

    # Configure hardware trigger
    camera.TriggerSelector.Value = "FrameStart"
    camera.TriggerMode.Value = "On"
    camera.TriggerActivation.Value = "RisingEdge"
    camera.TriggerSource.Value = "Line1"

    camera.StartGrabbing(pylon.GrabStrategy_OneByOne)

    while camera.IsGrabbing():
        with camera.RetrieveResult(5000) as grab_result:
            if grab_result.GrabSucceeded():
                image = grab_result.Array
                process(image)
            else:
                print("Grab failed:", grab_result.ErrorDescription)