직관적인느낌

U-blox, RTK - GPS 사용하기 (with ROS) - RTK 활성 본문

공학/시스템 설치 및 설정

U-blox, RTK - GPS 사용하기 (with ROS) - RTK 활성

범슐랭 2023. 3. 17. 17:30
728x90

" RTK - GPS 활성화 하기 " 


1. 국토지리정보원 회원가입


우리나라에서 RTK 신호를 사용하기 위해서는 국토지리정보원의 국토정보플랫폼을 이용 해야 한다.

국토지리정보원


네트워크 RTK 회원가입을 하기 위해 국토정보플랫폼의 네트워크 RTK 서비스 에 접속한다.

 

 

방금 생성한 계정으로 로그인한 뒤, VRS ID 란에 아이디를 생성한다.
비밀번호는 입력하지 않는다.
보다 자세한 절차는 링크(http://koseco.co.kr/ngii_rtk/)를 참고하자.

 


2. ntrip client 패키지 설치


RTK 신호를 사용하려면,  ntrip client를 지원하는 패키지 설치가 선행되어야 한다.

 


NTRIP?

NTRIP(Networked Transport of RTCM via Internet Protocol)

직역하자면 '인터넷 프로토콜을 통한 네트워크 전송 RTCM '이다.

RTK 보정 전송 프로토콜로 사용한다.

 

중파신호 매체를 통해 GPS 위치 오차 보정신호를 전송하던 기존 DGPS와는 다르게,

 

지역기반보정시스템(LBAS, Local Based Augmentation System)인
NTRIP은 인터넷 망을 통해 GPS 보정 신호를 전송하는 방식이다.

 

하이퍼텍스트(HyperText) 전송 프로토콜인 HTTP(Hypertext Transfer Protocol)을 기반으로 한다.

NTRIP 서버(server)는 HTTP 서버로서 NTRIP 소스 데이터를 전송하는 주체이며,

NTRIP 클라이언트(client)는 인터넷 접속이 가능한 단말기로 DGPS 데이터를 수신하는 주체이다.

 


DGPS?

Differential GPS

지상기반보정시스템(GBAS, Ground Based Augmentation System) 중 하나로,

대한민국이나 미국 등의 국가에서 쓰인다.

 


RTCM?

(Radio Technical Committee for Maritime Service)

GPS 보정신호를 전송하는 데이터 포맷이다.

 


간단히 말하자면,

ntrip client :  RTCM 스트림을 ROS 토픽으로 받아주는 역할을 하게 될 것이다.

 


cd /catkin_ws/src/ublox_f9p
git clone <https://github.com/ros-agriculture/ntrip_ros>
git clone <https://github.com/tilk/rtcm_msgs>
# 노드가 퍼블리시할 토픽(RTCM 메시지)의 메시지 타입이 필요하여 이 역시 다운 받는다. 
# 해당 패키지는 Message.msg 만 사용하도록 된, 그저 메시지 파일만 담은 패키지이다. 
# 다운이 끝나면 빌드해준다.
cm

 

 

 


3. ublox 스크립트 수정


이전에 설치한 ublox_f9p 패키지의 /ublox/src/node.cpp 파일에는
RTK 보정신호인 RTCM받기 위한 부분이 존재한다.

 

이때 ntrip client 노드에서 퍼블리시 하는 토픽의 이름 & 메시지 타입

ublox 노드서브스크라이브하는 것이 같아야  하므로 이에 대한 수정이 필요하다.

 


토픽 이름 : /ublox_gps/rtcm 

메세지 타입 : rtcm_msgs/Message

 


" 1861 번째 줄 "

 

- 수정 전

param_nh.param("rtcm_topic", rtcm_topic, std::string("rtcm"));

- 수정 후

param_nh.param("/ublox_gps/rtcm", rtcm_topic, std::string("rtcm"));

cm



4 .ntrip launch 파일 수정

Case 1) 


ntrip_ros/launch/ntrip_ros.launch
파일의 빈 곳을 수정하여 RTK 신호를 받을 수 있게 하자.

 

  • rtcm_topic의 value를 아까 설정한 토픽 이름 /ublox_gps/rtcm으로 바꾼다.
  • ntrip_server의 value를 국토정보플랫폼의 접속경로로 변경한다.
  • ntrip_user의 value를 네트워크 RTK의 ID로 한다. 개인정보이므로 아래 코드에서는 ####로 처리했다.
  • ntrip_pass의 value를 네트워크 RTK의 비밀번호로 한다. 본디 따로 설정하지 않고 ngii로 통일되었으므로 ngii라고만 입력해도 된다.
  • ntrip_stream의 value를 VRS-RTCM31로 한다. RTCM3 포맷으로 출력한다는 뜻이다.
  • nmea_gga의 value를 설정한다. NMEA 프로토콜 Sentence이므로 장치 등 GNSS를 사용하기 위한 다양한 정보를 담고 있다. 자세한 사항은 이 링크를 확인하고 입력하자.


