คำถามที่ผมถูกถามบ่อยเกี่ยวกับ GPS ก็คงเป็นเรื่องของการเขียนโปรแกรมเพื่อไปรับ streaming data จาก GPS โดยเฉพาะใน application ประเภท GPS Tracking หลายท่านที่ทำ application ด้านนี้อาจจะไม่รู้จักหรือไม่คุ้นเคยทำให้คิดว่ายาก จริงๆแล้วไม่ยากเลยครับ ปัจจุบัน GPS ราคาถูกลงมาก หลายท่านอาจจะไม่รู้สึกนักแต่สำหรับผมหรือคนที่เคยใช้เครื่อง GPS แบบ handheld ราคาเครื่องละ 50000 มาก่อนอาจจะสัมผัสได้ จริงๆแล้ว GPS มีหลายแบบ หลายรุ่นตั้งแต่ราคาหลักหมื่นถึงหลักล้าน ที่สำคัญการเรียนรู้ด้าน GPS ก็เป็นอีกศาสตร์ที่มีรายละเอียดและองค์ความรู้ให้เราได้ศึกษากันมากมาย โดยเฉพาะเรื่องการรังวัดขั้นสูง การใช้งาน GPS ก็มีแพร่หลายทั้งที่อยู่ในรูปแบบ navigation และแบบที่อยู่บนมือถือ เรียกว่า GPS กลายเป็นฟังก์ชั่นหนึ่งของมือถือและ Pocket PC ไปแล้ว ดังนั้นจุดนี้จึงน่าจะเป็นอีกช่องทางในการพัฒนา application ปัจจุบันในเมืองไทยยังถือว่าน้อยเมื่อเทียบกับต่างประเทศ

                    ที่นี้ก็มาถึงเรื่องของ NMEA Sentence หลักการการทำงานของ mobile application ผมไม่ขอลงรายละเอียดนะครับ หลักๆก็คือการ connect กับ COM Port ที่ต่อกับ GPS จากนั้นก็เขียนโปรแกรมไปพาส streaming data ที่ได้ โดยทั่วไป GPS แถบจะทุกรุ่นมักจะใช้โปรโตคอลมาตรฐานคือ NMEA(NMEA 0183) ที่พัฒนาโดย National Marine Electronics Association (NMEA) ในตัว NMEA มีรายละเอียดและชนิดsentencesย่อยไปตามประเภทการใช้งาน แต่โดยรวมจะเก็บ infomation หลักๆของ GPS ไว้ เช่น position, velocity, time, DOP และอื่นๆ ปัจจุบันที่ใช้งานกันอยู่คือ NEMA 2.0-2.3 มีเพิ่ม message บางส่วนเกี่ยวกับ DGPS เข้ามา ที่ต้องเข้าใจคือ GPS แต่ล่ะยี่ห้องจะ support โปรโคอลของ NMEA ที่ต่างกัน มากบ้างน้อยบ้างตามการใช้งานดังนั้นก่อนพัฒนาต้องทราบรายละเอียดในจุดนี้ก่อน เช่น SiRF chipset รองรับ GPGGA, GPGLL, GPGSA, GPGSV, GPRMC, และ GPVTG รายละเอียดเหล่านี้อ่านได้จาก specification ของ NEMA ครับ ด้านล่างเป็นตัวอย่างประเภทของ Sentence บน NMEA

AAM – Waypoint Arrival Alarm
ALM – Almanac data
APA – Auto Pilot A sentence
APB – Auto Pilot B sentence
BOD – Bearing Origin to Destination
BWC – Bearing using Great Circle route
DTM – Datum being used.
GGA – Fix information
GLL – Lat/Lon data
GSA – Overall Satellite data
GSV – Detailed Satellite data
MSK – send control for a beacon receiver
MSS – Beacon receiver status information.
RMA – recommended Loran data
RMB – recommended navigation data for gps
RMC – recommended minimum data for gps
RTE – route message
VTG – Vector track an Speed over the Ground
WCV – Waypoint closure velocity (Velocity Made Good)
WPL – Waypoint information
XTC – cross track error
XTE – measured cross track error
ZTG – Zulu (UTC) time and time to go (to destination)
ZDA – Date and Time
HCHDG – Compass output
PSLIB – Remote Control for a DGPS receiver

                     GPS เป็นการรังวัดค่าพิกัดบน Geodetic Coordinate system บน ellipsoid WGS84 ซึ่งค่าความสูงที่ได้เป็น Ellipsoidal Height ไม่ใช้ความสูงเหนือ Geoid หรือเหนือน้ำทะเลปานกลางนะครับ รายละเอียดเบื้องต้นเหล่านี้เป็นส่วนที่ผู้พัฒนา GPS Application ต้องทราบ เพื่อให้เห็นภาพผมขอยกตัวอย่างชุดโปรโตคอลที่ใช้งานบ่อยคือ GPGGA เป็นส่วนที่เก็บข้อมูลสำคัญจากดาวเทียม GPS

                     $GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M,,,,0000*18

Name Example Units Description
Message ID $GPGGA   GGA protocol header
UTC Time 161229.487   hhmmss.sss
Latitude 3723.2475   ddmm.mmmm
N/S Indicator N   N=north or S=south
Longitude 12158.3416   dddmm.mmmm
E/W Indicator W   E=east or W=west
Position Fix Indicator 1   See Table 1-4
Satellites Used 7   Range 0 to 12
HDOP 1   Horizontal Dilution of Precision
MSL Altitude 9 meters
Units M meters
Geoid Separation   meters
Units M meters
Age of Diff. Corr.   second Null fields when DGPS is not used
Diff. Ref. Station ID 0000
Checksum *18
<CR> <LF>     End of message termination

 

                         GPS บางรุ่นก็ใช้ GPRMC(Recommended Minimum Specific GNSS Data) ซึ่งสั้นกว่า

$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,,A*10

                        เมื่อเข้าใจรายละเอียดการเขียนโปรแกรมไป parse ชุดข้อมูลก็ไม่ยากแล้วใช่ไหมครับ สำหรับรายละเอียดเพิ่มเติมเข้าไปอ่านได้ที่ http://www.digitalmobilemap.com/index.php?slug=nmea-sentence เขียนอธิบายไว้ได้อย่างละเอียดและมียกตัวอย่าง output จาก GPS รุ่นต่างๆด้วย

1-copy