Search Unity

Unity와 BMW가 함께 하는 자율 주행: 가상 도로 2억 4천만 킬로미터

, 8월 10, 2020

BMW의 자율 주행(AD) 기술이 양산 단계에 이르려면 먼저 가상의 도로 2억 4천만 킬로미터를 주행해야 합니다. 이번 포스팅에서는 BMW에서 Unity를 활용하여 주행 거리를 늘리는 방법을 살펴봅니다.

앞서 첫 포스팅에서는 BMW 완전 자율 주행 및 운전자 보조 시스템 팀이 Unity를 사용하여 시뮬레이션 시각화와 시나리오 생성에 필요한 커스텀 툴을 개발한 과정에 대해 살펴보았습니다. BMW 그룹은 커스텀 툴을 활용하여 AD 개발 과정에서 당면하는 어려운 문제들을 효과적으로 해결하고 있습니다.

Unity가 어떤 영역에서 활용되고 있는지 살펴보겠습니다.

밤낮 없는 연속 테스트

BMW의 AD 개발자들은 Unity 기반 시나리오 에디터를 사용하여 정밀하게 제어되는 테스트를 수행하고 있습니다. 다음 이미지들은 다양한 시간대와 날씨 조건을 파라미터로 사용한 시뮬레이션 테스트를 보여줍니다.

동일한 시나리오로 야간에 진행하는 테스트

동일한 시나리오로 우천 시에 진행하는 테스트

시뮬레이션과 주요 성과 지표(예: 다른 차량과 지속적으로 안전 거리 유지)를 결합하여 BMW는 자율 주행 기능의 실제 완성도를 평가할 수 있습니다. AD 기능의 개별 컴포넌트가 기본 시나리오를 완전히 숙지하게 되면 BMW는 더 복잡한 상황에서 전체 AD 시스템을 대량으로 검증할 수 있습니다.

검증 테스트에는 다음과 같은 다양한 유형이 있습니다.

  • 소규모 기능 테스트 – 가장 일반적인 유형의 테스트로, 차량 주행 경로 계획과 같은 AD 시스템의 일부 기능을 빠르게 평가합니다. BMW 팀은 일반적으로 하루에 수만 킬로미터의 가상 도로 주행 데이터를 기록하는데, 이 중 상당수는 1분 미만 단위로 시간을 늘려가며 수행되는 단거리 테스트(몇 백 미터에서 1킬로미터)입니다.
  • 대규모 시스템 테스트 – 특정 기능을 시험하기 위한 일련의 소규모 테스트가 아닌 광범위한 AD 시스템을 테스트하기 위해 설계된 시뮬레이션 유형입니다. 테스트는 수 시간 동안 진행되며 실제 세계 시나리오를 모사하는 확장된 시나리오입니다. 독일의 뮌헨과 슈투트가르트를 오고 가는 아우토반 주행을 예로 들 수 있습니다. 이러한 시뮬레이션은 주행하는 차량, 보행자, 다양한 날씨 조건은 물론이고 지도 데이터, 지각 알고리즘의 입력으로 작용하는 센서 모델, 차량 주행 경로 계획, 차량 동역학 등이 추가된 가상 세계를 포함하는 경우가 많기 때문에 더욱 복잡합니다.

주행 상황은 시뮬레이션을 통해 필요한 만큼 반복할 수 있으므로 BMW는 ‘야간 주행’을 포함하여 하루 종일 테스트를 수행합니다. Unity 기반 시나리오 에디터를 사용하여 테스트를 설정하고 나면, 개발자들은 다음 날 아침에 결과를 검토하고, 분석 기능을 활용하여 기능이 제대로 작동하지 않은 지점을 찾아내고, Unity에서 렌더링한 프레임에서 정확한 실패 지점을 찾을 수 있습니다. 문제가 되었던 상황을 소규모 시나리오로 자동으로 추출한 다음 시각화하면 해당 문제의 원인을 더 정확히 파악할 수 있습니다.

예를 들어 이 시나리오에서는 다른 차량이 갑자기 끼어들었지만 자율 주행 차량이 즉시 속도를 줄이지 않아 사고가 발생할 뻔했습니다. AD 기능이 제대로 반응할 때까지 매 코드 업데이트 후 시나리오를 반복 실행할 수 있습니다.

시나리오에서 발견된 초기 문제를 바탕으로 개선 사항을 적용하면 자율 주행 차량은 다른 차량이 빠르게 합류할 때 적절하게 브레이크를 작동하게 됩니다.

코너 케이스 생성

