연구실에 들어오고 처음 맡아서 했던 일이였던일은 Multi-spectral Grabber을 제작해서 열화상 영상과 칼라 영상을 취득하는일 이였습니다. 그 후 태주형이 진행하였고 태주형이 많은 URP 친구들에게 Grabber를 알려주게 되었습니다. 그 중 저희 미래국방팀으로 들어올 분들에 한하여 Grabber를 다시 시키게 되었지만,……..뭐 결과는 아실 것이라 생각합니다.
졸업을 일년 남은 시점에서URP를 제가 다시 진행하게 되고 생각해보니 태주형과 제가 졸업하게 된다면 제대로 Grabber를 다룰 수 있는 사람도 없기도 하고 연구실에 새로 들어온 친구들은 저희가 겪었던 고생을 다시 겪을 것 같다는 생각이 들었습니다. 따라서 새로 들어온 후배분들 혹은 연구실에 남아 Grabber를 다룰 수도 있는 친구들을 위해서 Grabber 제작과 관련해서 Manual을 만들어야겠다는 결정을 하게 됐습니다.
비록 제가 글을 잘 작성하지 못해서 Manual이 잘 이해가 안될 수 도 있지만, 나무위키처럼 계속 수정 및 보완이 된다면 몇 년뒤에는 Manual 만 던져줘도 새로들어온 사람들은 알아서 Grabber를 만들 수 있지 않을까 하는 바램으로 시작 해봅니다.
*이곳에 Grabber에 먼저 작성한 후 Latex를 옳겨 깔끔하게 만들 생각입니다.
목차 (작성하며 변경예정)
1. Multi-spectral Grabber
2. QT
3. Ebus SDK
4. Code Review
1.Multi-spectral Grabber
세종 RCV 연구실이 2019년도에 처음생기고 가장 먼저 시작한 과제는 포테닛과 함께한 “딥러닝 기반 열화상 영상의 가시화 및 인지센서 개발“라는 산업체과제입니다. 이 과제는 무인지게차에 RGB-Thermal 센서 팩을 달고 이상상황에도 강인한 보행자를 추정하는 과제 였습니다. 이 과제는 센서 팩 제작부터 캘리브레이션, 데이터 수집, 어노테이션, 딥러닝 학습을 통한 보행자 인식까지 저희 연구실 사람이라면 알아야할 정수가 담긴 과제라 할 수 있습니다. (이건 개인적인 견해지만 모든 과정을 제대로 다할 수 있으면 어디가서 굷어죽지는 않을 것이라 생각합니다. 글을 적고 생각해보니 저도 모든 과정을 제대로 못하는 것 같네요. 하하)
무인지게차에서 보행자를 인식해야하는 과제의 진행을 위해 저희는 데이터 셋을 직접 취득해야 했습니다. 따라서 데이터 셋 취득용 센서 팩을 제작했고 그 센서팩이 Multi-spectral 센서팩입니다.
위 사진 (a)가 저희가 제작한 센서팩입니다. 맨 오른쪽이 열화상 카메라(Thermal) 그리고 그 옆 카메라가 칼라 카메라(RGB) 이며 두개의 카메라를 그림과 같이 각각 스테레오로 구성해서 각 센서마다 Disparity를 예측할 수 있도록 했습니다. 제작한 센서팩은 (b)와 같인 실제 무인지게차에 장착해서 데이터셋을 취득했으며, 취득한 데이터 셋을 이용해 보행자 인식 딥러닝 모델(SSD)를 학습한 후 (c)와 같이 실시간 데모까지 진행했습니다.
각 카메라의 종류를 아래와 같습니다.
위와 같은 종류의 카메라를 결정하게 된 이유는 총 세가지가 있으며, 세가지는 다음과 같습니다.
- 열화상 카메라와 칼라 카메라의 Field of View가 유사해야함
- 높은 촬영 속도를 보장하기 위해서 GigE와 GPIO(General-Purpose Input Output) 를 통한 전원공급 방식
- 네대 동시 촬영을 위한 Synchronization(하드웨어 동기화)기술 지원
위 세가지를 만족한 센서 종류가 위와 같았고, 제작한 센서팩의 하드웨어 동기화를 위한 GPIO 결선도는 다음과 같습니다 .
위 와같은 GPIO 결선도까지 완성하게 되면 하드웨어적인 부분은 거의 완료됩니다. (그 외에 다른 것들은 추후 Manual에 추가하도록 하겠습니다. ) 그림 2 를 보면 카메라에 전원 공급에 관련된 VCC/GND 외에 다른 선들이 서로 연결되어 있는 것을 볼 수 있습니다. 이 선들은 위에서 말한 카메라 하드웨어 동기화를 위한 것입니다.
카메라 동기화를 시그널을 통해서 진행됩니다. 시그널 동작은 그림 3 과 같습니다. 시그널은 SelfSyncMaster로 설정된 열화상 카메라에서 나오며 29.97Hz로 시그널을 전달합니다. 그리고 SyncMode가 External Master 혹은 SelfSyncSlave로 설정된 카메라가 시그널을 받아서 동일한 Hz로 영상을 수집하게 됩니다. 이때 External Master와 SelfSyncSlave의 차이는 시그널을 받은 후 다시 전달 하는 것과 시그널을 받기만 한다는 차이가 있습니다.
제작한 센서팩의 표 1 하드웨어 동기화 설정과 그림 2를 참고해서 보면 시그널은 Thermal1(SelfSyncmaster)->Thermal2(External Master)->RGB1,2(Slave) 순으로 전달됩니다. (이와 같은 방식은 고칠 생각입니다. 저말고… 누군가 해주지 않을까요…허허) 이러한 방식으로 네대의 카메라가 동시에 촬영되도록 하드웨어로 설정했습니다. 하지만 그림 2와 같이 결선도만 구성한다해서 동기화가 되는 것이 아니며, 표1 에 나와 있는 모든 설정을 할 수 있는 것이 아닙니다.
*각 카메라에 관한 설명은 “R2T2: RGB-Thermal-Depth Dataset for Pedestrian Detection”를 참고했습니다.
저희가 제작한 Sensor Pack은 그림 1 (a) 와 같이 단순히 카메라를 연결한다 해서 영상을 쉽게 취득할 수 있는 것이 아닙니다. 하드웨어 설정 후에 모든 카메라 세팅 및 취득 등 다양한 역할을 수행할 Software가 있어야합니다. 그 Software가 이 메뉴얼의 목적인 Multi-spectral Gabber 입니다. Multispectral Grabber의 정확한 목적은 다음과 같습니다.
카메라 제어 설정
카메라 SDK 의 제어 함수를 이용하여 표 1 과 같이 카메라 별 동기화 설정과 기타설정을 수행합니다.
촬영 영상 저장
네 대의 카메라로부터 획득한 영상을 바이너리 파일 형태로 연속하여 저장합니다.
상태 모니터링
카메라의 정상 동작을 확인하는 척도인 consistency error 의 영상 수와 카메라 별 영상획득 주기 (frame per second)를 그림 4와 같이 시각화 하여 사용자로 하여금 센서 시스템의 상태를 모니터링 하도록돕는 역할을 합니다.
촬영 데이터 셋 디코딩
바이너리 형태로 저장된 영상들을 PNG 로 변환하여 저장장치에 저장한다.
위와 같은 역할을 수행하는 Software를 제작하기 위해서 당시에는 MicroSoftware에서 제공하는 MFC를 사용했습니다. MFC는 C++ 기반에 Software GUI 제작툴로써 교수님의 데이터 셋들 또한 MFC로 제작된 툴을 이용해 촬영되었습니다.
하지만 MFC는 호환성이 매우 좋지 않으며 사용 방식 또한 쉬지 않고 무거워서 요즘에는 많이 사용하지 않는 다고 합니다. 저희는 Jetjon Xavier에서 Demo를 진행해야 했기 때문에 김태주 연구원께서 OS간이 호환성이 매우 뛰어난 QT를 활용해서 Grabber를 제작했으며 모든 URP 사람들은 QT 버전의 Grabber를 이용해서 배울 예정입니다. ( 시간이 된다면 MFC로 제작한 Grabber 또한 추가할 생각입니다.)
2. QT
2.1 QT 란
2.2 QT 설치
2.2.1 QT 설치(Window)
2.2.2 QT 설치(Linux)
2.3 QT 시작하기
2.4 QT를 이용해 GUI 제작하기
2.5 QT에 Library 연결하기
2.5.1 Window
2.5.2 Linux
3. Ebus SDK
3.1 개요
3.2 ???
4. Code Review
4.1 전체 리뷰
4.2 MainWindow
4.2.3 Initialize
4.2.4 Button Initialize
4.2.5 Button Connect
4.2.6 Button Display
4.2.7 Button Save
4.2.8 Button Decoding
4.3 CamThreads
4.4 FileThreads
“이와 같은 방식은 고칠 생각입니다. ” 라고 하셨는데 어떤 방식으로 고치는것을 말하는 건가요?