Sim 기초 사용법
시뮬레이션(Sim)에서 우리 차량을 배치·주행시키고, 가상의 상대 차량과 장애물을 띄워 실제 레이스 상황을 재현하는 기초 사용법입니다. 실차 없이도 인지·판단·제어 파이프라인 전체를 그대로 돌려볼 수 있어, 주행 로직을 검증하는 첫 단계로 활용합니다.
먼저 알아둘 용어 — 이 문서는 아래 용어를 기준으로 설명합니다.
- Ego vehicle (Ego): 우리가 자율주행시키는 내 차량.
- Opponent (상대 차량): 레이스 상대 역할을 하는 가상의 경쟁 차량.
- 정적 장애물: 트랙 위에 놓는 장애물.
- state machine: 주행 상황(추종·추월 등)에 따라 차량의 행동을 결정하는 두뇌 역할.
환경 진입 + 시뮬레이션 실행
1
2
unicorn # conda 환경 진입 (+ 워크스페이스 소싱, cbuild/ros2kill 헬퍼 등록)
ros2 launch stack_master race.launch.xml sim:=true map:=f # 시뮬레이션 가동
race.launch.xml을 실행하며, sim:=true 인자로 시뮬레이션 모드로 띄웁니다. map:=은 사용할 맵 이름(stack_master/maps/ 하위 폴더 이름, 예: f)입니다.
sim:=true로 실행하면 가상 상대 차량과 정적 장애물을 주입하는 기능(virtual_perception)이 자동으로 함께 켜집니다. 따라서 별도 설정 없이 Sim 안에서 바로 상대 차량을 스폰하고 장애물을 놓아볼 수 있습니다.
전체 흐름 한눈에 보기
심을 실행한 후 아래 순서대로 따라 하면 됩니다. 각 단계의 자세한 방법은 추후에 설명합니다.
- Sim 실행 — 위 명령어로 RViz 창을 띄웁니다.
- Ego 배치 — RViz 상단
2D Pose Estimate로 내 차량을 트랙에 놓습니다. - 자율주행 시작 — 조이패드
RB(또는 키보드a)로 자율주행 모드로 전환합니다. - 상대·장애물 배치 —
2D Goal Pose로 상대 차량을,Publish Point로 장애물을 놓습니다. - 관찰 — Ego가 상대/장애물을 피해 추월하는 과정을 RViz와 Pitwall STATE 배너로 확인합니다.
Sim 가동 이후 RViz 화면 구성
Sim을 켜면 다음과 같은 RViz 창이 뜹니다. 화면은 크게 세 부분입니다.
- 상단 툴바:
2D Pose Estimate,2D Goal Pose,Publish Point같은 도구가 배치되어 있습니다. 아래에서 차량·장애물을 놓을 때 이 도구들을 클릭해서 사용합니다. - 왼쪽 Displays 패널: 맵·차량·마커 등 RViz에 표시할 항목을 켜고 끄는 창입니다.
- 오른쪽 Pitwall 패널: 주행 모드·상대차 스폰·속도 등 Sim을 실시간으로 조작하는 관제 패널입니다.
Pitwall이란? Pitwall은 텔레메트리를 포함해 간단하게 여러 가지 기능을 실행하고 표시하는 도구입니다.
텔레메트리(telemetry)는 주행 중인 차량의 속도·상태 같은 값을 실시간으로 뽑아내 확인·기록하는 것을 말합니다.
Ego vehicle 배치 및 주행
1. 2D Pose Estimate로 Ego vehicle 배치
RViz 상단 툴바의 2D Pose Estimate를 누른 뒤, 차량을 놓을 위치를 클릭하고 원하는 진행 방향으로 드래그하면 그 방향대로 Ego vehicle이 놓입니다. (클릭 = 위치, 드래그 방향 = 차량이 바라보는 방향)
2. Ego Vehicle 가동
차가 처음에는 멈춰 있지만, 자율주행 모드로 바꾸면 스스로 레이스라인을 따라 달리기 시작합니다.
자율주행 모드로 바꾸는 방법은 조작 기기에 따라 2가지 방법이 있습니다.
- Joy(조이패드):
RB버튼으로 자율주행 모드로 전환합니다. - Keyboard(키보드):
a키로 자율주행,h키로 다시 수동 모드로 전환합니다. 수동일 때는 방향키로 직접 조종합니다.
(입력 소스가 조이패드인지 키보드인지는 Ego 조종 방식에서 고릅니다.)
마무리
이 글에서는 Sim을 띄우고(race.launch.xml sim:=true), 2D Pose Estimate로 Ego를 배치한 뒤 자율주행 모드로 전환해 달리게 하는 기초 흐름을 다뤘습니다. 상대 차량 스폰과 정적 장애물 배치 등 각 단계의 자세한 방법은 이어지는 글에서 설명합니다.

