Skip to main content
Skip table of contents

[Apollo] 환경 구성 및 테스트

본 섹션에서는 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 에서 두 소프트웨어를 실행하여 연동하는 것도 가능하나, 성능 상의 이슈가 발생할 수 있다.

시뮬레이터 > Apollo 네트워크 설정

Step 1: MORAI SIM: Drive 실행하기

설치 및 실행 페이지를 참조한다. 시작하기에 전에

  • 런처 다운로드

  • 로그인

  • 버전 설치

  • 시뮬레이터 실행

  • 시뮬레이터 Map 과 Ego Vehicle 선택 및 시작하기

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

apollo1.png

 

Step 2: Apollo 통신을 위한 네트워크 설정하기

1] Cmd Control

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

apollo2.png

 

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

apollo3.png

 

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

  • 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로 설정한다.

 

2] Publisher, Subscriber, Service 설정

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

apollo4.png

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

  • Frame Rate Setting

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

    • 30으로 설정한다.

  • IP Setting

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

  • Port Setting

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

apollo5.png
apollo6.png
apollo7.png
apollo8.png
apollo9.png

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

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

apollo10.png
apollo11.png

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

 

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 을 참고 한다.

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

 

  • Docker 설치

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

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

 

  • NVIDIA Container Toolkit 설치

CODE
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

 

  • 재부팅 실행

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

CODE
sudo reboot

 

  • Apollo Docker 진입

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

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

무선 인터넷 환경일 경우 실행이 불가하다.

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

 

  • 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” 문구를 출력한다.

CODE
./apollo.sh build_opt_gpu

 

Apollo 세팅 및 주행 테스트

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

2] Dreamview 실행하기

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

CODE
./docker/scripts/dev_into.sh

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

CODE
./scripts/bootstrap.sh

 

3] 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

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

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

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

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

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

 

  • Velodyne 128ch 연동 확인

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

    • CODE
      cyber_visualizer
    • 상단의 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

카메라 센서 연동방식은 아래와 같이 두 가지로 구성된다.

  1. Apollo 에서 카메라 View 를 확인하는 방법

  2. Cyber Visualizer 에서 카메라 View 를 확인하는 방법

apollo13.png

카메라 센서 세팅

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

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

    • Host Sensor Port : 15009 로 설정

    • Destination Port : 15019 로 설정

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

Sim Frame이 30 이하인 경우, 통신이 끊길 수 있다.

고화질 Camera 사용 시 성능에 영향을 줄 수 있다.

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


Camera 연동 확인

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

 

Apollo

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

 

Cyber Visualizer

CODE
cyber_launch start modules/bridge/launch/morai_bridge_camera.launch
  • 위 명령어 입력 (위 명령어를 통해 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 영상 정상 출력 확인

 

JavaScript errors detected

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

If this problem persists, please contact our support.