IDS GigE Vision 카메라를 PTP와 동기화

클럭 비교

어플리케이션이 여러 카메라로부터 이미지 자료를 처리하는 것과 관련될 때, 이미지 기록의 정확한 시간 또는 정확한 연대순은 종종 후속 처리에 중요합니다. 타임 스탬프가 제공되면, 다른 이미지 데이터에 대한 시간 참조를 설정할 수 있습니다. 그러나, 카메라의 시간대가 정확하게 일치하는 것이 중요합니다. "Precision Time Protocol"(PTP)을 사용하여 IDS GigE Vision 카메라를 펌웨어 2.2 이상과 쉽게 동기화할 수 있습니다.

IDS GigE Vision 카메라를 PTP와 동기화

PTP (Precision Time Protocol)는 네트워크를 통해 연결된 장치의 시간 동기화를 허용하는 시간 동기화 표준(IEEE1588)입니다. 이 표준을 지원하는 카메라는 정의된 주기에서 시간 마스터와 동기화 메시지를 교환합니다. 각 송신 및 수신 시간의 타임 스탬프 정보를 사용하면 카메라의 내부 카운터를 매우 정확하게 보정하고 조정할 수 있습니다. 카메라 펌웨어 버전 2.2를 사용하면, 모든 IDS GigE Vision 카메라가 PTP와 호환됩니다!

PTP는 USB 연결에 대해 정의되어 있지 않으므로, 이 어플리케이션 노트는 IDS GigE Vision 카메라만 참조합니다.

IEEE1588 타임 스탬프는 1970년 1월 1일 00:00시를 0시간으로 설정한 epoch 타이머이며, 1ns (1GHz)의 분해능을 제공합니다. 네트워크 장치들 간의 시간 동기화 정확도는 지연 시간 및 신호 런타임의 부정확성으로 인해 마이크로 초 범위에 있습니다.

PTP 사용 사례

PTP는 이미지 콘텐츠를 시간적으로 참조하여 다양한 어플리케이션의 기초를 형성하는 기반 기술입니다. 이는 어플리케이션의 요구 사항과 네트워크 인프라의 복잡성에 따라 다르게 생성될 수 있습니다.

1. 상대적 타임 스탬프 동기화

이 경우, 모든 카메라가 동일한 네트워크에 있습니다. 하나의 카메라는 마스터이고, 다른 하나는 슬레이브입니다. 모든 슬레이브 카메라의 타임 스탬프는 마스터 카메라와 동기화됩니다. 카메라는 절대적 타임 스탬프(실시간)를 제공하지 않으며, 추가 노력없이 동기식으로 트리거될 수 없습니다.

장점 :

  • 상대적 타임 스탬프는 어플리케이션에 있는 모든 카메라의 이미지 기록에 대한 시간 할당을 설정합니다. 어떤 이미지가 먼저였는지, 다른 카메라의 이미지 간의 시간차는 얼마나 큰지.
  • 특별한 네트워크 인프라에 관한 추가 노력과 비용 없이 상대적 타임 스탬프를 생성할 수 있습니다.

2. 절대적 시간과 타임 스탬프 동기화

이 경우, 네트워크 카메라는 외부 마스터와 동기화됩니다. 이 PTP 마스터는 소위 "하드웨어 타임 스탬프"를 지원하는 네트워크 카드가 될 수 있습니다. 하드웨어 지원이 없으면, 동기화의 정확도가 상당히 저하됩니다. 필요한 하드웨어 외에도 PTP를 지원하는 소프트웨어도 필요합니다 (IDS peak의 일부가 아닙니다!).

장점 :

  • 글로벌 (실제) 타임 스탬프가 있는 이미지 콘텐츠는 어플리케이션의 한계를 넘어서는 실시간 참조가 있는 다른 정보에 연관될 수 있습니다.
  • 이미지 콘텐츠는 글로벌 시간 참조를 사용하여 다른 어플리케이션이나 평가에 재사용할 수 있습니다.

PTP를 사용하세요: "상대적 동기화"

다음 섹션에서는 두 PTP 가능 네트워크 카메라들 간에 타임 스탬프의 "상대적 동기화"를 설정하는 방법의 예를 설명합니다.

하드웨어 설정

펌웨어 2.2 ( "PTP 지원")가 있는 두 개의 다른 IDS GigE Vision 카메라들 (GV-526xFA-C, GV-504xCP-M)이 동일한 네트워크 스위치에 연결됩니다. 추가적인 호스트 PC는 카메라를 제어하고 구성하는 역할만 합니다. 카메라의 PTP 동기화에는 관여하지 않습니다.

소프트웨어 설정

모든 PTP 구성 기능은 "PtpControl"카테고리 아래의 카메라 특징 노드 맵에서 찾을 수 있습니다. 이러한 기능은 펌웨어 버전 2.2부터 사용할 수 있습니다. PTP 동기화를 설정하기 위해 호스트 PC에서 IDS peak 설치의 Vision Cockpit을 사용합니다.

