SVL simulator는 자율주행 시뮬레이터다. 차량이나 여러 센서 등을 가상의 테스트베드에서 주행하고, 보행자나 다른 차량을 움직이게 하여 시나리오 구성이 가능하다.
원래 7월 30일에 서비스를 종료한다고 되어있어, 망한 글이 될 예정이었으나 12월인 현재까지도 서버가 살아있어 그냥 올리기로 한다. 무료이기도 하고 센서 설정 등을 다양하게 할 수 있어 무료인 자율주행 시뮬레이터를 찾는 사람에게 추천한다.
내가 구현한 LKAS (Lane Keeping Assistance System) 모듈을 SVL simulator에서 제공하는 CubeTown map에서 실행하여 차선을 따라가도록 하는 Demo다. Autoware를 이용해서 차를 굴리는 매뉴얼은 이후의 글에서 소개하겠다.
사실 아래의 과정들이 내 repo에도 똑같이 소개가 되어있으나, 한글로 쓰는김에 조금 더 자세히 써보겠다.
SVL Simulator 에 들어가서 simulator를 다운받고 압축을 해제한 뒤 simulator
파일을 실행한다. 참고로 SVL은 windows와 linux에서 모두 실행 가능하며 동일한 방법으로 simulator
파일을 열기만 하면 된다.
LINT TO CLOUD를 누르면 자동으로 wise.svlsimulator.com 사이트가 열린다. WISE (web user interface, 왜 약자가 WISE?)는 이름처럼 web 상에서 차량이나 센서를 설정할 수 있게 하는 UI다. 이후의 실행에서는 Open Browser라고 버튼 이름이 바뀐다.
WISE 사이트에서 회원가입을 하고 로그인을 한다.
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_cubetown_base.py
파일의 ASSET_ID 변수를 5에서 복사한 값으로 넣어준 뒤 실행한다. 올바르게 실행된 경우 그림처럼 맵과 차량이 잘 로딩된다.
이제 시뮬레이터는 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
등의 명령어로 확인하는 것도 가능하다.
LKAS module을 위해 필요한 패키지들을 설치한다.
pip3 install sckit-build opencv-python rospkg
이후 config
폴더 내의 config-svl.yaml
파일을 복사하여 이름을 config
로 설정한다.
LKAS 모듈과 actuation topic을 publish하는 모듈을 각각 다른 터미널에서 실행한다.
python3 lkas.py
python3 vehicle_cmd_publisher.py
위 과정을 잘 따랐다면 현재 열린 터미널은 총 4개다.
lkas.py
vehicle_cmd_publisher.py
아래처럼 잘 굴러가는 것을 확인할 수 있다.