GCS และการสื่อสาร
UAT 301 เทคโนโลยีระบบอากาศยานไร้คนขับ
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- อธิบายหน้าที่และสถาปัตยกรรมของสถานีควบคุมภาคพื้น (GCS) และลิงก์ C2 กับลิงก์ payload
- อธิบายระดับการทำงานร่วมกันของ GCS ตาม STANAG 4586
- อ่านไฟล์ภารกิจ .plan ของ QGroundControl แล้วตรวจระยะทาง เวลา และความสูงด้วยโปรแกรม
- คำนวณขอบฟ้าวิทยุและความสูงที่ต้องใช้เพื่อรักษาแนวสายตาวิทยุ
ทำไมต้องรู้
นักบินไม่ได้นั่งในอากาศยาน ทุกอย่างที่รู้และสั่งผ่าน สถานีควบคุมภาคพื้น (ground control station, GCS) และลิงก์วิทยุ ถ้า GCS แสดงข้อมูลผิดหรือวางแผนภารกิจพลาด โดรนที่สมบูรณ์ก็บินผิดได้ UAT 207 เรียนคลื่นวิทยุ MAVLink และ failsafe ไปแล้ว โมดูลนี้มองในระดับระบบ: GCS ประกอบด้วยอะไร ตรวจแผนภารกิจอย่างไรก่อนอัปโหลด และลิงก์ไปได้ไกลแค่ไหน
สถาปัตยกรรม GCS
GCS มีหน้าที่หลัก คือ วางแผนภารกิจ สั่งการและเฝ้าดูอากาศยานผ่าน ลิงก์ C2 (command and control) แสดงและบันทึกข้อมูลจาก payload ผ่าน ลิงก์ payload และส่งต่อข้อมูลให้ผู้ใช้ (Fahlstrom และคณะ) ลิงก์ C2 ต้องการอัตราข้อมูลต่ำแต่ต้องน่าเชื่อถือสูง ส่วนลิงก์วิดีโอต้องการอัตราข้อมูลสูงแต่ทนการสูญหายบางส่วนได้ ระบบขนาดเล็กอาจรวมสองลิงก์ในวิทยุเดียว แต่ต้องจัดลำดับความสำคัญให้ข้อมูล C2 ก่อนเสมอ
มาตรฐาน NATO STANAG 4586 กำหนดส่วนต่อประสานมาตรฐานระหว่าง GCS กับอากาศยานต่างผู้ผลิต และแบ่ง ระดับการทำงานร่วมกัน (level of interoperability, LOI) เป็น 5 ระดับ (Serrano, NATO STO): ระดับ 1 รับหรือส่งข้อมูล payload และ metadata ทางอ้อม ระดับ 2 รับหรือส่งโดยตรงแต่ไม่ควบคุมอากาศยาน ระดับ 3 ควบคุมและเฝ้าดู payload ระดับ 4 ควบคุมและเฝ้าดูอากาศยานยกเว้นการขึ้นและลง และระดับ 5 ควบคุมอากาศยานรวมถึงการขึ้นและลง แนวคิดนี้ใช้ได้กับระบบพลเรือนเช่นกัน: ก่อนซื้อ ให้ถามว่า GCS ของระบบใช้โพรโทคอลเปิด เช่น MAVLink ที่ QGroundControl อ่านได้ หรือผูกกับซอฟต์แวร์ของผู้ผลิตรายเดียว
ตรวจแผนภารกิจก่อนอัปโหลด
QGroundControl บันทึกภารกิจเป็นไฟล์ .plan รูปแบบ JSON ภายในมี mission.items แต่ละรายการมี command ตามรหัสคำสั่ง MAVLink เช่น 16 คือบินไปจุดเส้นทาง (MAV_CMD_NAV_WAYPOINT) 22 คือขึ้นบิน (MAV_CMD_NAV_TAKEOFF) และ 20 คือกลับจุดขึ้นบิน (MAV_CMD_NAV_RETURN_TO_LAUNCH) และ params เจ็ดค่าซึ่งสามค่าท้ายคือละติจูด ลองจิจูด และความสูง หน่วยความรู้เรื่อง QGroundControl ของคลังความรู้โดรนสาธิตการต่อ SITL วางจุดเส้นทาง และส่งออกไฟล์ภารกิจ
ตัวอย่างที่ 1 ตรวจไฟล์ .plan ด้วยโปรแกรม
ภารกิจสำรวจน้ำท่วมของ VTOL ที่ความเร็ว 16 m/s (พิกัดสมมติ) โปรแกรมคำนวณระยะแต่ละช่วง เวลาบิน ระยะไกลสุดจากจุดขึ้นบิน และตรวจความสูงเทียบเพดาน 90 m ที่ใช้ในการบินทั่วไปตามกฎ กพท.
import math
plan = {"fileType": "Plan", "version": 1, "groundStation": "QGroundControl",
"mission": {"version": 2, "cruiseSpeed": 16, "plannedHomePosition": [14.0340, 100.6120, 5.0],
"items": [
{"type": "SimpleItem", "command": 22, "frame": 3, "params": [0, 0, 0, None, 14.0340, 100.6120, 40]},
{"type": "SimpleItem", "command": 16, "frame": 3, "params": [0, 0, 0, None, 14.0450, 100.6200, 90]},
{"type": "SimpleItem", "command": 16, "frame": 3, "params": [0, 0, 0, None, 14.0450, 100.6400, 90]},
{"type": "SimpleItem", "command": 16, "frame": 3, "params": [0, 0, 0, None, 14.0410, 100.6400, 90]},
{"type": "SimpleItem", "command": 16, "frame": 3, "params": [0, 0, 0, None, 14.0410, 100.6200, 120]},
{"type": "SimpleItem", "command": 20, "frame": 2, "params": [0, 0, 0, 0, 0, 0, 0]},
]}}
MAX_ALT = 90 # m เหนือจุดขึ้นบิน (frame 3)
def haversine(lat1, lon1, lat2, lon2, r=6_371_000):
p1, p2 = math.radians(lat1), math.radians(lat2)
dp, dl = p2 - p1, math.radians(lon2 - lon1)
h = math.sin(dp / 2) ** 2 + math.cos(p1) * math.cos(p2) * math.sin(dl / 2) ** 2
return 2 * r * math.asin(math.sqrt(h))
m = plan["mission"]
home = m["plannedHomePosition"][:2]
points, problems = [home], []
for i, it in enumerate(m["items"], 1):
if it["command"] in (16, 22):
lat, lon, alt = it["params"][4:7]
points.append([lat, lon])
if alt > MAX_ALT:
problems.append(f"item {i}: altitude {alt} m > {MAX_ALT} m")
if m["items"][-1]["command"] != 20:
problems.append("mission does not end with RETURN_TO_LAUNCH")
points.append(home)
legs = [haversine(*points[k], *points[k + 1]) for k in range(len(points) - 1)]
far = max(haversine(*home, *p) for p in points)
print("legs (m):", [round(x) for x in legs])
print(f"total {sum(legs) / 1000:.2f} km, {sum(legs) / m['cruiseSpeed'] / 60:.1f} min at {m['cruiseSpeed']} m/s, farthest {far / 1000:.2f} km from home")
print("problems:", problems or "none")
legs (m): [0, 1497, 2157, 445, 2157, 1162]
total 7.42 km, 7.7 min at 16 m/s, farthest 3.26 km from home
problems: ['item 5: altitude 120 m > 90 m']
โปรแกรมพบจุดเส้นทางที่สูงเกินเพดาน ซึ่งมองข้ามได้ง่ายเมื่อดูบนแผนที่ในหน้าจอ การตรวจไฟล์ภารกิจด้วยโปรแกรมก่อนอัปโหลดทุกครั้งจึงเป็นด่านความปลอดภัยที่ถูกและได้ผล เวลาบินที่คำนวณยังไม่รวมการเลี้ยว การขึ้นลง และลม จึงต้องเผื่อเพิ่ม
ลิงก์ไปได้ไกลแค่ไหน
นอกจากกำลังส่งและความไวของเครื่องรับ (link budget ใน UAT 207) ลิงก์ในย่าน VHF ขึ้นไปยังถูกจำกัดด้วยความโค้งของโลก คลื่นวิทยุหักเหในบรรยากาศเล็กน้อย จึงคิดเหมือนโลกมีรัศมีใหญ่ขึ้น เท่า (ITU-R P.834) ขอบฟ้าวิทยุระหว่างเสาอากาศสูง และ เมตร ประมาณ km ในทางปฏิบัติ ต้นไม้ อาคาร และภูมิประเทศมักบังก่อนถึงขอบฟ้า และต้องเว้นเขต Fresnel ให้โล่งด้วย
ตัวอย่างที่ 2 ขอบฟ้าวิทยุและความสูงขั้นต่ำ
import math
def radio_horizon_km(h1, h2):
return 4.12 * (math.sqrt(h1) + math.sqrt(h2))
def min_drone_alt(d_km, h_gcs):
x = d_km / 4.12 - math.sqrt(h_gcs)
return max(0.0, x) ** 2
print(f"GCS 2 m, drone 90 m: horizon {radio_horizon_km(2, 90):.1f} km")
print(f"GCS 10 m mast, drone 90 m: horizon {radio_horizon_km(10, 90):.1f} km")
for d in (5, 20, 40):
print(f"to keep radio line of sight at {d:>2} km with a 2 m antenna the drone must be above {min_drone_alt(d, 2):.1f} m")
GCS 2 m, drone 90 m: horizon 44.9 km
GCS 10 m mast, drone 90 m: horizon 52.1 km
to keep radio line of sight at 5 km with a 2 m antenna the drone must be above 0.0 m
to keep radio line of sight at 20 km with a 2 m antenna the drone must be above 11.8 m
to keep radio line of sight at 40 km with a 2 m antenna the drone must be above 68.8 m
พื้นที่ทำแผนที่ของกรณีนี้อยู่ห่างไม่ถึง 4 km ขอบฟ้าวิทยุจึงไม่เป็นข้อจำกัด แต่ถ้าต้องค้นหาผู้ประสบภัยไกล 40 km ต้องบินสูงเกือบ 70 m เพียงเพื่อพ้นความโค้งของโลก ยังไม่นับสิ่งกีดขวาง ซึ่งเป็นการบินนอกระยะสายตาที่ต้องได้รับอนุญาตเฉพาะ
ปฏิบัติการประจำโมดูล
ปฏิบัติการ: วางแผนและตรวจภารกิจใน SITL
- เปิด SITL ของ ArduPilot หรือ PX4 แล้วต่อ QGroundControl ตรวจว่า telemetry ครบและเวลาในระบบถูกต้อง
- วางภารกิจสำรวจพื้นที่ในวิทยาเขตด้วย Survey pattern แล้วบันทึกเป็นไฟล์ .plan
- แก้ตัวอย่างที่ 1 ให้อ่านไฟล์จริงด้วย
json.loadตรวจความสูง ระยะไกลสุด และคำสั่งสุดท้าย - จำลองการบินใน SITL เทียบเวลาจริงกับเวลาที่โปรแกรมคำนวณ แล้วอธิบายส่วนต่าง
- คำนวณขอบฟ้าวิทยุของจุดตั้ง GCS ที่เลือก และระบุสิ่งกีดขวางที่อาจบังลิงก์
ข้อผิดพลาดที่พบบ่อย
ระวัง
- อัปโหลดภารกิจโดยไม่ตรวจความสูงและคำสั่งสุดท้าย
- สับสน frame ของความสูง ระหว่างเหนือจุดขึ้นบินกับเหนือระดับทะเล
- ให้ลิงก์วิดีโอแย่งแบนด์วิดท์ของ C2
- คิดว่าลิงก์ไปได้ถึงขอบฟ้าวิทยุ โดยไม่ดูสิ่งกีดขวาง
- ผูกระบบกับซอฟต์แวร์ GCS ปิด โดยไม่ประเมินผลระยะยาว
สรุป
- GCS ทำหน้าที่วางแผน สั่งการ แสดงผล บันทึก และส่งต่อข้อมูล ผ่านลิงก์ C2 และลิงก์ payload ที่มีความต้องการต่างกัน
- STANAG 4586 แบ่งระดับการทำงานร่วมกันของ GCS เป็น 5 ระดับ และส่งเสริมส่วนต่อประสานมาตรฐาน
- ไฟล์ .plan เป็น JSON ที่ตรวจด้วยโปรแกรมได้ก่อนอัปโหลดทุกครั้ง
- ขอบฟ้าวิทยุ ≈ 4.12(√h₁ + √h₂) km แต่สิ่งกีดขวางมักจำกัดก่อน
แบบฝึกตรวจความเข้าใจ
- ลิงก์ C2 กับลิงก์วิดีโอต้องการคุณสมบัติต่างกันอย่างไร
- ในไฟล์ .plan คำสั่ง 16 และ 20 หมายถึงอะไร
- เสาอากาศ 4 m และโดรนที่ 100 m ขอบฟ้าวิทยุประมาณเท่าใด
- ทำไมต้องตรวจไฟล์ภารกิจด้วยโปรแกรม แม้ดูบนแผนที่แล้ว
- ถ้าโดรนต้องบินไกล 30 km จาก GCS ที่เสาอากาศสูง 2 m ต้องบินสูงอย่างน้อยเท่าใดเพื่อพ้นความโค้งของโลก
เฉลย
- C2 อัตราข้อมูลต่ำแต่ต้องน่าเชื่อถือสูง วิดีโออัตราข้อมูลสูงแต่ทนการสูญหายได้บางส่วน
- 16 บินไปจุดเส้นทาง 20 กลับจุดขึ้นบิน
- km
- ความสูงเกินเพดาน frame ผิด หรือคำสั่งสุดท้ายหาย มองข้ามได้ง่ายบนหน้าจอ
- m
สรุปสูตรสำคัญ
| ระยะวงกลมใหญ่ (haversine) | |
| ขอบฟ้าวิทยุ (k = 4/3) |
แหล่งอ้างอิงหลัก
- QGroundControl. QGroundControl user guide. link
- QGroundControl Dev Team. Plan file format. QGroundControl developer guide. link
- MAVLink Development Team. MAVLink common message set (common.xml). link
- Serrano, D. (2015). Key initiatives for interoperability through standardization: Applicability to small unmanned vehicles (STO-EN-SCI-271). NATO Science and Technology Organization. link
- International Telecommunication Union. (2017). Effects of tropospheric refraction on radiowave propagation (Recommendation ITU-R P.834-9). link
- International Telecommunication Union. (1994). Definitions of terms relating to propagation in non-ionized media (Recommendation ITU-R P.310-9). link
- Fahlstrom, P. G., Gleason, T. J., & Sadraey, M. H. (2022). Introduction to UAV systems (5th ed.). Wiley. link
- สำนักงานการบินพลเรือนแห่งประเทศไทย. (2569). ประกาศ กพท. เรื่อง หลักเกณฑ์และวิธีการในการอนุญาตให้ผู้บังคับหรือปล่อยอากาศยานซึ่งไม่มีนักบิน ประเภทอากาศยานที่ควบคุมการบินจากภายนอก ที่มีน้ำหนักไม่เกิน 25 กิโลกรัม ปฏิบัติแตกต่างไปจากเงื่อนไขที่กำหนด พ.ศ. 2569 (มีผล 17 พฤษภาคม 2569). link
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย
หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz