본문 바로가기
컴퓨터 일반/MNEA-0183

NMEA-0183 포맷

by 호군 2010. 10. 27.
반응형
출처 : http://aquayo.blog.me/80050192618

사용하고 있는 GPS 수신기의 데이타 인터페이스 포맷이 NMEA-0183 이다.
NMEA-0183 포맷은 아래와 같다.

NMEA: National Marine Electronics Association
NMEA 에서는 GNSS, GPS, Loran, Omega, Transit 등 다양한 애플리케이션을 위한 데이타셋을 정의하고 있다.
아래는 GPS 를 위한 7가지 데이타 셋이다.

  1. GGA: GPS Fix Data,
  2. GLL: Geographic Position - Latitude/Longitude
  3. GSA: GNSS DOP 와 Active Satellites
  4. GSV: GNSS Satellites in View
  5. RMC: Recommended Minumun Specific GNSS Data
  6. VTG: Course over Ground
  7. ZDA: Time and Date
NMEA 프로토콜의 구조

8비트 아스키 문자를 사용하여 4800 Baud 로 데이타를 전송한다. 패리티 비트는 사용하지 않는다.
각 GPS 데이타셋은 다음과 같은 구조로 이루어져 있다.

$GPDTS,Inf_1,Inf_2,Inf_3,Inf_4,Inf_5,Inf_6,Inf_n*CS<CR><LF>

필드
내용
$  데이타셋의 시작을 나타낸다.
GP  GPS 정보를 나타낸다.
DTS  데이타셋의 식별자.
Inf_1 bis Inf_n  1 ... n 정보 (예, course data 를 위한 175.4)
,  서로 다른 정보를 나타내는 아이템간의 구분문자
*  checksum 을 위한 구분 문자
CS  전체 데이타셋을 검사하기 위한 첵섬(Control Word)                           
<CR><LF>  데이타셋의 끝.
GPS 데이타셋의 문자열은 시작과 끝을 나타내는 문자를 제외하고 79자를 초과해서는 안된다.

NMEA 프로토콜로 기록한 GPS 데이타 예제(SONY GPS 수신기)

$GPGGA,004952,3723.8259,N,12655.3071,E,1,04,04.7,00046.9,M,018.1,M,,*4F
$GPGSA,A,3,13,16,19,23,,,,,,,,,19.3,04.7,18.7*08
$GPGSV,2,1,05,13,33,295,40,16,57,043,41,19,42,212,41,23,40,249,38*7B
$GPGSV,2,2,05,31,,,28,,,,,,,,,,,,*74
$GPRMC,004952,A,3723.8259,N,12655.3071,E,000.0,088.7,291107,,,A*72
$GPVTG,088.7,T,,M,000.0,N,000.0,K,A*0A

1. GGA 데이타 셋
 
   GGA 데이타셋은 시간, longitude, latitude, 시스템의 품질, 사용중인 위성의 수, Height 에 대한 정보를 나타낸다.

데이타 예제
           $GPGGA,004952,3723.8259,N,12655.3071,E,1,04,04.7,00046.9,M,018.1,M,,*4F

개별 문자의 값 과 내용
필드
 내용
$ GGA 데이타셋의 시작                                                          
GP GPS 어플라이언스로부터 만들어진 정보
GGA GGA 데이타셋 식별자
004952 UTC Positional Time: 00시 49분 52초
3723.8259 Latitude: 37도23.8259분
N 북위 (N=north, S=South)
12655.3071 Longitude: 126도 55.3071분
E 동경 (E=East, W=West)
1 GPS (0= no GPS, 1=GPS, 2=DGPS)
04 계산을 위해 사용한 위성의 갯수
04.7 HDOP(Horizontal Dilution of Precision)
00046.9 안테나 높이 (Geoid Height)
M 높이 단위(M=meter)
018.1 Ellipsoid 와 Geoid 간의 높이 차이
M 높이 차이의 단위(M=meter)
DPGS 데이타의 Age (No DGPS)
* 첵섬 구분자
4F 전체 데이타 검증을 위한 첵섬값
<CR><LF> 데이타 종료

2. GLL 데이타 셋

 GLL 데이타 셋은 Latitude, Longitude, time, health 정보를 갖고 있다.
