MORAI Simulator Control API 사용하기
본 섹션에서는 예제 코드를 활용하여 MSC API를 요청하고, MORAI Simulator를 실행하는 방법에 대하여 설명한다.
사전 요구 사항
MSC API를 사용하기 위하여 필요한 설치 프로그램 정보는 아래와 같다.
Python 3.7.3
MORAI SIM(버전 상관 없음)
MSC API 사용 절차
MSC API를 사용하는 절차는 아래와 같다.
Step 1: MORAI Launcher 실행
1] 다운로드한 MORAI Launcher 실행 파일(예: MoraiLauncher_Win.exe)을 클릭하여 MORAI Launcher를 실행한다.
MORAI Launcher 실행이 완료되면 아래와 같이 MORAI Launcher의 로그인 화면이 나타난다.
2] MORAI SIM Launcher 실행 후, ‘MoraiLauncher_Win_Data > SaveFile’ 경로에서 LinkConnection.txt
파일을 확인한다.
LinkConnection.txt는 MORAI SIM Launcher 및 Simulator 측 IP와 Port 정보를 포함하는 파일이다.
현재 Launcher 및 Simulator 환경에 맞추어 기입해야 하는 각 IP와 Port 정보는 아래와 같다.
Receive Host IP : API를 통해 Command를 받을 Launcher / Simulator 의 IP
Receive Host PORT : API를 통해 Command를 받을 Launcher / Simulator 의 Port
Request Destination IP : Launcher / Simulator에서 정보를 보낼 목적지 IP
Request Destination PORT : Launcher / Simulator에서 정보를 보낼 목적지 Port
위 Step 2에서 정의한 params.txt의 파라미터와 LinkConnection.txt의 파라미터 간의 연결 관계는 아래와 같다.
예를 들어서, LinkConnection.txt의 Receive Host IP
(MORAI SIM Launcher 및 Simulator 측 IP 주소)와 params.txt의 request_dst_ip
(사용자 측에서 정의한 보내는 목적지 IP 주소)는 같다.
Step 2: 예제 코드 다운로드
MSC API를 요청하기 위하여 아래 경로의 예제 코드를 다운로드한다.
다운로드한 예제 코드의 주요 파일 구성은 아래와 같다.
api.py : params.txt 에 입력한 정보를 읽어 MORAI Simulator를 실행
params.txt : 파이썬 테스트 코드를 실행하는 사용자 환경에서 시뮬레이터와 통신하기 위해 필요한 파라미터 정보를 포함한다.
사용자 환경에 맞추어 기입해야 하는 각 파라미터의 정보는 아래와 같다.receive_user_ip: MORAI SIM Launcher 및 Simulator에서 보내는 정보( Data, Command result 등)를 받는 사용자 측 IP 주소
receive_user_port : MORAI SIM Launcher 및 Simulator에서 보내는 정보를 받는 측 사용자 측 Port 번호
request_dst_ip: 사용자 측에서 보내는 제어 명령을 받는 MORAI SIM Launcher 및 Simulator 측 IP 주소
request_dst_port: 사용자 측에서 보내는 제어 명령을 받는 MORAI SIM Launcher 및 Simulator 측 IP 번호
user_id: User의 ID
user_pw: User의 PASSWORD
version: 실행할 Simulator의 Version
map: Simulator에서 Play할 Map 명칭(대소문자 구분)
vehicle : Simulator에서 Play할 Vehicle 명칭(대소문자 구분)
network_file: 시뮬레이터 내 네트워크 설정과 관련한 스크립트 파일('MoraiLauncher_Win_Data > SaveFile > Network' 경로에 존재)
sensor_file: 시뮬레이터 내 센서 설정과 관련한 스크립트 파일('MoraiLauncher_Win_Data > SaveFile > Sensor' 경로에 존재)
Scenario_file: 시뮬레이터 내 시나리오 설정과 관련한 스크립트 파일('MoraiLauncher_Win_Data > SaveFile > Scenario' 경로에 존재)
Step 3: 예제 코드로 MORAI Simulator 실행
1] API 사용 가능 확인
예제 코드를 실행하기에 앞서, 아래와 같이 MORAI Launcher 및 Simulator 화면에 나타나는 메시지로 MSC API를 사용할 수 있는지 확인할 수 있다.
'MSC is Connected’ (Green): MSC API 사용 가능 상태
‘MSC is Disconnected’ (Red): MSC API 사용 불가능 상태
MORAI Launcher 로그인 화면: 좌측 상단에서 MSC API 사용 가능 여부를 확인
MORAI Simulator 실행 화면: 좌측 하단에서 MSC API 사용 가능 여부를 확인
Morai Simulator Control API 사용이 불가능한 상태에서는 IP 및 PORT 번호 확인이 필요하다. 특히 MORAI Launcher의 로그인 화면에서 MSC API 사용이 불가능하다면 이미 다른 Launcher가 실행 중인지 확인한다.
2] 예제 코드 실행
다운로드한 예제 코드 중 params.txt 의 파라미터를 사용자 환경에 맞추어 입력한 후, api.py
테스트 코드로 MORAI 시뮬레이터를 실행한다.
MORAI Launcher 실행 후 ‘Step 3’ 단계부터는 api.py
테스트 코드로 ‘로그인’하여 MORAI 시뮬레이터를 실행할 수 있다.
예제 코드 설명
예제 코드로 시뮬레이터 실행 명령을 수행하는 순서는 아래와 같다.
1] api.py에서 launcher_start()
클래스를 호출하여 launcher_start_api.py 실행
2] launcher_start_api.py에서 controller.py의 controller class method인 commander( ) 로 시뮬레이터 실행 명령 수행
3] 시뮬레이터 실행 명령은 define.py의 Command_list Class에 미리 정의함
##launcher_start_api.py
if self.controller.is_befor_login():
self.controller.commander(Command.LOGIN)#Login명령
if self.controller.is_after_login() or self.controller.is_after_sim_quit_to_launcher(): # is_after_sim_quit_to_launcher : Simulator에서 quit 명령 후 Launcher 복귀 상태 확인
self.controller.commander(Command.SELECT_VER)#version select명령
if self.controller.is_not_find_version(): #version_error
break
if self.controller.is_can_execute_sim():
self.controller.commander(Command.EXECUTE_SIM) #Simulator 실행 명령
self.controller.watting_execute()
if self.controller.is_sim_not_install():
self.controller.commander(Command.INSTALL_SIM) #Simulator 설치 명령
if self.controller.is_sim_lobby():
self.controller.commander(Command.MAP_VEHICLE_SELECT)#시뮬레이션/옵션 변경 실행 명령
self.controller.watting_loading()
if self.controller.is_sim_playing():
self.controller.commander(Command.NET_SETTING) #Network setting
self.controller.commander(Command.SEN_SETTING) #Sensor setting
self.controller.commander(Command.SCEN_SETTING) #Scenraio setting
##define.py
class Command_list(Enum):
#Launcher Command
LOGIN = (Platform.LUANCHER, cmd.LOGIN , user_id+'/'+user_pw)
SELECT_VER = (Platform.LUANCHER, cmd.SELECT_VER , version)
INSTALL_SIM = (Platform.LUANCHER, cmd.INSTALL_SIM , "")
EXECUTE_SIM = (Platform.LUANCHER, cmd.EXECUTE_SIM , "")
QUIT_LAUNCHER = (Platform.LUANCHER, cmd.QUIT_LAUNCHER , "")
LOGOUT = (Platform.LUANCHER, cmd.LOGOUT , "")
#Simulator Command
MAP_VEHICLE_SELECT = (Platform.SIMULATOR, cmd.MAP_VEHICLE_SELECT , map+'/'+vehicle)
SIM_PAUSE = (Platform.SIMULATOR, cmd.SIM_PAUSE , "")
SIM_PLAY = (Platform.SIMULATOR, cmd.SIM_PLAY , "")
NET_SETTING = (Platform.SIMULATOR, cmd.NET_SETTING , network_file)
NET_SAVE = (Platform.SIMULATOR, cmd.NET_SAVE , )
SEN_SETTING = (Platform.SIMULATOR, cmd.SEN_SETTING , sensor_file)
SEN_SAVE = (Platform.SIMULATOR, cmd.SEN_SAVE , "")
SCEN_SETTING = (Platform.SIMULATOR, cmd.SCEN_SETTING , scenario_file+"/62")
SCEN_SAVE = (Platform.SIMULATOR, cmd.SCEN_SAVE , "")
QUIT_SIM = (Platform.SIMULATOR, cmd.QUIT_SIM , "")
예제 코드 실행 흐름은 아래와 같다.
사용 예제
위에서 설명한 순서대로 MORAI Launcher 실행 후 api.py
테스트 코드로 MORAI 시뮬레이터를 실행하는 예제는 아래와 같다.