Skip to main content
Skip table of contents

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의 로그인 화면이 나타난다.

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 주소)는 같다.

params.txt의 파라미터와 LinkConnection.txt 파라미터 간의 연결 관계

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' 경로에 존재)

      ‘params.txt’ 파일의 파라미터 정보

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에 미리 정의함

PY
##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 시뮬레이터를 실행하는 예제는 아래와 같다.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.