다음을 통해 공유


여러 Azure Kinect DK 디바이스 동기화

각 Azure Kinect DK 디바이스에는 여러 디바이스를 연결하는 데 사용할 수 있는 3.5mm 동기화 포트(동기화 들어오는 포트동기화 나가는 포트)가 포함되어 있습니다. 디바이스를 연결한 후 소프트웨어는 디바이스 간의 트리거 타이밍을 조정할 수 있습니다.

이 문서에서는 디바이스를 연결하고 동기화하는 방법을 설명합니다.

여러 Azure Kinect DK 디바이스 사용의 이점

다음을 포함하여 여러 Azure Kinect DK 디바이스를 사용하는 데는 여러 가지 이유가 있습니다.

  • 막힌 부분을 메웁니다. Azure Kinect DK 데이터 변환은 단일 이미지를 생성하지만 두 카메라(깊이 및 RGB)는 실제로 약간 떨어져 있습니다. 오프셋 덕분에 폐색이 가능합니다. 폐색 현상은 전경 개체가 기기의 두 카메라 중 하나에서 배경 개체의 일부분을 가리는 경우에 발생합니다. 결과 색 이미지에서 전경 개체는 배경 개체에 그림자를 드리운 것처럼 보입니다.
    예를 들어 다음 다이어그램에서 왼쪽 카메라는 회색 픽셀 "P2"를 확인합니다. 그러나 흰색 전경 개체는 오른쪽 카메라 IR 빔을 차단합니다. 오른쪽 카메라에는 "P2"에 대한 데이터가 없습니다.
    다이어그램은 동일한 지점을 향한 두 대의 카메라 중 하나의 시야가 차단된 것을 보여줍니다.
    동기화된 추가 디바이스는 가려진 데이터를 제공할 수 있습니다.
  • 3차원으로 개체를 스캔합니다.
  • 유효 프레임 속도를 FPS(초당 30프레임)보다 큰 값으로 늘입니다.
  • 동일한 장면의 여러 4K 색 이미지를 캡처합니다. 모두 노출 중심에서 100 마이크로초(μs) 내에 정렬됩니다.
  • 공간 내에서 카메라 커버리지를 늘입니다.

다중 디바이스 구성 계획

시작하기 전에 Azure Kinect DK 하드웨어 사양Azure Kinect DK 깊이 카메라를 검토해야 합니다.

비고

외부 플라스틱 커버를 제거하여 동기화 인 잭과 동기화 아웃 잭을 노출합니다.

디바이스 구성 선택

디바이스 구성에 대해 다음 방법 중 하나를 사용할 수 있습니다.

  • 데이지 체인 구성. 하나의 마스터 디바이스와 최대 8개의 하위 디바이스를 동기화합니다.
    데이지 체인 구성에서 Azure Kinect DK 디바이스를 연결하는 방법을 보여 주는 다이어그램
  • 별 구성입니다. 하나의 마스터 디바이스와 최대 2개의 하위 디바이스를 동기화합니다.
    여러 Azure DK 디바이스를 별형 구성에서 설정하는 방법을 보여주는 도표

외부 동기화 트리거 사용

두 구성에서 마스터 디바이스는 하위 디바이스에 대한 트리거 신호를 제공합니다. 그러나 동기화 트리거에 사용자 지정 외부 원본을 사용할 수 있습니다. 예를 들어 이 옵션을 사용하여 이미지 캡처를 다른 장비와 동기화할 수 있습니다. 데이지 체인 구성 또는 별 구성에서 외부 트리거 소스는 마스터 디바이스에 연결됩니다.

외부 트리거 원본은 마스터 디바이스와 동일한 방식으로 작동해야 합니다. 다음과 같은 특징이 있는 동기화 신호를 전달해야 합니다.

  • 활성 높음
  • 펄스 너비: 8μs 초과
  • 5V TTL/CMOS
  • 최대 주행 용량: 8밀리엄프(mA) 미만
  • 주파수 지원: 정확히 30FPS, 15FPS 및 5FPS(컬러 카메라 마스터 VSYNC 신호의 빈도)

