Skip to content
คอมโพเน็นต์ OpenGPSX
Concept ของ component คือผู้พัฒนาโปรแกรมทั่วๆไปสามารถนำ component ของผมไปใช้งานได้ง่าย ใช้เวลาน้อย โดยไม่ต้องมีความรู้เรื่อง GPS มาก ผมเขียนคอมโพเน็นต์ตัวนี้ขึ้นมาเพราะผมใช้ GPS บ่อย ตั้งแต่เครื่องมือถือทั่วๆไปเช่น Garmin หรือบน Pocket PC ก็เคยใช้ จนกระทั่งเครื่อง GPS ระดับ Precise เช่น Trimble, Leica ที่มีสนนราคาเรือนล้านบาท ใช้งานใน mode เช่น
Differential GPS (DGPS) ตั้งแต่ตั้ง Reference Station เอง จนถึงเช่าสัญญาณ DGPS จาก Omnistar หรือ Landstar
RTK (Real Time Kinematic) ที่ติดตั้ง Reference Station ประกอบกับอุปกรณ์ Radio Modem เพื่่อส่งสัญญาณ Correction ไปยังเครื่อง Rover ทำให้รับสัญญาณได้ละเอียดกว่าระบบ DGPS
Static หรือ Fast Static ใช้มากเพื่อขยายหมุดจากหมุด GPS ที่ทราบค่าพิกัดแล้วโดยการตั้งเครื่องรับ GPS ที่หมุด GPS แล้วนำเครื่อง GPS อีกเครื่องไปตั้งที่หมุดใหม่ ทำการรังวัดเก็บข้อมูล แล้วนำข้อมูลทั้งสองเครื่องไปคำนวณผ่านโปรแกรมต่างๆเช่น TGO, LGO หรือโปรแกรมอื่นๆของผู้ผลิต GPS
ก็เลยมีแรงบันดาลใจว่าน่าจะทำ component สำหรับ Lazarus ซักตัวหนึ่งที่สามารถ decode ประโยคต่างๆของ NMEA ได้ และนำข้อมูลเหล่านี้ไปแสดงผลเช่นวาดสัญลักษณ์ GPS บนท้องฟ้า แสดงความแรงของสัญญาณ GPS ตลอดจนวาดลูกศรแสดงเป้าหมายของ Waypoint ในการ programming ก็ไม่ถือว่าเป็นเรื่องยากหนักหนาสาหัส แต่ติดขัดคือผมมีงานประจำ และงานโปรแกรมมิ่งเป็นงานอดิเรก จึงมีเวลาค่อนข้างน้อย แต่ผมก็พยายามจนสามารถออกรุ่นแรกได้คือรุ่น 0.3 ซึ่งความรู้สึกของผมน่าจะพอใช้งานได้
ความสามารถของ Component “OpenGPSX”
สำหรับ Features ของคอมโพเน็นต์ผมจะเรียงไปตาม Class หลักๆ ดังนี้ครับ
TGPSPortConnected เอาไว้ตั้งค่าการเชื่อมต่อกับเครื่อง GPS เช่นตั้งค่าการเชื่อมต่อกับ Serial Port เช่นตั้งค่า Com port, Baud rate, Parity, Data bit และ Stop bit เมื่อทำการเชื่อมต่อแล้ว class นี้สามารถดักจับข้อมูล NMEA ที่ผ่านทาง port ก่อนจะกระจายสตริงของ NMEA ผ่านทาง Event
แสดงการตั้งค่า Serial Port
TNMEADecode เป็น class ที่อ่านค่า NMEA ที่เครื่อง GPS ส่งมาให้ผ่าน TGPSPortConnected แล้ว decode รหัสของ NMEA ตามชนิดของ sentence เช่น $GPGSA, $GPGSV, $GPRMC, $GPGGA, $GPVTG, $GPGLL, $GPWPL, $GPRTE หรือของ Garmin บางส่วน
TGPSSkyPlot เป็น class ที่วาดรูปสัญลักษณ์ของ GPS บนท้องฟ้า เมื่อได้รับการแปล NMEA จากรูปประโยค $GPGSV
GPS Skyplot Viewer
TGPSSignalStrength แสดงความแรงของสัญญาณของ GPS เมื่อได้รับการแปล NMEA จากประโยค $GPGSV เช่นเดียวกัน
GpS signal strength (แสดงในแนวราบ)
GPS signal strength (แสดงในแนวตั้ง)
TGPSTarget เป็นตัวบอกทิศทางจุดเป้าหมาย (Waypoint) ที่ต้องการจะไป โดยคอมโพเน็นต์จะคำนวณจากค่าพิกัดจุดเป้าหมายและค่าพิกัดปัจจุบันจาก GPS
แสดงทิศทางและระยะทางของจุดเป้าหมาย
ส่วนการ Implement ตัว Event จาก TNMEADecode สามารถแยกไปตามชนิดของประโยคของ NMEA ดังตัวอย่างรูปดัานล่างได้ง่ายๆ
แสดงการนำ NMEA ที่แปลแล้วมาใช้แสดงข้อมูลของ GPS
ไฟล์และส่วนประกอบของคอมโพเน็นต์
ส่วนใหญ่จะเขียนเองเกือบทั้งหมดยกเว้น การเชื่อมต่อกับ Serial port ผมดึงไฟล์จากคอมโพเน็นต์ “SdpoSerial” ซึ่งในคอมโพเน็นต์นี้พัฒนาต่อจาก Synaser โดยการเขียน class ขึ้นมา wrap “Synaser” ให้ใช้งานได้ง่าย ผมดัดแปลงโค้ดบ้างเล็กน้อยให้เหมาะสมกับการใช้งาน GPS ซึ่งไฟล์ที่นำมาใช้มีสองไฟล์คือ sdposerial.pas กับ synaser.pas
อื่นๆก็เขียนเองเกือบหมดรวมทั้ง class ที่ใช้คำนวณหาระยะทางและทิศทางบน Ellipsoid ถ้ายังไม่ลืมก็คือใช้อัลกอริที่มของ Vincenty ซึ่งผมได้แก้ bug ใน unit นี้ด้วย
ไฟล์และส่วนประกอบของคอมโพเน็นต์ OpenGPSX
ตอนหน้าผมจะลงลิงค์ให้ดาวน์โหลดคอมโพเน็นต์ OpenGPSX ซึ่งเราจะเริ่มเขียนโปรแกรมทดสอบเพื่อนำคอมโพเน็นต์นี้มาใช้กัน ติดตามตอนต่อไปได้ครับ
Related