본 페이지는 Apollo 플랫폼과 MORAI SIM: Drive를 연동하여 사용하는 방법에 대해 기술한다.


목표

본 Quick Start Guide를 통해 다음 항목을 이해할 수 있다

  • Apollo와의 연동을 위한 MORAI SIM: Drive 설정 방법

  • MORAI SIM: Drive와의 연동을 위한 Apollo 설정 방법

  • 예제1) GT 데이터를 이용한 경로 추종

    • Dreamview 설정하기 > ‘경로 설정’ 항목을 참고한다.

  • 예제2) 3D Lidar를 이용한 장애물 회피

    • 센서 설정 > 'Lidar Velodyne 128ch' 항목을 참고한다.


시스템 구성

2대 PC, PC1에는 MORAI SIM: Drive를 실행하고, PC2에서는 Apollo를 실행하는 환경이다. PC1은 Windows, Linux 어느 쪽이든 관계 없으나, 본 가이드에서는 Apollo가 실행되는 PC2를 Ubuntu 18.04로 가정한다. MORAI SIM: Drive를 실행할 수 있는 상세 환경에 대해서는 ‘시뮬레이션 PC 요구사항’와 Apollo가 실행될 수 있는 상세 환경에 대해서는 'Apollo Prerequisites'를 참고한다.

1대의 PC에서 두 소프트웨어를 실행하여 연동하는 것도 가능하나, 성능 상의 이슈가 발생할 수 있다.

MORAI SIM: Drive 실행 및 네트워크 설정

MORAI SIM: Drive 실행하기

설치 및 실행 페이지를 참조한다. 설치 및 실행

  • 런처 다운로드

  • 로그인

  • 버전 설치

  • 시뮬레이터 실행

Map 과 Ego Vehicle 선택하고 로드하기

맵은 R_KR_PR_Jeju-Airport를, Ego Vehicle로는 2017_Kia_Niro(HEV) 차량을 선택한다.

Apollo 연동을 위한 네트워크 설정하기

Cmd Control

상단 메뉴에서 Edit → Network Settings 를 선택하여 네트워크 설정을 위한 창을 연다.

CmdControl 아래에 있는 MoraCmdController를 선택하고 CyberCmdController로 변경한다. 변경 이후에는 다음과 같은 화면을 볼 수 있다.

세부 항목에 대해서는 다음과 같이 설정한다

  • IP Setting

    • MORAI SIM: Drive가 실행되는 환경과 Apollo가 실행되는 환경의 IP 주소를 입력한다.

    • Host IP는 MORAI SIM: Drive가 실행되는 환경의 IP를, Destination IP는 Apollo가 실행되는 환경의 IP를 의미한다.

    • 각 PC의 IP확인을 위하여, 터미널을 열고 다음 명령어를 입력하여 IP를 확인할 수 있다.

      • Linux 명령어 : ifconfig

      • Window 명령어 : ipconfig

    • 만일 두 소프트웨어가 같은 PC에서 실행될 경우라면 모두 127.0.0.1로 설정한다.

Publisher, Subscriber, Service 설정

CmdControl 오른쪽에 있는 Publisher, Subscriber, Service 탭을 클릭하여 화면을 아래와 같이 전환한다.

세부 항목에 대해서는 다음과 같이 설정한다

  • Frame Rate Setting

    • Apollo로 전송되는 데이터의 Frame Rate를 설정할 수 있다. (단, 이는 목표하는 Frame Rate로, 시스템의 성능이 부족할 경우에는 보장되지 않는다)

    • 30으로 설정한다.

  • IP Setting

    • Cmd Control 탭에서 설정했던 것과 같은 값으로 설정한다.

  • Port Setting

    • 기본으로 설정된 값을 그대로 사용한다.

Connect를 클릭하여 네트워크 설정 마치기

앞선 과정과 같이 설정값을 입력한 후 Connect 버튼을 클릭한다. Status 옆 메세지가 Disconnected 에서 Connected 로 변경되었는 지 확인한다.

Tip: 네트워크 설정을 마친 후 키보드의 “P” 버튼을 눌러 Parking 모드로 변경 해둔다. (Ego Vehicle이 움직이는 것을 방지하기 위함)

Apollo

Baidu사에서 만든 오픈소스 자율주행 플랫폼

Homepage : https://apollo.auto/

GitHub : https://github.com/ApolloAuto/apollo

YouTube : https://www.youtube.com/channel/UC8wR_NX_NShUTSSqIaEUY9Q

