이미지 기반 운전자 지원 개발 환경
2009년 06월호 지면기사  / 글│ALTERA

서론

운전자 지원을 위해 카메라를 활용하는 새로운 솔루션이 자동차에 통합되고 있다. 현재 양산 차량에 적용되고 있는 1세대 기능들은 LDW, 주차 지원을 위한 리어뷰, 나이트비전 등을 포함한다. 개발이 진행되고 있는 2세대 시스템으로는 다중 카메라 처리 기능이 있다.
시스템 개발자들은 많은 기술적 과제에 직면해 있다. 최신 알고리즘은 매우 높은 처리 성능을 요구하며, 전력 제한 요건은 제공 가능한 선택사항을 제한하고 있다. 하나의 카메라 입력을 포함하는 가장 기본적인 시스템에서 최대 4개의 카메라 입력을 통합하는 버즈아이(birds-eye) 및 서라운드 뷰 등과 같은 복잡한 시스템에 이르기까지 다양한 요건을 해결하기 위해서는 높은 수준의 확장성이 필요하다. 이러한 영역에는 ASSP, DSP, FPGA 등과 같은 다양한 반도체 소자를 조합하여 사용하기 때문에 구현하는 것이 매우 복잡하고 유지관리가 어렵다.
LDW 알고리즘

일렉트로비트 오토모티브(Elektrobit Automotive GmbH)의 LDW 소프트웨어는 PReVENT SAFELANE European 프로젝트에 기반하고 있으며, C++ 부동소수점 소스코드로 임베디드 구현을 위해 최적화되지 않았다. 알고리즘(그림 1)은 관련 측정 지점들을 추출하고, 예상 차선을 식별하고, 이전 프레임의 정보들을 사용하여 결과들을 필터링하여 비디오를 처리한다. 결과적으로 시스템은 차선 내에서 차량의 위치를 식별하게 된다. 다음으로 이전에 계산된 데이터를 토대로 경고 정책이 적용될 수 있다.


개발 플랫폼

운전자 지원(Driver Assistance, DA) 개발 환경(그림 2)은 알테라의 PARIS-1 (Platform ASSP Replacement Infotainment System-1) 개발 플랫폼에 기반하고 있다. PARIS-1 개발 플랫폼은 Stratix짋 Ⅱ FPGA 모듈과 마더보드로 구성돼 있다.
Stratix Ⅱ FPGA 모듈은 2개의 DDR2 메모리, 플래시 메모리, USB, 이더넷을 위한 PHY 디바이스, 마더보드용 EXM32 커넥터 등으로 구성돼 있다. 마더보드는 모듈을 통해 액세스할 다양한 버스 및 멀티미디어 인터페이스를 가지고 있다. PARIS-1 개발 플랫폼은 HDD, 2개의 TFT LCD 연결(각각 DA 서브시스템용과 스트리밍 서브시스템용), 터치스크린 인터페이스 등을 사용한다.
카메라 입력을 위해 마더보드의 범용 IO 커넥터를 사용함으로써 검증용으로 PARIS-1 개발 플랫폼을 재사용할 수 있다. 뿐만 아니라 Stratix Ⅱ FPGA 모듈에 기반한 간단한 프로토타입도 구축해 볼 수 있다.


아키텍처 템플릿

DA 프로젝트는 일반적으로 PC 상에서 알고리즘을 개발하는 것으로부터 시작하여 비디오 처리 성능을 평가하기 위해서 테스트 비디오를 사용한다. 개발 환경은 HDD의 실시간 비디오 녹화 데이터를 스트리밍 할 수 있다. 알고리즘 평가 단계에서도 동일한 비디오 녹화 데이터를 최종 임베디드 솔루션 상에서 적용할 수 있다.
FPGA 설계(그림 3)는 2개의 독립된 실체, 즉 스트리밍 서브시스템과 DA 프로세싱 서브시스템으로 구분된다. 각 서브시스템은 자체적으로 독립된 DDR 메모리 인터페이스를 가지고 있다. FPGA 구현이 가지는 특성때문에 2개의 실체(entities)는 독립적으로 동작한다. 따라서 한 서브시스템의 부하가 다른 시스템의 성능에 영향을 미치지 않는다. 한 가지 요구사항이 있는데, 바로 스트리밍 서브시스템이 DA 서브시스템에 입력 테스트 데이터를 충분한 속도로 공급해야 한다는 것이다. 최종 솔루션에서 스트리밍 서브시스템은 카메라 입력으로 대체된다.
스트리밍 서브시스템은 구성 가능 터치스크린을 가지고 있다(그림 4). 파일 시스템(file system) 내에 통합된 자체 HDD 인터페이스와 소프트웨어 드라이버는 최대 4개의 비압축 컬러 VGA 비디오 채널을 FPGA로 스트리밍 할 수 있다(HDD에서 DA 서브시스템으로).
DA 프로세싱 서브시스템은 다음과 같은 기본 요소와 함께 Nios짋 Ⅱ 소프트-코어 프로세서 주변에 구축된다:

● 코드 프로파일링을 위한 성능 카운터
● 스트리밍 서브시스템과 인터페이스 하기 위한 메시지 버퍼
● 프레임 버퍼 콘텐츠를 표시하기 위한 LCD 컨트롤러

그림 5는 프로세싱 코드가 소프트웨어 템플릿 내에서 예시되는 방법을 나타낸 것이다. 프로파일링 단계를 거친 후에 하드웨어 가속에 필요한 코드 부분을 확인할 수 있다. 다음의 2가지 방법론은 알고리즘에 대한 간단한 관찰에 기반한 코드 가속을 정의한다.