트리거 소스는 3.5mm 오디오 케이블을 사용하여 신호를 마스터 장치의 Sync in 포트로 전달해야 합니다. 스테레오 또는 모노 케이블을 사용할 수 있습니다. Azure Kinect DK는 오디오 케이블 커넥터의 모든 소매와 링을 함께 단락시키고 접지시킵니다. 다음 다이어그램에 표시된 것처럼 디바이스는 커넥터 팁에서만 동기화 신호를 받습니다.

외부 트리거 신호에 대한 케이블 구성

외부 장비로 작업하는 방법에 대한 자세한 내용은 외부 동기화된 디바이스에서 Azure Kinect 레코더 사용을 참조하세요.

비고

동기화 아웃은 RGB 카메라의 VSync입니다. 모든 디바이스에 대한 타임스탬프가 0으로 설정되고 계산됩니다. Microsoft는 동기화 펄스의 최소 및 최대 너비를 특성화하지 않았으며, Azure Kinect DK의 동기화에서 생성된 펄스를 모방하는 것이 좋습니다.

카메라 설정 및 소프트웨어 구성 계획

카메라를 제어하고 이미지 데이터를 사용하도록 소프트웨어를 설정하는 방법에 대한 자세한 내용은 Azure Kinect 센서 SDK를 참조하세요.

이 섹션에서는 동기화된 디바이스(단일 디바이스는 아님)에 영향을 주는 몇 가지 요인에 대해 설명합니다. 소프트웨어는 이러한 요소를 고려해야 합니다.

노출 고려 사항

각 디바이스의 정확한 타이밍을 제어하려면 수동 노출 설정을 사용하는 것이 좋습니다. 자동 노출 설정에서 각 색상 카메라는 실제 노출을 동적으로 변경할 수 있습니다. 노출은 타이밍에 영향을 미치기 때문에 이러한 변경으로 인해 카메라가 빠르게 동기화를 중단합니다.

이미지 캡처 루프에서 동일한 노출 설정을 반복적으로 설정하지 마세요. 필요할 때 API를 한 번만 호출합니다.

여러 깊이 카메라 간의 간섭 방지

여러 깊이 카메라가 겹치는 시야를 이미징하는 경우 각 카메라는 자체적으로 연결된 레이저를 이미지화해야 합니다. 레이저가 서로 간섭하는 것을 방지하기 위해 카메라 캡처는 160μs 이상으로 서로 오프셋되어야합니다.

각 깊이 카메라 캡처에 대해 레이저는 9번 켜지고 매번 125μs에 대해서만 활성화됩니다. 그런 다음 레이저는 작업 모드에 따라 1450μs 또는 2390μs에 유휴 상태입니다. 이 동작은 오프셋 계산의 시작점이 125μs임을 의미합니다.

또한 카메라 클록과 디바이스 펌웨어 클록 간의 차이로 최소 오프셋이 160μs로 증가합니다. 구성에 대한 보다 정확한 오프셋을 계산하려면 사용 중인 깊이 모드를 확인하고 깊이 센서 원시 타이밍 테이블을 참조하세요. 이 테이블의 데이터를 사용하여 다음 수식을 사용하여 최소 오프셋(각 카메라의 노출 시간)을 계산할 수 있습니다.

노출 시간 = (IR 펄스 × 펄스 너비) + (유휴 기간 × 유휴 시간)

160μs의 오프셋을 사용하는 경우 다른 레이저가 유휴 상태일 때 각 레이저가 켜지도록 최대 9개의 깊이 카메라를 구성할 수 있습니다.

소프트웨어에서 depth_delay_off_color_usec 또는 subordinate_delay_off_master_usec을 사용하여 각 IR 레이저가 자체 160μs 시간 창에서 발사되거나 다른 시야를 가지도록 하십시오.

비고

