티스토리 뷰
앞에 글에서 본 것처럼 GPS에서 보내는 데이터는 모두 $로 시작되는 문자열로 되어 있다.
콘솔창에 보이는 데이터는 NMEA protocol로 정해진 표준에따라 정의되어 있다.
위의 그림처럼 $로 하나의 프레임이 시작되고, 뒤이어 GP문자열이 나온다.
메세지 종류에 따라 세글자로 구분되어 진다.
예를 들어, 위치정보에 해당되는 메세지 코드는 GLL이며 다음과 같이 정의 된다.
$GPGLL,다음에 위도에 해당되는 값이 나오고, 북위 혹은 남위를 나타내는 글자가 나온다. 다음으로는 경도값이 나오고 동경, 서경을 구분하기 위한 글자가 뒤따른다. 그 다음에는 시간정보도 같이 나온다.
예를 들어 위와 같이 4717.11364N, 00833.91565E와 같은 데이터가 들어 왔다면 아래와 같은 방법으로 변환 하면된다.
이렇게 모든 데이터가 문자열로 이루어져 있으면 사람이 육안으로 직접 읽을때는 편하겠지만, 프로그램으로 읽어 들인 데이터를 가공하거나 다른 용도로 사용하기 위해서 메모리에 저장하려면 일일이 한글자씩 분석하여야 한다.
이러한 문자열 분석은 생각보다 더 까다롭고 오류가 날 가능성도 높아진다.
프로그램으로 처리하기 위한 데이터는 문자열 보다는 바이너리 형태의 패킷 송수신이 훨씬 편하고 효율적이다.
u-blox에서는 이러한 요구 조건을 충족하기 위하여 자체적으로 ubx라는 패킷 전송용 프로토콜을 제공한다.
UBX 패킷은 2개의 연속된 sync 데이터(0xB5,0x62)로 시작되고 1바이트의 Class ID, 1바이트의 Message ID가 이어진다.
그 다음에는 2바이트의 payload 크기에 해당되는 값이 들어가고, 뒤이어 가변 크기의 payload data가 들어간다.
마지막으로 2바이트의 check sum 값으로 패킷을 끝내게 된다.
Class ID와 Message ID를 보면 payload가 어떻게 생겼는지 알수 있으므로 프로그램으로 GPS 데이터를 처리하는게 상당히 간편해 지게 된다.
'프로젝트 > GPS' 카테고리의 다른 글
GPS - NAV:POSLLH (0) | 2023.01.28 |
---|---|
GPS - NAV:TIMEUTC (0) | 2023.01.28 |
GPS - CFG:PRT (0) | 2023.01.28 |
GPS - UART (0) | 2023.01.28 |
GPS - 사전 준비 (0) | 2023.01.28 |