Example_01#
Model, Prototype 생성부터 시뮬레이션 동작 확인까지
0. 목차#
- Playground 접속 및 계정 생성
- 개발 환경 이동
- Prototype 생성
- 시뮬레이션 작성 및 Dashboard 설정
- 시뮬레이션 실행
- 프로토타입 내
Signal조작 - 시뮬레이션 코드 추가
- 전체 실행 코드
1. Playground 접속 및 계정 생성#
https://playground.digital.auto/접속- 상단의
Sign In을 통해 계정 생성
2. 개발 환경 이동#
Vehicle Catalog→Vehicle Models선택하여 개발 환경 이동
- 차량 모델에는 사용자가 만든 'My Models'와 'Public' 모델들을 볼 수 있다.
- 상단의
Create New Model선택하여 새로운 모델 생성
Model Name: <사용자가 원하는 모델 이름 지정>Signal: (default) COVESA VSS v4.1
모델 안의 정보들#
Overview: 모델의 정보Architecture: 모델의 아키텍처 정의 (자세한 사항은 문서참조)Vehicle: 모델에서 사용가능한 API들Prototype Library: 프로토타입
- 상단의
Vehicle API에는 모델 생성에 선택했던COVESA VSS v4.1에 정의된 API들의 정보를 확인할 수 있다. - Branch, Actuator, Sensor 포함

3. Prototype 생성#
Prototype Libaray-Ctreate New Prototype선택
Prototype Name: <사용자가 원하는 프로토 타입 이름 지정>Project Template: (default) Python Single File
- SDV Code tap#
-
상단의
SDV Code탭에는 API를 통한 시뮬레이션 과정을 Python 코드로 정의할 수 있다.
-
API를 사용할 경우 오른쪽 탭에 사용한 API들이 자동으로 표시된다.
- 사용하고자 하는 API들은
COVESA Signal에서 확인할 수 있다.
- Dashboard tap#
-
Dashboard탭에서는 위젯(Widget)들을 통해 차량 내의 변화를 시각화할 수 있다.
-
이미지, 3D 모델링, 그래프 등 많은 도구를 지원한다.

-
오른쪽 '시작'버튼을 통해
SDV Code에서 정의한 시뮬레이션을 시작할 수 있다.
-
상단의
Edit을 통해 위젯들의 배치 등을 변경할 수 있다.

4. 시뮬레이션 작성 및 Dashboard 설정#
시나리오 코드 작성#
SDV Code탭에서 아래의 코드를 작성한다.- 시나리오: 운전자 측 문이 열리면 문에 내장된 실내등이 점등되고 닫으면 점멸된다.
import time import asyncio import signal from sdv.vdb.reply import DataPointReply from sdv.vehicle_app import VehicleApp from vehicle import Vehicle, vehicle class TestApp(VehicleApp): def __init__(self, vehicle_client: Vehicle): super().__init__() self.Vehicle = vehicle_client async def on_driver_door_opened(self, data: DataPointReply): print("Driver door event received") Driver_door_open_value = data.get(self.Vehicle.Cabin.Door.Row1.DriverSide.IsOpen).value if Driver_door_open_value: # Door is open print("Activating driverside ambient lighting...") # Set light color and turn on await self.Vehicle.Cabin.Light.AmbientLight.Row1.DriverSide.Color.set("#00FFFF") await self.Vehicle.Cabin.Light.AmbientLight.Row1.DriverSide.IsLightOn.set(True) else: await self.Vehicle.Cabin.Light.AmbientLight.Row1.DriverSide.IsLightOn.set(False) async def on_start(self): print("Smart Ambient Light application starting...") # Subscribe to door signal await self.Vehicle.Cabin.Door.Row1.DriverSide.IsOpen.subscribe(self.on_driver_door_opened) print("Door monitoring active - Smart Ambient Light ready") async def main(): vehicle_app = TestApp(vehicle) await vehicle_app.run() LOOP = asyncio.get_event_loop() LOOP.add_signal_handler(signal.SIGTERM, LOOP.stop) LOOP.run_until_complete(main()) LOOP.close()
Dashboard 설정#
Dashboard탭Edit선택
- 바둑판 배열에서 원하는 영역 선택 [1,2,6,7 선택]
Add widget선택-
3D Car Unity선택
-
바둑판 배열에서 원하는 영역 선택 [3,4 선택]
Add widget선택-
Signal List Settable선택
-
생성된
Signal List Settable위젯 오른쪽 상단의Edit Widget선택
-
위젯을 통해 보고 싶은 값들을 설정
"Vehicle.Cabin.Door.Row1.DriverSide.IsOpen", "Vehicle.Cabin.Light.AmbientLight.Row1.DriverSide.Color", "Vehicle.Cabin.Light.AmbientLight.Row1.DriverSide.IsLightOn" Save
5. 시뮬레이션 실행#
Start버튼을 통해 시뮬레이션을 시작한 상태에서 차량의 문을 열어본다.- 3D 모델을 통해 문 열고 닫기
- 또는 Settable의
On,Off를 통해 문 열고 닫기 - 문이 열릴때 문에 내장된 실내등이 점등/점멸되는지 확인
(실내등에 변화가 없을 경우 시뮬레이션이 잘 실행되었는지 확인, 오른쪽 아래
<<를 통해 터미널을 확장하여 코드의 에러가 있는지)
6. 프로토타입 내 Signal 조작#
- 오른쪽
>>버튼을 통해 메뉴를 확장하면Signal Watch를 통해 모델의 다른 API도 사용할 수 있다. - boolean 값은
true,false작성 후 엔터 - 실수형 또는 정수형은 값을 작성 후 엔터
- 문자열 자료형은 API 정보를 확인 후 작성

