
3D reconstruction 을 위해, 드론에서 4K 이미지 촬영이 필요하다.
4K 이미지 촬영을 위해 RGB 카메라와 carrier 보드를 드론에 부착하고, 드론에서는
UART 로 carrier 보드를 제어하는 구조가 필요하다.
"capture" 명령을 받으면, carrier 보드에서 사진을 찍는 UART 서버를 작성한다.
"capture" 명령 뒤에는 6DoF 좌표값이 들어온다. 이 값은 gps.txt 파일에 append 한다.
구체적인 UART 패킷의 형태는 아래와 같다.
'$' 명령 ':' 6DoF '\n'
이미지를 캡처하기 위해서는 cv:VideoCapture 를 사용하고,
읽은 이미지는 cv:Mat 에 두었다가 cv:imwrite() 로 저장한다.
cv:imwrite() 는 확장자를 인식하므로 확장자까지 적어준다.
cv:VideoCapture 를 open 할때에는 gstreamer pipeline 값을 작성해야 한다.
또한 opencv 를 사용할때 cmake 라면 find_package 를 사용하겠지만,
make 를 쓴다면 pkg-config 를 사용해서 유사한 효과를 얻을수 있다.
e-con 가이드를 통해 Jetson orin nano 에 RGB 카메라 드라이버를 설치하였다.
설치후 카메라 동작을 확인하였다.


Gstreamer 점등 확인
점등에는 gst-launch-1.0 툴이 사용되고, nvarguscamerasrc element 를 사용한다
해당 element 는 video/x-raw(memory:NVMM) caps 만 지원하고 있고,
format 으로는 NV12 이미지 프레임만 지원하고 있다.
(gst-inspect-1.0 nvarguscamerasrc 로 확인)

video/x-raw(memory:NVMM) caps 에 width / height / format / framerate 를
범위내로 작성해야 점등이 된다.
최대 지원가능한 width / height / framerate 확인


"capture" 명령을 받았을때 read 를 하면 옛날 이미지가 읽히는 문제가 있었다.
따라서 read 스레드를 작성하여 항상 최신 이미지가 cv:Mat 에 있도록 하였는데,
새로운 문제가 확인되었다.
카메라를 움직이는 와중에 "capture" 명령을 받으면
저장된 이미지에 가로로 흰 줄이 가거나, 옛날 프레임와 최신 프레임이 혼재된 경우가 있었다.

따라서 상태변수를 하나 두어, "capture" 명령을 받은 시점엔 잠시 read 를 멈추고,
명령이 완료된 이후에 read 를 재개하는 방식을 적용하였다.
uart (/dev/ttyTHS0) 의 경우 user 권한이 부족하면 열리지 않는 문제가 있었다.
따라서 다음 명령을 통해 권한 부여를 진행하였다.
sudo usermod -a -G tty $USER
sudo usermod -a -G dialout $USER
프로그램이 GUI 환경 gnome 터미널에서는 실행되나, ssh (MobaXterm) 상에서는
실행되지 않는 문제가 있었다.
에러로그를 따로 보관해두지 않아서, 수정법만 기재해둔다.
에러로그가 없지만, 추정컨데 MobaXterm 에는 x11 forwarding 이 켜져있고,
opencv 관련 함수를 실행할때 GUI 지원이 있는지 보고 GUI 관련 기능을 수행하려다가
실패했을 것이다.
따라서, 아래 명령으로 GUI 기능을 쓰지 않도록 한다.
unset DISPLAY
물리적인 파일을 나눌때는 opencv 파트와 uart server 파트,
그리고 uart command 파트로 나누어서 command 추가가 이루어질때 다른 파트가
영향을 받지 않도록 하였다.
uart 서버에는 comnand 식별을 위한 parsing 루틴, uart 입력을 감시할
polling 루틴을 추가한다.

프로그램 동작을 시스템 로그 (journalctl) 상에서도 확인할수 있게 로그 레벨을 지정한다.
색감의 경우, 촬영환경의 영향을 받으므로 indoor / outdoor 환경에서 gstreamer 파라미터를
바꾸는 방식으로 확인하였다.


white balance 의 경우 별도의 흰색 부스를 제작, 카메라를 안에 넣어두고
e-con 사에서 제공한 isp 프로그램을 이용해 확인하였다.


241031 작업에 대한 백업