Triggered Image Acquisition#
트리거링이 없으면 카메라가 자유롭게 실행되어 중요한 순간을 놓칠 수 있습니다. 트리거링을 사용하면 외부 이벤트가 카메라를 트리거하여 정확한 순간에 객체를 캡처합니다.
이를 통해 다음 사항이 보장됩니다:
- 이미지가 실제 세계와 동기화됩니다.
- 측정 결과의 재현성이 보장됩니다.
- 시스템이 결정론적으로 작동합니다.
트리거로 사용할 수 있는 외부 이벤트의 예:
- 움직이는 객체가 특정 위치에 도달함
- 센서가 부품을 감지함
- 자동화 시스템의 PLC 신호
- 조명 펄스 또는 스트로브 이벤트
이 시각화 자료는 전형적인 워크플로를 요약합니다:
트리거를 통해 카메라는 노출을 시작할 수 있습니다. 이는 센서에서 읽혀지고, 전처리된 후 호스트로 전송됩니다. 마지막으로 애플리케이션으로 전달됩니다.
주요 사용 사례#
다음과 같은 상황에서 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)