: 본 페이지는 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)

  • 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             , "")   
CODE

예제코드 Flow chart



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


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

사용예제

- api.py