Apollo 환경 설정

  • 그래픽 드라이버 설치

    • Sotftware & Update 에 진입한다.

    • 자신에게 맞는 NVIDIA 드라이버를 선택 후 “Apply Changes” 를 클릭하여 설치한다.

  • 터미널 창에 “nvidia-smi” 를 입력하여 정상 설치 되었는지 확인한다.

    • 아래의 사진과 같이 설치한 Nvidia Driver Version이 확인 가능하다.

Apollo 설치하고 빌드하기

Apollo에 관한 자세한 설명은 아래 URL을 참고 한다.

Repository clone

  • Apollo 공식 Repository가 아닌 MORAI에서 제공하는 아래의 Repository에서 git clone한다.

  • MORAI에서 제공하는 Repository는 21.12.08에 업데이트된 Apollo master branch를 Fork한 Repository로 MORAI SIM과 연동할 수 있는 Bridge 코드를 추가하였다.

    • (warning) MORAI SIM: Drive 22.R2.1과 연동할 경우, MORAI SIM: Drive 내 버그로 인하여 master 브랜치가 아닌 MORAISIM_R2.1 branch를 사용해야 한다.

  • Docker 설치

    • clone이 완료 되었으면 install_docker.sh 을 실행하여 도커를 설치한다.

      cd /apollo/docker/setup_host
      chmod +x install_docker.sh
      
      ./install_docker.sh
      
      sudo groupadd docker
      sudo usermod -aG docker $USER
      CODE

  • NVIDIA Container Toolkit 설치

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get -y update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker

sudo reboot
NONE

  • 재부팅 실행

    • Docker 설치 및 NVIDIA Container Toolkit 설치 후 재부팅한다.

sudo reboot
NONE

  • Apollo Docker 진입

    • $APOLLO_ROOT_DIR 에서 아래 명령어를 입력한다.

    • dev_start.sh 쉘 파일을 실행하기 위해서는 유선 인터넷이 연결되어 있어야 한다.

      • (warning) 무선 인터넷 환경일 경우 실행 불가하다.

./docker/scripts/dev_start.sh
./docker/scripts/dev_into.sh
CODE

  • Network 세팅

    • Apollo → MORAI SIM 으로 Control cmd를 전송하는 “remote_ip”는 기본 “127.0.0.1” 으로 설정 되어 있다.

    • 2개의 PC 환경일 경우 MORAI SIM: Drive를 실행하는 PC의 IP로 “remote_ip”을 변경한다.

  • Map 추가

    • jeju map을 “apollo/modules/map/data/” 경로에 넣고 압축을 풀어준다.

    • apollo/modules/map/data/Jeju_Airport/맵파일 로 구성되도록 한다.

Jeju_Airport.zip

  • Car 차량 추가

    • “apollo/modules/calibration/data” 내에 아래 파일 압축 해제

Vehicle_config.zip

  • Apollo Build

    • Apollo를 빌드한다.

    • 정상적으로 빌드한 경우, Terminal 창에서 아래 사진의 ‘[OK] Done building apollo. Enjoy’ 문구를 출력한다.

./apollo.sh build_opt_gpu
CODE


Apollo 세팅 및 주행 테스트

MORAI SIM: Drive와의 통신을 위한 Bridge 실행하기

  • 통신을 위한 launch 파일 실행

    cyber_launch start modules/bridge/launch/morai_bridge.launch
    CODE
  • cyber_monitor를 이용하여 실행이 잘되었는지 확인한다.

    • 새로운 Terminal 창을 열고, 실행 중인 docker로 진입한다.

    • ./docker/scripts/dev_into.sh
      BASH
    • 진입 후 다음의 명령어를 입력하여 cyber monitor 프로그램을 실행한다.

    • cyber_monitor
      BASH

Dreamview 실행하기

새로운 Terminal 창을 열고, 실행 중인 docker로 진입한다.

./docker/scripts/dev_into.sh
BASH

아래 명령어를 입력하여 Dreamview를 실행한다.

./scripts/bootstrap.sh
CODE

Dreamview 설정하기

웹브라우저를 실행하고, 주소창에 localhost:8888 을 입력하여 접속하면 아래와 같은 화면이 나타난다.

Tasks

위와 같은 화면을 확인 하였으면 우측 상단의 설정 창을 이용하여, 사용하고자 하는 차량과, 맵을 다음과 같이 설정해준다.

그리고 왼쪽에서 Module Controller 탭을 클릭한 다음, Modules에 포함된 다음의 모듈을 클릭하여 활성화 시켜준다.

  • Control, Localization, Obstacle GT_data, Planning, Prediction, Routing, Traffic Light GT_data, Transform

