SLAM with Autoware

이용욱·2022년 2월 27일
4

SLAM

목록 보기
4/7
post-thumbnail

1.SLAM

1-1) What's the SLAM?

SLAM이란 Simultaneous Localization And Mapping의 약자로, 자신의 위치를 파악함과 동시에 지도를 만드는 것이다. 크게 Mapping과 Matching 두 부분으로 나뉘게 된다.
Mapping은 차량이 움직임과 동시에 차량에 부착된 광센서(Lidar)에서 나오는 point cloud를 누적시켜 지도화 시키는 것이다.

Figure 1. K-city 田 구간 mapping 결과

Figure 2. K-city mapping 결과

Figure 1.과 Figure 2.는 pcd(point cloud data) 파일로 저장하고 map matching을 진행할 때는 저장한 pcd파일을 불러온 후 진행하게 된다.
Mapping한 point cloud와 실시간 point cloud를 비교하여 일정 임계치(Threshold)만큼 point cloud 값이 일치하면 차량의 위치를 publish하는 것이다. Map과 matching이 되었을 경우 아래와 같다.

Figure 3. Map matching

흰 점들은 저장한 map이고 붉은 점들은 실시간으로 차량에서 나오는 point cloud이다.

SLAM의 장점은 GPS(Global Positioning System)보다 활용 범위가 훨씬 크다는 것이다. GPS는 날씨, 주변환경(천장 유무)등 여러 요인들에 방해를 받지만 SLAM은 비가 와서 point cloud들이 반사되는 정도만 아니라면 언제든지 사용할 수 있다. 하지만 수 천만개의 point cloud를 계산해야 하기 때문에 연산량이 많아 컴퓨터가 과부화될 가능성도 있다.
Figure 4.는 자율주행 플랫폼을 만든 Autoware社의 영상이다.

Localization with GNSS

2.Autoware

2-1) What’s the Autoware?

Autoware는 오픈소스 소프트웨어로 일본의 Tier IV를 통해 관리되고 있는 자율주행 개발/시뮬레이션 소프트웨어이다. 오픈소스이기 때문에 소스코드는 Github에서 코드를 내려 받을 수 있다.

Autoware Github : https://github.com/Autoware-AI/autoware.ai

Figure 5. Autoware 하드웨어 요구 스펙

하드웨어 사양이 큰 이유는 프로그램들이 병렬적으로 실행되며 많은 컴퓨팅 파워를 필요로 하는 알고리즘들이 많고 특히 PointCloud로 구성되어 있는 3D 맵으로 인해 메모리 자원을 많이 필요로 한다.
Autoware의 특징으로 다음과 같다.
👉 ROS로 구현되어 있다.
👉자율주행 소프트웨어 개발에 필요한 다양한 ROS 패키지들을 모아 놓았다.
👉Data를 통해 Simulation이 가능하다.
👉최소 Ubuntu 16.04(Xenial Xerus) 버전에서 실행시켜야 한다.

Autoware의 구조는 Figure 6.과 같이 Sensing, Computing, Actuation 3개의 모듈로 구성되어 있다.
그리고 부가적으로 Data, Socket, System, Util 등의 모듈이 있다.

  • Sensing : 카메라, 라이다, IMU, GPS, Radar 같이 하드웨어 센서들의 드라이버와 구동 스크립트들이 위치.
  • Computing : GPS, Lidar 센서 데이터를 통해 현재 자신의 위치를 측위하는 Localization, Camera Image, Lidar Point Cloud 등의 데이터를 사용하여 장애물을 탐지하는 Object Detection 알고리즘으로 구성.
  • Actuation : 전자 신호로 차량을 제어할 수 있게 CAN 신호를 전달하는 프로그램으로 구성.

Figure 6. Autoware 구조

2-2) Install

이 파트에서는 Autoware 소프트웨어를 구동하기 위한 기본 세팅을 설명한다.
Autoware는 Linux(Ubuntu)를 기반으로 동작하기 때문에 필연적으로 Linux에 대한 배경지식이 있어야 수월하게 접근 할 수 있다. 특히 리눅스의 패키지에 대한 개념(패키지 매니저, 패키지 파일 등)과 쉘 스크립트(bash, sh) 작성 방법, 빌드 시스템(Cmake, Catkin, Colcon 등)에 대한 이해가 필요하다.

