자동추적 카메라를 탑재한 경찰차량 지원

2009-03-12     CCTV뉴스

기존 경찰차의 추적시스템은 카메라가 차체에 고정되어 있으므로 용의차량을 스크린에서 놓치는 문제가 발생하였다. 이 프로젝트는 용의차량이 항상 스크린에 나타나도록 만드는 자동추적 솔루션을 위해 빛의 효과를 감소시켜 자동화 된 스레스홀드 계산 방법을 구현하고 있다.


디자인 개요

이 프로젝트는 세 개의 주요 목적을 가지고 있다. 첫째는 경찰차의 데이터 수집 및 해석 능력을 향상시키는 것이며, 둘째는 경찰차와 본부 간 실시간 이미지 전송과 정보공유를 가능하게 하는 것이다. 마지막으로 SoPC를 이용한 디자인을 통해 성능을 높이고 경제성을 달성하는 것이 목표이다.

이 시스템을 위해 스텝 모터를 이용해 상하좌우로 움직이는(Pan-Tilt) 카메라를 만들었으며, 모터의 신속한 반응을 위해 FPGA 스텝 모터 컨트롤러를 디자인했다. FPGA 스텝 모터 컨트롤러의 반응속도는 소프트웨어 컨트롤러보다 빠르기 때문에 용의차량이 빠르게 도주하더라도 카메라가 항상 포커스를 맞출 수 있도록 도와준다.

추적용 카메라와 함께 작동하는 자동 음성경고시스템도 디자인되었다. 이 시스템에는 Nios 맞춤형 명령문을 이용한 하드웨어 가속기술이 MPEG 오디오 플레이를 위해 구현되었는데, 이로 인해 MPEG 오디오 디코딩을 위한 추가 디코딩 칩을 사용할 필요가 없다. uClinux 오디오 드라이버는 DE2 보드에서 WM8731DAC를 동작시키기 위해 개발되었다.


 FPGA 합성 OBD-II 인터페이스는 차량 속도 및 컨트롤 시스템인 ECU 결함에 대한 정보를 수집하기 위해 개발되었다. OBD-II 인터페이스는 상대속도를 측정하고 차량 상태를 모니터링 해 가격이 비싼 레이저 측정 장치를 대체하며, 이미지를 저장하고 무선으로 송출하기 위해 libjpeg과 알테라 C2H 컴파일러를 사용한 JPEG 압축 모듈이 디자인되었다.

libjpeg 가속기는 리눅스 시스템에서 종종 사용되는데 코드를 전혀 수정하지 않고 애플리케이션 압축 성능을 향상시킨다.

이 프로젝트의 또 다른 주요 기능은 수집된 실시간 데이터와 이미지가 HSDPA를 이용해 순찰차에서 본부로 신속히 전송될 수 있다는 점이다.

 차량용 FPGA의 적절성 

경찰차량 지원시스템은 이미지, 음성, 커뮤니케이션 그리고 센서 데이터 처리 등이 요구되는 복잡한 분야이며, 탑재되는 장비의 숫자가 점차 늘어남에 따라 차량 시스템의 복잡성 역시 커진다. OBD 인터페이스의 경우 각기 다른 차량이 각기 다른 프로토콜을 사용하기 때문에 시스템도 각각 다르며, FPGA는 새로운 구성이나 합성이 쉬우므로 이 분야에 적합하다.

우리는 Quartus와 Nios IDE 7.0 환경에서 SoPC 시스템을 개발하고, OS와 애플리케이션들은 GUN 툴을 통해 구현했다. SoPC는 쉬운 시스템의 구성을 도와주고 uClinux와 GUN 툴 체인은 익숙한 개발환경을 제공한다.

경찰차에서의 필요

추적 지침에 따르면 추적하는 차량은 추적을 시작함과 동시에 경고 및 기록 장비를 켜야 하며, 지휘본부에 보고해야 한다. 한 번에 몇 가지 일을 동시에 하기는 쉽지 않기 때문에 자동화되고 통합된 솔루션이 필요하다. 경찰차량 지원시스템 프로젝트는 이런 문제점들에 대한 솔루션을 제공한다.

