
가상도로 2억4천만km 유니티와 BMW가 함께하는 자율주행
BMW의 자율주행(AD) 기술이 양산 단계에 도달하려면 먼저 가상도로 2억4천만km를 주행해야 합니다. 이번 포스팅에서는 BMW에서 유니티를 활용해 주행거리를 늘리는 방법에 대해 알아보겠습니다.앞서 첫 포스팅에서는 BMW 완전자율주행 및 운전자지원시스템팀이 유니티를 사용해 시뮬레이션 시각화와 시나리오 생성에 필요한 맞춤형 도구를 개발한 과정을 살펴봤습니다. BMW그룹은 맞춤형 툴을 활용해 AD 개발 과정에서 직면하는 어려운 문제를 효과적으로 해결하고 있습니다.유니티가 어떤 영역에서 활용되고 있는지 살펴보겠습니다.밤낮없는 연속 테스트가 존재하지 않는 이미지입니다.
BMW AD 개발자는 유니티 기반 시나리오 편집기를 사용하여 정밀하게 제어되는 테스트를 진행하고 있습니다.
다음 이미지는 다양한 시간대와 날씨 조건을 파라미터로 사용한 시뮬레이션 테스트를 보여줍니다.존재하지 않는 이미지입니다.동일 시나리오로 야간에 실시하는 테스트
존재하지 않는 이미지입니다.
같은 시나리오로 우천시에 실시하는 테스트
시뮬레이션과 주요 성과 지표(예: 다른 차량과 지속적으로 안전 거리 유지)를 결합하여 BMW는 자율주행 기능의 실제 완성도를 평가할 수 있습니다. AD 기능의 개별 컴포넌트가 기본 시나리오를 완전히 숙지한다면 BMW는 보다 복잡한 상황에서 AD 시스템 전체를 대량으로 검증할 수 있습니다.
검증 테스트에는 다음과 같은 다양한 유형이 있습니다.
소규모 기능 테스트 – 가장 일반적인 유형의 테스트로 차량 주행 경로 계획과 같은 AD 시스템의 일부 기능을 신속하게 평가합니다. BMW 팀은 일반적으로 하루에 수만 킬로미터의 가상 도로 주행 데이터를 기록하는데, 이 중 많게는 1분 미만 단위로 시간을 늘리면서 진행되는 단거리 테스트(수백 미터에서 1 킬로미터)입니다.
대규모 시스템 테스트 – 특정 기능을 테스트하기 위한 일련의 소규모 테스트가 아니라 광범위한 AD 시스템을 테스트하기 위해 설계된 시뮬레이션 유형입니다. 테스트는 몇 시간 동안 진행되며 실제 세계 시나리오를 모사하는 확장된 시나리오입니다. 독일 뮌헨과 슈투트가르트를 오가는 아우토반 주행을 예로 들 수 있습니다. 이러한 시뮬레이션은 주행하는 차량, 보행자, 다양한 날씨 조건은 물론 지도 데이터, 지각 알고리즘의 입력으로 작용하는 센서 모델, 차량 주행 경로 계획, 차량 동력학 등이 추가된 가상 세계를 포함하는 경우가 많기 때문에 더욱 복잡합니다.
주행 상황은 시뮬레이션을 통해 필요한 만큼 반복할 수 있어 BMW는 ‘야간 주행’을 포함해 하루 종일 테스트를 진행합니다. 유니티 기반 시나리오 편집기를 사용하여 테스트를 설정하면 개발자는 다음날 아침 결과를 검토하고 분석 기능을 활용하여 기능이 제대로 작동하지 않는 지점을 찾아내고 유니티에서 렌더링한 프레임에서 정확한 실패 지점을 찾을 수 있습니다. 문제가 되었던 상황을 소규모 시나리오에서 자동으로 추출하고 시각화하면 그 문제의 원인을 보다 정확하게 파악할 수 있습니다.
예를 들어 이 시나리오에서는 다른 차량이 갑자기 끼어들었는데 자율주행차가 바로 속도를 줄이지 않아 사고가 날 뻔했습니다. AD 기능이 올바르게 반응할 때까지 각 코드를 업데이트한 후 시나리오를 반복 실행할 수 있습니다.
BMW 자율주행
시나리오에서 발견된 초기 문제를 기반으로 개선 사항을 적용하면 자율주행차는 다른 차량이 빠르게 합류할 때 적절히 브레이크를 작동하게 됩니다.코너 케이스 작성

