SVL Simulator Tutorial 1: ROS 연동 및 LKAS

한종우·2022년 12월 2일
0

SVL Simulator란?

SVL simulator는 자율주행 시뮬레이터다. 차량이나 여러 센서 등을 가상의 테스트베드에서 주행하고, 보행자나 다른 차량을 움직이게 하여 시나리오 구성이 가능하다.
원래 7월 30일에 서비스를 종료한다고 되어있어, 망한 글이 될 예정이었으나 12월인 현재까지도 서버가 살아있어 그냥 올리기로 한다. 무료이기도 하고 센서 설정 등을 다양하게 할 수 있어 무료인 자율주행 시뮬레이터를 찾는 사람에게 추천한다.

Requirement

  • 고사양 GPU (1080 이상에서 작동되는 것으로 추정)
  • Python 3.X
  • Ubuntu (windows에서도 SVL 실행은 가능하나 ROS 설치가 복잡해서 ubuntu를 추천한다)
  • ROS (본 글에서는 Ubuntu 18.04를 사용하여 ROS Melodic version을 설치했다.)

LKAS Demo 매뉴얼

내가 구현한 LKAS (Lane Keeping Assistance System) 모듈을 SVL simulator에서 제공하는 CubeTown map에서 실행하여 차선을 따라가도록 하는 Demo다. Autoware를 이용해서 차를 굴리는 매뉴얼은 이후의 글에서 소개하겠다.
사실 아래의 과정들이 내 repo에도 똑같이 소개가 되어있으나, 한글로 쓰는김에 조금 더 자세히 써보겠다.

  1. SVL Simulator 에 들어가서 simulator를 다운받고 압축을 해제한 뒤 simulator 파일을 실행한다. 참고로 SVL은 windows와 linux에서 모두 실행 가능하며 동일한 방법으로 simulator 파일을 열기만 하면 된다.

  2. LINT TO CLOUD를 누르면 자동으로 wise.svlsimulator.com 사이트가 열린다. WISE (web user interface, 왜 약자가 WISE?)는 이름처럼 web 상에서 차량이나 센서를 설정할 수 있게 하는 UI다. 이후의 실행에서는 Open Browser라고 버튼 이름이 바뀐다.
    WISE 사이트에서 회원가입을 하고 로그인을 한다.

  1. WISE 사이트에 처음 접속하는 PC라면 cluster를 추가하라는 창이 로그인하자마자 뜰 것이다. cluster란 시뮬레이터가 실행되는 컴퓨터를 의미한다. 이름을 적어주고 추가한다.

  1. Vehicles tab으로 들어가면 3개의 기본적으로 제공하는 차량 모델이 보일 것이다. Lexus2016RXHybrid을 선택하고 Sensor Configurations 옆의 버튼을 누른다. 차량에 있는 sensor의 설정 파일들을 제공하는데 기본적으로 제공하는 것 외에 public으로 만든 다른 사람들의 설정 파일도 보여서 개수가 상당히 많다. 이중에 기본으로 제공하는 Autoware AI configuration를 clone한다. ROS를 사용할 것이므로 Bridge가 ROS로 되어있는지 확인한다. Access Type을 private으로 안하면 다른 사람들의 설정 파일처럼 모든 사람에게 공개되니 private으로 하는 것을 추천한다.
  1. 카메라를 통해 차선을 인식해서 주행할 것이므로 카메라 세팅을 해야 한다. Main Camera의 설정을 아래처럼 해주고 저장한다. 위쪽에 차량과 센서 위치에 대한 UI도 제공되어 X, Y, Z를 바꾸면 UI 상의 카메라 위치가 바뀌는 것을 확인할 수 있다. 참고로 X는 차량의 앞쪽 방향이며, Y는 오른쪽 방향, Z는 위쪽 방향이다.

  1. 각 설정 파일은 고유한 Asset ID를 가진다. ID 버튼을 누르면 asset ID를 복사할 수 있다. 이후에 이 asset ID를 사용할 일이 있으니 복사해두도록 하자.

  1. Simulations 탭에 들어가서 Add New 버튼을 누른다. 내용은 아래처럼 채운다. API Only는 python 스크립트로 시뮬레이션을 실행하겠다는 의미이다. 스크립트로 실행하게 되면 차의 spawn 위치를 정하거나 장애물을 추가하는 등의 작업을 파일로 할 수 있다.
    • Simulation Name: 맘대루
    • Cluster: 3에서 만든 cluster를 선택한다.
    • Runtime Template: API Only

  1. Run Simulation으로 시뮬레이션을 실행하면 API Only로 실행중이라는 메시지가 시뮬레이터 창에 뜬다. 이제 python 스크립트를 실행하기 위해 Vision-Lane-Keeping repo의 코드를 다운받는다. 이후 SVL과 관련된 설치파일들을 설치한다. pip install을 할때 에러 메시지가 뜨는데 설치는 잘 되는 경우도 있으니 8번 과정을 해보고 잘 되면 넘어가자.

    git clone https://github.com/Spiraline/Vision-Lane-Keeping
    cd Vision-Lane-Keeping
    cd svl/setup
    python3 -m pip install -r requirements.txt --user .

  1. 1_cubetown_base.py 파일의 ASSET_ID 변수를 5에서 복사한 값으로 넣어준 뒤 실행한다. 올바르게 실행된 경우 그림처럼 맵과 차량이 잘 로딩된다.
    처음 실행하는 경우 asset을 다운받아야해서 시간이 좀 걸린다. 이후의 실행에서는 거의 바로 실행된다. 차량은 방향키로 움직일 수 있으며, 후진의 경우 아래 방향키가 아니라 Page Down 버튼으로 후진 기어로 바꾸고 앞 방향키를 눌러야 한다 (Drive 기어는 Page Up이다). 참고로 센서 설정에서 Keyboard Car Control이 있어야 키보드를 통한 제어가 가능하다 (기본적으로 있다).

  1. 이제 시뮬레이터는 websocket으로 센서에서 수집된 데이터를 전송하고 있는 상태다. 우리는 ROS topic으로 이를 subscribe할 것이기 때문에 데이터를 ROS topic 형태로 변환해주는 rosbridge를 실행한다.

    [설치 스크립트]

    sudo apt-get install ros-melodic-rosbridge-suite ros-melodic-autoware-msgs ros-melodic-nmea-msgs -y

    autoware_msgs의 경우 actuation topic이 포함되어있어 필요하며, nmea_msgs의 경우 GPS를 쓸 것이 아니라면 필요는 없지만, rosbridge 실행 시 없으면 warning이 계속 뜨기 때문에 그냥 다 설치하자.

    [rosbridge 실행]

    roslaunch rosbridge_server rosbridge_websocket.launch

    시뮬레이터 창에서 plug 모양의 아이콘을 누르면 Bridge Tab이 열리는데, PUB에 해당하는 topic들의 Count가 올라가면 성공적으로 들어오고 있는 것이다. rostopic list 등의 명령어로 확인하는 것도 가능하다.

  2. LKAS module을 위해 필요한 패키지들을 설치한다.

    pip3 install sckit-build opencv-python rospkg
  3. 이후 config 폴더 내의 config-svl.yaml 파일을 복사하여 이름을 config로 설정한다.

  4. LKAS 모듈과 actuation topic을 publish하는 모듈을 각각 다른 터미널에서 실행한다.

    python3 lkas.py
    python3 vehicle_cmd_publisher.py

    위 과정을 잘 따랐다면 현재 열린 터미널은 총 4개다.

    • rosbridge_websocket ( + roscore)
    • SVL script를 실행하는 터미널
    • lkas.py
    • vehicle_cmd_publisher.py

Demo 영상

아래처럼 잘 굴러가는 것을 확인할 수 있다.

Ref

[1] SVL Simulator Homepage
[2] Vision-Lane-Keeping repo

profile
고양이를 좋아하는 개발자

0개의 댓글