반응형

[라즈베리 파이]비공식 멀티카메라 모듈 후기(ivport v2)

배경

 많은 수의 카메라 컨트롤을 해야 하는 프로젝트를 진행하고 있었기 때문에 카메라 수를 줄이고 싶었다.

 비공식적으로 터키에 소재하는 ivmech 업체에서 Ivport v2 라는 이름으로 단일 카메라 포트를 여러개의 pi camera로 확장하는 모듈을 제작했다. 기존에도 Ivport v1으로 pi camera v1에 대해서 멀티카메라 모듈을 제공한 적 있는 업체였다.

 ivport v2 중첩으로 연결이 가능하고 최대 4번 중첩하여 16개의 카메라 연결이 이론적으로 가능하다(실제로는 여러 에러사항 때문에 중첩하여 사용하지 않을 것을 권장한다).



모듈 드라이버

 제조사에서 드라이버를 제공하는데, Python으로 작성되어 있다(ivport 드라이버 링크). CSI(Camera Serial Interface)포트 하나와 GPIO 핀과 연결이 되어 있어야 한다. 드라이버의 역할은 GPIO의 신호를 바꿔서 Ivport v2 모듈에 신호를 줘서 연결되어 있는 카메라를 바꾸는 방식이다.


 만약 Python 이외에 다른 언어로 구현을 해야 하는 경우라면 직접 드라이버를 만들어야 할 것이다. 그렇다면 드라이버 코드를 보고 GPIO 신호를 바꿔주는 것을 구현해야 한다. 이에 적합한 건 C 라이브러인 Wiring이 있다.


 그 외 이미지 데이터를 얻는 방법은 공식 프로그램인 raspistill 과 같은 프로그램을 사용하거나 동일하게 제공는 라이브러리르 사용해서 얻을 수 있다.



원리

 드라이버에 대해서 분석이 되면, 눈치가 빠른 사람은 모듈이 한번에 하나씩 카메라에 접근하는 방식으로 동시에 카메라에 접근 할 수 없다는 것을 알게 될 것이다. 이는 카메라로 부터 얻는 이미지 데이터의 크기가 커질 수록 느릴 수 밖에 없다.



성능

 제조사 측에서는 스테레오 카메라로 라이브 스트리밍을 시연 동영상을 유투브에 올려놨는데, 중간에 일시 정지 해보면 0.03 ~0.05초 정도 차이가 나서 준수해 보이지만, 역시 화질과 이미지 사이즈를 언급이 안되어 있다(모니터에 보이는 큰 화면은 출력해서 resize한다면 큰 문제가 아니다).


 하드웨어 조건 고려해서 Pi Camera v2 의 최대 고화질 카메라 이미지 수신에 걸리는 시간을 계산했을 때 최대 약 0.05초 정도 걸린다는 걸 계산했었다. 이는 이론 값이니 실제로는 더 걸릴 것이다.


 해당 내용을 PM에게 보고 하자 제조사측에도 공식 문의를 하기로 결정했고, 그 결과 얻는 답변은 Low 단으로 수정했을 경우 2대의 카메라간 동기오차는 0.10 ~ 0.15초의 오차를 얻을 수 있을 것이라고 했다. 즉, 동기가 중요한 경우 그냥 여러대의 라즈베리 파이를 구매해서 신호 동기화를 시키는 게 낫다.


 또 테스트를 직접 했을 때 재미있는 현상이 몇 가지 있었는데, 1번 카메라가 없으면 모듈이 아예 인식이 안된다.



평가

 해당 모듈은 라즈베리 파이 재단에서 제작하지 않은 비공식적인 모듈이다. 해당 모듈은 라즈베리 파이 본체가 있어야 사용할 수 있는 모듈인데, 라즈베리 파이 본체보다 금액이 좀 더 비싸다. 물론 카메라 4대를 전부 연결해서 본체를 덜 구매 한다면 이득이지만, 동기화에 한계가 있다.

 심지어 ivport v2 모듈이 소모하는 전력이 의외로 많은지 4개의 카메라를 전부 연결하면 1개는 인식이 안되었다.


 취미로 하는게 아니라면, 오히려 제약이 많기 때문에 가능하면 사용하지 않는 것이 좋다.

반응형

+ Recent posts