● 알고리즘이 입력 비디오 스트림의 픽셀들을 연속적으로 처리하고 있다면, 프런트엔드 SOPC 빌더 컴포넌트로 이를 실행한다. 이와 같은 컴포넌트로부터의 입력이 비디오 스트리밍 인터페이스이다. 출력 데이터는 전처리된 비디오 데이터의 프레임 버퍼에 저장된다.
● 비디오 프로세싱이 수신된 각 비디오 프레임에 대해 랜덤 액세스를 요구한다면, 프레임 버퍼로부터 입력 데이터를 읽고 결과를 다른 버퍼에 작성하는 프로세스에 이를 구현한다. 이러한 형태의 컴포넌트들은 백엔드 프로세싱 SOPC 빌더 컴포넌트로서 참조된다.

이러한 2가지 방법론이 상호 배타적이지 않기 때문에 설계는 하나 또는 두 기법 모두 사용하여 솔루션의 각기 다른 부분들을 구현할 수 있다.
LDW 알고리즘은 C++ 코드로 구성된다. LDW C++ 코드를 개발 환경에 통합하기 위해서 알테라와 일렉트로비트는 다음과 같은 단계를 수행했다:
1. 입력 데이터 읽기와 후처리 디스플레이 설정을 처리하는 코드의 PC 환경 부분을 제거한다.
2. 새로운 환경에서 프레임 버퍼로부터 입력을 확보하고 출력을 다른 프레임 버퍼로 저장할 코드 처리 부분을 통합한다.
3. 스트리밍 서브시스템과 DA 서브시스템 사이의 동기화를 구성한다.
4. 불필요한 부동소수점 코드를 고정소수점 코드로 변환한다. 고정소수점 연산은 부동소수점 코드보다 훨씬 효율적으로 구현된다.

이러한 셋업 및 프로파일링 활동이 완료되었을 때, 사이클의 70%를 차지하는 측정 지점 생성 단계가 프런트엔드 SOPC 빌더 컴포넌트 실행을 위한 대안으로서 확인되었다.

구현 방법론

DA 개발 환경에서 구현 및 가속 코드는 다양한 소스들을 가질 수 있다. 이것은 다양한 디바이스를 겨냥한 임베디드 코드가 될 수도 있고 PC 환경을 위한 하이-레벨 코드가 될 수도 있다. 어떠한 경우라도 실행 방법론은 유사하다(그림 6). 주요 태스크는 코드를 1개의 프레임 버퍼를 처리하고 그 결과를 다른 프레임 버퍼의 출력으로 전달하는 표준 C 또는 C++ 함수로 줄이는 것이다. 이 단계가 완료되면, 함수는 제공된 DA 소프트웨어 템플릿에 추가될 수 있으며, 이 글에서 설명하는 기법들과 툴들을 사용하여 최적화할 수 있다.


툴 검토

알테라는 2개의 서브시스템을 구축하는 데 SOPC 빌더를 사용했다. 시스템은 GUI(그림 7)로 구성되었으며 다양한 SOPC 빌더 컴포넌트(DDR2 SDRAM 컨트롤러, Nios Ⅱ 프로세서, 성능 카운터)가 Avalon-MM(Avalon짋 memory-mapped) 버스 주변에 예시된다. SOPC 빌더는 FPGA 구성 합성을 위해 Quartus짋 Ⅱ 소프트웨어에 파일들을 제공하고 개별 BSP(Board Support Package) 라이브러리를 구축하기 위해 Nios Ⅱ 소프트웨어 개발 툴에도 파일을 제공한다.
Nios Ⅱ 소프트웨어 개발 툴은 시스템에 예시된 다양한 SOPC 빌더 컴포넌트를 위한 소프트웨어 드라이버를 제공하며, 다양한 Nios Ⅱ CPU를 통해 시스템을 지원한다. 그러므로 설계자들은 각자의 애플리케이션에 고유한 코드를 개발하는 데 집중할 수 있다.
많은 하드웨어 생성 툴이 알테라 FPGA를 지원한다. 운전자 지원의 경우, SOPC 빌더 컴포넌트를 생성할 수 있는 솔루션에 집중해야 한다. 알테라는 DSP 빌더와 C2H를 제공한다. DSP 빌더를 통해 개발자는 업계 표준 MATLAB과 Simulink 툴을 사용하여 SOPC 빌더 컴포넌트를 설계할 수 있다. C2H는 Nios Ⅱ 소프트웨어 개발 툴 내에 통합되어 있으며 하드웨어 가속 SOPC 빌더 컴포넌트를 C 코드 내의 함수로부터 직접 생성할 수 있다.
외부 툴도 제공되고 있으며 이 역시 알테라 개발 툴에 통합되어 있다. 예를 들어 임펄스 액셀러레이디드 테크놀로지스(Impulse Accelerated Technologies)의 임펄스 C 컴파일러(Impulse C compiler)가 있다. 임펄스 C 환경 내에서 하드웨어 컴포넌트 동작에 대한 C 디스크립션으로부터 시작하여 기능 검증 및 생성 단계를 수행한 다음 최종 SOPC 빌더 컴포넌트와 드라이버를 DA 서브시스템과 Nios Ⅱ 애플리케이션 코드에 통합할 수 있다.



<저작권자 © AEM. 무단전재 및 재배포, AI학습 이용 금지>


  • 100자평 쓰기
  • 로그인


  • 세미나/교육/전시

TOP