Autoware1.14 버전을 사용하기 위해 2021년 10월 기준x86 계열 시스템을 갖춘 컴퓨터와 Ubuntu 18.04, CUDA 10, ROS Melodic 이 준비되어야 한다.

Table1. Supported Configurations(dated 2021.10)

Table 2. Requirements

2-2-1)Ubuntu 18.04

http://releases.ubuntu.com/18.04/

위 링크로 들어가서 64bit PC(AMD64) Desktop image iso를 다운로드 한다. 그리고 BalenaEtcher 와 같은 이미지 삽입 툴을 이용하여 USB에 Ubuntu 이미지를 Flash 한다. 컴퓨터에서 부팅할 때 이 USB로 부팅하여 언어는 영어, 입력 키보드는 한글로 설정하고 OS를 설치한다.

BalenaEtcher Download : https://www.balena.io/etcher/

Figure 7. Ubuntu 18.04

2-2-2)CUDA 10

CUDA 10 설치와 GPU 관련 명령어나 버젼 확인은 다음 링크를 참고 바란다.
https://velog.io/@qaszx1004/GPU

2-2-3) ROS Melodic

ROS Melodic install : http://wiki.ros.org/melodic/Installation/Ubuntu

2-2-4) Autoware 1.14

2021년 10월 기준 제일 최신 버전인 1.14버전을 설치한다.
그 전에 의존성 패키지들을 설치한다.

$ sudo apt update
$ sudo apt install -y python-catkin-pkg python-rosdep ros-$ROS_DISTRO-catkin
$ sudo apt install -y python3-pip python3-colcon-common-extensions python3-setuptools python3-vcstool
$ pip3 install -U setuptools
$ mkdir -p autoware.ai/src
$ cd autoware.ai
$ wget -O autoware.ai.repos "https://gitlab.com/autowarefoundation/autoware.ai/autoware/raw/1.12.0/autoware.ai.repos?inline=false"
$ vcs import src < autoware.ai.repos 
$ rosdep update 
$ rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO 

❗ 만약 vcs 명령어가 작동 안된다면, vcstool이 없는 것이다.
다음 명령으로 vcstool을 설치하고 넘어가자.

$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
$ sudo apt-key adv --keyserver hkp://pool.sks-keyservers.net --recv-key 0xB01FA116
$ sudo apt-get update
$ sudo apt-get install python3-vcstool

❗ 만약 colcon 명령어가 작동 안된다면, colcon tool을 깔아주자.

sudo apt install python3-colcon-common-extensions

Autoware에서 원하는 gcc, g++ 설치를 위해 Ubuntu18.04에 있는 것 말고 Autoware에서 원하는 버젼으로 매칭하는 작업이 필요하다.(g++ 7, gcc 7)
g++ 7 설치 및 gcc 7 설치

sudo apt-get install g++-7
sudo apt-get install gcc-7

g++ 등록 및 gcc 등록

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 40
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 40

우선 순위 등록

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

CUDA 지원 버전으로 컴파일을 다음 코드로 진행한다.(autoware.ai 파일 디렉토리에서 진행할 것)

$ AUTOWARE_COMPILE_WITH_CUDA=1 colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release

❗ 아래 명령으로 루트 권한으로 SD에 파일을 쓰거나 수정 가능하다. 권한이 필요한 파일을 복사하거나 수정할 때 이용하자.

$ sudo nautilus

❗ CMake Error at CMakeLists.txt:3 (project): No CMAKE_Fortran_COMPILER could be found. 혹은 test 파일을 실행시키는데 불가능하다고 오류가 뜬다면 아래와 같은 코드를 실행시키고 다시 설치한다.

$ sudo apt install gfortran

❗ ndt_gpu에서 에러가 난다면, eigen3의 버젼이 맞지 않아서 그렇다.

우선 다음을 입력하여 eigen3 버젼을 확인한다.

$ pkg-config --modversion eigen3


