[Apollo] Quick Start Guide
Apollo
Baidu사에서 만든 오픈소스 자율 주행 플랫폼
Homepage : https://apollo.auto/
GitHub : https://github.com/ApolloAuto/apollo
YouTube : https://www.youtube.com/channel/UC8wR_NX_NShUTSSqIaEUY9Q
환경 설정
그래픽 드라이버 설치
Sotftware & Update 에 진입한다.
자신에게 맞는 NVIDIA 드라이버를 선택 후 “Apply Changes” 를 클릭하여 설치 한다.
GPU의 권장사항은 RTX 2080ti 이상 이며 SIM, Apollo 를 한대의 PC에서 사용할 시 딜레이 발생 가능


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

Morai SIM
현재 “Jeju-Airport”, “2017_KIA_NIRO, 2017_hyundai_solati_h350” 차량만 지원

MORAI SIM Network 설정
Frame Rate Setting
Apollo로 전송되는 데이터의 Frame을 변경 가능
Target Frame은 “30”로 설정 해준다.
IP Setting
Host, Destination IP 설정 가능.
Local에서 동작 하고자 한다면 Host IP, Destination IP 모두 127.0.0.1로 설정한다.
아래 PORT 번호는 수정하지 않고 사용.
설정을 마친 후 Apply를 클릭해 적용한다.
적용을 마친 후 키보드의 “P” 버튼을 눌러 Parking 모드로 변경 해 둔다.
Cmd Control
Host, Destination IP 설정.

Publisher, Subscriber
Frame Rate, IP Setting 설정.



GT data
obstacles, traffic light

Apollo 실행
아폴로에 관한 자세한 설명은 아래 URL을 참고 한다.
환경 설정
Repositoty clone
master branch 를 clone 한다.
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
Apollo Docker 진입
$APOLLO_ROOT_DIR
에서 아래 명령어를 입력한다.dev_start.sh 쉘 파일을 실행하기 위해서는 유선 인터넷이 연결 되어 있어야 한다.
./docker/scripts/dev_start.sh
./docker/scripts/dev_into.sh
Apollo bridge 코드 추가.
“apollo/modules” 아래 bridge 파일을 압축 풀고 기존 bridge 폴더를 덮어쓰기 한다.
Network 세팅
Apollo → Morai SIM 으로 Control cmd를 전송하는 “remote_ip”는 기본 “127.0.0.1” 으로 설정 되어 있다.
다른 PC에서 실행 하고자 한다면 “remote_ip” 변경 필요.

Map 추가
apollo/modules/common/data/global_flagfile.txt의 가장 아래줄 밑에 아래 문장을 넣는다.
--map_dir=/apollo/modules/map/data/jeju
CODEjeju map을 “apollo/modules/map/data/” 경로에 넣고 압출을 풀어준다.
Car 차량 추가
“apollo/modules/calibration/data” 내에 아래 파일 압축 해제
Mode 추가
“apollo/dreamview/conf/hmi_modes” 내에 아래 파일을 추가 한다.
Apollo Build
아래 명령어를 통해 Apollo를 빌드 한다.
./apollo.sh build_opt_gpu
Apollo 세팅 및 주행 테스트
Morai SIM 통신
통신을 위한 launch 파일 실행
cyber_launch start modules/bridge/launch/morai_bridge.launch
CODEcyber_monitor를 이용하여 실행이 잘되었는지 확인한다.
cmd 창에 “cyber_monitor” 명령어 입력
Cyber Developer Tools - cyber monitor에 대한 자세한 사용법은 아래를 참고한다.

Dreamview 실행
아래 명령어 입력
./scripts/bootstrap.sh
Dreamview 설정
dreamview 실행 코드를 입력 후에 크롬을 이용하여 주소창에 “localhost:8888”을 입력하여 접속한다.
위와 같은 화면을 확인 하였으면 우측 상단의 설정 창을 이용하여 아래 와 같이 설정해 준다.

Quick Start 창에서 Setup를 클릭한다.

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

Camera
Others 창에서 Camera Sensor를 활성화 시키면 Camera View를 확인 할 수 있다.

경로 설정
왼쪽편의 Route Editing을 선택
아래와 같은 화면을 확인한다.
마우스의 휠을 이용하여 지도를 축소한뒤 원하는 목표지점을 선택 후 상단의 “Send Routing Request”를 클릭한다.
다시 왼쪽의 메뉴 중 “Tasks” 를 선택하여 경로가 생성된 것을 확인 한다.
Morai SIM 으로 돌아와서 키보드의 “q” 키를 클릭 해 자율주행 모드로 변경한다.
Dreamview, Morai SIM에서 목표지점으로 가는 것을 확인한다.
Sensor 설정
Lidar
- Velodyne 16ch
Lidar 를 원하는 위치에 추가한다.
Lidar 는 Apollo 에서 UDP로 받을 수 있도록 구현이 되어 있기 때문에 UDP 로 전송한다.
Lidar에 대한 설정을 마친 후 자신의 네트워크에 맞게 Host IP, Destination IP를 설정한다.
Port 는 아래 Apollo conf 파일을 참조하여 설정한다.
설정을 마친 후 “Connect” 버튼을 클릭하여 연결한다.