카메라를 PTP 마스터로 구성하세요

GV-526xFA-C 카메라는 PTP 마스터 장치로 구성되어야 합니다. Vision Cockpit에서 카메라를 열고 "PtpEnable"을 "True"로 설정하여 PTP를 활성화합니다. 또한 카메라는 "PtpSlaveOnly"를 "False"로 설정하여 마스터 역할을 맡을 권한을 받습니다.

# Configure master camera
PtpEnable = True
PtpSlaveOnly = False

다른 카메라를 PTP 슬레이브로 구성하세요

GV-504xCP-M은 PTP 슬레이브 장치로 구성되어야 합니다. PTP는 "PtpEnable"을 "True"로 설정하여 활성화됩니다. 그러나 이번에는 카메라가 슬레이브 장치로만 작동합니다. 이를 위해 "PtpSlaveOnly"는 "True"로 설정되어 있습니다.

# Configure slave camera
PtpEnable = True
PtpSlaveOnly = True

마스터-슬레이브 계층 구축

마스터와 슬레이브 장치가 구성되는 즉시 마스터-슬레이브 계층이 자동으로 설정됩니다. 마스터 카메라의 경우 "PtpStatus"를 "Listening"에서 "Master"로 변경하여 확인할 수 있습니다. 슬레이브 카메라의 경우, 먼저 "PtpStatus"가 "Listening"에서 "Uncalibrated"로 변경된 다음 마스터 카메라와의 동기화가 완료된 후 "Slave"로 변경되는지 확인하여 이를 인식할 수 있습니다.

새로운 PTP 기능을 사용하여 카메라의 마스터-슬레이브 계층 구조가 설정되면 "상대적 동기화"가 완료됩니다.

타임 스탬프를 활성화하세요

이제 동기화된 카메라의 타임 스탬프를 어플리케이션의 이미지 데이터와 함께 사용하려면, 타임 스탬프를 메타 데이터 (청크 데이터 포함)로 전송하도록 활성화해야 합니다.
먼저 "ChunkModeActive"를 "True"로 설정하여, 이미지 버퍼로 청크 데이터 전송을 활성화합니다. 그런 다음 "ChunkSelector"를 통해 "Timestamp"를 선택하고, "ChunkEnable"스위치를 통해 활성화합니다.

# activate chunk data creation
ChunkModeActive = True
 
# enable "ChunkTimestamp"
ChunkSelector = Timestamp
ChunkEnable = True

이제부터, 카메라는 각 이미지 수집과 함께 타임스탬프를 생성하고, 이미지 버퍼 (청크 데이터)와 함께 호스트 PC로 전송합니다. 청크 데이터와 타임 스탬프는 Vision Standard 소프트웨어를 통해 읽을 수 있습니다.

# image acquisition configuration for both cameras
LineSelector = Line2
LineMode = Output
LineSource = PPS
TriggerSelector = ExposureStart
TriggerMode = On
TriggerSource = Line2
 
# Limit bandwidth on both cameras
DeviceLinkThroughputLimit = 60000000
 
# Start acquisition on both cameras
Execute AcquisitionStart
동기화된 PPS 트리거 신호로 인해 카메라의 이미지 획득이 동시에 발생합니다.
동기화된 PPS 트리거 신호로 인해 카메라의 이미지 획득이 동시에 발생합니다.

타임 스탬프를 읽으세요

이미지 콘텐츠와 함께 어플리케이션의 타임 스탬프를 처리하려면, 현재 이미지 버퍼의 청크 데이터를 읽어야 합니다. 청크 데이터는 일반적으로 알 수 없는 메모리 레이아웃이 있는 제조업체-별 페이로드(payload) 버퍼이므로, 개별 메타 데이터는 노드 맵을 통해 읽힙니다. 이를 위해, 기존의 모든 메타 데이터는 표준화된 노드 이름과 함께 GenTL에서 노드맵으로 전송되므로 표준 API를 통해 액세스할 수 있습니다.

4월 초에 예정된 IDS peak 1.1 업데이트를 통해, IDS peak API를 통해 매우 편리하게 타임 스탬프 및 기타 모든 청크 데이터를 검색하고 처리할 수 있습니다. 다음 소스 코드 스니펫(snippet)은 이미지 버퍼에서 타임 스탬프를 추출하는 방법의 예를 보여줍니다. 청크 데이터 처리를 보여주는 전체 소스 코드 예제는 IDS peak SDK (버전 1.1부터)의 설치 패키지에서도 찾을 수 있습니다.

// Get buffer from device's datastream
const auto buffer = m_dataStream->WaitForFinishedBuffer(5000);
 
// check buffer for chunks
if (buffer->HasChunks())
{
    // update nodemap with current chunk data
    m_nodemapRemoteDevice->UpdateChunkNodes(buffer);
 
    // Get the value of the timestamp chunk
    const auto chunktimestamp = m_nodemapRemoteDevice->FindNode<peak::core::nodes::FloatNode>("ChunkTimestamp")->Value();
}