Module Controller

정상적으로 실행이 된 이후 다음과 같은 화면을 볼 수 있다.

다음과 같이 RTK Localization 되는 것을 확인 할 수 있다.

  • 아래 사진과 같이 모듈이 실행되는 것을 확인 후 경로 설정으로 넘어간다.

  • 경로 설정

    • 왼쪽편의 Route Editing을 선택

    • 아래와 같은 화면을 확인한다.

    • 마우스의 휠을 이용하여 지도를 축소한뒤 원하는 목표지점을 선택 후 상단의 “Send Routing Request”를 클릭한다.

    • 다시 왼쪽의 메뉴 중 “Tasks” 를 선택하여 경로가 생성된 것을 확인 한다.

    • Morai SIM 으로 돌아와서 키보드의 “q” 키를 클릭 해 자율주행 모드로 변경한다.

    • Dreamview, Morai SIM에서 목표지점으로 가는 것을 확인한다.

Sensor 설정

Lidar Velodyne 128ch

  • Velodyne 128ch을 원하는 위치에 추가한다.

  • 카메라에 대한 설정을 마친 후 자신의 네트워크에 맞게 Host IP, Destination IP를 설정한다.

    • Host Sensor Port : 2369, Destination Port : 2368 로 설정 한다.

  • 설정을 마친 후 “Connect” 버튼을 클릭하여 연결한다.

DreamView의 Module Controller창에서 Velodyne 128ch 모듈을 클릭하여 동작 시켜준다.

  • Velodyne 128ch 연동 확인

    • Cmd 창에 “cyber_visualizer” 를 입력하고 실행하여 준다.

    • cyber_visualizer
      CODE
    • 상단의 “Show PointCloud” 버튼을 클릭하여 “PointCloud2” 채널을 생성한다.

    • “ChannelName”을 선택한 뒤 “/apollo/sensor/lidar128/compensator/PointCloud2”를 선택한다.

  • 아래와 같이 PointCloud가 출력되는 것을 확인한다.

  • Velodyne 128ch을 이용한 Obstacle perception

    • Obstacle Perception을 이용하기 위해서는 장애물 배치를 우선 적으로 해야 한다.

    • Lidar 연결 확인 후 Dreamview 의 Module Controller에서 Obstacle Perception 버튼을 클릭하여 활성화 시켜준다.

      • 이때 Obstacle GT_data 모듈은 비활성화 하도록 한다.

    • Module Controller에서 Obstacle Perception 모듈 활성화 후 Route Editing 탭에서 전역 경로 (빨간색 선) 설정·주행 시, 마주하는 Obstacle에 대한 회피 경로 (청록색 선)를 생성하여 주행한다.

      Obstacle Perception 모듈을 사용한 경로 주행

Camera

카메라 센서 연동방식은 Apollo에서 카메라 View를 확인하는 방법과 Cyber Visualizer에서 카메라 View를 확인하는 방법 두 가지로 구성된다.

카메라 센서 세팅

  • 카메라를 원하는 위치에 추가한다.

  • 카메라에 대한 설정을 마친 후 자신의 네트워크에 맞게 Host IP, Destination IP를 설정한다.

    • Host Sensor Port : 15009, Destination Port 15019 로 설정 한다.

  • 설정을 마친 후 “Connect” 버튼을 클릭하여 연결한다.

    • (warning) Sim Frame이 30 이하인 경우 통신이 끊길 수 있다.

    • (warning) 고화질의 Camera 사용 시 성능에 영향을 준다.

DreamView의 Module Controller창에서 Camera 모듈을 클릭하여 동작 시켜준다.


Camera 연동 확인

  • (warning) DreamView의 Module Controller - Camera 모듈과 동시에 작동 할 수 없다.

Apollo

  • Dreamview 하단의 Camera Sensor 스위치를 클릭하면 우측 하단에서 카메라 영상을 확인 할 수 있다.

Cyber Visualizer

cyber_launch start modules/bridge/launch/morai_bridge_camera.launch
CODE
  • 위 명령어 입력 (위 명령어를 통해 Bridge 연결 시 “cyber_visualizer”로 연동 확인 가능)

  • cmd 창에 “cyber_visualizer” 명령어 입력

  • “Add Image” 를 클릭하여 카메라를 추가

  • Camera0 의 채널을 “/apollo/sensor/camera/front_6mm/image” 로 선택 후 “Play” 버튼을 클릭한다.

Morai SIM의 camera영상은 “/apollo/sensor/camera/front_6mm/image/compressed”로 전송하고 있다.

  • Camera 영상 정상 출력 확인