7. 시뮬레이션 코드 추가#
- 시나리오 추가사항: 조수석 문을 열 때 조수석 문에 내장된 실내등 켜지도록한다
- 추가하는 API (Subscribe, get, set)
- Vehicle.Cabin.Door.Row1.PassengerSide.IsOpen
- Vehicle.Cabin.Light.AmbientLight.Row1.PassengerSide.Color
- Vehicle.Cabin.Light.AmbientLight.Row1.PassengerSide.IsLightOn
- 차량의 보조석 문이 열리는지 확인 (Subscribe)
- on_start 함수에 차량의 보조석 문이 열리는지 계속해서 체크하기 위해
async/await사용 -
값이 변할 때 호출할 함수를 등록:
self.on_passenger_door_opened
-
Subscribe 호출 함수의 내부 동작 (Get, Set)
self.Vehicle.Cabin.Door.Row1.PassengerSide.IsOpen의 값을 Get함수를 통해 가져오기- 값이 True일 때는 내장 실내등이 점등:
self.Vehicle.Cabin.Light.AmbientLight.Row1.PassengerSide.IsLightOn.set(True) - 값이 False일 때는 내장 실내등이 점멸:
self.Vehicle.Cabin.Light.AmbientLight.Row1.PassengerSide.IsLightOn.set(False) -
self.Vehicle.Cabin.Light.AmbientLight.Row1.PassengerSide.Color.set("#00FFFF")를 통해 실내등의 색 변경
-
Dashboard 수정
-
Dashboard의 Settable을
Edit widget통해 Passengerside 실내등 API를 등록
-
시뮬레이션 실행을 통한 검증
- 시뮬레이션을 실행하여 보조석 문이 열릴 때 실내등이 점등되는지 확인

8. 전체 실행 코드#
import time
import asyncio
import signal
from sdv.vdb.reply import DataPointReply
from sdv.vehicle_app import VehicleApp
from vehicle import Vehicle, vehicle
class TestApp(VehicleApp):
def __init__(self, vehicle_client: Vehicle):
super().__init__()
self.Vehicle = vehicle_client
async def on_driver_door_opened(self, data: DataPointReply):
print("Driver door event received")
Driver_door_open_value = data.get(self.Vehicle.Cabin.Door.Row1.DriverSide.IsOpen).value
# print(f"Driver door state: {'Open' if value else 'Closed'}")
if Driver_door_open_value: # Door is open
print("Activating driverside ambient lighting...")
# Set light color and turn on
await self.Vehicle.Cabin.Light.AmbientLight.Row1.DriverSide.Color.set("#00FFFF")
await self.Vehicle.Cabin.Light.AmbientLight.Row1.DriverSide.IsLightOn.set(True)
else:
await self.Vehicle.Cabin.Light.AmbientLight.Row1.DriverSide.IsLightOn.set(False)
async def on_passenger_door_opened(self, data: DataPointReply):
print("Passenger door event received")
Passenger_door_opent_value = data.get(self.Vehicle.Cabin.Door.Row1.PassengerSide.IsOpen).value
# print(f"Passenger door state: {'Open' if value else 'Closed'}")
if Passenger_door_opent_value: # Door is open
print("Activating driverside ambient lighting...")
# Set light color and turn on
await self.Vehicle.Cabin.Light.AmbientLight.Row1.PassengerSide.Color.set("#00FFFF")
await self.Vehicle.Cabin.Light.AmbientLight.Row1.PassengerSide.IsLightOn.set(True)
else:
await self.Vehicle.Cabin.Light.AmbientLight.Row1.PassengerSide.IsLightOn.set(False)
async def on_start(self):
print("Smart Ambient Light application starting...")
# Subscribe to door signal
await self.Vehicle.Cabin.Door.Row1.DriverSide.IsOpen.subscribe(self.on_driver_door_opened)
await self.Vehicle.Cabin.Door.Row1.PassengerSide.IsOpen.subscribe(self.on_passenger_door_opened)
print("Door monitoring active - Smart Ambient Light ready")
async def main():
vehicle_app = TestApp(vehicle)
await vehicle_app.run()
LOOP = asyncio.get_event_loop()
LOOP.add_signal_handler(signal.SIGTERM, LOOP.stop)
LOOP.run_until_complete(main())
LOOP.close()