CLPE-G-Series User Guide
- 1 Revision History for Document
- 2 Overview
- 3 SDK 사용법
- 3.1 SDK 폴더 구조
- 3.2 SDK 설치
- 3.2.1 가상 네트워크 드라이버 빌드
- 3.2.2 예제 프로그램 빌드 및 실행
- 3.2.2.1 Gstreamer, net-tools 설치
- 3.2.2.2 예제 프로그램 빌드
- 3.2.2.3 예제 프로그램 실행
- 3.2.3 예제 프로그램 빌드 및 실행(No password)
- 3.2.3.1 예제 프로그램 수정
- 4 예제 프로그램 실행 방법
- 4.1 카메라 연결 상태 확인
- 4.2 MICOM 펌웨어 버전 정보 읽기
- 4.3 XavierNX 펌웨어 버전 정보 읽기
- 4.4 SDK 버전 정보 읽기
- 4.5 XavierNX power off
- 4.6 시간 동기화 점검
- 4.7 PCIe 연결 점검
- 4.8 네트워크 디바이스 점검
- 4.9 네트워크 통신 점검
- 4.10 시간 동기화 요청
- 4.11 영상 전송 시작
- 4.12 영상 전송 정지
- 4.13 지정된 카메라의 영상 데이터 획득
- 4.14 불특정 카메라의 영상 데이터 획득
- 5 API(Application programming interfaces)
- 6 영상 데이터 획득 방법
- 7 동기화
- 7.1 PC의 시간 정보 동기화
- 7.1.1 Chrony 설치
- 7.1.2 Chrony 설정
- 7.1.3 Chrony 재실행
- 7.2 카메라간 출력 신호 동기화
- 7.1 PC의 시간 정보 동기화
- 8 종료 방법
- 9 에러 대처 방법
- 9.1 PCIe BUS ERROR
Revision History for Document
Rev | Date | Description |
1.0 | 2022-01-19 | Initial Draft |
1.1 | 2022-02-22 | Add workaround for ‘SSL error’ when building tegra_vnet. (CLPE-G-Series User Guide | ◾ 가상 네트워크 드라이버 빌드 ) |
1.2 | 2022-03-29 | Added a way to work without a password (CLPE-G-Series User Guide | ◾ 예제 프로그램 빌드 및 실행(No password)) |
1.3 | 2022-03-31 | Add the process to install Gstreamer (CLPE-G-Series User Guide | ▫️ Gstreamer 설치) |
1.4 | 2022-12-02 | Support the 8 channel cameras |
1.5 | 2023-06-21 | PCIe BUS ERROR 에 대한 대처 방법 내용 추가 (CLPE-G-Series User Guide | ◻️ PCIe BUS ERROR) |
1.6 | 2023-12-11 | net-tools 설치 추가 (CLPE-G-Series User Guide | ▫️ Gstreamer, net tools 설치 ) |
1.7 | 2023-12-13 | CLPE-G-Series 종료 방법 추가(CLPE-G-Series User Guide | ⬛ 종료 방법 ) |
Overview
이 문서는 CLPE-G-Series 계열 제품(CLPE-G-AP0202, CLPE-G-NVP2650D, CLPE-G-01A)를 구동 시키기 위해 필요한 SDK 사용법 및 API에 대한 내용에 설명한다. 또한, 카메라 영상을 취득할 수 있는 3가지 방법과 CLPE-G-Series 와 PC 와의 시간 동기화를 위해서 필요한 chrony 설치 방법에 대한 것도 포함되어 있다.
SDK 사용법
SDK 폴더 구조
제공된 SDK 파일의 압축을 풀면 아래 그림과 같은 폴더로 구성되어 있다.
driver : virtual network 관련 파일
include : API 관련 header file
lib : API 관련 library 파일
main : 예제 코드
no_password.sh : int ClpeClientApi::Clpe_Connection()사용시, 실행해야 할 shell파일 (2.2.3 참고)
Readme.txt : 빌드가이드
API 관련 library 파일의 경우, ubuntu18.04 에서 gcc 7.5.0 으로 빌드 되어 있다.
SDK 설치
가상 네트워크 드라이버 빌드
CLPE-G-Series 와 PC는 가상의 네트워크를 통해 통신하고 카메라 영상을 전송하도록 구성되어 있다. 그러므로, SDK에 가상 네트워크 드라이버 관련 소스가 첨부되어 있다. 해당 소스를 CLPE-G-Series 가 설치되어 있는 PC에서 빌드를 수행해 주어야 한다.
빌드 방법은 터미널 창에서 아래 명령어를 수행해 주면 된다.
SDK 파일 내에 driver 폴더로 이동
Ex) cd ~/SDK/driver
$ sudo make
빌드 도중에 아래와 같은 ‘SSL error’ 에러가 발생하더라도, tegra_vnet.ko 파일이 만들어졌다면, 해당 드라이버를 사용하는데 문제가 없다.
SSL error:02001002:system library:fopen:No such file or directory: ../crypto/bio/bss_file.c:72
SSL error:2006D080:BIO routines:BIO_new_file:no such file: ../crypto/bio/bss_file.c:79
sign-file: certs/signing_key.pem: No such file or directory
DEPMOD 5.4.0-99-generic
Warning: modules_install: missing 'System.map' file. Skipping depmod.
그러나, 해당 error 를 없애고자 할 경우, 아래 내용대로 수행하여 key 를 만들어주면 된다.
cd /lib/modules/$(uname -r)/build/certs
sudo tee x509.genkey > /dev/null << 'EOF'
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
[ req_distinguished_name ]
CN = Modules
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOF
sudo openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pem
예제 프로그램 빌드 및 실행
CLPE-G-Series SDK 내에는 간단히 API 들을 테스트해 볼 수 있는 예제 프로그램을 제공하고 있다. 이 예제 프로그램을 실행하기 위해서는 아래의 과정을 수행하면 된다.
Gstreamer, net-tools 설치
CLPG-G- Series SDK에서는 gstreamer와 net-tools 를 이용하고 있다. 설치 과정은 다음과 같다.
패키지 목록을 업데이트 한다.
$ sudo apt update
Gstreamer 를 설치한다.
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-x net-tools
예제 프로그램 빌드
터미널 창에서 아래 명령어를 수행해 준다.
SDK 내에 main 폴더로 이동
Ex) cd ~/SDK/main
빌드 시, gstreamer 관련 에러가 발생하면 아래 명령어를 통해, gstreamer-1.0, gstreamer-app-1.0 package를 설치해 주어야 한다.
예제 프로그램 실행
예제 프로그램이 정상적으로 빌드 되었다면, main 폴더에 ClpeApi_Example_Main 파일을 실행할 수 있다. 해당 파일을 아래 명령어로 실행해 준다.
예제 프로그램을 실행하면 아래 그림과 같이 출력이 되며, PC의 root 권한 password를 입력하면 된다.
추가로 PC 에 연결된 CLPE 보드가 1대인 경우 0을 입력하고, 2대인 경우 1을 입력하여야 한다.
CLPE 보드 1대로 사용하실 경우 보드 세팅을 Master 상태로 사용해야 하며, 2대를 사용하실 경우 1대는 Master, 다른 1대는 Slave 상태로 사용해야 한다.
CLPE-G-Series 와 PC가 정상적으로 연결이 되면, 아래 그림과 같이 출력이 된다.
원하는 테스트를 선택하여 진행하면 된다.
예제 프로그램 빌드 및 실행(No password)
API 실행 시 password 입력이 보안상의 이유로 입력하기 곤란한 경우 sudo 권한이 필요한 작업들을 sh 파일로 제공하여, 간단한 코드 수정 후 password 입력 없이 사용할 수 있다.
예제 프로그램 수정
터미널 창에서 아래 명령어를 수행해 준다.
SDK 내에 no_password.sh 파일 실행
Ex) ./SDK/no_password.sh
제공된 sh 파일 실행이 아닌 sh 내부 명령어를 보고 수동으로 Terminal 창에서 수행해도 된다.
SDK 내 main 폴더로 이동 해 ClpeApi_Example_Mian.cpp 의 코드를 수정한다.
SDK 내에 main 폴더로 이동
Ex) cd ~/SDK/main
코드 수정 후 빌드 후 실행 시 password 입력 없이 API를 사용할 수 있다.
예제 프로그램 실행 방법
Example 프로그램 빌드 및 실행 방법은 ‘예제 프로그램 빌드 및 실행 CLPE-G-Series User Guide | ◾ 예제 프로그램 빌드 및 실행’ 를 참고하면 된다.
카메라 연결 상태 확인
카메라 연결 상태를 확인하기 위해서 아래 그림와 같이 ‘Select Command : ‘ 에 ‘1’ 를 선택하면 된다.
아래 그림과 같이 카메라 연결 상태 정보가 출력된다. 여기서, [ ] 안에 있는 숫자는 카메라 ID를 의미하며, 이 값이 1이면 연결된 상태를, 0이면 연결되어 있지 않은 상태를 의미한다.
MICOM 펌웨어 버전 정보 읽기
CLPE-G-Series 에는 MICOM이 있으며, 이 MICOM에 적용된 펌웨어 버전은 아래 그림과 같이 ‘Select Command : ‘ 에 ‘2’ 를 선택하면 된다.
아래 그림과 같이 버전 정보가 출력된다. 버전 정보는 ‘rX.X.X’ 형식을 가진다.
XavierNX 펌웨어 버전 정보 읽기
CLPE-G-Series 에는 XavierNX가 있으며, 이 XavierNX에 적용된 펌웨어 버전은 아래 그림과 같이 ‘Select Command : ‘ 에 ‘3’ 를 선택하면 된다.
아래 그림과 같이 버전 정보가 출력된다. 버전 정보는 ‘rX.X.X’ 형식을 가진다.
SDK 버전 정보 읽기
SDK의 버전은 아래 그림과 같이 ‘Select Command : ‘ 에 ‘4’ 를 선택하면 된다.
아래 그림과 같이 버전 정보가 출력된다. 버전 정보는 ‘rX.X.X’ 형식을 가진다.
XavierNX power off
CLPE-G-Series 에는 XavierNX 가 있으며, 전원을 끄고자 할 경우, XavierNX 를 정상적으로 시퀀스로 전원을 꺼주어야 시스템 손상을 방지할 수 있다. 이때, CLPE-G-Series 의 MICOM을 제외한 나머지 주요 블록들도 같이 전원이 꺼진다. 예제 프로그램에서 아래 그림과 같이 ‘Select Command : ‘ 에 ‘7’ 를 선택하여 테스트해 볼 수 있다.
실행 결과는 아래 그림과 같으며, 실행 후 수초(약12 ~ 15초) 후에 LED 가 꺼진다.
시간 동기화 점검
CLPE-G-Series 는 PC와의 시간 동기화를 지원하고 있으며, 이를 예제 프로그램에서 실행해 보기 위해서는 아래 그림과 같이 ‘Select Command : ‘ 에 ‘8’ 를 선택하면 된다.
실행 결과는 아래 그림과 같으며, 보이는 바와 같이 결과가 나올 때까지 10 ~ 20초 정도 걸릴 수 있다.
PCIe 연결 점검
CLPE-G-Series 는 PC에서 PCIe 장치로 인식이 된다. 예제프로그램에서 PCIe 장치로 정상적으로 인식되었는지 여부를 확인할 수 있다. 아래 그림과 같이 ‘Select Command : ‘ 에 ‘9’ 를 선택하면 된다
아래 그림은 그 결과를 보여준다.
네트워크 디바이스 점검
CLPE-G-Series 는 PC에서 네트워크 컨트롤러로 인식이 되며, 네트워크 통신을 수행한다. 그래서, PC상에 가상의 네트워크 드라이버가 설치되며, 네트워크 검색 시, 디바이스(eth0 혹은 eth1)가 정상적으로 보여야 한다. 예제프로그램에서 이를 테스트해 볼 수 있으며, 아래 그림과 같이 ‘Select Command : ‘ 에 ‘10’ 를 선택하면 된다.
아래 그림은 그 결과를 보여준다.
네트워크 통신 점검
예제프로그램에서 CLPE-G-Series 와 PC간에 정상적으로 통신이 가능한지 여부를 점검할 수 있다. 아래 그림과 같이 ‘Select Command : ‘ 에 ‘11’ 를 선택하면 된다.
아래 그림은 그 결과를 보여준다.
시간 동기화 요청
CLPE-G-Series 는 PC상에 시간 동기화에 문제가 발생했을 경우, 시간 동기화를 다시 요청할 수 있다. 예제프로그램에서는 아래 그림과 같이 ‘Select Command : ‘ 에 ‘12’ 를 선택하면 된다.
아래 그림은 그 결과를 보여준다.
영상 전송 시작
예제프로그램에서는 카메라 영상을 확인할 수 있다. 아래 그림과 같이 ‘Select Command : ‘ 에 ‘13’ 를 선택하고, 영상을 확인하고자 하는 카메라 번호에 ‘1(yes)’ 를 입력하면 된다. 그리고, 영상을 화면에 출력하고자 할 경우, ‘display on’ 를 ‘1(yes)’ 로 설정하면 된다.
실행 결과는 화면에 새로운 창이 생성되면서 카메라 영상이 출력되고, 아래 그림과 같은 메시지가 출력된다.
영상 전송 정지
예제프로그램에서 ‘3.11’ 에서 시작된 영상 전송을 멈출 수 있다. 아래 그림과 같이 ‘Select Command : ‘ 에 ‘14’ 를 선택하면 된다.
출력되고 있던 카메라 영상 창은 닫히게 되고, 아래 그림과 같은 메시지가 출력된다.
지정된 카메라의 영상 데이터 획득
예제 프로그램에서 사용자가 지정한 카메라의 영상 데이터 한 프레임을 읽어 올 수 있다. 아래 그림과 같이 ‘Select Command : ‘ 에 ‘15’ 를 선택 후, 지정하고자 하는 카메라 번호를 입력하면 된다.
실행하면 영상 데이터가 파일로 저장이 되는데, 정상적으로 저장이 수행되기 위해서는 예제프로그램이 실행되는 폴더의 상위 폴더에 ‘capture’ 라는 폴더가 생성되어 있어야 한다.
아래 그림은 생성된 파일을 보여준다.
아래 그림은 출력되는 메시지이다.
불특정 카메라의 영상 데이터 획득
CLPE-G-Series User Guide | ◻️ 지정된 카메라의 영상 데이터 획득 과는 달리, 불특정 카메라 중에 가장 최근에 전송된 영상 데이터를 획득할 수 있다. 아래 그림과 같이 ‘Select Command : ‘ 에 ‘16’ 을 선택하면 된다.
파일이 저장되는 폴더는 CLPE-G-Series User Guide | ◻️ 지정된 카메라의 영상 데이터 획득 에서 언급한 내용과 같으며, 아래 그림은 생성된 파일을 보여준다.
아래 그림은 출력되는 메시지이다.
API(Application programming interfaces)
CLPE-G-Series 사용자가 PC에서 CLPE-G-Series 를 제어하기 위해 사용하는 API 에 대해서 설명한다.
API 사용
사용자의 프로그램에서 API 를 사용하고자 할 경우, 프로그램 빌드 시 아래 파일들을 링크해 주어야 한다.
Library
lib’ 폴더
‘libclpe.a’
Header
Include 폴더
ClpeClientApi.h
ClpeSocket.h
ClpeStreamApi.h
API library 를 링크하기 위해서는 아래 package 가 필요하다.
gstreamer-1.0
gstreamer-app-1.0
해당 package 가 설치되어 있지 않다면, 아래 명령어로 설치를 진행하면 된다.
API list
영상 데이터 획득 방법
CLPE-G-Series 의 SDK를 이용하여 영상 데이터를 읽어 올 수 있는 방법은 아래 2가지 방법이 있다.
Clpe_StartStream() 함수에 등록된 callback 함수에서 영상 데이터 획득
API 를이용하여 영상 데이터 획득
Callback() 함수에서 영상 데이터 획득
Clpe_StartStream() API를 보면, 인자에 callback 함수를 등록하도록 되어 있다. 이 callback 함수는 내부적으로 프레임이 획득될 때마다 호출되도록 되어 있다. 그러므로, 사용자는 이 callback 함수에서 영상 데이터를 읽을 수 있다. 단, 해당 callback 함수가 사용자에 의해 추가된 코드로 인하여 로드가 걸릴 경우, 영상 데이터 획득상에 문제가 발생할 수 있으니 주의를 해야 한다.
API 를 이용하여 영상 데이터 획득
사용자가 제공된 API 를 호출하여 영상 데이터를 읽어가는 방법이다. 해당 API를 사용하면, 사용자가 API를 호출한 시점을 기준으로 가장 최근의 영상 데이터를 읽어 갈 수 있다. API 는 2개가 제공되고 있으며, 그 차이는 다음과 같다.
Clpe_GetFrameOneCam() : 매개변수 중에 camera_id 에 해당하는 카메라의 가장 최근 영상 데이터를 읽어 온다.
Clpe_GetFrameAllCam() : 모드 채널의 카메라 중에 가장 최근에 획득된 카메라의 영상 데이터를 읽어 온다.
동기화
CLPE-G-Series 는 PC의 시간 정보 동기화 및 카메라간 출력 신호 동기화를 제공하고 있다.
PC의 시간 정보 동기화
CLPE-G-Series 는 PC의 시간 정보와 동기화하여, 영상 데이터가 취득되는 시점의 시간 정보를 제공하고 있다. CLPE-G-Series 가 PC 의 시간 정보와 동기화 하기 위해서 chrony 를 사용하고 있으며, PC 에 이와 관련한 설치 및 설정이 필요하다.
Chrony 설치
PC 에 아래 명령을 입력하여 chrony 를 설치해 준다.
Chrony 설정
chrony.conf 파일을 에디터로 열어서 내용을 그림 34의 빨간색 박스와 같이 수정한다.
수정 내용
기존의 pool 들 주석 처리
‘pool 192.168.7.8 iburst maxsources 1’ 추가
‘pool 192.168.8.8 iburst maxsources 1’ 추가
‘local stratum 10’ 추가
‘allow 192.168.0.0/16’ 추가
Chrony 재실행
모든 설정이 완료되면, chrony service 를 재실행한다.
카메라간 출력 신호 동기화
1대의 CLPE-G-Series 는 4채널 카메라 입력을 지원하고 있으며, 이 카메라들의 출력 신호를 동기화하고 있다. 이 동기화 방법에 대한 개념도는 아래 그림과 같다.
종료 방법
Clpe-G-Series는 OS가 탑재된 PCIe 보드 이다. 그러므로, CLPE를 비정상 종료(예. 동작 도중 전원 OFF) 시, 손상의 우려가 있다. 그러므로, CLPE를 정상적으로 종료 후 전원을 꺼주는 것을 추천한다.
스크립트 실행에 필요한 프로그램 설치
파일 다운로드 링크 : CLPE-G-Series S/W Release History | ⬛ CLPE G Series POWEROFF
파일을 다운 받아 압축을 푼 뒤 터미널을 열어 아래 그림과 같이 명령어를 입력해 스크립트를 실행합니다. 실행 후 PC 비밀번호를 입력합니다.
정상적으로 CLPE가 종료되었다면 “Poweroff Success” 문구가 출력되며 스크립트가 종료된다.
그 외에도 보드에 부착되어 있는 LED의 소등으로 확인할 수 있다.
에러 대처 방법
PCIe BUS ERROR
CLPE Series 를 PC 에 장착 후 부팅 하였을 때 아래와 같은 에러 메시지가 출력될 수 있다.
해당 에러 메시지는 PC 메인보드에서 PCIe 슬롯에 장착된 디바이스들의 전원을 컨트롤 하는 ASPM 기능에 대한 에러 메시지로 PC 와 CLPE Series 의 기능 관련으로는 전혀 문제가 없다.
해당 에러 메시지가 뜨는 것을 막기 위해서는 ASPM 기능을 끄는 것으로 방법은 아래와 같다.
PC 를 실행 후 터미널 창을 열어 아래의 명령어를 입력한다.
sudo gedit /etc/default/grub
위 명령어 입력 시 아래 이미지와 같은 화면이 나오며 빨간 네모와 같이 수정을 한다.
저장 후 터미널 창에 아래의 명령어를 입력한다.
이후 재부팅을 하게되면 해당 에러 메시지가 나오지 않는다.