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

  • 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

  • Apollo Docker 진입

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

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

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

  • Apollo bridge 코드 추가.

    • “apollo/modules” 아래 bridge 파일을 압축 풀고 기존 bridge 폴더를 덮어쓰기 한다.

bridge.zip

  • 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
      CODE

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

jeju.zip

  • Car 차량 추가

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

Vehicle_config.zip

  • Mode 추가

    • “apollo/dreamview/conf/hmi_modes” 내에 아래 파일을 추가 한다.

morai.pb.txt

  • Apollo Build

    • 아래 명령어를 통해 Apollo를 빌드 한다.

./apollo.sh build_opt_gpu
CODE

Apollo 세팅 및 주행 테스트

  • Dreamview 실행

    • 아래 명령어 입력

./scripts/bootstrap.sh
CODE

  • 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
CODE
  • 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”

  • 아래 파일을 위 경로에 추가한다.

velodyne128_parser.cc

  • Velodyne 128ch 연동 확인

    • Cyber_visualizer 를 통해 Velodyne 16ch과 같게 확인 할 수 있다.

    • 아래 명령어를 이용하여 128ch의 데이터를 수신

cyber_launch start modules/drivers/lidar/velodyne/launch/velodyne128.launch
CODE

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
CODE

  • 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개가 인식 된 것을 확인 할 수 있다.