실제 펄스 너비는 125μs이지만 약간의 여유를 제공하기 위해 160us를 명시합니다. NFOV UNBINNED을 예로 들면, 각 125μs 펄스 뒤에 1450μs의 공백이 따른다. (9 x 125) + (8 x 1450)를 합하면 12.8ms의 노출 시간이 생성됩니다. 두 디바이스의 노출을 최적으로 인터리브할 방법은 첫 번째 카메라의 유휴 기간 중 첫 번째 카메라의 첫 번째 펄스가 두 번째 카메라에 맞추어 떨어지도록 하는 것입니다. 첫 번째와 두 번째 카메라 사이의 지연은 125μs (펄스의 너비)만큼 적을 수 있으나 약간의 여유를 권장하므로 160μs입니다. 160μs를 지정하면 최대 10개의 카메라의 노출 기간을 인터리브할 수 있습니다.

디바이스 및 기타 하드웨어 준비

여러 Azure Kinect DK 디바이스 외에도 빌드하려는 구성을 지원하기 위해 추가 호스트 컴퓨터 및 기타 하드웨어를 가져와야 할 수 있습니다. 이 섹션의 정보를 사용하여 설정을 시작하기 전에 모든 디바이스와 하드웨어가 준비되었는지 확인합니다.

Azure Kinect DK 디바이스

동기화하려는 각 Azure Kinect DK 디바이스에 대해 다음을 수행합니다.

  • 최신 펌웨어가 디바이스에 설치되어 있는지 확인합니다. 디바이스를 업데이트하는 방법에 대한 자세한 내용은 Azure Kinect DK 펌웨어 업데이트로 이동하세요.
  • 디바이스 덮개를 제거하여 동기화 포트를 표시합니다.
  • 각 디바이스의 일련 번호를 확인합니다. 설치 프로세스의 뒷부분에서 이 번호를 사용합니다.

호스트 컴퓨터

일반적으로 각 Azure Kinect DK는 자체 호스트 컴퓨터를 사용합니다. 디바이스를 사용하는 방법과 USB 연결을 통해 전송되는 데이터의 양에 따라 전용 호스트 컨트롤러를 사용할 수 있습니다.

Azure Kinect 센서 SDK가 각 호스트 컴퓨터에 설치되어 있는지 확인합니다. 센서 SDK를 설치하는 방법에 대한 자세한 내용은 빠른 시작: Azure Kinect DK 설정으로 이동합니다.

Linux 컴퓨터: Ubuntu의 USB 메모리

기본적으로 Linux 기반 호스트 컴퓨터는 USB 전송을 처리하기 위해 USB 컨트롤러에 16MB의 커널 메모리만 할당합니다. 이 금액은 일반적으로 단일 Azure Kinect DK를 지원하기에 충분합니다. 그러나 여러 디바이스를 지원하려면 USB 컨트롤러에 더 많은 메모리가 있어야 합니다. 메모리를 늘리려면 다음 단계를 수행합니다.

  1. /etc/default/grub을 편집합니다.
  2. 다음 줄을 찾으십시오.
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    
    이 줄을 사용하여 바꾸세요.
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.usbfs_memory_mb=32"
    

    비고

    이러한 명령은 USB 메모리를 32MB로 설정합니다. 기본값의 두 배로 설정하는 예제입니다. 솔루션에 맞게 훨씬 더 큰 값을 설정할 수 있습니다.

  3. sudo update-grub을 실행합니다.
  4. 컴퓨터를 다시 시작합니다.

케이블

디바이스를 서로 연결하고 호스트 컴퓨터에 연결하려면 3.5mm 남성-남성 케이블(3.5mm 오디오 케이블이라고도 함)을 사용해야 합니다. 케이블의 길이는 10m 미만이어야 하며 스테레오 또는 모노일 수 있습니다.

사용해야 하는 케이블 수는 사용하는 디바이스 수와 특정 디바이스 구성에 따라 달라집니다. Azure Kinect DK 상자에는 케이블이 포함되지 않습니다. 별도로 구입해야 합니다.

별 구성에서 디바이스를 연결하는 경우 헤드폰 분할기 하나도 있어야 합니다.

사용자 디바이스 연결

