본문 바로가기
dev, tech/navigation

GPS 로그 정보의 분석

by 구띵 2008. 9. 1.
[펌] http://www.i-fam.net/water/34

2007/07/04 22:12

GPS란?

GPS는 Global Positioning System 의 약자이다. 미국 국방성의 주도로 개발이 시작되었으며 위성그룹과 지상관제 그룹, 사용자그룹으로 이루어져 있다.
GPS 위성은 2만 200km의 지구상공에서 6개의 원궤도를 돌고 있는 24개의 NAVSTAR(Navigation Satellite Timing And Ranging) 위성으로 구성되어 있으며, 지구상의 어느곳에서든지 3개 이상의 위성이 관측가능하도록 배치되어 있다. 각 위성에는 원자시계가 탑재되어 있고, 모든 GPS 위성이 동일한 시각으로 맞추어져 있다.


GPS의 작동방식

GPS 측위는 각 위성이 직진성이 강한  초단파 또는 극초단파를 이용하여 자신의 위치와 시각을 의사코드(Pseudo Code)와 함께 방송(Broadcasting)하는 것에서 부터 시작된다. 이때 의사코드는 GPS 위성과 GPS 수신기 간의 거리를 측정하는 용도로 사용되며, GPS 수신기는 각 위성에서 방송된 위성 위치 및 시각, 의사코드를 통해 결정된 위성과의 거리을 기준으로 자신의 위치와 시각(x, y, z, t)을 결정하고, 이전의 자료와의 상관관계를 이용해 수신기의 운동 방향, 속도 등을 계산한 다음, 위성의 수신상태, 신호의 강도 등과 결정된 위치, 시각, 속도 등을 주기적으로 텍스트 문자열 형태로 제공하는 역할을 한다.

수신기가 제공하는 문자열은 NMEA 라는 규약에 의한 포맷을 갖고 있으며, 사용자의 컴퓨터는 제공된 텍스트 분석함으로써 수신상태, 신호강도, 추적되는 위성, 자신의 위치, 속도, 방향 등 다양한 정보를 얻을 수 있다.

3차원 측위의 경우 결정해야할 변수가 x, y, z, t 의 네 값이므로 4개 이상의 방정식이 요구되므로 최소 4개 이상의 위성자료가 수신되어야 하며, 2차원 측위의 경우 결정해야할 변수가 x, y, t 의 세 값이므로 3개의 방정식만으로 결정이 가능하므로 최소 3개 이상의 위성자료가 수신되어야 한다.
 
4개이상 여러개의 위성자료가 수신되는 경우 삼각측량법에 의한 최소오차가 가능한 위성을 선택하게 되므로 가능하면 수신위성수가 많을 수록 정확한 측위가 가능하다.

GPS 수신기는 채널 하나당 하나의 위성자료를 수신할 수 있으므로 최소 4개 이상의 채널을 갖고 있어야 하며, 현재 운용 중인 위성의 수가 24개 이므로 24 채널 이상은 불필요하다. 게다가 GPS 위성의 방송은 빛과 유사한 직진성을 갖고 있으므로 지평선 아래의 위성을 수신할 수는 없고, 위성의 궤도 배열이 지구상에서 매우 균등하게 관측이 가능하도록 이루어져 있으므로 지평선 위로 뜨는 위성의 수는 12 개 이상 되기 어렵다. 이러한 이유로 12~16 채널의 GPS 기기가 일반적으로 사용된다.


NMEA 란?

NMEA는 GPS 수신기가 데이터를 전송할 때 사용하는 표준 프로토콜로서 다음과 같은 특징을 갖고 있다.

  • 모두 ASCII로 구성
  • 각 문장은 '$'표시로 시작, 캐리지 리턴, 라인피드(<cr><lf>)로 종료
  • 데이터는 콤마(,)로 구분되며 모든 콤마는 꼭 포함되어야 함
  • 몇몇 GPS 는 특정 필드(데이터)를 생각하기도 함
  • 체크섬은 부가적으로 포함
  • $에 따라나오는 것은 AACCC 형태의 주소필드임(AA = Device ID:GPS는 GP로 표시, CCC = Sentence Formatter:아래 참조)


NMEA 0183 프로토콜

NMEA 프로토콜 중 최근 형식인 0183은 다음과 같은 규약을 갖고 있다.

RMB
$GPRMB,A,x.x,a,c--c,d--d,llll.ll,e,yyyyy.yy,f,g.g,h.h,i.i,j*kk

RMB  = Recommended Minimum Navigation Information

