MORAI Simulator Control API
본 문서는 MORAI Simulator Control(MSC) API Example 사용하는 방법을 소개한다.
MSC API는 UI를 사용하지 않고 통신 API를 이용하여 시뮬레이터를 제어 할 수 있는 기능이다.
사용자가 Simulator를 이용해서 Test를 진행 하기까지 여러 Setting이 필요한데, MSC API를 이용하여 보다 빠르고 간편하게 Setting을 하고 Scenario에 대한 시뮬레이션 Test를 자동화 할 수 있다.
하위 페이지 목차
환경설정
Example code 다운로드
API 명세서 다운로드
Python version
Example code는 python 3.7.3에서 작성 및 테스트 진행.
실행 방법
다운받은 Example code의 params.txt에 자신의 환경을 입력하고 api.py 실행.
파일 설명
api.py : params.txt 에 입력한 정보를 읽어 시뮬레이터를 실행.
params.txt
params.txt 는 .py 에서 사용하는 파라미터의 정보가 있는 파일이다.
사용하고자하는 ip, port , user_id, user_pw, version, Map/Vehicle을 설정해야한다.
receive user ip : Launcher / Simulator에서 보내주는 정보(Data, Command result)를 받는 IP
receive user port : Launcher / Simulator에서 보내주는 정보를 받는 Port
request dst ip : Command 를 보내 제어할 Launcher / Simulator의 IP
request dst port : Command 를 보내 제어할 Launcher / Simulator의 Port
user_id : User의 ID
user_pw: User의 PASSWORD
version : 실행할 Simulator의 Version
map : Simulator에서 Play할 Map (대소문자 구분)
vehicle : Simulator에서 Play할 Vehicle (대소문자 구분)
network_file : setting 하고자 하는 network file name(Launcher Data → SaveFile→ Network)
sensor_file : setting 하고자 하는 sensor file name(Launcher Data → SaveFile→ Sensor)
Scenario_file : setting 하고자 하는 scenario file name(Launcher Data → SaveFile→ Scenario)
params.txt 내 파라미터
LinkConnection.txt
Launcher 폴더의 SaveFile\LinkConnection.txt
LinkConnection.txt는 Launcher / Simulator에서 사용하는 IP, Port 정보가 있는 파일이다.
사용하고자하는 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

명령 설명
launcher_start_api.py에서 controller.py의 controller class method인 commander()로 명령을 사용한다.
명령은 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 , "")
예제코드 Flow chart

추가적인 내용은 해당 명세서 참조
API 사용 가능 확인
Launcher 좌상단 / Simulator 좌하단 인디케이터로 API 사용 여부를 확인할 수 있다.
Green : Morai Simulator Control API 사용 가능 상태.
Red : Morai Simulator Control API 사용 불가능 상태. (IP 및 PORT 번호 확인 필요)


API 사용 가능 상태(MSC is Connected)


API 사용 불가능 상태(MSC is Disconnected)