SONY GPS 에는 이 데이타셋은 들어 있지 않다.

데이타 예제
          $GPGLL,4717.115,N,00833.912,E,130305.0,A,*32

필드
 내용
$ GLL 데이타의 시작                                                               
GP GLL GLL 데이타셋 식별자
4717.115 Latitude: 47도 11.115분
N 북위(N=north,S=south)
00833.912 Logitude: 8도 33.912분
E 동경(E=East, W=West)
130305.0 UTC 시간: 13시 3분 5.0초
A 데이타셋 품질: A(Valid), V(Invalid)
* 첵섬 구분자
32 첵섬
<CR><LF> 데이타 종료

3. GSA 데이타 셋
 
측정 모드(2D, 3D)에 대한 정보, 위치 결정에 사용된 위성의 수, DOP 등의 정보를 갖고 있다.

데이타 예제  
      $GPGSA,A,3,13,16,19,23,,,,,,,,,19.3,04.7,18.7*08

필드
 내용
$ 데이타의 시작
GP GPS 어플라이언스 정보
GSA GSA 데이타셋 식별자
A 계산 모드(A = 2D/3D 모두간의 자동선택, M=수동 선택)
3 3차원 계산 모드(1=none, 2=2D, 3=3D)
13 계산에 사용된 위성의 번호 (13번 위성)
16 계산에 사용된 위성의 번호 (16번 위성)
19 계산에 사용된 위성의 번호 (19번 위성)
23 계산에 사용된 위성의 번호 (23번 위성)
계산에 사용된 위성의 번호
계산에 사용된 위성의 번호
계산에 사용된 위성의 번호
계산에 사용된 위성의 번호
계산에 사용된 위성의 번호
계산에 사용된 위성의 번호
19.3 PDOP (Position DOP)
04.7 HDOP (Horizontal DOP)
18.7 VDOP (Vertical DOP)
* 첵섬 구분자
08 첵섬
<CR><LF> 데이타 종료

4. GSV 데이타 셋
위성의 수와
데이타 예제
      $GPGSV,2,1,05,13,33,295,40,16,57,043,41,19,42,212,41,23,40,249,38*7B

필드
 내용
$ 데이타의 시작
GP GPS 어플라이언스 정보
GSV GSV 데이타셋 정보
2 전송된 GVS 데이타 셋의 전체 수( 1..9)
1 현재 GVS 데이타 셋 번호 (1..9)
05 관측되는 전체 위성의 수
13 첫번째 위성의 식별 번호 13번
33           위성의 고도 33도 (0 ...90 도)
295           위성의 방위각 295도 (0..360도)
40           위성의 Signal-to-noise 비율 40(db-Hz) (1..99,  추적되지 않을 때 NULL)
16 두번째 위성의 식별 번호 16번
57           위성의 고도 57도
043           위성의 방위각 43도
41           위성의 Signal-to-noise 비율 41(db-Hz)
19 세번째 위성의 식별 번호 19번
42           위성의 고도 42도
212           위성의 방위각 212도
41           위성의 Signal-to-noise 비율 41(db-Hz)
23 네번째 위성의 식별 번호 23번
40           위성의 고도 40도
249           위성의 방위각 249도
38           위성의 Signal-to-noise 비율 38(db-Hz)
* 첵섬 구분값
7B 첵섬

5. RMC 데이타 셋

Recommended Minumum Specific GNSS, 시간, latitude, longitude, height, system status, speed, course, date 등의 정보를 갖고 있다.

데이타 예제
      $GPRMC,004952,A,3723.8259,N,12655.3071,E,000.0,088.7,291107,,,A*72

필드
 내용
$ 데이타의 시작
GP GPS 어플라이언스 정보
RMC RMC 데이타셋 식별자
004952 수신 시간 (UTC), 00시 49분 52초
A 데이타셋 품질 (A=Valid, V=Invalid)                                                    
3723.8259 Latitude: 37도 23.8259분
N 북위
12655.3071 Longitude: 126도 55.3071분
E 동경
000.0 속도: 0 Knots
088.7 경로: 88.7 도
291107 시간: 2007년 11월 29일 (DDMMYY)
보정 편차
보정 편차 방향(W=West, E=East)
A
* 첵섬 구분자
72 첵섬

