3 min to read
RTK-GNSS Test & Setting [Part 2]
RTK-GNSS 테스트 및 세팅
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들이 발행되나요?
- fix (sensor_msgs/NavSatFix)
- vel (geometry_msgs/TwistStamped)
- time_reference (sensor_msgs/TimeReference)
위와 같은 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. 실제 테스트 영상
위 썸네일을 클릭하면 Youtube링크로 이동된다. 차량에 gps를 붙이고, 실시간으로 mapviz에 현재 위치를 찍어본 영상이다.
위 영상은 rosbag으로 데이터를 저장해놓고 나중에 play하며 찍어본 영상이다.
영상을 보면 알겠지만, 점이 상당히 느리게 찍힌다.
대략 1hz 정도로 보이는데 스펙상 GNSS를 사용할때는 8hz, GPS만 사용할때는 20hz까지 출력이 가능하기에 이 문제를 해결하는 법에 대해서는 part 3에서 작성해보겠다.
참고자료
- https://wiki.ros.org/nmea_navsat_driver
- https://autoware.readthedocs.io/en/feature-documentation_rtd/DevelopersGuide/PackagesAPI/sensing/scripts.html
- https://www.youtube.com/watch?v=zTrzr5BhH-8
- https://blog.naver.com/chandong83/220780876639
- http://wiki.ros.org/mapviz/Plugins
- https://github.com/swri-robotics/mapviz/blob/master/README.md
- https://github.com/solosito/MapViz-Tile-Map-Google-Maps-Satellite
- https://blog.cosmosfarm.com/archives/248/%EC%9A%B0%EB%B6%84%ED%88%AC-18-04-%EB%8F%84%EC%BB%A4-docker-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95/