1    = Data Status (V=navigation receiver warning)
2    = Crosstrack error in nautical miles
3    = Direction to steer (L or R) to correct error
4    = Origin waypoint ID#
5    = Destination waypoint ID#
6    = Destination waypoint latitude
7    = N or S
8    = Destination waypoint longitude
9    = E or W
10   = Range to destination in nautical miles
11   = Bearing to destination, degrees True
12   = Destination closing velocity in knots
13   = Arrival status; (A=entered or perpendicular passed)
14   = Checksum
--------------------------------------------------------------------------------
RMC
$GPRMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,ddmmyy,x.x,a*hh

RMC  = Recommended Minimum Specific GPS/TRANSIT Data

1    = UTC of position fix
2    = Data status (V=navigation receiver warning)
3    = Latitude of fix
4    = N or S
5    = Longitude of fix
6    = E or W
7    = Speed over ground in knots
8    = Track made good in degrees True
9    = UT date
10   = Magnetic variation degrees (Easterly var. subtracts from true course)
11   = E or W
12   = Checksum
--------------------------------------------------------------------------------
GGA
$GPGGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh

GGA  = Global Positioning System Fix Data

1    = UTC of Position
2    = Latitude
3    = N or S
4    = Longitude
5    = E or W
6    = GPS quality indicator (0=invalid; 1=GPS fix; 2=Diff. GPS fix)
7    = Number of satellites in use [not those in view]
8    = Horizontal dilution of position
9    = Antenna altitude above/below mean sea level (geoid)
10   = Meters  (Antenna height unit)
11   = Geoidal separation (Diff. between WGS-84 earth ellipsoid and
       mean sea level.  -=geoid is below WGS-84 ellipsoid)
12   = Meters  (Units of geoidal separation)
13   = Age in seconds since last update from diff. reference station
14   = Diff. reference station ID#
15   = Checksum
--------------------------------------------------------------------------------
VTG
$GPVTG,t,T,,,s.ss,N,s.ss,K*hh

VTG  = Actual track made good and speed over ground

1    = Track made good
2    = Fixed text 'T' indicates that track made good is relative to true north
3    = not used
4    = not used
5    = Speed over ground in knots
6    = Fixed text 'N' indicates that speed over ground in in knots
7    = Speed over ground in kilometers/hour
8    = Fixed text 'K' indicates that speed over ground is in kilometers/hour
9    = Checksum
--------------------------------------------------------------------------------
RMA
$GPRMA,A,llll.ll,N,lllll.ll,W,,,ss.s,ccc,vv.v,W*hh

RMA  = Navigation data from present position

1    = Data status
2    = Latitude
3    = N/S
4    = longitude
5    = W/E
6    = not used
7    = not used
8    = Speed over ground in knots
9    = Course over ground
10   = Variation
11   = Direction of variation E/W
12   = Checksum
--------------------------------------------------------------------------------
GSA
$GPGSA,A,3,19,28,14,18,27,22,31,39,,,,,1.7,1.0,1.3*35

GSA  = GPS receiver operating mode, SVs used for navigation, and DOP values.

1    = Mode:
       M=Manual, forced to operate in 2D or 3D
       A=Automatic, 3D/2D
2    = Mode:
       1=Fix not available
       2=2D
       3=3D
3-14 = IDs of SVs used in position fix (null for unused fields)
15   = PDOP
16   = HDOP
17   = VDOP
--------------------------------------------------------------------------------
GSV
$GPGSV,4,1,13,02,02,213,,03,-3,000,,11,00,121,,14,13,172,05*67
GSV  = Number of SVs in view, PRN numbers, elevation, azimuth & SNR values.

1    = Total number of messages of this type in this cycle
2    = Message number
3    = Total number of SVs in view
4    = SV PRN number
5    = Elevation in degrees, 90 maximum
6    = Azimuth, degrees from true north, 000 to 359
7    = SNR, 00-99 dB (null when not tracking)
8-11 = Information about second SV, same as field 4-7
12-15= Information about third SV, same as field 4-7
16-19= Information about fourth SV, same as field 4-7

출처 : http://www.kh-gps.de/nmea-faq.htm
관련내용 : http://vancouver-webpages.com/peter/nmeafaq.txt



 GPS 로그정보의 분석

GPS 에서 수신되는 정보를 실시간으로 분석하기 위해서는 위의 포맷을 분석하여 제공하는 자료를 객체화하고 이벤트를 통해 이를 해당 프로그램으로 알려주는 방식을 취한다.
만약 실시간으로 처리하는 것이 아니라면 구태여 이벤트 방식을 사용할 필요는 없다. 라인단위로 처리하고 해당 시간별로 위치와 고도, 속도, 방위각 등을 추출하여 저장하면 된다.

댓글