자동추적 카메라

추적하는 차량이 항상 스크린 중앙에 위치하도록 하기 위해 수평 및 수직으로 움직이는 카메라를 만들었다. 이 팬-틸트 카메라 모듈의 중요 요소는 반응시간이다. 반응시간이 빠를수록 목표 차량을 놓치는 비율이 줄어든다.

그림 3. 도로상에서의 추적 시험


그림 4. 차량 탑재 임베디드 시스템의 구성

우리는 소프트웨어에 의한 컨트롤 대신 하드웨어에 의해 컨트롤되는 방식을 택했다. 스텝모터 컨트롤러는 Verilog HDL을 이용해 디자인 되었으며, 이미지 프로세스 모듈로부터 오는 상하좌우 움직임에 대한 명령은 FPGA의 스텝 모터 컨트롤러로 직접 전달된다. 스텝 모터 컨트롤러는 이 명령을 받아 작동 신호 펄스를 만들어 각각의 모터에 적절한 길이 신호를 보낸다.

추적 모드에 들어가기 위해서는 카메라를 대상 차량에 맞추고 DE2 버튼을 누르면 된다. 이미지 프로세싱 모듈이 대상 차량의 평균 색상 요소들을 추출해 대상 차량 위치를 산출하면, 팬-틸트 카메라는 이 차량이 움직이는 즉시 추적을 시작한다.

캡처된 640×400 이미지는 USB 저장장치에 저장되는 동시에 지휘본부로 전달된다. 자동추적 카메라는 부하가 많이 걸린 상태에서 테스트 되었는데 대부분의 경우 잘 작동했다. 자동추적 카메라의 추적 메커니즘은 밤에는 작동하지 않으며, 추적 알고리즘이 색상의 차이에 기반하고 있기 때문에 특정 컬러에서 취약함을 보이기도 한다.

자동 음성 경고

자동 음성경고시스템은 자동추적카메라가 추적모드에 들어가면 바로 작동하므로 순찰차에 탑승한 경찰관에게 편의성을 제공한다. MPEG 오디오 데이터 플레이어는 Nios 프로세서의 맞춤형 명령문에 따라 별도의 프로세서 없이 동작하며, DE2 Nios II 프로세서는 100MHz 속도로 작동한다.

개발보드는 128Kbps 44.1KHz MPEG1 레이어-3 모노-채널오디오를 가속기 없이 재생할 수 있으며, 64비트 곱셈기가 더해져 재생 능력을 약 2.5배 증가시킨다.

이미지 캡처 모듈

카메라의 아날로그 이미지 정보는 DE2 개발보드의 ITU656 표준 디지털 스트림으로 변한다. 이 스트림은 세 가지 용도로 쓰인다. 첫째, 자동추적 카메라의 상하좌우 움직임을 컨트롤하는 데 쓰인다. 둘째, 비전공유시스템과 무선송신을 위한 JPEG 압축에 사용된다. 마지막으로 차량 내 디스플레이에 사용된다. 이 이미지 캡처 모듈은 이미지 크기를 조정하고, 인터레이스를 제거하고, 프레임 버퍼 메모리 주소를 계산하는 등의 선행처리 작업을 수행한다.

이미지 프로세싱 모듈

카메라의 자동추적기능을 위해서는 움직임 추적 알고리즘이 필요하다. 이를 위해 FPGA에 쉽게 적용할 수 있는 적응형 컬러추적 알고리즘이 개발되었는데, 이 알고리즘은 차량의 색상 변화 평균치를 방향에 따라 계산하고 새로운 바이너리 스레스홀드 값을 정한다.

이 알고리즘은 소프트웨어 프로세싱 없이 라인을 처리하도록 디자인 되었으며, FPGA 디스플레이 입력 모듈과 동기화되므로 외부 프레임 버퍼 메모리가 필요 없다. 이 방법의 주된 이점은 성능인데 30분의 1초마다 모터 컨트롤러에 컨트롤 명령을 전송한다.

uClinux 상에서의 C2H 가속 JPEG 압축

