[27호]RTK기반 블루투스 DGPS제작기
RTK기반 블루투스 DGPS제작기
글 | 객원기자 금강초롱(blog.naver.com/crucian2k3)
들어가며
GNSS, GLONASS, BEIDOW, PMTK, RTCM, SBAS, 기준점 이런 용어들과 지난 6개월 남짓, 거의 반년 이상을 보냈습니다. 사실 GPS를 사용하여 보다 정교한 위치를 찾을 수 있는 방안들에 대해 나름 고민에 고민을 해봤고 조금은 Hard-Core 타입 취미전자를 지향하는 아마추어 입장에서 어느 정도 동 기술의 실체파악을 해 본 것 같습니다. 이제 그간의 진행과정을 상세히 정리해 보고자 합니다.
1. 이 일을 시작하게 된 동기
GPS 수신기를 사용하여 실시간 위치추적을 하되 시속 60km이상의 속도에서도 매초 10회 이상의 포인팅을 할 수 있는 장치를 자력으로 만들어 보고 싶었습니다.
비용은 최대한 저렴하게, 호주머니나 모자에 부착도 가능한 초소형으로 구성하고, 블루투스를 통해 스마트폰과 연계하여 활용성을 높일 수 있도록 제작하고 싶었습니다.
목표하는 정밀도는 미터급으로 하되 시중에서 손쉽게 구할 수 있는 GPS모듈에 에러보정 신호를 인가하여 정밀도를 극한으로 끌어 올려 가능하다면 1미터 이내의 정밀도로 동작되게 하는 것이었습니다.
그럼 이것을 어디에 쓸모가 있냐고 반문 하실지 모르겠습니다. 매년 자신의 발전을 위해 나름 도전적 과제를 정하여 매진하곤 하는데 올해는 고속으로 이동하는 물체의 실시간 이동경로 추적 장치를 만들어보되 GPS기술을 적극 반영하고 차후 실시간 이동체 추적시스템 제작을 위한 핵심기술을 미리 접해보고 싶었기 때문입니다.
2. GPS의 정밀도
이제는 고유명사처럼 사용되는 GPS는 사실 군사목적으로 미국에서 구축한 것입니다. 미국의 진정한 라이벌인 러시아도 이에 뒤질세라 GLONASS를 구축하여 자국은 물론 북한 등 전세계 공산권 국가에서 이용 중인 것으로 알려져 있습니다. 중국에서도 베이징올림픽에 즈음하여 BEIDOW베이더우라고 하는 위성항법체계를 완성하여 자국을 대상으로 서비스 중에 있습니다. 유럽연합도 갈릴레오라고 하는 위성항법체계를 구축중이며 우리나라도 여기에 참여하고 있다고 합니다.
우선 GPS위성에서 내려오는 마이크로웨이브의 구성부터 살펴보면, GPS위성에서는 L1반송파로 알려진 1.57542Ghz와 L2반송파로 알려진 1.2276Ghz가 끊임없이 송출되고 있습니다.
이러한 반송파에 중첩(변조)되어 실려진 시그널은 PRN(Pseudo-Random Noise)코드와 50Bps 속도의 항법메시지가 포함되어져 있습니다. 여기서 PRN을 한꺼풀 더 벗겨 보면 Coarse Acquisition이라고 불리어지는 C/A코드와 Precise Code인 P코드로 나눠집니다.
L1 반송파에 실려진 C/A코드는 민수용 GPS수신기 등을 위해 쓰이며 일반정밀도(SPS: Standard Posistion Service)를 얻을 수 있고 L2 반송파에 실려진 P코드는 고정밀도(PPS: Precise Positioning Service)를 서비스하기 위한 것이며 Anti-Spoofing 모드로 동작되기 위해 Y-code로 암호화 하여 송출됩니다.
결국 L2반송파는 미국에서 인증을 받은 제한된 이용자만 접근이 가능하고 군사관련 이용자는 특수한 수신기로 이용이 가능하다고 합니다.
그냥 L1 반송파만 사용하면 되지 왜 L2 까지 쓸까요?
미국사람들의 준비성과 예리함을 여기서 다시금 알 수 있습니다. GPS를 사용한 측위체계에서 가장 큰 에러요인은 바로 전리층 지연시간 불균일인데 이를 효과적으로 해결하기 위해 1개의 위성에서 서로 다른 반송파를 송출하여 전리층의 상태를 실시간으로 파악해 내고자 함이라고 합니다. 참 대단하다 아니할 수 없습니다.
위 장황한 내용들을 정리하자면
· C/A Code : L1 반송파에 담겨져 있으며 일반 민수용 GPS에서 일반정밀도(약 3∼15M)로 측위가 가능함
· P Code : L2 반송파에 담겨져 있으며 암호화되어 있어 특수 목적으로만 사용되며 L1, L2를 동시에 사용하여 보다 고정밀도(1mm∼1Cm) 측위 가능
· Navigation Message : L1 반송파에 담겨져 있으며 시각 데이터 파라메터, GPS시간, 위성상태, 위성궤도메시지, 시간에 따른 위성의 궤도를 나타내는 Almanacs데이터 등이 포함됨
즉, GPS수신기가 측위를 위한 목적으로 동작된다면 최소한 C/A Code와 네비게이션 메시지를 제대로 수신해야 합니다.
3. GPS를 통해 내 위치를 계산해 내는 원리
GPS에 의한 위치 측정원리는 기본적으로 삼변측량원리를 사용합니다.
최대한 간략히 설명해 보자면 다음과 같습니다.
앞서 살펴본 바와 같이 위성으로부터 수신된 L1 시그널인 1.57542GHz (10.23MHz*154)에는 C/A(Coarse Acquisition)코드라는 정보가 실려 있으며 이 코드의 위상정보를 추적하면 펄스 간 지연시간을 얻어 낼 수 있게 됩니다.
C/A코드에 담겨진 펄스열과 GPS수신기의 펄스열을 우선 동기화 시킨 후 지연시간 측정을 위한 펄스열이 나타나면 수신기의 펄스열과 비교하는 방식, 즉 주파수카운터와 같은 개념으로 동작됩니다.
거리 = 광속 x 지연시간
이렇게 얻어진 거리 정보를 바탕으로 동심원을 그리고 동심원 3개가 만나는 점(교차하는 점)이 상대적 위치가 됩니다.
그렇다면 지구상에서 실제 내 위치는 어떻게 알까요?
이는 위성에서 보내주는 Navigation Message(항행정보)에 비밀이 있으며 상대적 위치정보와 항행정보를 결합하여 복잡한 연산을 하면 물리적인 내 위치를 알 수 있게 됩니다. 이 연산내용에 대해서도 좀 알아 봤으나 심오하여 본서에서는 건너뜁니다.
이러한 원리로 인해 낮은 성능의 저가 GPS는 매초 1회 정도의 내 위치 정보를 얻어 낼 수 있는 반면 조금 고성능은 5Hz 내지는 10Hz도 가능하고 아주 고성능은 50Hz도 가능하다고 합니다. 이것이 중요한 이유는 고속으로 이동하는 물체에서 실시간으로 위치 정보를 얻고자 하는 경우에 얼마나 빠르게 현 위치를 인식해 낼 수 있는가? 가 대단히 중요한 요소로 대두되게 됩니다. 시속 60Km로 질주하는 물체는 초속으로 약 16M가 이동되며 이를 10Hz주기로 위치를 추적한다고 하여도 1.6M의 지연 오차를 유발 하게 됩니다.
빠르게 이동하는 물체를 빠르고 정밀하게 추적하기 위해서는 어쩔 수 없이 고성능의 컨트롤러가 필요하게 되는 것입니다.
4. DGPS의 개념
4.1. GPS의 오차
DGPS(Differential GPS)는 상대 측위 방식의 GPS 측량기법으로서 이미 알고 있는 기준점 좌표를 이용하여 오차를 일으키는 요소들을 보정하고, 오차를 최대한 줄여서 보다 정확한 위치를 얻기 위한 방식입니다.
일반적으로 GPS에서 오차를 일으키는 요인들은 아래와 같습니다.
이러한 오차 중 ③전리층 오차가 영향을 크게 미치며 이 오차는 수신기 주변 100Km지역에서는 거의 동일한 경향이 있으므로 기지의 수신국에서 알아낸 오차 내역을 측정하고자 하는 GPS 수신기에 별도로 알려주어 보정하게 하는 방식이 DGPS의 기본적 원리라 할 수 있겠습니다.
4.2 DGPS 에러보정 방식
보정을 해주는 량을 전파(전달)하는 방식에 따라 SBAS(Satellite Based Augmentation System) 방식과 RTK(Real-Time Kinematic) 방식으로 나누게 됩니다.
이번에 제작한 GPS수신기는 위 SBAS와 RTK를 모두 처리할 수 있는 타입으로 제작하였으며 제조사 매뉴얼에 의하면 DGPS모드에서는 5Hz 주기로 위치식별이 가능하다고 되어 있으나 10Hz까지 올려도 일단 동작이 됨은 확인 하였습니다.
5. 자작 GPS의 하드웨어 부문
제작 컨셉 : 소형, 경량, 저 전력, 저 비용, 고정밀도, 사용자 편의적UI, 흔한 부품, 스마트폰과 블루투스통신 가능 등
기본적인 구성은 다음과 같습니다.
이제 각각의 요소들이 어떠한 기능과 역할을 수행하는지 살펴보도록 하겠습니다.
5.1 GPS CONTROLLER
5.2 GPS MODULE
5.3 GLCD
5.4 BLUETOOTH MODULE
5.5 BUTTON KEY
5.6 LDO
5.7 BOOSTER
5.8 Lithium BATTERY
6. 자작 GPS의 소프트웨어 부문
GPS 수신기로 작동되려면 기본적으로 NMEA정보를 외부로 송출하는 기능이 원활히 구성되어야 할 것입니다.
단순히 외부로 NMEA정보만 보내려 한다면 이야기가 간단합니다만 GPS의 동작모드를 즉석에서 변경이 가능하도록 하기도 하고, NMEA정보도 수신기에서 보기를 원한다면 MCU가 필연적으로 필요해 집니다.
외부와의 연계는 BLUETOOTH통신을 계획하였으므로 SPP 프로파일을 어떻게 통제해야 하는가가 역시 중요한 요소가 됩니다.
이러한 기본적인 요소가 준비되었다면 본격적으로는 PMTK프로토콜에 대한 이해가 필요합니다. PMTK는 GPS 모듈에게 어떠한 기능을 설정할 것인지 주문하는 기능과 이미 설정된 값이 어떤 상태로 들어가 있는지 쿼리를 하고자 할 때 필수적으로 사용되게 됩니다.
6.1 간이 RTOS(비선점형 방식) 스케쥴러 설계
GPS 모듈은 최초 전원이 인가되면 9600Bps에 1Hz 주기로 위치를 알려주는 기능이 동작됩니다. 이는 GPS에 내장된 펌웨어에 전적으로 의존함이고 제조사에 소정의 비용을 지불하면 이를 변경할 수도 있다고 합니다. 그러나 본 프로젝트에서와 같이 MCU를 사용하여 PMTK명령을 보내면 좀 번거롭긴 해도 다양한 모드변경을 원하는대로 시킬수 있게 됩니다.
최대 10Hz 모드에서도 동작을 시키기를 원하므로 9600Bps로는 정상적인 출력이 불가능하게 됩니다. 한마디로 변비에 걸리게 되는 것입니다.
이를 좀 더 파헤쳐 보면, RTCM FIX 상태에서 총 16개의 위성이 탐색된 상황이라면 퍼붓듯이 보내지는 데이터의 알맹이를 살펴보면 다음과 같습니다. (DGPS FIX, AGE:1, SALT:16, Differential mode)
· 1개의 NMEA FRAM SIZE : 366Byte
· 9600Bps에서 전송 소요시간 : (366Byte * 10Bit(8Bit + 1start + 1stop)) / 9600Bps = 0.38125Sec
위에서 보듯이 9600Bps로 1초에 1회 위치 정보를 얻는 경우 최소 0.38초가 걸리므로 이 상태에서는 1초에 3회 이상, 즉 3Hz 이상으로 현 위치 정보를 얻을 수 없게 됩니다.
그렇다면 1초 최대 10회를 뿌려주기 위해서는 간단계산으로 최소 38400Bps는 되어야 함을 알 수 있습니다.
· 38400Bps에서 전송 소요시간 : (366Byte * 10Bit) / 38400Bps = 0.0953125Sec
· 115200Bps에서 전송 소요시간 : (366Byte * 10Bit) / 115200Bps = 0.03177Sec
그렇다면 10hz 모드로 GPS수신기를 동작시키며 NMEA 데이터를 디코딩하고자 한다면 매초 처리해야 할 데이터량이 어느 정도 될까요?
· 366Byte * 10Hz = 3660Byte
인정사정없이 매초 3660Byte가 쏟아져 들어오며 이 데이터를 BLUETOOTH로도 보내주고 디코딩하여 GLCD 표출하기 위해서는 프로그램 구조가 잘 되어 있을 필요가 있습니다. PIC18LF26K22은 Microchip 8bit급에서는 최고속도인 64MHz로 동작시켜도 실제로는 16MIPS가 되며 그간의 칩들에 비하면 상당히 빠른 수준이긴 하나 해야 할 일에 비하면 그리 여유로운 편은 결코 아닌 것 같습니다.
아무튼 이 문제를 충족하기위해 초기에는 USART인터럽트, 타이머인터럽트, 메인루프가 결합된 방식으로 설계하였으나 5Hz이상에서 동작이 매끄럽지 못해 RTOS방식을 도입하게 되었습니다.
일단 그 유명한 FreeRTOS상에서 구동해 보려고 갖은 노력을 하였으나 잘 동작하지 않자 스캐줄러 동작부분만 참조하여 유사 RTOS를 직접 만들어 구동시켜 보게 되었습니다. 프로그램이 동작되는 최소 단위를 1ms로 설정하고 전 타스크를 1ms 내에 완료하도록 하였습니다. 물론 어떤 타스크가 1ms이상을 점령해 버리면 다른 타스크가 실행할 수 있는 시간을 뺏겨버리게 될 소지가 있습니다만 가능한 한 1ms 단위로 돌아가도록 타임슬라이싱을 구현하였습니다.
타임슬라이싱 체계가 원활하게 작동되게 하기 위해서는 State Machine 기법으로 각 타스크를 돌리는 방법을 적용하였고 GLCD가 느려 약간의 지체가 있기는 합니다만 대체적으로 각본대로 잘 돌아감을 확인하였습니다.
인터넷에 좀 검색을 해보니 이러한 방식이 연성(SOFT) RTOS와 유사한 방식임을 알 수 있었습니다.
이러한 구조를 다시 한 번 정리해 보면 다음과 같습니다.
Internal Clock : 16Mhz
PLL 4X : 64Mhz
(FOSC : 64Mhz)
6.2 타이밍도
아래 타이밍도에서는 100ms 간격으로 USART2측에 데이터가 감지되고 있음을 보여주고 있습니다. 즉, GPS 수신기가 10Hz모드에서 동작되고 있음을 알 수 있습니다.
오실로스코프로는 관측하기가 약간 까다로울 수 있습니다만 로직애널라이저를 활용하면 매우 유용하게 측정이 가능합니다.
· Sampling speed : 100Mbit
· Samples : 250Mbyte
· USED channel : 3CH
이로 인해 엄격하게 모든 타스크가 1ms 이내에 완수하여야하는 상황이 어렵게 된다. 이 현상이 생기는 원인은 NOKIA5110 GLCD를 동작시키기 위해서는 SPI 방식으로 통신이 이뤄져야 하며 이 소자는 클록속도가 4MHz가 한계인 관계로 소정의 시간 지연이 불가피하다. 물론 GLCD를 사용하지 않거나 좀 더 고속표시기를 사용한다면 전혀 문제가 되지 않는다.
6.3 소프트웨어 개발환경
7. 보드 세부사항
본 보드는 프로토타입으로 제작해본 것으로 10cm x 6cm의 소형 만능기판을 사용하였습니다. GPS 모듈은 100mil 피치가 아니어서 0.3mm에나멜선을 활용하여 작업을 하였고 LI-ION 충전칩 또한 칩사이즈가 매우 작아 납땜하는데 애로점이 좀 있었습니다.
배터리파워 부스터는 기판사이즈 등의 문제로 인해 모듈형태의 보드를 외부에 부착하였으며 배터리는 18650사이즈를 사용하였는데 너무 과도한 용량이 아닌가 생각됩니다.
16시간 = 2400mAh / 160mA
1000mAh 내외의 전지가 용량, 무게, 부피, 소비전력 등을 감안해 볼 때 적정할 것 같습니다.
8. 동작검증
8.1 기준점
국립지리원에서는 전국방방곡곡에 소위 지준점이라고 하는 것을 세워 두고 있습니다. 저는 어부지리 격으로 이러한 기준점에 본 수신기를 놓아보고 어느 정도 오차가 있는가 하는 방식으로 정밀도를 검증해 볼 수 있었습니다.
8.2 정밀도 실측결과
- 측정장소 : 경기도 안양시 평촌중앙공원 내 기준점
- 측정일시 : 2014.8.15, 07:47:05
- GPS 매뉴얼에 의하면 DGPS 모드일 때 2.5M이하의 정밀도를 보인다고 서술되어있습니다. 실측결과 위도에서 약 1.7M의 오차를 경도에서 1.1M의 오차를 보이고 있는데 일단은 오차범위 내에는 들어 있다고 볼 수 있을 것 같습니다.
LatMeter = 111133 – 560cos(2*RadLat)
= 111133-560cos(2*0.614054)
= 110944.828531(m)
1° = 110944.828531(m)
1’ = 110944.828531/60 = 1849.080475(m)
1” = 1849.080475/60 = 30.81800792(m)
0.1” = 30.81800792(m)/10 = 3.081800792(m)
0.01” = 0.3081800792(m)
LonMeter = 111413cos(RadLat) – 94cos(3*RadLat)
= 111413cos(0.614054)-94cos(3*0.614054)
= 91085.150856(m)
1° = 91085.150856(m)
1’ = 91085.150856/60 = 1518.085848(m)
1” = 1518.085848/60 = 25.3014308(m)
0.1” = 25.3014308(m)/10 = 2.53014308(m)
0.01” = 0.253014308(m)
※ 위도와 경도 1°의 거리 계산법
8.3 실제 도로주행 결과
· 테스트일시 : 2014. 8.18, 09:34.40경
· 테스트장소 : 경기도 안양시 평촌중앙공원 일원
· 테스트조건 : 스마트폰(Vega No.6), DGPS Client v1.0.9(아센코리아), RTCM, GPS수신기 AKS6H, FB155BC
· 주행궤적 : DGPS Client 로부터 NMEA 데이터 저장 ▶ Route Converter ▶ 구글어스(GPX DATA Loading)
· 테스트결과 : 아래 적색선이 주행궤적이며 차량통행이 적고 고층건물이 거의 없는 하단부는 3회 주행선이 상당히 겹쳐 있으나 상단부는 다소 궤적오차를 보여주고 있습니다. 이는 주변 건물 등에 의한 전파교란이 있는 것으로 보여지며 SBAS 등 DGPS가 가동 중인 상태에서 2.5M이내의 정밀도를 갖는다는 제품정보대로 무난하게 작동해 주고 있음을 알 수 있습니다.
9. 결론
이 일을 시작하며 RTCM에 대한 환상이 상당히 컸던 것은 사실입니다.
3만원 남짓하는 저렴한 GPS 모듈을 RTCM모드로 동작시키면 정밀도가 매우 뛰어나지 않을까 하는 막연한 기대도 있었습니다만 해보지 않고는 속단할 수가 없었고 주변에서도 마땅한 정보를 입수하기도 어려웠습니다. RTCM 모드이건 SBAS모드이건 모두 에러에 대한 보정을 해주는 상황이므로 보정을 받기 전 자신이 정교하게 수신이 될 수 있는가가 중요한 요소가 됨을 뼈저리게 깨달았습니다. 즉, 보다 큰 수신안테나, 보다 감도가 좋은 안테나, 보다 강력한 GPS컨트롤러, 보다 많은 위성을 강력하게 수신할 수 있는 체계가 우선이 되고 이렇게 구비된 여건에서 에러 보정 시그널을 받아들인다면 충분히 고정밀도 GPS수신체계를 만들 수 있을 것 같습니다.
여기에도 엄연히 트레이드오프가 존재하는 것이 고정밀, 소형화를 추구한다면 극복해야할 문제가 바로 수신안테나라고 봅니다.
패치안테나 만으로는 고감도 수신기 제작에 한계가 있을 수밖에 없을 것이고 그렇다고 고감도 Active 안테나를 접목하면 부피가 커지는 문제가 수반될 것이기 때문입니다.
소형, 고정밀 GPS와 관련된 기술이 꾸준히 연구될 것으로 보며 머지않아 우리들 스마트폰에서도 수십 Cm급 정밀도를 갖는 GPS모듈이 탑재될 것으로 예상해봅니다.
그때쯤이면 아마 차선안내 네비게이션도 등장할 것입니다.
>나비양 : “지금은 2차선에서 주행중인데 1차선으로 얼릉 갈아타세요~”
>운짱맨 : 애가 내가 2차선에 있는걸 우째 안당가? 고거 참 희안하구먼~
마무리
끝으로 고층건물 창밖으로 늦은 밤이면 깜빡거리는 이상한 물체를 내미는 우리집에 대해 아무도 수상한 사람 산다고 신고해주지 않아서 다행스러웠고 틈만 나면 안방을 무슨 연구소 개발실 마냥 써먹는 철없는 남편에게 잔소리에 핀잔보다는 또다시 병원신세 질까봐 걱정해주는 아내에게 고맙고 미안한 맘이 앞섭니다. 감사합니다.
참고자료
1. 해양수산부위성항법중앙사무소
(http://www.ndgps.go.kr/html/kr/index.html)
2. 한국항공대학교 항법 및 정보시스템 연구실
(http://nisl.hau.ac.kr/index.html)
3. 서울대 GNSS연구실(http://gps.snu.ac.kr)
4. [논문]전국망 위성항법보정시스템(NDGPS)의 측위 정확도 분석 및 이용활성화 방안,2007.2, 군산지방해양수산청 위성항법중앙사무소
5. [기술동향]항공우주산업기술동향 8권2호(2010)pp.46-53, 위성항법시스템 운영현황 및 개발계획(하지현, 천세범)
6. [논문]한국항해항만학회지 제38권 제2호, 위성배치정보와 보정정보 맵핑 알고리즘을 이용한 저가형 GPS수신기의 DGPS 서비스 적용방안 연구(박병운, 윤동환)
7. [논문] 해양용 위성항법보정시스템(DGPS) 활용 다양화에 관한 연구(2004.2)
8. [번역본]NTRIP 프로토콜을 통한 RTK와 실시간 DGPS 보정 위치정보 테스트 결과 (http://www.isprs.org/congresses/beijing2008/proceedings/2_pdf/13_SS-15/04.pdf)
9. 펌테크(http://www.firmtech.co.kr)
10. 아센코리아(http://freenavi.co.kr)