시뮬레이션을 통해 BMW AD 개발자는 안전한 환경에서 테스트할 수 있습니다. 이곳에서는 시속 120km로 주행하는 자율주행차가 갓길에 주차된 트럭 뒤편에서 예상외로 등장하는 보행자(주황색 표시)를 얼마나 잘 감지하는지 평가합니다.높은 수준의 자율주행을 실현하기 위해 BMW 개발자들은 가능한 한 다양한 상황에서 AD 기능의 한계를 파악해야 합니다. 다만, 이하의 동영상에서 시뮬레이션된 것과 같은 시나리오는, 실제 세계에서 모사하기에는 비용이 너무 많이 들거나 어렵고 위험합니다.
유니티 기반 시나리오 편집기를 사용하면 개발자는 정지 신호를 무시하고 주행하는 차량과 같은 극단적인 시나리오를 구현할 수 있습니다. 가상 세계에서는 이러한 어려운 변수를 적용하는 것은 비용 효율이 훨씬 높고 안전하며 여러 번 재현하여 테스트할 수 있습니다.BMW는 시뮬레이션을 사용하여 실제 주행 환경에서 일반적으로 발생하지 않거나 구현하기에는 너무 위험한 시나리오를 테스트합니다. 여기서는 세 가지 극단적인 경우를 다룹니다.
- 고속도로에서 빠른 속도로 주행하는 상황에서 자율주행차 차선에 예상외로 등장하는 보행자 2) 갑자기 끼어드는 상대차 3) 자율주행차 차선에서 멈춰 있는 상대차 시각적 테스트와 디버깅으로 코드 품질 향상 BMW그룹 1800명에 달하는 AD 개발자들은 매일 Unity를 사용하여 코드를 지속적으로 개선하고 있습니다. 새로운 기능을 추가하거나 기존 기능을 개선하여 코드베이스에 변경이 발생하면 개발자는 최종 기능에 병합하기 전에 먼저 통합 테스트를 수행합니다.
- 예를 들어 지각 기능을 중점적으로 개발할 경우 유니티 기반 시나리오 편집기를 사용하여 차량이 속도 제한 표지를 통과하는 다양한 시나리오를 설계할 수 있습니다. 이러한 소규모 테스트는 개발자의 PC에서 시뮬레이션되며 유니티를 사용하여 실시간으로 시각화할 수 있습니다.
- 개발자는 결과를 시각적으로 검증하는 동시에 평가지표를 사용하여 개선점을 파악하고 그 기능이 최종 기능에 병합될 준비가 되어 있는지(즉, 차량이 매번 표식의 속도를 준수하는지) 판단할 수 있습니다.
BMW 시뮬레이션 개발자는 점진적 코드 업데이트 결과를 테스트하는 동시에 시각화할 수 있습니다.병합 후에는 인수 테스트를 수행하여 병합으로 인해 발생한 다른 기능의 문제점이나 다른 기능에 의해 발생한 병합의 문제점을 식별할 수 있습니다. 예를 들어, 병합 중에 속도 제한 표지를 지각하는 기능에 버그가 발생할 수 있습니다. Unity를 사용하면 개발자는 시각적 디버깅을 실행하고 문제점을 쉽게 파악하여 보다 신속하게 해결할 수 있습니다.
BMW 시스템은 개발자가 주행 기능 내부와 시뮬레이션 코드 내부에 중간점을 설정할 수 있도록 설계됐다. AD 기능과 시뮬레이션은 항상 동기화되기 때문에 개발자는 코드를 한 줄씩 확인하고 기능과 코드를 번갈아 확인하고 디버깅을 수행할 수 있습니다.
동기화는 시각화에도 적용되기 때문에 코드와 시뮬레이션된 월드를 동시에 검토할 수 있습니다. 유니티 기반 애플리케이션은 계속 앱을 이동하고 값을 검토할 수 있기 때문에 동시에 열려 있는 툴의 수를 줄일 수 있으며 데이터를 가능한 한 투명하게 유지할 수 있습니다.
이러한 모든 요소는 BMW 자율주행차에 적용되는 최종 코드가 안전성과 신뢰성 기준을 충족하도록 합니다. — 유니티 백서: 자동차 업계의 5개 주요 분야에 적용되는 실시간 3D 기술로 유니티가 AD 시뮬레이션에 어떻게 활용되고 있는지 자세히 알아보십시오.Before BMW’s autonomous driving technology is mass production-ready, it will need to drive 240 million virtual kilometers. Learn how Unity is helping BMW put more virtual miles on its odometer every day.blogs.unity3d.com