JPEG에 의해 압축되는 이미지의 크기는 640×400이다. libjpeg의 순방향 DCT 기능은 가속기로 대체되는데 이 가속기는 C2H 컴파일러로 개발되고 uClinux 환경에서 이용 가능하다. C2H 가속기와 uClinux를 결합시키는 이유는 이것들이 다른 임무들과 동시에 작동하기 때문이며, 표준 라이브러리인 libjpeg의 가속으로 인해 추가 DSP 칩이나 소프트웨어를 사용하지 않고도 압축성능의 향상을 기대할 수 있다. libjpeg을 사용하는 애플리케이션은 코드를 수정하지 않고도 재 컴파일을 통해 압축 성능을 향상시킬 수 있다.

맞춤형 OBD-II 인터페이스

차량들은 시스템 관리를 위해 엔진컨트롤 유닛(ECU)을 가지고 있다. 순찰차를 비롯한 모든 차량에서 ECU는 엔진과 다양한 전자 제어장치들을 통합하는 부품으로 중요성이 증대되고 있다. OBD-II는 컴퓨터나 진단 툴을 ECU에 연결해 차량관리를 하기 위한 인터페이스로 디바이스 간 커뮤니케이션을 가능하게 만든다.

차량 제조업체에 따라 많은 OBD 표준이 있는데 이번 프로젝트에서는 ISO9141-2 국제규격을 사용했다. OBD-II로부터 차량의 속도, 연료상태, 차량 오류 상태를 알 수 있는데 5 baud의 초기화 속도, 10.4K baud의 커뮤니케이션 속도로 작동한다. 커뮤니케이션을 위해서는 수신된 정보 바이트가 보정되어 ECU로 다시 보내져야 하는데 시리얼 통신과 유사하기 때문에 SoPC에서 UART가 사용된다.

성능 변수들

이 장에서는 경찰차량 지원시스템 디자인의 성능변수들에 대해 설명하도록 하겠다.표 1은 이미지 프로세싱 모듈이 컨트롤 신호를 보내는 것과 스텝모터가 작동 신호를 처음 받는 것 사이의 시간간격을 보여준다. 이 시간간격은 오실로스코프를 이용해 측정된다. Nios 프로세서는 소프트웨어 프로그램 컨트롤러에서 인터럽트 신호를 받아 작동신호를 생성해내고 GPIO 인터페이스를 통해 스텝모터를 움직인다.



그림 9. 캡쳐된 이미지와 OBD-Ⅱ 정보 스크린


자동추적 카메라의 속도는 주로 이미지 프로세싱 성능에 의해 좌우된다. 표 2는 서로 다른 플랫폼에 기반한 추적 알고리즘의 프레임 속도를 보여준다. DE2의 프레임 속도는 인터레이스 모드로 작동하기 때문에 사실상 초당 60프레임이지만, 우리는 유효 프레임만을 고려해 초당 29프레임으로 표시했다.


그림 11. SoPC 구성


그림 12. Quartus Ⅱ 7.0 컴파일 리포트

표 3은 JPEG 압축을 신속히 하기 위해 libjpeg DCT 함수를 C2H로 가속한 결과이다. 640×400×24 비트의 비트맵들은 정확한 측정을 위해 20배 압축되었다. C2H로 컴파일 하면 가속기가 없는 경우보다 성능이 더 떨어지는 것을 볼 수 있는데, 이 문제를 해결하기 위해 버퍼 관리방법을 바꿨다. DCT 함수를 수정한 후에는 성능이 4배 향상된 것을 볼 수 있다.

이 시스템을 디자인 할 당시 uClinux 시스템에서 USB 모뎀을 사용할 경우 성능저하에 대한 우려가 있었지만, PC 환경에서 작동할 때와 거의 비슷한 네트워크 성능을 보였다.


 디자인 아키텍처

