RTK-GNSS Test & Setting [Part 2]

RTK-GNSS 테스트 및 세팅

Featured image

RTK-GNSS TEST & Setting Series (Click to Redirect!)


연구 초창기에 RTK-GNSS를 테스트하고 세팅한 과정을 기록하고 있다.

이번 Part에서는 nmea를 파싱하고 ros topic으로 publish해주는 driver를 이용해보고, mapviz를 이용한 시각화를 진행한 내용을 설명하고자 한다.

모든 환경은 ROS-melodic, Ubuntu 18.04를 기준으로 테스트 되었다.

1. ROS NMEA Driver 사용해보기

NMEA는 시간, 위치, 방위 등의 정보를 전달하는 규격 중 하나이다.

다행히도, ROS에서 nmea 값을 값을 파싱하고 publish해주는 패키지가 존재한다.

우리가 이용할 드라이버는 nmea_navsat_driver이다.

How to install

$ sudo apt-get install ros-melodic-nmea-navsat-driver

apt-get을 이용하여 손쉽게 설치할 수 있다.

How to run

$ rosrun nmea_navsat_driver nmea_serial_driver _port:=/dev/ttyUSB0 _baud:=115200  

MRP-2000이 지원하는 baudrate가 115200이기 때문에 _baud:=115200 라는 조건을 붙였다.
기기가 어떤 포트에 연결되었는지에 따라 _port:=/dev/ttyUSB0 에서 ttyUSB0 부분을 맞게 수정해주면 된다.

아마 에러가 날 것이다.

[FATAL] [1587321012.247533]: Could not open serial port: I/O error(13): could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0'

근데 포트를 open할 수 있는 권한이 주어져 있지 않아 에러가 발생한다.

$ sudo chmod 666 /dev/ttyUSB0 chmod로 권한을 주어 해결할 수 있다.

근데 chmod의 경우 재부팅을 할 때마다 재입력을 해주어야한다.

$ sudo usermod -a -G dialout $USER

위 구문을 통해 영구적으로 권한을 줄 수 있다. 처음엔 이 방법을 이용하였었는데, 나중엔 symlink를 통하여 해결하였다.
symlink와 관련해서는 추후에 다른 글로 설명해보겠다.

아무튼 권한을 준 후에 다시 rosrun하면 정상적으로 실행될 것이다.

어떤 topic들이 발행되나요?

위와 같은 topic들이 발행됩니다.

topic name을 통해서 어느정도 예측은 되시겠지만, 자세한 설명을 보고 싶다면 nmea_navsat_driver위키를 참고하세요!

뭐..일단 초기 테스트에서는 위치정보를 담고 있는 /fix만 이용하였다.

rostopic echo를 통해 /fix에서 발행되고 있는 값을 한 번 보자.

$ rostopic echo /fix

살펴보면 latitude, longitude, altitude가 보이는데 당연히 요걸로 위치를 파악할 수 있다. 3개는 전부 float64 타입이다.

근데 저 숫자들을 보고 우리가 어디에 있는지 상상할 수 있는가? 개인적으로 불편해서 점 찍어주는 방법을 찾아봤다.

그 해답은 mapviz에 있었다.

2. Mapviz 사용해보기

Mapviz는 ROS 기반의 visualization tool이다.

How to install

$ sudo apt-get install ros-melodic-mapviz ros-melodic-mapviz-plugins ros-melodic-tile-map ros-melodic-multires-image

Mapviz도 apt-get을 이용하여 손쉽게 설치할 수 있다.

How to run

$ roslaunch mapviz mapviz.launch

창이 하나 떴을 것이다.

하단의 Add를 눌러서, tile_map을 추가하자.
말 그대로, tile map을 띄워주는 것인데 기본값은 Stamen (terrain)이다. 근데 이게 한국에서만 그런지 몰라도, 일정 수준 이상으로 확대하면 네트워크 에러를 뿜으며 작동하지 않는다. 나중에 구글 위성지도로 교체할 것이다.
일단 테스트만 해보자.

또 Add를 눌러서, navsat를 불러오자.
Topic 옆에 Select를 눌러서 /fix를 추가한다.

Draw Style을 points로 바꾸고, 지도를 열심히 옮겨 자신의 위치를 찾아 확대해보자.
아까도 말했듯이 일정수준 이상으로 확대를 못한다… 대충 된다는 것만 보자.
점이 영롱하게 내 위치에 찍힌다!

구글 위성지도로 교체(optional)

Mapviz에서는 WMTS를 이용하는데, 더 좋은 지도가 있으면 그걸 쓸거다.
일단 지금으로써는 구글 위성지도만 작동을 확인해서 이걸로 했다.

STEP 1
$ mkdir ~/mapproxy
$ sudo docker run -p 8080:8080 -d -t -v ~/mapproxy:/mapproxy danielsnider/mapproxy

아, 근데 Docker가 설치되어 있어야한다. 없으면 설치하고 오자. 나는 이거보고 깔았다.

STEP 2

Mapviz를 열고, tile_map의 Sources에서 Custom WMTS Source…를 누르자. Base URL에 아래의 구문을 입력 후, Max Zoom은 19로 설정한 뒤 Save한다.

http://localhost:8080/wmts/gm_layer/gm_grid/{level}/{x}/{y}.png

쨘! 그럼 구글 위성지도가 뜨고 확대도 아주 잘 된다~

3. 실제 테스트 영상

Video1

위 썸네일을 클릭하면 Youtube링크로 이동된다. 차량에 gps를 붙이고, 실시간으로 mapviz에 현재 위치를 찍어본 영상이다.

Video2

위 영상은 rosbag으로 데이터를 저장해놓고 나중에 play하며 찍어본 영상이다.

영상을 보면 알겠지만, 점이 상당히 느리게 찍힌다.
대략 1hz 정도로 보이는데 스펙상 GNSS를 사용할때는 8hz, GPS만 사용할때는 20hz까지 출력이 가능하기에 이 문제를 해결하는 법에 대해서는 part 3에서 작성해보겠다.

참고자료


RTK-GNSS TEST & Setting Series (Click to Redirect!)