데이지 체인 구성에서 Azure Kinect DK 디바이스를 연결하려면

  1. 각 Azure Kinect DK를 전원에 연결합니다.
  2. 각 디바이스를 호스트 PC에 연결합니다.
  3. 하나의 디바이스를 마스터 디바이스로 선택하고 3.5mm 오디오 케이블을 동기화 아웃 포트에 연결합니다.
  4. 케이블의 다른 쪽 끝을 첫 번째 하위 디바이스의 Sync in 포트에 연결합니다.
  5. 추가 디바이스를 연결하려면 또 다른 케이블을 첫 번째 하위 디바이스의 동기화 출력 포트에 연결하고, 다음 장치의 동기화 입력 포트에 연결하세요.
  6. 모든 디바이스가 연결될 때까지 이전 단계를 반복합니다. 마지막 장치에는 케이블 연결이 하나만 있어야 합니다. 동기화 아웃 포트는 비어 있어야 합니다.

스타 형태 구성에서 Azure Kinect DK 디바이스를 연결하려면

  1. 각 Azure Kinect DK를 전원에 연결합니다.
  2. 각 디바이스를 호스트 PC에 연결합니다.
  3. 하나의 디바이스를 마스터 디바이스로 선택하고 헤드폰 분할기의 단일 끝을 동기화 아웃 포트에 연결합니다.
  4. 3.5mm 오디오 케이블을 헤드폰 분할기의 "분할" 끝에 연결합니다.
  5. 각 케이블의 다른 쪽 끝을 하위 디바이스 중 하나의 동기화 입력 포트에 연결합니다.

디바이스가 연결되고 통신 중인지 확인합니다.

디바이스가 올바르게 연결되어 있는지 확인하려면 Azure Kinect 뷰어를 사용합니다. 마스터 디바이스와 함께 각 하위 디바이스를 테스트하려면 필요에 따라 이 절차를 반복합니다.

중요합니다

이 절차에서는 각 Azure Kinect DK의 일련 번호를 알고 있어야 합니다.

  1. Azure Kinect 뷰어의 두 인스턴스를 엽니다.
  2. 디바이스 열기에서 테스트하려는 하위 디바이스의 일련 번호를 선택합니다.
    디바이스 열기

    중요합니다

    모든 디바이스 간에 정확한 이미지 캡처 맞춤을 얻으려면 마스터 디바이스를 마지막으로 시작해야 합니다.

  3. 외부 동기화에서 하위를 선택합니다.
    하위 카메라 시작
  4. 시작을 선택합니다.

    비고

    하위 디바이스이므로 Azure Kinect 뷰어는 디바이스가 시작된 후 이미지를 표시하지 않습니다. 하위 디바이스가 마스터 디바이스에서 동기화 신호를 받을 때까지 이미지가 표시되지 않습니다.

  5. 하위 디바이스가 시작된 후 Azure Kinect Viewer의 다른 인스턴스를 사용하여 마스터 디바이스를 엽니다.
  6. 외부 동기화에서 마스터를 선택합니다.
  7. 시작을 선택합니다.

마스터 Azure Kinect 디바이스가 시작되면 Azure Kinect 뷰어의 두 인스턴스 모두 이미지를 표시해야 합니다.

디바이스를 동기화된 집합으로 보정

디바이스가 올바르게 통신하고 있는지 확인한 후에는 단일 도메인에서 이미지를 생성하도록 보정할 준비가 된 것입니다.

단일 기기에서, 깊이 및 RGB 카메라는 공장에서 호환되도록 보정되어 함께 작동합니다. 그러나 여러 디바이스가 함께 작동해야 하는 경우 이미지를 캡처한 카메라 도메인에서 이미지를 처리하는 데 사용할 카메라 도메인으로 이미지를 변환하는 방법을 결정하기 위해 보정해야 합니다.

디바이스 교차 보정을 위한 여러 옵션이 있습니다. Microsoft는 OpenCV 메서드를 사용하는 GitHub 녹색 화면 코드 샘플을 제공합니다. 이 코드 샘플에 대한 추가 정보 파일은 디바이스를 보정하기 위한 자세한 내용과 지침을 제공합니다.

보정에 대한 자세한 내용은 Azure Kinect 보정 함수 사용을 참조하세요.

다음 단계

디바이스를 동기화한 후에는 사용하는 방법도 배울 수 있습니다.