이 장에서는 시스템 디자인에 대해 설명하도록 하겠다. 전체 시스템은 uClinux에 의해 컨트롤되며, 카메라 컨트롤 시스템과 이미지 프로세스 모듈을 포함한 서브시스템들은 모두 FPGA로 구성되어 있다. 회색으로 표시된 부분들은 이 프로젝트를 위해 디자인 된 맞춤형 SoPC를 의미한다.표준 JPEG 라이브러리 libjpeg의 DCT 함수는 C2H 가속기로 바뀌었다. 이미지 프로세싱 모듈, VGA 컨트롤러, 스텝모터가 하나의 독특한 SoPC로 결합되었고 총 31,000개의 LE(Logic Element)가 사용되었다.

디자인 설명


이 장에서는 경찰차량 지원시스템의 디자인을 구현하는 방법과 단계에 대해 설명하도록 하겠다.

uClinux와 C2H의 결합

복잡한 복수 디바이스 환경의 시스템에서 OS를 사용하면 개발에 유연성이 생기며, uClinux 커넬은 MMU가 없는 프로세서들에 적합하다. uClinux 시스템에는 메모리 관리 유닛이 없으므로 맞춤형 하드웨어 가속기를 사용한 Nios 프로세서 애플리케이션의 사용을 간편하게 만들어 준다.

uClinux에서는 메모리 매핑이 된 주소에 쓰는 것에 대한 제약이 없기 때문에, Nios IDE 환경에서 쓰여진 코드는 uClinux 멀티태스킹 환경에서 동작할 수 있도록 코드를 거의 고치지 않고 컴파일 할 수 있다.

또한, 전형적인 테크닉을 사용해 C2H 가속기를 uClinux 상에서 사용할 수 있다. 이 장에서는 C2H 가속기를 Nios IDE에서 uClinux로 옮기는 과정에 대해 자세히 기술하도록 하겠다.첫 번째 단계는 임시 프로젝트를 만드는 것으로 컴파일을 통해 Nios IDE에 가속기를 생성한다.

이제 디버그 디렉토리에서 가속기를 위한 래핑(Wrapping) 함수를 볼 수 있는데 헤더 파일과 래핑 함수를 uClinux 개발 디렉토리로 복사한다. 만약 FPGA를 프로그램 하지 않았다면 프로그램 한다.


다음 단계는 Nios gcc 툴과 elf2flt 옵션을 이용해 가속화된 애플리케이션을 컴파일 하는 것으로, system.h나 io.h와 같은 헤더 파일들이 꼭 있어야 한다는 점을 명심해야 할 것이다. 여기서 생성된 실행파일을 개발보드로 복사하게 되는데, 대부분의 소프트웨어만으로 만들어진 시스템보다는 빠를 것이다.

불행히도 우리는 libjpeg DCT 함수를 가속기로 전환하는데 성능상의 문제에 부딪히게 되었다. 다음 장에서는 성능 문제에 대한 해결책을 설명하도록 하겠다.

C2H 컴파일러를 위한 JPEG 라이브러리 최적화

일반적으로 개발자는 JPEG 압축을 위해 DSP 사용을 고려하지만 이 경우 DSP를 지원하는 독자적인 소프트웨어 프로그램을 필요로 한다.

libjpeg은 JPEG 표준 라이브러리로 많은 기존 애플리케이션들이 libjpeg을 사용하기 때문에 C2H를 사용한 가속방법에 적합하다.원래의 DCT 함수를 C2H 컴파일러를 이용해 변환하면 소프트웨어로만 구현된 디자인에 비해 오히려 성능이 낮아지게 되는데, 이는 64바이트의 데이터를 처리할 때마다 데이터 캐시를 비워야 하는 구조적 문제 때문이다.
 
따라서, C2H 컴파일러에 적합한 최적화된 버퍼관리 시스템을 개발해 4배 향상된 성능을 구현하게 되었다.

맞춤형 SOPC 컴포넌트의 생성

VerilogHDL을 사용해 디자인 된 각 부분은 SoPC에 컴포넌트로 더해진다. 이미지 처리 모듈, VGA 컨트롤러, 스텝모터 컨트롤러는 하나의 SoPC 컴포넌트로 통합된다. 이 컴포넌트들은 Avalon 마스터 컴포넌트로 SRAM에 이미지 데이터를 적는다.



맞춤형 명령문을 이용한 MPEG 오디오 디코딩