-- 포맷이 좀 다르다................

6. VTG 데이타 셋

경로와 속도에 기반한 지상 경로와 속도 정보를 갖고 있다.

데이타 예제
      $GPVTG,088.7,T,,M,000.0,N,000.0,K,A*0A

필드
 내용
$ 데이타의 시작
GP GPS 어플라이언스 정보
VTG VTG 데이타 셋 식별자
088.7 수평 경로 88.7도 (T)
T 지도에 대응하는 Angular Course
수평경로 0 도 (M)
M 자기장에 대응하는 Angular Course
000.0 수평 속도 (N)
N 속도 단위 (knots)
000.0 수평 속도 (km/h)
K 속도 단위 (km/h)
A 데이타 셋 품질로 보임..(A=Valid, V=Invalid)                                               
* 첵섬 구분자
0A 첵섬


7. ZDA 데이타 셋

시간 정보가 들어 있다.

SONY GPS 에는 이 정보 역시 들어 있지 않다.

데이타 예제
     $GPZDA,130305.2,20,06.2001,,,*57

필드
 내용
* 데이타의 시작
GP GPS 어플라이언스 정보
ZDA ZDA 데이타셋
130305.2 UTC 시간: 13시3분 5.2초
20 Day (00.31)
06 Month (01..12)
2001 Year
Local Time 일자 예약 (HH)
Local Time 일자 예약 (MM)                                                               
* 첵섬 구분자

첵섬으로 데이타 정합성 계산

첵섬은 데이타의 시작과 끝을 나타내는 문자를 제외한 모든 문자를 8비트 문자로 XOR 조합을 한후, 각 4비트 자릿수에 대한 결과값을 나타낸다.

첫번째 VGA 데이타로 첵섬을 계산해 보자.
$GPVTG,088.7,T,,M,000.0,N,000.0,K,A*0A

문자 아스키 (8비트 값)  
G   0x47    0   1   0   0    0    1   1    1 
P   0x50   0   1   0   1   0    0   0   0
V   0x56   0   1   0   1   0    1   1    0
T   0x54   0   1   0   1   0    1   0   0
G   0x47    0   1   0   0    0    1   1    1 
,   0x2C   0   0   1   0    1   1   0   0
0   0x30   0   0   1   1   0    0   0   0
8   0x38   0   0   1   1   1   0   0   0
8   0x38   0   0   1   1   1   0   0   0
.   0x2E   0   0   1   0    1   1   1    0
7   0x37   0   0   1   1   0    1   1    1 
,   0x2C   0   0   1   0    1   1   0   0
T   0x54   0   1   0   1   0    1   0   0
,   0x2C   0   0   1   0    1   1   0   0
,   0x2C   0   0   1   0    1   1   0   0
M   0x4D   0   1   0   0    1   1   0   1 
,   0x2C   0   0   1   0    1   1   0   0
0   0x30   0   0   1   1   0    0   0   0
0   0x30   0   0   1   1   0    0   0   0
0   0x30   0   0   1   1   0    0   0   0
.   0x2E   0   0   1   0    1   1   1    0
0   0x30   0   0   1   1   0    0   0   0
,   0x2C   0   0   1   0    1   1    0   0
N   0x4E   0   1   0   0    1   1    1    0
,   0x2C   0   0   1   0    1   1    0   0
0   0x30   0   0   1   1   0    0   0   0
0   0x30   0   0   1   1   0    0   0   0
0   0x30   0   0   1   1   0    0   0   0
.   0x2E   0   0   1   0    1   1    1    0
0   0x30   0   0   1   1   0    0   0   0
,   0x2C   0   0   1   0    1   1    0   0
K   0x4B   0    1   0   0    1   1    0   1
,   0x2C   0    0   1   0    1   1    0   0
A   0x41   0    1   0   0    0    0   0   1 
XOR 합   0x0A   0    0   0   0   1   0   0   0
4bit(Nibble)                     0 0 0 0    1 0 0 0
Hex 값                        0x00       0x0A
ASCII CS 값                        0         A

진짜로 XOR 연산이 저렇게 나올까... 글쎄... 
반응형