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

Triggered Image Acquisition#

Triggered acquisition은 연속적으로 이미지를 캡처하는 대신, 특정 시점에 이미지 캡처가 이루어져야 할 때 사용됩니다.

트리거링이 없으면 카메라가 자유롭게 실행되어 중요한 순간을 놓칠 수 있습니다. 트리거링을 사용하면 외부 이벤트가 카메라를 트리거하여 정확한 순간에 객체를 캡처합니다.

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

  • 이미지가 실제 세계와 동기화됩니다.
  • 측정 결과의 재현성이 보장됩니다.
  • 시스템이 결정론적으로 작동합니다.

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

  • 움직이는 객체가 특정 위치에 도달함
  • 센서가 부품을 감지함
  • 자동화 시스템의 PLC 신호
  • 조명 펄스 또는 스트로브 이벤트

이 시각화 자료는 전형적인 워크플로를 요약합니다:

Trigger → Exposure → Readout → Transfer → Application

트리거를 통해 카메라는 노출을 시작할 수 있습니다. 이는 센서에서 읽혀지고, 전처리된 후 호스트로 전송됩니다. 마지막으로 애플리케이션으로 전달됩니다.

주요 사용 사례#

다음과 같은 상황에서 triggered acquisition을 사용하십시오:

  • 타이밍이 중요한 경우: 예를 들어 고속 선별 작업 시 이미지가 물리적 이벤트와 정확히 일치해야 합니다.
  • 모션을 정확히 정지시켜야 하는 경우: 예를 들어 컨베이어 벨트 검사 시 빠르게 움직이는 객체를 동일한 위치에서 캡처하고자 합니다.
  • 외부 시스템이 프로세스를 제어하는 경우: 예를 들어 로보틱스 애플리케이션에서 PLC, 센서, 엔코더 또는 기타 하드웨어가 캡처 시점을 정의합니다.
  • 결정론적 동작이 필요한 경우: 예를 들어 측정 시스템에서 각 트리거는 정의된 타이밍을 가진 정확히 하나의 프레임을 생성합니다.

Software Trigger#

Software trigger를 사용하면 외부 하드웨어 이벤트 대신 소프트웨어 호출을 통해 노출을 시작할 수 있습니다. 이는 소스가 하드웨어 이벤트가 아니라 컴퓨팅 시스템의 상태 변경일 때 유용할 수 있습니다. 이는 대개 하드웨어 트리거만큼 정밀하지는 않지만 많은 경우에 충분합니다. 주된 장점은 컴퓨팅 시스템의 출력을 카메라에 연결하는 것보다 쉽다는 점입니다.

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

예시: 주기적 Software Trigger (1 Hz)#

다음 예시에서는 software trigger를 사용하여 매초 이미지 노출을 시작합니다.

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#

사용 사례에 software trigger가 충분히 정밀하지 않거나 하드웨어 신호를 이미 사용할 수 있는 경우, hardware trigger를 사용하는 것이 가장 좋습니다.

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

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

예시: Hardware Trigger Acquisition#

다음 예제에서는 검색된 첫 번째 카메라의 입력 라인 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)