Apollo 설정
“modules/drivers/lidar/velodne/conf/velodyne16_front_up_conf.pb.txt” 파일 참조
“firing_data_port” 와 Morai SIM의 “Destination Port”를 같게 한다.
“use_gps_time”을 true → false로 변경한다.
“is_main_frame”을 fasle → true로 변경한다.
“scan_channel”을 /apollo/sensor/lidar16/Scan 변경 한다.
“convert_channel_name”을 /apollo/sensor/lidar16/PointCloud2 변경한다.
다른 Lidar도 수신하고자 한다면 “conf” 파일을 참조하여 맞게 변경한다.

modules/drivers/lidar/velodyne/dag/velodyne16.dag
config_file_path의 경로를 “velodyne16_front_up_conf.pb.txt”로 변경한다.

Lidar 연동 확인
아래 명령어를 이용하여 velodyne16 에 대한 component 를 실행한다.
cyber_launch start modules/drivers/lidar/velodyne/launch/velodyne16.launch
Camera 와 마찬가지로 “cyber_visualization”을 이용하여 확인 할 수 있다.
상단의 “Show PointCloud” 버튼을 클릭하여 “PointCloud2” 채널을 생성한다.
“ChannelName”을 선택한 뒤 “/apollo/sensor/lidar16/PointCloud2”를 선택한다.

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

- Velodyne 128ch
Velodyne 16ch 과 Morai SIM 의 설정 방법은 같다.
Apollo 환경설정
“modules/drivers/lidar/velodne/conf/velodyne128_conf.pb.txt” 파일 참조
“firing_data_port” 와 Morai SIM의 Port를 동일 하게 설정
기본 값으로는 “2368”로 설정되어 있다.
“modules/drivers/lidar/velodne/conf/velodyne128_compensator.pb.txt”
“transform_query_timeout” 값을 0.02 → 0.5로 수정

velodyne128_parser.cc 수정
경로 : “modules/drivers/lidar/velodyne/parser”
아래 파일을 위 경로에 추가한다.
Velodyne 128ch 연동 확인
Cyber_visualizer 를 통해 Velodyne 16ch과 같게 확인 할 수 있다.
아래 명령어를 이용하여 128ch의 데이터를 수신
cyber_launch start modules/drivers/lidar/velodyne/launch/velodyne128.launch
Radar
Radar를 원하는 위치에 추가한다.
Radar에 대한 설정을 마친 후 자신의 네트워크에 맞게 Host IP, Destination IP를 설정한다.
Host Sensor Port : 15008, Destination Port : 15018 로 설정
설정을 마친 후 “Connect “ 버튼을 클릭하여 연결한다.

Camera
카메라를 원하는 위치에 추가한다.
카메라에 대한 설정을 마친 후 자신의 네트워크에 맞게 Host IP, Destination IP를 설정한다.
Host Sensor Port : 15009, Destination Port 15019 로 설정 한다.
설정을 마친 후 “Connect” 버튼을 클릭하여 연결한다.
Sim Frame이 30 이하인 경우 통신이 끊길 수 있음

Camera bridge 실행
cyber_launch start modules/bridge/launch/morai_bridge_camera.launch
Camera 연동 확인
cmd 창에 “cyber_visualizer” 명령어 입력
“Add Image” 를 클릭하여 카메라를 추가
Camera0 의 채널을 “/apollo/sensor/camera/image” 로 선택 후 “Play” 버튼을 클릭한다.
Morai SIM의 camera영상은 “/apollo/sensor/camera/front_6mm/image/compressed”로 전송하고 있다.

Camera 영상 정상 출력 확인

Perception
Velodyne 128ch을 이용한 Perception
GT data를 사용하지 않고 Velodyne 128ch로 Perception 하는 방법.
환경설정 방법.
Perception 모듈을 주석 해제한다.
경로 : “module/dreamview/conf/hmi_modes/morai.pb.txt”
Perception 모듈이 동작 할 수 있도록 주석을 해제 한다.

기존 bridge를 통해서 수신하는 GT 데이터의 bridge를 주석 처리한다.
경로 : module/bridge/launch/morai_bridge.launch
bridge_receiver_obstacle 주석

Perception dag 파일 추가.
경로 : modules/perception/production/dag
dag_streaming_perception_morai.dag 추가
dag_streaming_perception_morai.dag
Perception 결과 확인
Morai Sim 에서 다음과 같이 장애물을 배치 했을 때.

Cyber_monitor를 통해서 obstacles 3개가 인식 된 것을 확인 할 수 있다.