Autoware를 사용하기 위해서는 최소 3.3.7 버젼으로 되어 있어야 한다.
eigen 3.3.7에서 다운 받아준다.
그리고 eigen 폴더를 만들어서 eigen 3.3.7 폴더 내 하위 폴더를 옮겨 준다. 그 후, eigen 폴더 내에서 build 폴더를 생성한 뒤 build 터미널에서 다음 명령을 해준다.

$ cmake .. && make 
$ sudo make install 
$ rm -rf eigen


이제 eigen 3.3.7은 설치가 되었다.

위에서 설치한 Eigen Version으로 바꾸여야 한다.
/usr/local/share/eigen3/cmake의 File을 살펴보게 되면
Eigen3Config.cmake, Eigen3Targets.cmake, Eigen3ConfigVersion.cmake, UseEigen3.cmake 4개의 File이 존재하게 된다.
Eigen3Config.cmake: 32번째 Line -> : set (EIGEN3_VERSION_STRING “3.3.7”)
설치한 Eigen의 Version이 위와 같이 3.3.7인 것을 확인하면
/usr/local/share/eigen3/cmake 의 모든 File을 /usr/lib/cmake/eigen3로 복사한다.
그 뒤 컴파일을 진행한다.
만약 권한이 부족하여 복사나 붙여넣기가 안된다면,

$ sudo nautilus

명령어로 폴더를 띄워 복사 및 붙여넣기를 하자.
❗ velodyne_pointcloud/point_type.h 파일이 없다는 에러가 날 경우
기존 velodyne/velodyne_pointcloud/include에 Wooogiee Github의 point_type.h를 넣어주자.

마지막으로 ARM(Autoware Runtime Manager)가 실행되는지 확인한다.

cd autoware.ai
source install/setup.bash
roslaunch runtime_manager runtime_manager.launch

2-3) Demo simulation

2-3-1) Demo data Download

Autoware에서 제공하는 Demo를 돌리기 위해서는 2개의 Demo data가 필요하다.

Autoware.ai Rosbag demo
Download the sample 3D pointcloud/vector map data:

wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_data.tar.gz

Download the sample ROSBAG data (LiDAR: VELODYNE HDL-32E, GNSS: JAVAD GPS RTK Delta 3):

wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_150324.tar.gz

위에서 2개의 Data를 Download를 ~/Dwonload Directory에 받았다고 가정하고 Demo를 실행하여 본다.
Demo RUN은 다음의 과정을 거친다.
.autoware Directory를 생성 후 ~/Download Directory안의 Data를 옮겨온다.

cd ~
mkdir .autoware
cd .autoware
cp ~/Downloads/sample_moriyama_* .
tar zxfv sample_moriyama_150324.tar.gz
tar zxfv sample_moriyama_data.tar.gz

2-3-2) ARM run

ARM을 실행시킨다.

cd autoware.ai
source install/setup.bash
roslaunch runtime_manager runtime_manager.launch

❗ 단 User를 Root로 하여서 실행하였을 경우에는 Error가 발생하면서 작동되지 않는다.

2-3-3) ARM 조작

Autoware Demo를 실행시키기 위하여 다음과 같은 과정이 필요하다.
Simulation Tab 선택 -> Ref누른 뒤 압축해제한 sample_moriyama_150324.bag 선택 -> StartTime 140 설정 -> Play -> Pause

2-3-4) RVIZ 실행

ARM 우측 하단에 RViz 클릭 -> File -> Open Config 클릭
autoware.ai/src/autoware/documentation/autoware_quickstart_examples/launch/rosbag_demo/default.rviz선택

2-3-5) Launch 적용

ARM 왼쪽 상단에 Quick Start 클릭
autoware.ai/src/autoware/documentation/autoware_quickstart_examples/launch/rosbag_demo/에서 해당되는 각각의 .launch File Mappling

2-3-6) Rviz 재실행

Pause를 해제하면 다음과 같은 결과를 얻을 수 있다.

2-4) Connect Sensor

📢작성중..

2-4-1) Build-up sensor (Camera & Lidar)

3.Mapping

3-1)Mapping and Matching


Autoware 설치 참조

profile
자율주행에 관심이 있으며, Lidar SLAM을 공부하고 있습니다. [개인 홈페이지 : https://woogiee.wixsite.com/youngwooklee]

0개의 댓글