ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Autoware 집중 공략! (1) 설치하기
    ROS & Autoware 2019. 6. 2. 22:41

    Autoware에 대해 소개한 글이 별로 없는것 같아 해당 오픈소스를 분석하고 활용한 경험을 공유하기 위해 글을 남깁니다.

    Autoware는 오픈소스 소프트웨어로 일본의 Tier IV를 통해 관리되고 있는 자율주행 개발 / 시뮬레이션 소프트웨어 입니다.

    오픈소스이기 때문에 소스코드는 Github (https://github.com/autowarefoundation/autoware)에서 코드를 내려 받을 수 있으며 이 글을 쓰는 시점에는 1.12 버전까지 출시되었네요.

     

    하드웨어 스펙 요구 사항은 아래와 같습니다.

    Recommended System Specifications

    • Number of CPU cores: 8
    • RAM size: 32GB
    • Storage size: 64GB+

    사양이 어마무시한데 그 이유는 프로그램들이 병렬적으로 실행되며 많은 컴퓨팅 파워를 필요로 하는 알고리즘들이 많고 특히 PointCloud로 구성되어 있는 3D 맵으로 인해 메모리 자원을 많이 필요로 합니다.

     

    Autoware의 특징이라면

    1. ROS로 구현되어 있다.

    2. 자율주행 소프트웨어 개발에 필요한 다양한 ROS 패키지들을 모아놨다.

    3. Data를 통해 Simulation이 가능하다

    4. Ubuntu 16.04(Xenial Xerus) 버전에서 실행해야 온전히 실행할 수 있다. (RHEL 계열은 ㄴㄴ)

    정도로 볼 수 있겠습니다.

     

    여기서 가장 중요한 점은 Autoware는 ROS로 구현되어 있다는 점입니다.

    때문에, Autoware를 잘 다루기 위해서는 ROS에 대한 깊은 이해가 선행되어야 할 것입니다.

     

    아래는 Autoware에서 설명하는 Autoware의 구조도입니다. 크게 Sensing, Computing, Actuation 3개의 모듈로 구성되어 있습니다.

    Autoware 구조도

    Sensing 모듈은 카메라, 라이다, IMU, GPS, Radar 같이 하드웨어 센서들의 드라이버와 구동 스크립트들이 위치하고 있습니다. (유명하거나 많이 사용되는 ROS Driver 들이 설정되어 있습니다.)

    Computing 모듈은 GPS, 라이다 센서 데이터를 통해 현재 자신의 위치를 측위하는 Localization, 카메라 이미지, 라이다 PointCloud 등의 데이터를 사용하여 장애물을 탐지하는 Object Detection 알고리즘들로 구성되어 있습니다.

    Actuation 모듈은 전자 신호로 차량을 제어할 수 있게 CAN 신호를 전달하는 프로그램으로 구성되어 있습니다.

    부가적으로 Data, Socket, System, Util 등의 모듈이 있습니다.

     

    자~ 그럼 이제 Autoware의 구조를 간략하게 살펴보는건 끝났군요.

     

    Autoware를 사용해보기에 앞서 우선 설치를 해야겠지요? 어떻게 설치해야 할까요?

    개발자들이 항상 뭔가 처음 시도할때 가~~~장 많이 막히고 애먹는 부분이 환경설정인것 같습니다. 이에 대해 설명하려고 합니다.

     

    우선 이에 앞서 몇가지 선행 지식을 소개하겠습니다.

    Autoware는 Linux(Ubuntu)를 기반으로 동작하기 때문에 필연적으로 Linux에 대한 배경지식이 있어야 수월하게 접근할 수 있습니다. 특히 리눅스의 패키지에 대한 개념(패키지 매니저, 패키지 파일 등)과 (bash, sh) 쉘 스크립트 작성 방법, 빌드 시스템(CMake, Catkin, Colcon 등)에 대한 이해가 필요합니다. 이에 대한 자료는 구글링을 통해 풍부하게 찾으실 수 있으니 여기서는 간략하게 설명만 하도록 하겠습니다.

     

    Autoware 설치 준비물

    - 우분투 16.04 LTS 이미지가 설치된 사양 좋은 컴퓨터(ARM 계열 시스템에도 사용은 가능하지만 가급적 x86 계열 시스템을 추천합니다!)

     

     

    1. ROS 설치하기

    Autoware는 ROS를 기반을 동작한다는 것을 위에서 설명했습니다. 그래서 우선적으로 ROS를 설치해야합니다.

    ROS 또한 프로그램이기 때문에 우분투 버전에 맞춘 버전을 가지고 있습니다.

    우분투 버전 처럼 ROS 버전 또한 다양하다

    우분투 버전 처럼 참 다양한 버전을 가지고 있지요?

     

    18.04를 지원하는 Melodic과 17.04를 지원하는 Lunar 같이 각 우분투 버전, 16.04를 지원하는 ROS 버전은 Kinetic 이라는 이름을 가지고 있어요.

    저희는 16.04를 사용하기 때문에 ROS Kinetic 버전을 설치해야 합니다.

     

    순서대로 스크립트를 설명하도록 할게요~

    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

    /etc/apt/sources.list.d/ros-latest.list 파일에 deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main 문자열을 추가합니다.

    sources.list는 패키지 정보를 담고 있는 패키지 서버들의 주소를 가지고 있답니다~

    sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

    패키지에 대한 정보는 sources.list에 등록되었지만 다운로드 되지는 않을겁니다. 왜냐하면 우분투 keyserver에 해당 패키지에 대한 공개키가 등록되지 않았기 때문에 해당 패키지가 인정받은 패키지인지 확인하는 과정이 필요합니다. 이때 공개키를 등록해주는 스크립트가 위입니다.

    sudo apt-get update

    apt 명령어가 참조하는 source.list의 변경내역을 갱신하는 명령어입니다. update를 통해서 비로소 sources.list에 있는 내역들이 반영됩니다!

    sudo apt install ros-kinetic-desktop-full

    apt 명령어가 참조하는 변경내역이 성공적으로 갱신되었다면 install 명령어를 통해 새롭게 추가된 패키지들을 확인할 수 있습니다.

    ROS는 굉장히 다양한 프로그램들로 이루어진 소프트웨어이기 때문에 필요에 따라 부분적으로 설치할 수 있습니다.

    하지만 저희는 모든 프로그램들을 가지고 있는 ros-kinetic-desktop-full 패키지를 설치하도록 하겠습니다.

     

    용량이 상당(몇기가)하기 때문에 꽤 시간이 오래 걸린답니다.. 차분하게 기다려줍시다! ㅋㅋ

    ROS 패키지는 /opt/ros/해당 버전 밑에 설치됩니다.

    sudo rosdep init

    rosdep init 명령어를 실행하면 /etc/ros/rosdep/sources.list.d/20-default.list 파일이 생성됩니다.

    이것 역시도 sources.list를 설정하는 부분입니다.

     

    rosdep update

    rosdep update를 통해 rosdep의 sources.list에 있는 내용을 반영합니다.

     

    2. CUDA 9.0 & NVIDIA-384 드라이버 설치

     

    sudo apt install nvidia-384
    sudo apt install cuda-9-0

    https://igotit.tistory.com/entry/CUDA-Toolkit-8-Ubuntu-16-%EC%84%A4%EC%B9%98

     

     

    설치가 끝나면

    echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
    
    echo "CUDA_HOME=/usr/local/cuda" >> ~/.bashrc
    echo "PATH=$PATH:/usr/local/cuda/bin" >> ~/.bashrc
    echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64" >> ~/.bashrc
    
    source ~/.bashrc

    .bashrc 파일은 터미널을 실행시킬때 실행되는 쉘 스크립트입니다. 

    source 명령어는 따라오는 파일의 내용을 현재 스크립트에 포함시키는 명령어 입니다.

    setup.bash 파일은 ROS-kinetic을 사용하기 위해 필요한 환경변수와 설정이 들어 있습니다.

     

    3. Github에서 Autoware 소스코드 내려 받기

     

     

     

    ros의 설치가 끝나도 전부 끝난건 아닙니다~! 왜냐하면 ros-kinetic-desktop-full로 많은 패키지들을 설치했어도 아직 많은 ROS 패키지들을 더 설치해야하기 때문이죠 (ROS Package 찾는게 사실 일입니다. ㅋㅋ)

    그러기 위해서 우선 git에서 Autoware 소스코드들을 다운로드 받아줍시다. (서브모듈들도 받아주세요)

    git clone https://github.com/CPFL/Autoware.git --recurse-submodules

    sudo apt update
    
    sudo apt install -y python-catkin-pkg python-rosdep python-wstool ros-kinetic-catkin libmosquitto-dev gksu
    sudo apt install -y python3-pip python3-setuptools
    sudo pip3 install -U setuptools
    sudo apt install -y python3-colcon-common-extensions

    빌드에 필요한 패키지들을 설치합니다.

     

    이제 autoware 디렉토리 내부의 ros 폴더로 들어가주셔야 합니다. 왜냐하면 catkin workspace가 ros 디렉토리 내부에 있기 때문이에요.

    ros 디렉토리에서 아래 명령어를 실행하면 catkin workspace에 종속이 설정되어 있는 패키지들이 추가적으로 설치됩니다!

    cd ~/Desktop/autoware/ros/
    rosdep update
    rosdep install --from-paths src --ignore-src --rosdistro kinetic -y -r
    ./colcon_release

    만약 이런 명령어가 없었다면..... 모든 패키지들을 하나하나 찾아서 설치해야 할 상상을 하니 생각만해도 끔찍하군요...

    하지만 ./colcon_release 를 통해 빌드를 시작하면 에러가 날겁니다.

    colcon_release 스크립트는 빌드할때 ROS 패키지들에 대한 환경변수 설정이 없어서 패키지들을 찾지 못해 에러가 나는겁니다.

    아래와 같이 colcon_release 파일 내부에 source /opt/ros/kinetic/setup.bash를 파일에 추가하여 환경변수를 설정한 후에 빌드를 해줘야 정상적으로 빌드됩니다. ㅎㅎ

    이렇게 추가 패키지들이 설치되고 나면 비로소 Autoware 빌드가 가능해집니다.

    ros 디렉토리 내부에 colcon_release 말고도 catkin_make_release 스크립트 파일이 있을 수도 있는데 legacy 시스템에 대한 호환을 위해 남겨놓은 스크립트입니다. Autoware는 빌드에 colcon 말고도 catkin을 사용하기도 합니다. catkin은 Autoware 버전 1.10 이하까지 지원하던 빌드 시스템입니다.

    프로젝트에서 사용하는 종속 패키지는 거의 같으므로 어떤 시스템을 사용하던 빌드에는 크게 영향을 미치지 않습니다.

    단지 1.11 버전부터는 colcon 을 사용하는 것이 권장되고 있습니다.

     

    빌드가 끝나면 run 스크립트를 실행함으로써 ROS 노드 간의 통신을 중계하는 roscore와 Autoware 노드들을 GUI를 통해 제어할 수 있게 만들어 놓은 Runtime Manager를 실행시켜 Autoware를 실행할 수 있습니다.

    구동된 roscore

     

    runtime manager는 node들을 제어할 때 사용되는 gui 스크립트 입니다.

     

     

    Docker를 통해 설치하는 것도 좋은 방법입니다.

    만약 수십대의 컴퓨터에 Autoware를 설치해야 한다면 이 과정을 수십번을 반복해야 하는데 한두번은 몰라도 계속하면 굉장히 소모적이고 지루한 작업이죠..ㅋㅋ

    Dockerfile을 통해 일반화 시킬 수 있답니다. (이 부분은 추후에 Dockerfile 설정과 함께 같이 다뤄보겠습니다.) (하지만 하드웨어 구성이나 아키텍쳐가 다르면 변경이 필요 할 겁니다.)

     

     

    다음 챕터에서는 Autoware가 무엇으로 구성되어 있는지 살펴보고 TierIV에서 제공하는 Moriyama 샘플을 활용하여 시뮬레이션 해보겠습니다.

     

    Autoware 공식 메뉴얼 (Autoware의 구조에 대한 상세한 설명입니다)

    https://github.com/CPFL/Autoware-Manuals/blob/master/en/Autoware_UsersManual_v1.1.md

     

     

    Moriyama Sample ROSBAG Data

    http://db3.ertl.jp/autoware/sample_data/sample_moriyama_150324.tar.gz

     

    Moriyama Sample Route File

    http://db3.ertl.jp/autoware/sample_data/sample_moriyama_data.tar.gz

     

    'ROS & Autoware' 카테고리의 다른 글

    Autoware 집중 공략! (2) 사용해보기  (0) 2019.06.09
Designed by Tistory.