Nios II 프로세서와 uClinux를 이용하는 환경에서 MPEG 오디오를 재생하는 데는 3가지 문제점이 있다. 첫째는 프로세서의 성능이고, 둘째는 FIFO의 크기이며, 마지막으로 uClinux에서 출력을 위한 디바이스 드라이버이다.100 MHz Nios II 프로세서가 Cyclone II 칩에서 스테레오 128Kbps 44.1KHz MPEG1 레이어3 오디오를 디코딩하면 요구 성능을 충족시키지 못했다. FIFO 크기가 충분하면 시스템에서 모노 채널 오디오를 재생할 수 있지만, 이 경우 CPU 성능이 항상 오디오 재생을 위해 할당되어야만 한다.

따라서, Nios 프로세서에 맞춤형 명령문을 사용하는 64비트 곱셈기를 추가해 libmad 라이브러리에서 자주 이용되는 64비트 곱셈을 담당하면, 이로 인해 성능이 2.5배 향상되고 계산을 위한 클록의 사용이 줄어들게 된다.오디오 재생이 끊어지게 만드는 데는 몇 가지 이유들이 있다. 첫째는 샘플링 레이트 불량이며, 둘째는 부족한 버퍼 사이즈이고 마지막은 멀티태스킹 환경이다. 그림 19는 이런 문제를 해결하기 위한 17MHz 오디오 레퍼런스 클록으로 구성된 오디오 재생 환경이다.

디자인 특징

이 장에서는 경찰차량 지원시스템 디자인의 핵심 특징에 대해 기술하도록 하겠다.

이 시스템의 가장 큰 장점은 통합성이다. 하나의 FPGA 칩이 이미지 프로세싱, 압축, 전송, MPEG 오디오 디코딩, 스텝모터 컨트롤, OBD 커뮤니케이션 등과 같은 모든 작업을 수행한다. 각각의 컴포넌트는 SoPC 컴포넌트 형태로 추가되며 서로 다른 프로젝트에서 컴포넌트들을 재활용하는 것이 용이하다.



디바이스 드라이버는 전체 시스템이 uClinux 환경에서 동작하도록 디자인되었다. 맞춤형 명령문, C2H 기술 기반 가속기, uClinux 애플리케이션을 연결하는 접근 방법을 통해 하드웨어 및 소프트웨어 통일을 이루었다.이미지 프로세싱의 주요 특징은 메모리 액세스를 최소화하는 것이다. 이미지 처리는 라인 유닛에 의해 구현되기 때문에 프레임 버퍼 메모리는 JPEG 압축에만 적용되며, 이를 통해 Avalon 버스의 대역폭을 크게 줄일 수 있었다.

결론

우리는 텔레매틱스 분야 중 하나인 경찰차량 지원시스템을 개발 및 테스트하고 대상 차량을 모니터 스크린의 정중앙에 보여주는 자동추적카메라를 개발했다. 차량의 상태정보를 알기 위해 FPGA 기술에 기반한 OBD 인터페이스가 디자인되었으며, 차량의 이미지와 상태정보를 원거리에서 확인하는 리모트 시스템이 글로벌 무선 HSDPA 모듈을 이용해 개발되었다.



경찰차량 지원시스템은 고정된 하드웨어 플랫폼과 제한된 리소스로 구성된 디자인 환경을 FPGA 기술로 개선했다. 우리는 소프트웨어만으로는 해결될 수 없는 성능상의 문제나 어려움을 하드웨어 디자인 수정을 통해 진행했으며, 이로 인해 이미지 프로세싱 분야에서 FPGA의 장점이 크게 발휘되었다.
 
JPEG 압축을 위해 사용된 알테라의 C2H 기술은 널리 사용되고 있는 libjpeg 가속화 DCT 함수의 테스트를 통해 높은 성능이 입증되었다. C2H 기술은 C 프로그램을 HDL로 바꾸는 소프트웨어 패러다임을 통해 높은 성능을 구현할 수 있다. C2H는 아직 해결해야 할 과제들이 있지만, 소프트웨어를 하드웨어로 바꾸는 기술 발전에 계속 이바지할 것으로 기대된다.


<박진희 기자>