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, f'{user_id}/{user_pw}')#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 복귀 상태 확인

    if not self.controller.is_version_selected():
        self.controller.commander(Command.SELECT_VER, version)#version 선택명령
        
        if self.controller.is_not_find_version(): #선택한 버전이 없는 버전인지 확인.                    
            break
    
    if self.controller.is_can_execute_sim():
        self.controller.commander(Command.EXECUTE_SIM,'') #Simulator 실행 명령
                                
    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, f'{map}/{vehicle}')#시뮬레이션/옵션 변경 실행 명령

if self.controller.is_sim_playing():
    if network_file :
        self.controller.commander(Command.NET_SETTING, network_file) #시뮬레이터 네트워크 세팅 명령
    if sensor_file:
        self.controller.commander(Command.SEN_SETTING, sensor_file) #시뮬레이터 센서 세팅 명령
    if scenario_file:
        self.controller.commander(Command.SCEN_SETTING, f'{scenario_file}/30') #시뮬레이터 시나리오 세팅 명령
    '''
        Scenario Setting Option
        0x01 : Delete All
        0x02 : Ego Vehicle
        0x04 : Surround Vehicle
        0x08 : Pedestrian
        0x10 : Obstacle
        0x20 : Pause (scenario load 후 시뮬레이터 정지(직접 esc키 또는 play command로 해제 가능))
        원하는 option을 or 연산 해서 사용
        e.g) Ego vihcle  Surrond Vehicle, Pedestrain, Obstacle을 load하려면
             0x02 | 0x04 | 0x08 | 0x10  -> 0b0010 | 0b0100 | 0b1000 | 0b0001 0000 -> 30 (0b0001 1110, 0x1E)
    '''
    break

##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.