시뮬레이션을 통해 BMW의 AD 개발자들은 안전한 환경에서 테스트할 수 있습니다. 여기에서는 시속 120km로 주행하는 자율 주행 차량이 갓길에 주차된 트럭 뒤편에서 예상치 못하게 등장하는 보행자(주황색 표시)를 얼마나 잘 감지하는지 평가합니다.

고수준의 자율 주행을 실현하기 위해 BMW의 개발자들은 가능한 한 다양한 상황에서 AD 기능의 한계를 파악해야 합니다. 그러나 아래 동영상에서 시뮬레이션된 것과 같은 시나리오는 실제 세계에서 모사하기에는 너무 비용이 많이 들거나 어렵고 위험합니다.

Unity 기반 시나리오 에디터를 사용하면 개발자들은 정지 신호를 무시하고 주행하는 차량과 같은 극단적인 시나리오를 구현할 수 있습니다. 가상 세계에서 이러한 까다로운 변수를 적용하는 것이 비용적으로 훨씬 효율적이며 안전한 데다 여러 번 재현하여 테스트할 수 있습니다.

BMW는 시뮬레이션을 사용하여 실제 주행 환경에서 일반적으로 발생하지 않거나 구현하기에 너무 위험한 시나리오를 테스트합니다. 여기에는 세 가지 극단적인 사례를 다룹니다. 1) 고속도로에서 빠른 속도로 주행하는 상황에서 자율 주행 차량의 차선에 예상치 못하게 등장하는 보행자 2) 갑자기 끼어드는 상대방 차량 3) 자율 주행 차량의 차선에서 정지해 있는 상대방 차량

시각적 테스트와 디버깅으로 코드 품질 향상

BMW 그룹의 1,800명에 달하는 AD 개발자들은 매일 Unity를 사용하여 코드를 지속적으로 개선하고 있습니다. 새로운 기능을 추가하거나 기존 기능을 개선하여 코드베이스에 변경 사항이 발생하면 개발자들은 최종 기능에 병합하기 전 먼저 통합 테스트를 수행합니다.

예를 들어 지각 기능을 중점적으로 개발하는 경우 Unity 기반 시나리오 에디터를 사용하여 차량이 속도 제한 표지를 지나치는 다양한 시나리오를 설계할 수 있습니다. 이러한 소규모 테스트는 개발자의 PC에서 시뮬레이션되며 Unity를 사용하여 실시간으로 시각화될 수 있습니다.

개발자는 결과를 시각적으로 검증하는 동시에 평가 지표를 사용하여 개선점을 파악하고 해당 기능이 최종 기능에 병합될 준비가 되었는지(즉, 차량이 매번 표지의 속도를 준수하는지) 판단할 수 있습니다.

개발자들은 점진적 코드 업데이트의 결과를 테스트함과 동시에 시각화할 있습니다.

병합 후에는 인수 테스트를 진행하여 병합으로 인해 발생한 다른 기능의 문제점이나 다른 기능으로 인해 발생한 병합의 문제점을 식별할 수 있습니다. 예를 들어 병합 과정에서 속도 제한 표지를 지각하는 기능에 버그가 발생할 수 있습니다. Unity를 사용하면 개발자들은 시각적 디버깅을 수행하고 문제점을 손쉽게 파악하여 더 빠르게 해결할 수 있습니다.

BMW의 시스템은 개발자들이 주행 기능 내부와 시뮬레이션 코드 내부에 중단점을 설정할 수 있도록 설계되어 있습니다. AD 기능과 시뮬레이션은 언제나 서로 동기화되므로 개발자들은 코드를 한 줄씩 확인하고 기능과 코드를 번갈아 확인하며 디버깅을 수행할 수 있습니다.

동기화는 시각화에도 적용되기 때문에 코드와 시뮬레이션된 월드를 동시에 검토할 수 있습니다. Unity 기반 애플리케이션에서는 계속해서 앱 내부를 이동하고 값을 검토할 수 있기 때문에 동시에 열려 있는 툴 개수를 줄일 수 있으며 데이터를 가능한 한 투명하게 유지할 수 있습니다.

이러한 모든 요소는 BMW의 자율 주행 차량에 적용될 최종 코드가 안전성과 신뢰성 기준에 부합하도록 합니다.

유니티 백서: 자동차 업계의 5가지 주요 분야에 적용되는 실시간 3D 기술에서 Unity가 AD 시뮬레이션에 어떻게 활용되고 있는지 자세히 알아보세요.

1 reply on “Unity와 BMW가 함께 하는 자율 주행: 가상 도로 2억 4천만 킬로미터”

Very cool! Would be interesting to know how exactly is data parsed from Unity to their AD API. Would they have a Unity camera at the front of the vehicle parsing all the OpenGL data of roadsigns and road markings directly to AD processor?

Comments are closed.