cd ~/catkin_ws/src/ublox_f9p/ntrip_ros/launch
gedit ntrip_ros.launch
<?xml version="1.0" encoding="UTF-8"?>

<launch>
 <node pkg="ntrip_ros" type="ntripclient.py" name="ntrip_ros" output="screen">
 	 <param name="rtcm_topic" value="/ublox_gps/rtcm"/>
 	 <param name="ntrip_server" value="vrs3.ngii.go.kr:2101"/>
 	 <param name="ntrip_user" value="####"/>
 	 <param name="ntrip_pass" value="ngii"/>
 	 <param name="ntrip_stream" value="VRS-RTCM31"/>
 	 <param name="nmea_gga" value="$GPGGA,024539.902,3725.1148,N,12641.1118,E,1,12,1.0,0.0,M,0.0,M,,*60"/>
  </node>
</launch>

Case 1) 실행 : Launch [ntrip, ublox]

roslaunch ntrip_ros ntrip_ros.launch
roslaunch ublox_gps ublox_device.launch

 

Case 2) 

 


터미널 하나로 ntrip와 ublox를 동시에 실행해보자

 

그래서 ntrip_ros.launch ublox_device.launch를 불러와(<include> 태그 이용) 하나만 실행해도 동시 실행되도록 해보자.

 

<?xml version="1.0" encoding="UTF-8"?>

<launch>
 # 여기 부분에 include 추가됨
 <include file="$(find ublox_gps)/launch/ublox_device.launch">
  </include>
 <node pkg="ntrip_ros" type="ntripclient.py" name="ntrip_ros" output="screen">
 	 <param name="rtcm_topic" value="/ublox_gps/rtcm"/>
 	 <param name="ntrip_server" value="RTS1.ngii.go.kr:2101"/>
 	 <param name="ntrip_user" value="lbj142632"/>
 	 <param name="ntrip_pass" value="ngii"/>
 	 <param name="ntrip_stream" value="RTK-RTCM32"/>
 	 <param name="nmea_gga" value="$GPGGA,024539.902,3725.1148,N,12641.1118,E,1,12,1.0,0.0,M,0.0,M,,*60"/>
  </node>
</launch>

Case 2) 실행 : Launch [ntrip, ublox]

roslaunch ntrip_ros ntrip_ros.launch

 

 


5 .ntrip + ublox 실행

Case 1) 실행 : Launch [ntrip, ublox]

roslaunch ntrip_ros ntrip_ros.launch
roslaunch ublox_gps ublox_device.launch

 

Case 2) 실행 : Launch [ntrip, ublox]

roslaunch ntrip_ros ntrip_ros.launch

 


6 .Check List

  • topic check :
rostopic list
  • 노드와 토픽 사이의 관계 확인
rqt_graph 
# Dead sinks - 체크 유/무 확인
rostopic echo /ublox_gps/fix

 

- 각 토픽의 메세지들 확인

header: 
  seq: 1081
  stamp: 
    secs: 1661411981
    nsecs: 999612230
  frame_id: "gps"
status: 
  status: 0
  service: 0
latitude: 36.3651546 # 위도, 단위: 도
longitude: 127.3478932 # 경도, 단위: 도 
altitude: 104.396 # 고도 
position_covariance: [1.542564, 0.0, 0.0, 0.0, 1.542564, 0.0, 0.0, 0.0, 3.6024039999999995]
position_covariance_type: 2

/ublox_gps/fix의 자료형은 sensor_msgs/NavSatFix으로,

위도와 경도, 고도 등의 값을 담고 있다.

(Navigation Satellite fix).

 


  • std_msgs/Header header: 시간, 프레임 ID 등 헤더값
  • sensor_msgs/NavSatStatus status: 위성 fix 상태값
  • float64 latitude: 도(degrees) 단위의 위도값. 북쪽이 (+)이고 남쪽이 (-)이다.
  • float64 longitude: 도(degrees) 단위의 경도값. 본초 좌오선의 동쪽이 (+)이고 서쪽이 (-)이다.
  • float64 altitude: 미터(m) 단위의 고도. WGS84형 타원체의 위쪽이 (+) 값
  • float64[9] position_covariance: 접평면에 대한 제곱 미터(m2) 단위의 자세 공분산. 행 우선(row-major order)으로 한 ENU(East, North, Up) 구성요소로 되어 있다.
  • uint8 position_covariance_type
rostopic echo /ublox_gps/rtcm
728x90
반응형