logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

NMEA-0183을 이용한 GPS 애플리케이션 제작

by digipine posted Oct 28, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

GPS 수신기에서 현재 위치를 받는 것은 소프트웨어 입장에서 보면 그리 어려운 일은 아니다. 그러나 GPS 수신기가 쏟아내는 정보들을 가공하고 제대로 사용하기 위해서는 GPS의 원리나 구성에 대한 기본적인 지식을 갖고 있어야 한다. 이번 연재에서는 GPS의 원리와 NMEA-0183 프로토콜에 대해 알아보고 간단한 위경도 표시 프로그램을 제작하여 GPS에 대한 이해를 높이고자 한다.


꼬부랑 할머니가 휴대폰 하나 달랑 들고서 외국인을 목적지까지 친절히 안내해준다. 알고 보니 할머니는 휴대폰의 네비게이션 기능을 사용해 길 안내를 해준 것이다. 굉장히 세련된 할머니다. 이것은 한 통신사의 이미지 광고의 한 장면이다. GPS(Global Positioning System)를 사용한 네비게이션 시스템은 불과 최근 1~2년 사이에 대중화되어 누구나 쉽게 접할 수 있는 친근한 제품이 되었다. 5년 전 필자는 강남역 부근에서 숙소의 위치를 묻는 일본인을 등 떠밀 듯 택시에 태워 보내야만 했었다. 만약 ‘길치’인 필자에게 네비게이션 PDA가 있었더라면 폼나게 길안내를 해줬을 것이다.


전국의 길치들에게 한줄기 구원의 빛을 전해줄 GPS는 지구 주위를 맴도는 24개의 인공위성으로부터 위치 신호를 받아 자신의 현재 위치, 고도, 이동 속도 등을 알려주는 시스템을 말한다. 이렇게 인공위성 기반의 위치 확인 시스템인 GPS는 크게 다음과 같은 3가지 요소로 이뤄져 있다.


◆ Space Segment : 고도 2만 200km 상공에서 12시간 주기로 지구 주위를 맴도는 24개의 GPS 인공위성을 말한다. 이 중 21개가 주 위성이며, 나머지 3개는 예비용 위성이다. 수명이 다한 인공위성을 대체하기 위해 지속적으로 새 위성을 발사하고 있기 때문에 실제로는 24개 이상의 GPS 위성이 지구를 맴돌고 있다. 다른 인공위성이 그렇듯 GPS 인공위성들도 정해진 궤도를 따라 공전하는데, 한 개의 궤도면을 따라 4개의 인공위성이 공전을 하며, 이러한 궤도면이 모두 6개가 있다. 궤도면은 적도면과 55도 차이를 이루며 각 궤도면은 60도씩 떨어져 있다. 이런 위성의 배치로 인해 지구상의 어느 곳에서나 동시에 5개에서 8개의 위성을 볼 수 있다.


◆ Control Segment : 세계 각지에 위치한 지상 관측소를 말한다. 지상 관측소에서는 GPS 인공위성이 보내는 신호를 받아 위성의 위치와 속도, 위성에 있는 원자 시계 등을 지속적으로 모니터링한다. 주 관측소에서는 정확한 위성의 위치와 시간 데이터를 계산해 결과 값을 주기적으로 인공위성에 송신한다.


◆ User Segment : GPS 수신기와 사용자를 말한다. GPS 수신기는 인공위성으로부터 받은 신호를 위치, 속도, 시간 등의 정보로 변환한다.

TAG •

List of Articles
No. Subject Author Date Views
25 How to FFMpeg Windows Build with msys 1.0 and MinGW_64 file lizard2019 2019.06.05 2222
24 Ubuntu Server OS 한국어 모드로 설치 후 서버 콘솔에서 한글 깨짐 해결 방법 digipine 2017.10.31 2256
23 [ubuntu, 우분투] sendmail 설치 digipine 2017.11.02 2318
22 CMM / CMMI 란 무엇인가? digipine 2017.10.28 2473
21 LibVLC 미디어 재생기 프로그래밍 방법 C++, QT 엉뚱도마뱀 2018.04.20 2510
20 초고속망 통신사 DNS 서버 주소 모음 - DNS 설정 digipine 2017.11.03 2638
19 WIN CE, GPS - NMEA protocol - GPS Virtual Driver digipine 2017.10.28 2846
18 Xcode 없이 맥에 '명령어 라인 도구(Command Line Tools)'를 설치하는 방법 엉뚱도마뱀 2018.12.26 2866
17 [Linux, OSX] pfctl - Packet FIlter Control 사용법 digipine 2017.11.02 3200
16 OpenAL 사용법 정리 1 digipine 2017.11.01 3404
15 [iOS] Bluetooth로 App을 백그라운드 모드로 실행는 방법 lizard2019 2020.02.11 3540
14 비밀번호 해쉬에 Salt(소금) 첨가하기 file 엉뚱도마뱀 2017.11.23 4284
13 난수발생기 개론 엉뚱도마뱀 2017.11.22 4332
12 공짜 무료 C/C++ 컴파일러들 file digipine 2017.10.28 4383
11 WinPCap과 Ethereal, Wireshark 을 이용한 스니핑(Sniffing) digipine 2017.10.29 5432
10 ATmega8 MCU 간의 TWI 기능을 이용한 I2C 통신 digipine 2017.11.02 6009
9 Phabricator 설치 가이드 우분투 16.04 기준 digipine 2017.11.02 6196
8 Photoshop CC 2018 한글 영문 변환 언어팩, 포토샵 언어변경 file 엉뚱도마뱀 2018.07.04 8535
7 FFT (Fast Fourier Transform) 고속 푸리에 변환 예제 소스 digipine 2017.10.29 12559
6 Linux init.d 에서 등록하기. 부팅 시 자동실행 설정 digipine 2017.11.03 12697
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6