Carla 질문정리
- CARLA는 Closed-loop ego vehicle non-reactive 및 Closed-loop ego vehicle reactive 시뮬레이션 지원해?
- CARLA는 다양한 도로 시나리오와 차량 배치를 불러올 수 있는 기능 (데이터셋 기반) 지원해?
- CARLA는 주변 에이전트 행동 모델 및 ego planner 변경이 용이해?
- CARLA는 Planner 학습을 위한 pipeline 제공 (특히 Imitation Learning, Behavior Cloning 위주)해?
- Navsim, Limsim, nuPlan, NVIDIA DRIVE Sim 등이 CARLA와 비교했을 때 가지는 특장점이 뭐야? (CARLA는 가지고 있지 못한 특성)
- CARLA는 센서 시뮬레이션을 제공하는 것 같은데, 카메라 센서 모델로 부터 얻은 이미지의 품질이 궁금해. e2e planning 등, 학습 input으로 쓸 수 있을 만큼 생성한 이미지의 품질이 현실 이미지와 흡사해? 학계에서, carla 카메라 센서 모델로 부터 얻은 이미지를 이용하여 direct하게 학습하고 있는지가 궁금한거야.
- OpenDrive 포맷이 뭔지 매우 쉽게 설명해줘.
- "Traffic Manager를 이용해 자동차들에 자동 주행 AI를 부여할 수도 있습니다." 라고 설명해줬는데, 주변 차량 agents를 말하는거지?
- CARLA는 주변 차량이나 보행자 cyclist에 대한 reactive 행동 모델은 기본적으로 어떤 알고리즘들을 지원해? 내가 customize하고 싶으면 어떤 파일 (.py나 yaml, json 등) 을 수정해야하는거야?
- ScenarioRunner 가 뭔지, OpenScenario 규격이 뭔지 매우 쉽게 + 장황하지 않게 설명해줄래?
- "공식 권장사양만 봐도 최신 GPU(RTX 3070급 이상)와 32GB 이상의 RAM을 요구" 한다고 했는데, 여기서 32GB가 GPU의 VRAM을 의미하는거니?
- "대량의 에피소드를 병렬로 돌리는 실험에는 부적합"하다고 했는데, GUI 렌더링 옵션을 끄거나, 카메라/라이다 센서 시뮬레이션 옵션을 끄고, high-level 정보(주변 agent들의 위치/속도 등, 주변 차선의 벡터화된 정보들, 자차의 ego 상태 정보 등) 만 매 step 얻어가는 방식을 사용해서, 컴퓨팅 자원 요구 사항을 확 줄이는 기능도 제공해?
- "사용자가 일일이 특정 차량을 수동 제어 또는 스크립팅해야 하는데, 많은 차량에 이를 적용하기는 어렵습니다." 라고 했는데, 그 이유가 뭐야? 파이썬 스크립트 모듈화가 잘 안되어있어?
- "자신만의 차량 모델을 추가하는 일도 언리얼 에디터 지식이 필요합니다." 라고 설명했는데, 그 구체적인 이유가 뭐야?
- "CARLA는 ego planner 알고리즘을 바꿔끼기 힘들어?
- learning based planner 연구는 보통 복잡한 차량 동역학을 고려하지 않은 closed-loop reactive 평가나 closed-loop non-reactive 평가를 하는 것 같아. 이는 불공정해 보이는데, 왜 학계에서는 복잡한 차량 동역학을 고려한 평가를 하지 않지?
- Autoware, Pymarl 이 뭔지 매우 쉽게 + 장황하지 않게 설명해줄래?
GPT의 대답
- 2017년 처음 공개되어, Unreal Engine을 기반으로 한 사실적인 도시 환경과 차량 물리, 센서 시뮬레이션을 제공.
- CARLA는 자율주행 시스템의 개발·학습·검증을 지원하도록 만들어졌으며,
- 여러 오픈 도시 맵, 다양한 차량/보행자 모델, 카메라/LiDAR/GNSS 등 센서 모델을 갖추고 있습니다.
장점
- CARLA의 고품질 3D 그래픽과 물리 모델
- CARLA는 센서 시뮬레이션과 충돌 판정 등을 담당
높은 현실감과 센서 시뮬레이션
- CARLA의 가장 큰 장점은 사실적인 3D 환경을 제공한다는 것
- 도심/교외의 도로 레이아웃, 건물, 신호등, 차량 모델 등이 디테일하게 구현되어 있고, 시간대나 날씨(비, 안개 등)도 바꿀 수 있습니다.
- 또한 카메라 영상, LiDAR 포인트클라우드, RADAR 신호 등 다양한 차량 센서를 가상으로 생성할 수 있어, 인공지능 모델의 센서 입력을 실제처럼 제공
- 이러한 환경은 End-to-End 자율주행 (이미지→스티어링) 연구나 센서퓨전 인지 모듈 개발 등에 필수적이며, CARLA를 통해 현실감 있는 훈련 데이터를 얻거나 가상 테스트를 할 수 있습니다.
유연한 시나리오 구성과 API
- CARLA는 Python/C++ API를 통해 시뮬레이션을 제어할 수 있어, 사용자가 원하는 대로 시나리오를 구성할 수 있습니다.
- 도로 맵은 기본 제공되는 Town 시리즈 외에 OpenDrive 포맷으로 가져올 수 있고, 교통량이나 보행자 배치를 스크립트로 지정 가능합니다.
- 차량의 이동 경로를 직접 지정하거나, Traffic Manager를 이용해 자동차들에 자동 주행 AI를 부여할 수도 있습니다.
- 이 Traffic Manager는 차간거리 유지, 신호 준수, 제한속도 등의 규칙을 따라 움직이므로 기본적인 반응형 교통을 손쉽게 구현해줍니다.
- 자차의 플래너는 사용자가 API를 통해 매틱하게 제어하면 되므로, 어떤 플래너든 CARLA와 연동할 수 있습니다.
- 이러한 개발자 친화적 API와 시나리오 스크립팅 덕분에, 학습/평가하려는 상황을 비교적 자유롭게 만들어낼 수 있습니다.
- (예: 특정 위치에 보행자를 뛰어들게 하거나, 앞차가 급정거하는 이벤트를 삽입하는 것이 가능.)
복잡한 차량 동역학
- 정밀한 차량 동역학 (예: 타이어 마찰 한계, 서스펜션 거동, 급격한 조향시 드리프트 등)을 제공 하는듯
- CARLA는 언리얼 엔진의 물리 기능을 활용하여 차량의 동역학을 비교적 상세히 모델링
- 타이어 마찰, 기어 변속, 충돌 물리 등이 포함되어 있어,
- 급가속 시 바퀴스핀이 일어나거나 미끄러운 노면에서 제동거리가 길어지는 등의 현상을 재현
- 또한 차량 외에도 보행자 움직임, 물체 충돌(예: 차량이 장애물과 충돌 시 튕겨나감) 등이 물리 기반으로 처리
- 이러한 물리 엔진은 단순 위치 업데이트만 하는 시뮬레이터보다 현실에 가까운 거동을 만들어주며,
- ADAS 제어 알고리즘이나 경로 추종 제어기 테스트에도 활용될 만큼 신뢰성을 갖습니다.
광범위한 활용과 도구 지원
- 예를 들어, ScenarioRunner라는 공식 툴은 OpenScenario 규격의 시나리오 기술을 실행해주는 도구로, 복잡한 테스트 절차를 자동화할 수 있습니다.
- 또한 ROS 브릿지, Autoware와의 통합, Pymarl(Car Learning to Act) 등 다양한 오픈소스 패키지들이 CARLA를 지원하여,
높은 확장성과 호환성
- CARLA는 앞서 언급한 OpenDrive 지도 호환 외에도, 다른 시뮬레이션과의 연동도 가능합니다.
- 예를 들어 LimSim처럼 CARLA를 백엔드 렌더링 엔진으로 쓰거나, MetaDrive 등 경량 환경과 상호작용할 수도 있습니다.
- 또한 Unity 등의 자율주행 시뮬레이터와도 개념적으로 비슷하여, 사용자가 플랫폼 간 전환이 비교적 수월합니다.
- 산업계 표준인 NVIDIA DRIVE Sim 역시 OpenScenario, OpenDrive 등을 지원하므로 시나리오 포맷을 공유할 수 있어,
- CARLA에서 만든 시나리오를 NVIDIA 플랫폼에서 재현하는 것도 이론적으로 가능하게 되어 있습니다.
단점:
높은 연산 자원 요구
- CARLA는 언리얼 엔진 기반 그래픽과 물리 시뮬레이션 때문에 고성능 하드웨어가 필요합니다.
- 공식 권장사양만 봐도 최신 GPU(RTX 3070급 이상)와 32GB 이상의 RAM을 요구하며, 복잡한 시나리오일수록 FPS가 떨어집니다.
- 특히 카메라 해상도를 높이거나 차량/보행자 수를 늘리면 실시간 시뮬레이션이 어려워질 수 있습니다.
- 이는 대량의 에피소드를 병렬로 돌리는 실험에는 부적합하며, 통상 수 개 내지 수십 개의 케이스를 순차적으로 검사하는 용도로 많이 쓰입니다.
- 따라서 학습을 위해 수천 회 에피소드를 반복해야 하는 강화학습 같은 경우,
- 프레임 스킵이나 병렬 서버 구축 등 최적화를 하지 않으면 시간이 매우 오래 걸릴 수 있습니다.
교통 AI의 한계
- 기본 Traffic Manager에 의존해 여러 차량을 움직일 경우, 비교적 단조로운 행동 (속도 준수, 차선 유지)만 이루어집니다.
- 운전자 성향의 다양화나 복잡한 상호작용 상황 (예: 4거리에서 양보/진입 결정)에서는 한계가 있어, 예상치 못한 교착상태나 비현실적인 양보 과다/부족 행태를 보이기도 합니다.
- 이를 개선하려면 사용자가 일일이 특정 차량을 수동 제어 또는 스크립팅해야 하는데, 많은 차량에 이를 적용하기는 어렵습니다.
- 그 결과 CARLA로 여러 차량이 엮이는 시나리오를 구성하면, 주변 차량의 움직임이 다소 부자연스럽거나 반복적인 경우가 있습니다.
학습 파이프라인 비제공
- CARLA 자체는 시뮬레이터일 뿐 학습/평가 코드를 포함하지 않습니다.
- 따라서 주행 알고리즘의 훈련이나 벤치마크는 온전히 사용자의 몫입니다.
- 예를 들어, CARLA 환경에서 모방학습을 하려면 직접 데이터를 수집(사람 운전 또는 AI 운전)하고, 그 데이터를 가공해 모델을 학습시킨 후, 다시 CARLA에서 실행하여 평가하는 전 과정을 스스로 설계해야 합니다.
- 물론 이를 도와주는 외부 프로젝트들(CARLA Challenge용 leaderboard 코드 등)은 있지만, Navsim이나 nuPlan처럼 통합된 프레임워크는 아닙니다.
초기 설정 및 유지보수
- CARLA는 Unreal Engine 기반이라 빌드/설치가 비교적 복잡하고, 버전 업에 따른 호환성 문제 등이 가끔 발생합니다.
- 시뮬레이터 파일 크기도 커서 다운받아 환경 세팅하는 데 시간이 걸립니다.
- 또한 커스텀 맵을 가져오거나 자신만의 차량 모델을 추가하는 일도 언리얼 에디터 지식이 필요합니다.
- 요컨대 강력한 만큼 사용 난이도가 있으며, 단순히 파이썬 패키지 설치하듯 바로 쓰기에는 부담이 있습니다.
호환성 측면:
- LimSim은 CARLA와의 동기화 연동을 공식 지원하므로, LimSim 환경에서 생성한 시나리오를 CARLA 화면과 센서로 관찰할 수 있습니다.
- nuPlan이나 Navsim은 CARLA와 직접 연동되지는 않지만, 시나리오를 OpenScenario 등으로 변환해 CARLA에서 재현하는 방법이 연구되기도 했습니다.
- 또한 MetaDrive 등의 경량 시뮬레이터는 CARLA 지도를 임포트하거나 CARLA에서 생성한 데이터를 활용하는 등 크로스 플랫폼 사용 사례가 있습니다.
- NVIDIA DRIVE Sim도 OpenDrive 지도와 OpenScenario 스크립트를 지원하므로, CARLA에서 만든 맵/시나리오를 가져갈 수 있습니다.
- 다만, 물리 엔진이나 차량 동작 모델이 다르므로 완전히 동일한 재현을 보장하진 않습니다.
추추가 질문
- 1) **자체 제어 로직 작성:** - Traffic Manager의 autopilot을 사용하지 않고, - **동기화 모드에서 시뮬레이션을 진행하며, 매 프레임마다 각 에이전트에 대해 사용자 정의 제어 명령을 계산하는 방법** - **`이렇게 하면 자신만의 모델이나 심지어 기계학습 정책을 구현할 수 있지만, 그만큼 노력이 필요`** 혹은 보다 근본적인 변경을 위해, 사용자는 Traffic Manager를 우회하고 Python API를 통해 각 NPC에 대한 스스로의 제어 로직(스로틀, 조향 제어)을 작성할 수도 있습니다. 라고 했는데, 훨씬 더 구체적으로 내가어떤 과정을 거치면, 내가 custom으로 만든 learning based planner 등을 주변 agents NPC의 행동 모델로 바꿔 끼울 수 있어? ( Traffic Manager나 ScenarioRunner와 같은 도구는 사용하는건 아닌것 같다고 너가 설명해줬긴 해. 그런 다른 방법을 구체적으로 설명해줬어야지)
추가 질문: CARLA 시뮬레이터
1. Closed-loop ego vehicle (비반응 vs. 반응) 지원 여부:
2. 다양한 도로 시나리오 및 차량 배치(데이터셋 기반) 불러오기 지원:
- 네 – CARLA는 실제 데이터를 기반으로 한 다양한 지도와 시나리오를 불러오는 것을 지원
- CARLA는 여러 개의 타운 맵과 함께 제공되며,
- OpenDRIVE 파일을 통해 사용자 지정 도로 네트워크도 지원합니다.
- 사실, CARLA는 “오프 더 박스”로 모든 OpenDRIVE 도로 설명을 받아들여 주행 가능한 맵을 절차적으로 생성할 수 있습니다 (ASAM OpenDRIVE - CARLA Simulator).
- 이는 예를 들어 OpenStreetMap을 OpenDRIVE 형식으로 변환한 데이터나 주행 데이터셋에서 도로 레이아웃을 가져올 수 있음을 의미합니다.
- 또한 CARLA는 Python API나 시나리오 정의 파일을 통해 특정 위치에 차량을 생성하고 경로를 지정할 수 있는 도구를 제공합니다.
- 예를 들어, ScenarioRunner는 미리 정의된 교통 시나리오와 함께 제공되며,
- CARLA는 nuScenes와 같은 대규모 실제 시나리오 데이터셋을 기본으로 포함하고 있지는 않지만,
- 해당 데이터셋의 좌표에 맞춰 맵(OpenDRIVE 파일)을 불러오고
- 차량이나 보행자를 프로그래밍 방식으로 배치함으로써
- 그러한 시나리오를 재현할 수 있는 구성 요소를 제공합니다.
- 요약하면, CARLA는 다양한 도로 형상과 초기 교통 구성(맵 전환이나 사용자 정의
.xodr 파일 불러오기, 그리고 차량/보행자 생성 스크립트)을 지원하여 다양한 시나리오를 모방할 수 있습니다.
3. 주변 에이전트 행동 모델 및 에고 플래너 변경 용이성:
- CARLA는 모듈식 설계로 되어 있어 NPC(플레이어가 아닌) 에이전트의 행동과 에고 차량의 플래너 로직을 변경할 수 있습니다(다만 일부 코딩이 필요함).
- 기본적으로, CARLA의 차량과 보행자는 내장 컨트롤러를 사용합니다:
- 차량은 Traffic Manager의 자동 조종(룰 기반 운전 AI)을 사용하며, 보행자는 무작위 걷기용 AI 컨트롤러를 사용합니다.
- 이들은 학습된 모델이 아니라 조정 가능한 알고리즘입니다.
- Traffic Manager는 차량이 신호를 무시하거나, 속도를 높이거나, 안전 거리를 유지하도록 하는 등 “온라인”에서 행동을 조정할 수 있는 매개변수를 노출합니다 (carla-simulator/Docs/adv_traffic_manager.md at dev · rahuldavanam/carla-simulator · GitHub).
- 이는 핵심 코드를 건드리지 않고도 NPC 차량의 운전 스타일을 미세 조정할 수 있게 해줍니다.
- 보다 근본적인 변경을 위해, 사용자는 Traffic Manager를 우회하고 Python API를 통해 각 NPC에 대한 스스로의 제어 로직(스로틀, 조향 제어)을 작성할 수도 있습니다.
- CARLA의 아키텍처는 특정 플래너 방식에 얽매이지 않으며, 에고 차량의 플래너는 전적으로 사용자 정의입니다.
- 예를 들어, CARLA Leaderboard 프레임워크에서는 에고 차량이 플러그인 방식의 Agent 클래스로 제어되며,
- 해당 에이전트 구현을 변경하기만 하면 다른 플래너 알고리즘을 사용할 수 있습니다 (Traffic Simulation Overview - CARLA Simulator).
- 실제로 많은 연구자들이 PID 제어나 RL 정책 등 자신만의 플래너를 CARLA 위에서 구현하기 위해,
- 시뮬레이터 상태를 읽고 제어 명령을 전송하는 방식으로 에고 플래너를 구현합니다.
- 마찬가지로, Traffic Manager를 사용하거나 외부 교통 시뮬레이터(SUMO 등)와 통합하여 더 정교한 모델을 구현할 수도 있습니다.
- 요약하면, CARLA는 주변 에이전트의 행동과 에고 플래너 로직 모두를 Python 스크립트나 설정 매개변수를 조정하는 방식으로 완전히 제어할 수 있도록 모듈식으로 설계되어 있습니다.
4. 플래너 학습을 위한 파이프라인 제공 (모방 학습/비헤이비어 클로닝 위주):
- CARLA는 내장된 학습 파이프라인을 직접 제공하지는 않지만, 모방 학습을 위한 재료를 제공하며 커뮤니티에서 지원하는 예제들이 있습니다.
- 즉, CARLA는 데이터 소스와 테스트 환경 역할을 하며, 사용자가 학습 코드를 별도로 구성하면 됩니다.
- 요약하면, CARLA는 모방 학습이나 강화 학습에 필요한 시뮬레이션과 센서 데이터를 제공하며, 실제로 많은 연구자들이 CARLA에서 수집한 데이터를 기반으로 이미지에서 제어 명령을 직접 예측하는 end-to-end 주행 정책을 학습시키고 이를 동일한 환경에서 평가하였습니다.
5. Navsim, LimSim, nuPlan, NVIDIA DRIVE Sim 등 CARLA가 가지지 못한 특장점:
-
이들 시뮬레이터 혹은 플랫폼은 CARLA가 특정 영역에서 보완하거나 능가하는 기능들을 제공합니다.
-
Navsim (NAVSIM) – 데이터 기반, 비반응 시뮬레이션:
- CARLA와 달리 Navsim은 카메라/라이다 데이터를 생성하지 않으며, 추상적 상태를 기반으로 sim-to-real 시각적 격차를 회피합니다. 이로 인해 계산 부담이 훨씬 적어 100,000개 이상의 실제 시나리오를 평가할 수 있으며, CARLA에서는 이를 실행하기 어렵습니다.
- (연구자들은 대규모 플래너 벤치마킹에는 Navsim을 사용하고, 상세 센서 수준 테스트에는 CARLA를 사용하는 경우가 많습니다.)
-
LimSim (및 LimSim++) – 장기, 다중 시나리오 교통 시뮬레이션 및 코-시뮬레이션:
- LimSim은 장기간 및 다양한 교통 시나리오를 시뮬레이션하는 자율주행 시뮬레이터로, 여러 분 동안 혹은 그 이상의 시간 동안 교통 흐름을 연속적으로 생성할 수 있습니다(경로 계획 및 수요 변화 포함).
- 이는 CARLA의 짧은 스크립트 시나리오로는 구현하기 어려운 기능입니다.
- LimSim은 다양한 운전자 스타일을 모방할 수 있도록 이종 운전자 행동 모델을 포함하여 차량 간의 보다 정교한 상호작용을 제공합니다.
- CARLA만으로는 장기간 동안의 내장 교통 흐름 생성 수준을 제공하기 어렵습니다.
- 요약하면, LimSim의 강점은 장기간 교통 시뮬레이션, 다양한 도로 유형(고속도로, 회전교차로 등), 그리고 통합 기능에 있으며,
- 이는 CARLA의 전형적인 사용 범위를 뛰어넘는 대규모 검증 및 시나리오 다양성을 목표로 합니다.
-
nuPlan – 실제 시나리오 데이터셋과 클로즈드 루프 플래너 평가:
- nuPlan(모셔널 제공)은 주로 실제 주행 시나리오의 대규모 데이터셋과 플래너 알고리즘 평가 엔진입니다.
- 그 주요 강점은 1,000개 이상의 시나리오와 6시간 이상의 주행 로그 등, 실제 시나리오의 폭넓은 구성이며, 이러한 로그를 사용하는 표준화된 클로즈드 루프 시뮬레이션입니다.
- nuPlan 시뮬레이션에서는 에고 차량의 결정이 테스트되며, 다른 에이전트들은 기록된 궤적을 따르므로(에고에 대해 비반응적) 실제 교통 행동의 리얼리즘을 극대화합니다 .
- 그 이점은 실제 데이터에서 얻은 리얼한 교통 행동과 시내, 고속도로, 합류 등 다양한 시나리오가 미리 준비되어 있어 플래너 벤치마킹에 적합하다는 것입니다.
- 반면, CARLA는 주로 합성 맵과 에이전트를 사용하여 유사한 리얼리즘을 재현하려면 수동으로 시나리오를 재구성하거나 코-시뮬레이션을 사용해야 합니다.
- CARLA는 평가 프레임워크를 하나의 패키지로 제공하지 않습니다.
- 단점은 nuPlan 시뮬레이터는 센서를 시뮬레이션하지 않으므로(카메라 이미지나 새로운 라이다 스윕을 생성하지 않음 – 플래너는 추상 상태나 미리 기록된 센서 입력을 사용함),
- 플래너 테스트에 있어서는 데이터 기반 시뮬레이션 생태계를 제공하는 반면, CARLA는 완전한 3D 상호작용 환경을 제공하지만 대부분 합성 시나리오에 의존합니다.
6. CARLA의 카메라 센서 리얼리즘 및 end-to-end 학습 활용:
- CARLA가 렌더링하는 카메라 이미지는 시뮬레이터로서는 꽤 현실적이지만, 실제 이미지의 퀄리티와 완전히 일치하지는 않습니다.
- 종종 게임 같은 느낌이 있으며, sim-to-real 도메인 간극이 존재합니다.
- 실제로 연구자들은 CARLA의 시각을 시뮬레이션 내에서 사용하거나 실제 데이터를 위한 사전 학습으로 사용하기에는 충분하다고 여기지만, 별도의 도메인 적응 없이 실제 차량에 직접 모델을 배포하기에는 부족하다고 평가합니다.
- 예를 들어, NVIDIA의 한 연구에서는 도메인 적응 없이 CARLA의 원시 RGB 데이터로 학습한 모델이 실제 이미지에 대해 일반화하지 못했으나, 도메인 적응을 통해 간극을 상당 부분 보완할 수 있음을 언급했습니다 (Towards Optimal Strategies for Training Self-Driving Perception Models ...).
- CARLA는 다양한 날씨, 조명, 후처리 효과 등으로 다양성을 제공하며, 일부 연구에서는 도메인 랜덤화(텍스처 변화 등)를 통해 네트워크가 강인한 특징을 학습하도록 돕기도 합니다.
- 하지만 기본적으로 CARLA의 이미지는 실제 카메라 센서의 노이즈와 조명 복잡성을 완벽하게 재현하지는 못합니다.
7. OpenDRIVE 포맷이란 (간단 설명):
OpenDRIVE는 도로 네트워크를 상세하게 기술하기 위한 표준 파일 포맷(XML 기반, 확장자 .xodr)
- 이는 도로 레이아웃의 디지털 청사진과 같으며 – 도로의 기하학(곡선, 고저차), 차선 마킹 및 폭, 교차로, 신호등, 기타 정적 도로 객체들을 명시
- 이 포맷은 시뮬레이터에 구애받지 않고 동일한 도로 정의를 여러 시뮬레이터나 도구 간에 공유할 수 있도록 개발되었습니다.
- 더 쉽게 말하면, OpenDRIVE 파일은 텍스처나 시각 정보를 포함하지 않는 지도와 같으며, 시뮬레이터가 도로를 구성하는 데 필요한 모든 구조적 정보를 담고 있습니다.
8. “Traffic Manager를 이용해 자동차들에 자동 주행 AI를 부여할 수 있다” – 이것이 주변 차량을 의미하는가?:
- 네. CARLA에서 Traffic Manager는 플레이어가 아닌 차량(교통 에이전트)의 자동 운전을 담당하는 모듈입니다.
- “Traffic Manager를 이용해 자동차에 자동 주행 AI를 부여한다”는 것은 월드에 차량을 생성한 후, 해당 차량을 자동 조종 모드로 설정하여 CARLA의 Traffic Manager 시스템에 제어를 넘긴다는 의미입니다 (carla-simulator/Docs/adv_traffic_manager.md at dev · rahuldavanam/carla-simulator · GitHub).
- Traffic Manager는 이러한 차량들이 차선을 따라 주행하고, 기본 교통 규칙을 따르며, 도로 네트워크를 스스로 탐색하도록 만듭니다.
- 즉, 수동으로 각 차량을 스크립팅하지 않고도 움직이는 교통을 생성해 줍니다.
- 예를 들어
vehicle.set_autopilot(True)와 같이 autopilot을 활성화하면, 해당 차량은 Traffic Manager의 AI 제어를 받게 되어 자동으로 주행하게 됩니다.
- 즉, “자동 주행 AI”를 Traffic Manager를 통해 부여한다는 것은 NPC 차량들이 스스로 주행하게 되는 것을 의미합니다.
9. 주변 에이전트에 대한 기본 반응 모델과 커스터마이징 방법:
- 기본적으로 CARLA는 교통 참가자들을 위한 단순한 룰 기반 행동 모델을 제공
- 차량(자동차)의 경우, Traffic Manager에 의해 제어되며, 이는 차선 유지, 경로 계획, 충돌 회피 등의 내부 알고리즘을 사용합니다.
- 기술적으로, Traffic Manager는 C++ 스레드로 실행되는 여러 단계의 계획(위치 추정, 충돌 회피, 신호 준수 등) 파이프라인을 사용
- 각 차량의 예측 경로를 유지하며, 장애물이 있을 경우 차량이 속도를 줄이거나 정지하여 충돌을 방지합니다 (carla-simulator/Docs/adv_traffic_manager.md at dev · rahuldavanam/carla-simulator · GitHub) (carla-simulator/Docs/adv_traffic_manager.md at dev · rahuldavanam/carla-simulator · GitHub).
- 해당 알고리즘은 명시적으로 학술 명칭(IDM 등)으로 브랜딩되지는 않지만,
- 결과적으로, NPC 차량은 Traffic Manager가 별도로 지시하지 않는 한, 임의의 목적지(기본적으로 무작위 목적지)를 향해 주행하며, 선두 차량이 너무 가까워지거나 빨간불이 있을 경우 감속합니다.
- 보행자와 자전거 이용자의 경우, CARLA는 보다 단순한 행동 모델을 제공합니다.
- 보행자는 WalkerAIController를 통해 생성되며, 이는 무작위 목표 지점을 향해 보도를 걷거나 횡단보도에서 도로를 건너도록 합니다.
- 이들의 로직은 차량보다 훨씬 단순하여 주로 차량과 충돌하지 않도록 회피합니다(또한 차량은 보행자가 바로 앞에 있으면 정지하여 충돌을 피하려고 함).
- 보행자 AI는 보도에 대한 내비게이션 메시와 약간의 무작위 의사결정을 사용합니다. 자전거 이용자도 차량과 유사하게 차선을 따르지만, 그 역학 모델은 단순합니다.
커스터마이징:
- 사용자는 다양한 수준에서 에이전트의 행동을 커스터마이징할 수 있습니다.
- 간단한 조정의 경우, Traffic Manager API를 통해 차량별 매개변수를 설정할 수 있습니다.
- 예를 들어, 추종 거리, 최대 속도, 차량이 신호를 무시하는지 여부, 차선 변경 가능 여부 등을 조정할 수 있습니다 (carla-simulator/Docs/adv_traffic_manager.md at dev · rahuldavanam/carla-simulator · GitHub).
- 이러한 설정들은 별도의 구성 파일 없이 Traffic Manager나 차량 객체의 메서드를 호출하여 적용할 수 있어, 일부 차량을 공격적으로 만들거나 특정 규칙을 무시하도록 하는 등 시나리오별로 행동을 미세 조정할 수 있습니다.
- 만약 에이전트의 행동을 근본적으로 변경하고 싶다면, 두 가지 옵션이 있습니다.
- 1) 자체 제어 로직 작성:
- Traffic Manager의 autopilot을 사용하지 않고,
- 동기화 모드에서 시뮬레이션을 진행하며, 매 프레임마다 각 에이전트에 대해 사용자 정의 제어 명령을 계산하는 방법
이렇게 하면 자신만의 모델이나 심지어 기계학습 정책을 구현할 수 있지만, 그만큼 노력이 필요
- 2) CARLA 소스 수정:
- Traffic Manager가 구현된 C++ 코드를 수정하는 방법이 있으나, 이는 새로운 기능에 기여하려는 목적이 아니라면 일반적으로 권장되지 않습니다.
- 단순히 JSON이나 YAML 파일을 교체하여 알고리즘을 재정의할 수 있는 방법은 없으며, API나 코드를 통해 직접 수정해야 합니다.
- 또 다른 방법으로, ScenarioRunner나 OpenScenario를 사용하여,
- 차량이 언제 빨간불을 무시하거나 에고 차량 앞에 끼어드는 등 특정 동작을 하도록 스크립팅할 수 있음
- 이는 Traffic Manager를 수정하는 것이 아니라 시나리오 정의 파일이나 Python 코드를 통해 이루어집니다.
- 요약하면, CARLA의 기본 NPC 알고리즘은 내장(비공개) 컨트롤러에 의해 구현되어 기본 반응 운전을 수행합니다.
- 이를 커스터마이징하려면,
- 작은 변화는 Traffic Manager 매개변수를 조정하고,
- 보다 근본적인 변경은 기본 AI를 비활성화하고 사용자 스크립트나 시나리오 사양을 통해 에이전트를 직접 제어해야 합니다.
10. ScenarioRunner와 OpenScenario란 무엇인가?:
- ScenarioRunner는 CARLA의 공식 도구로,
시뮬레이터 내에서 복잡한 주행 시나리오를 오케스트레이션하는 별도의 Python 모듈
- 사용자가 매 이벤트마다 직접 코딩하지 않고,
여러 에이전트, 트리거, 결과를 포함하는 시나리오를 정의할 수 있는 프레임워크를 제공
- ScenarioRunner는 미리 구축된 시나리오(예:
차량이 빨간불을 위반하거나, 보행자가 에고 앞에서 무단횡단하는 상황)를 라이브러리로 제공하며,
- 시나리오는 Python 클래스를 사용(ScenarioRunner의 API를 활용해 에이전트와 이벤트를 설정하는 Python 스크립트를 작성)하거나
- OpenScenario 표준 파일을 사용하여 정의할 수 있습니다 (Traffic Simulation Overview - CARLA Simulator).
- OpenScenario는 동적인 주행 시나리오를 기술하기 위한 파일 포맷(XML 스키마, ASAM 표준화)을 의미
- OpenDRIVE가 도로의 레이아웃을 기술하는 반면,
- OpenScenario는 도로 위에서 시간이 지남에 따라 발생하는 활동(예: “t=0에서 X 위치에 차량을 스폰하여 10 m/s로 주행, t=5초에 해당 차량이 차선을 변경, 에고 차량이 제동하면 시나리오 종료”)을 기술
- 여기에는 에이전트(차량, 보행자 등)가 어떤 조건 하에서 어떤 행동(스토리, 매뉴버, 액션, 이벤트)을 수행할지에 대한 구성이 포함됩니다 (Traffic Simulation Overview - CARLA Simulator).
- 본질적으로, OpenScenario는 교통 사건에 대한 시나리오 각본과 같으며, 컷인, 사고, 날씨 변화 등을 형식적으로 스크립팅할 수 있습니다.
- CARLA의 ScenarioRunner는 OpenScenario 1.0의 일부를 지원하므로, OpenScenario XML 파일을 작성하면 이를 해석하여 CARLA에서 시나리오를 실행할 수 있습니다.
- 예를 들어, OpenScenario를 사용해 “두 차량이 100m 앞에서 시작하고, 에고가 경로를 따르며, 에고가 10m 이내로 접근하면 한 차량이 갑자기 정지하는” 시나리오를 정의할 수 있습니다.
- ScenarioRunner는 조건을 모니터링하고 동작을 트리거하는 등의 배경 작업을 처리합니다.
요약하면:
- ScenarioRunner는
CARLA에서 시나리오를 실행하는 도구이며,
- OpenScenario는
이러한 시나리오를 정의하기 위한 표준 포맷입니다
- (ScenarioRunner가 OpenScenario 파일을 소화할 수 있음).
- ScenarioRunner와 OpenScenario를 함께 사용하면,
- 여러 에이전트 간 상호작용이나 특정 이벤트를 포함하는 복잡하고 반복 가능한 테스트 시나리오를 모든 것을 처음부터 코딩하지 않고도 생성할 수 있습니다.
- 이는 자율주행 시스템의 테스트와 벤치마킹에 매우 유용합니다.
11. “32GB RAM” 권장 사양 – GPU VRAM을 의미하는가?:
- CARLA를 소스에서 빌드할 때 “Memory (RAM): 32 GB (권장)”이라는 가이드가 GPU 요구사항(6–8GB VRAM을 가진 GPU)과 별도로 명시되어 있습니다.
12. 많은 에피소드를 병렬로 실행할 때 오버헤드를 줄이는 옵션 (렌더링 끄기, 센서 끄기 등):
- CARLA는 가볍지는 않지만, 시각적이지 않은 고처리량 시뮬레이션을 위해 계산 부하를 줄일 수 있는 기능을 제공합니다.
- 중요한 기능 중 하나는 렌더링 끄기 모드(No-Rendering Mode)로, 이는 엔진 내의 모든 그래픽 렌더링을 완전히 비활성화합니다 ([Rendering options - CARLA Simulator]
- 렌더링 끄기 모드에서는 CARLA가 물리와 에이전트 시뮬레이션은 계속 수행하지만,
- 이미지를 그리지 않으므로 카메라 출력이 필요 없을 때 시뮬레이션 속도를 크게 향상시키고 GPU 사용량을 줄입니다.
- 이는 수치 데이터(위치, 속도, 충돌 등)만 필요한 대량의 배치 실험에 유용
- Python API(
world.set_settings(no_rendering_mode=True))나 구성 스크립트를 통해 렌더링 끄기 모드를 활성화할 수 있습니다.
- 또한, 여러 에피소드를 실행하면서 고수준 정보만 필요하다면 센서 사용을 최소화할 수 있습니다.
- 카메라와 LiDAR 센서를 비활성화하면, 센서 에이전트를 생성하지 않고 CARLA API를 통해 환경 상태(각 차량의 위치, 회전, 속도, 신호 상태 등)를 직접 조회할 수 있습니다.
- 이렇게 하면 이미지나 포인트 클라우드 생성과 같이 비용이 많이 드는 연산을 피할 수 있어 CPU와 GPU 부하가 크게 줄어듭니다.
- CARLA는 헤드리스 모드(디스플레이 없이 OSMesa나 Vulkan off-screen을 사용)를 지원하므로, 대규모 실험을 위한 서버에서도 실행할 수 있습니다.
- 여러 GPU에서 CARLA를 실행하거나 여러 CARLA 서버를 병렬로 구동하는 방법도 문서화되어 있지만, 여전히 CPU와 메모리 경쟁으로 인해 한계가 있을 수 있습니다.
- 요약하면, CARLA는 대량의 병렬 시뮬레이션에는 이상적이지 않지만, 렌더링 끄기 모드를 사용하거나 센서를 비활성화하고 내부 상태 정보(위치, 차선 ID 등)만 추출함으로써 계산 자원 요구를 크게 줄일 수 있습니다.
- 이는 CARLA를 물리 및 논리 엔진으로만 활용하는 방식입니다.
- 커뮤니티에서는 이러한 방법을 사용하여 RL 에이전트를 더 빠르게 학습시키기도 하였으며, 렌더링 끄기 모드를 사용하면 GPU 렌더링 부하가 없어 수백 FPS의 시뮬레이션 속도를 달성한 사례도 있습니다.
- CARLA에는 멀리 있는 차량들의 물리 시뮬레이션을 단순화하는 “하이브리드 물리 모드”가 Traffic Manager에 있어, 근처 차량만 상세하게 시뮬레이션할 때 도움이 됩니다.
- 이러한 옵션들을 결합하면, CARLA를 전문 경량 시뮬레이터보다 무겁더라도 다수의 에피소드를 실행할 수 있게 됩니다.
13. 왜 많은 차량을 수동 제어하거나 스크립팅하는 것이 어려운가?:
- 문제는 확장성과 복잡성에 있습니다.
- CARLA의 API를 통해 원하는 수의 차량을 스크립팅할 수는 있으나,
- 차량 수가 많아질수록 매 프레임마다 각 NPC 차량의 제어 동작을 계산해야 하므로 코드의 부담이 크게 증가합니다.
- 이는 수십 개의 에이전트를 실시간으로 제어하는 경우 Python의 한계로 인해 느려질 수 있습니다.
- CARLA가 이 문제를 해결하기 위해 제공하는 솔루션은 Traffic Manager로, 이는 대규모 교통을 자동으로 제어하도록 설계되어 있습니다.
- 만약 사용자가 이를 대체하여 “많은 차량”을 수동으로 스크립팅하려 한다면, 사실상 교통 흐름을 자체적으로 조율하는 로직을 새로 구현해야 하는데,
- 이는 차선 유지, 충돌 회피, 신호 준수 등을 각 차량마다 구현하고 이를 병렬 스레드로 처리하는 등 매우 복잡한 작업입니다.
- 또한, CARLA의 Python API는 클라이언트-서버 구조로 동작합니다.
- 시뮬레이션은 서버(언리얼 엔진)에서 실행되고, Python은 매 프레임마다 명령을 전송합니다.
- 많은 차량을 Python으로 제어하면 매 프레임마다 많은 명령을 전송해야 하며, 이로 인해 통신량이 포화되거나 Python 처리 속도가 문제될 수 있습니다.
- 또한, Python의 Global Interpreter Lock(GIL)로 인해 원래 병렬로 처리할 수 있는 작업들이 직렬로 실행될 수 있습니다.
- 본질적으로, 많은 차량을 수동으로 스크립팅하는 것은 확장성이 떨어지며,
- 이는 CARLA가 Traffic Manager나 ScenarioRunner와 같은 도구를 제공하는 이유와 일맥상통
- 예를 들어, Traffic Manager는
- 별도의 C++ 스레드에서 효율적으로 다수의 차량(예: 50대)의 스티어링을 동시에 업데이트하는 작업을 처리할 수 있는데, 이를 Python에서 완벽하게 조율하기란 어려운 일
- 수많은 차량을 수동으로 제어하는 것도 가능하지만, 이는 다중 프로세스나 다중 스레드를 사용한 신중한 코드 설계와 시뮬레이터와의 동기화에 대한 깊은 이해를 필요로 합니다.
- 대부분의 사용자들은 이를 피하는 이유가 바로 여기에 있으며, CARLA는 수백 대의 차량을 개별적으로 제어하기 위한 고수준 API를 제공하지 않고,
- 대신 Traffic Manager나 시나리오 정의를 통해 위임하도록 설계되어 있습니다.
15. CARLA는 에고 플래너 알고리즘을 쉽게 교체할 수 있는가?:
- 네 – CARLA 자체는
특정 에고 플래너를 하드코딩하지 않습니다.
- 시뮬레이터는 에고 차량이 어떻게 제어되는지에 대해 독립적이며, 단순히 각 시간 단계마다 스로틀, 브레이크, 조향 등의 제어 명령을 수신
- 이는 클라이언트 측 코드만 변경하여 다양한 플래너나 제어 알고리즘(예: PID 제어, 강화학습 정책, 궤적 플래너 등)을 쉽게 적용할 수 있음을 의미합니다.
- CARLA의 아키텍처는 시뮬레이션(환경)과 에이전트의 의사결정을 분리합니다.
- 실제로 CARLA는 기본 “에고 컨트롤러”(간단한 자동 조종 혹은 키보드 수동 제어)를 제공하지만, 연구자들은 이를 자신만의 코드로 대체하여 사용합니다.
- 따라서, CARLA의 구조는 에고 플래너 알고리즘의 교체를 쉽게 허용합니다.