อากาศและน่านฟ้า
UAT 304 การวางแผนภารกิจและการบินอัตโนมัติของระบบอากาศยานไร้คนขับ
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- อ่านรายงาน METAR ทีละกลุ่ม และถอดรหัสด้วยโปรแกรม
- ใช้ข้อมูล METAR ประกอบการตัดสินใจบิน โดยรู้ขอบเขตของรายงาน
- ตรวจจุดบินกับเงื่อนไขระยะ 9 km จากสนามบินตามประกาศ กพท.
- ตรวจขอบเขตพื้นที่ทั้งแนวราบ แนวดิ่ง และเวลา
ทำไมต้องรู้
หน่วยความรู้เรื่อง METAR และ TAF ของคลังความรู้โดรนสอนถอดรหัสสถานี เวลา ลม ทัศนวิสัย และเมฆ พร้อมเข้าใจขอบเขตของรายงาน ส่วนหน่วยความรู้เรื่องแผนที่และข่าวสารการบินเตือนให้ตรวจขอบเขตพื้นที่ทั้งแนวราบ แนวดิ่ง และเวลา ไม่ตัดสินจากสีบนแผนที่อย่างเดียว โมดูลนี้ทำทั้งสองเรื่องด้วยโปรแกรม เพื่อให้ตรวจซ้ำได้ทุกครั้ง ข้อมูลในตัวอย่างเป็นข้อมูลสมมติ
อ่าน METAR
METAR คือรายงานสภาพอากาศประจำชั่วโมงของสนามบิน ในประเทศไทย เอกสาร AIP GEN 3.5 ระบุว่ากรมอุตุนิยมวิทยาเป็นผู้ให้บริการอุตุนิยมวิทยาการบิน และสำนักงานอุตุนิยมวิทยาประจำสนามบินออกรายงาน METAR และ TAF ตามคำอธิบายของศูนย์อากาศการบินของ NOAA กลุ่มลมเขียนเป็นทิศสามหลักตามด้วยความเร็ว ถ้ามีลมกระโชกใช้ G ตามด้วยความเร็วกระโชก หน่วย KT (น็อต) ทัศนวิสัยของรายงานนานาชาติเป็นเมตร (9999 หมายถึง 10 km ขึ้นไป) อุณหภูมิและจุดน้ำค้างเป็น °C โดยใช้ M แทนค่าติดลบ และความกดอากาศ Q ตามด้วยหน่วย hPa ส่วน CAVOK หมายถึงทัศนวิสัย 10 km ขึ้นไป ไม่มีเมฆต่ำกว่า 1,500 m ไม่มีเมฆคิวมูโลนิมบัส และไม่มีสภาพอากาศสำคัญ
ตัวอย่างที่ 1 ถอดรหัส METAR สองรายงาน
import re
reports = [
"METAR VTBD 150100Z 21012G22KT 9999 FEW020 SCT100 30/24 Q1008 NOSIG",
"METAR VTBD 150700Z 24018G32KT 4000 TSRA FEW015CB BKN030 27/25 Q1006",
]
KT = 0.5144
def decode(r):
out = {"station": r.split()[1]}
m = re.search(r"\b(\d{2})(\d{2})(\d{2})Z\b", r)
out["utc"] = f"day {m.group(1)} {m.group(2)}:{m.group(3)}Z"
m = re.search(r"\b(\d{3}|VRB)(\d{2,3})(?:G(\d{2,3}))?KT\b", r)
out["wind"] = f"{m.group(1)} deg {int(m.group(2)) * KT:.1f} m/s" + (f", gust {int(m.group(3)) * KT:.1f} m/s" if m.group(3) else "")
m = re.search(r"KT (\d{4})\b", r)
vis = int(m.group(1))
out["visibility"] = ">= 10 km" if vis == 9999 else f"{vis / 1000:.1f} km"
out["thunderstorm"] = bool(re.search(r"\bTS|CB\b", r))
m = re.search(r"\b(M?\d{2})/(M?\d{2})\b", r)
t, td = (int(x.replace("M", "-")) for x in m.groups())
out["temp/dew"] = f"{t}/{td} C, spread {t - td} C"
out["QNH"] = int(re.search(r"\bQ(\d{4})\b", r).group(1))
return out
for r in reports:
print(decode(r))
{'station': 'VTBD', 'utc': 'day 15 01:00Z', 'wind': '210 deg 6.2 m/s, gust 11.3 m/s', 'visibility': '>= 10 km', 'thunderstorm': False, 'temp/dew': '30/24 C, spread 6 C', 'QNH': 1008}
{'station': 'VTBD', 'utc': 'day 15 07:00Z', 'wind': '240 deg 9.3 m/s, gust 16.5 m/s', 'visibility': '4.0 km', 'thunderstorm': True, 'temp/dew': '27/25 C, spread 2 C', 'QNH': 1006}
รายงานเช้า (08:00 น. เวลาไทย) ลมกระโชกราว 11 m/s ทัศนวิสัยดี รายงานบ่าย (14:00 น.) มีพายุฝนฟ้าคะนองและเมฆคิวมูโลนิมบัส ทัศนวิสัยลดเหลือ 4 km และอุณหภูมิกับจุดน้ำค้างห่างกันเพียง 2 °C ซึ่งแปลว่าอากาศชื้นมาก ข้อควรจำคือ METAR วัดที่สนามบิน ห่างจากจุดงานหลายกิโลเมตรอาจต่างกันมาก จึงต้องใช้ร่วมกับข้อมูลแหล่งอื่นตามโมดูล 1
ระยะ 9 km จากสนามบิน
ประกาศ กพท. พ.ศ. 2561 เรื่องแนวทางการอนุญาตให้บินภายในระยะ 9 km (5 ไมล์ทะเล) จากสนามบินหรือที่ขึ้นลงชั่วคราว อ้างข้อห้ามบินภายใน 9 km จากสนามบิน เว้นแต่เจ้าของหรือผู้ดำเนินการสนามบินอนุญาต และต้องประสานหน่วยควบคุมการจราจรทางอากาศก่อน ระยะวัดจากกึ่งกลางทางวิ่ง ประกาศกำหนดเงื่อนไขความสูงไว้ด้วย: ห้ามบินในแนวร่อนขึ้นลงและภายใน 1 km จากกึ่งกลางทางวิ่ง ระยะ 1–4 km สูงไม่เกิน 45 m และระยะ 4–9 km สูงไม่เกิน 90 m ทั้งยังต้องขึ้นทะเบียน แจ้งเหตุผล และได้รับความยินยอมเป็นหนังสือจากเจ้าของพื้นที่
ตัวอย่างที่ 2 ตรวจจุดบินกับเงื่อนไข 9 km
สนามบินสมมติ กึ่งกลางทางวิ่งอยู่ที่ (0, 0) ทางวิ่งวางแนว 030/210 องศา ทีมถือแถบกว้าง 1 km ตามแนวทางวิ่งไปถึง 9 km เป็นแนวร่อนขึ้นลง (สมมติฐานของทีม ต้องยืนยันกับสนามบินจริง) พิกัดเป็นเมตรตะวันออกและเหนือ
import math
RWY_HDG = 30 # องศา
CORRIDOR_HALF = 500 # m ครึ่งความกว้างแนวร่อน (สมมติฐานของทีม)
points = {"A": (2500, 900, 40), "B": (1600, 2800, 40), "C": (5600, 3000, 80), "D": (9500, 1000, 110)} # x, y, ความสูง m
u = (math.sin(math.radians(RWY_HDG)), math.cos(math.radians(RWY_HDG))) # เวกเตอร์ตามแนวทางวิ่ง
for name, (x, y, alt) in points.items():
d = math.hypot(x, y)
across = abs(x * u[1] - y * u[0]) # ระยะตั้งฉากจากแนวทางวิ่ง
if d > 9000:
verdict = f"outside 9 km, general 90 m limit -> {'ok' if alt <= 90 else 'TOO HIGH'}"
elif d < 1000 or across < CORRIDOR_HALF:
verdict = "NOT ALLOWED (within 1 km or in approach/departure path)"
else:
limit = 45 if d <= 4000 else 90
verdict = f"needs aerodrome permission, max {limit} m -> {'ok' if alt <= limit else 'TOO HIGH'}"
print(f"{name}: {d / 1000:.2f} km from runway midpoint, {across:.0f} m off axis, {alt} m -> {verdict}")
A: 2.66 km from runway midpoint, 1715 m off axis, 40 m -> needs aerodrome permission, max 45 m -> ok
B: 3.22 km from runway midpoint, 14 m off axis, 40 m -> NOT ALLOWED (within 1 km or in approach/departure path)
C: 6.35 km from runway midpoint, 3350 m off axis, 80 m -> needs aerodrome permission, max 90 m -> ok
D: 9.55 km from runway midpoint, 7727 m off axis, 110 m -> outside 9 km, general 90 m limit -> TOO HIGH
จุด A อยู่ห่างแนวทางวิ่งพอ แต่ยังอยู่ในระยะ 1–4 km จึงต้องบินไม่เกิน 45 m จุด B แม้บินต่ำเพียง 40 m แต่อยู่ห่างแนวทางวิ่งไม่ถึง 500 m จึงถือว่าอยู่ในแนวร่อนตามสมมติฐานของทีม ห้ามบิน จุด C อยู่ระยะ 4–9 km บินได้ถึง 90 m เมื่อได้รับอนุญาต ส่วนจุด D อยู่นอก 9 km แต่ยังต้องบินตามเงื่อนไขทั่วไป คือสูงไม่เกิน 90 m ซึ่งความสูงที่วางไว้ 110 m เกินแล้ว ต้องแก้แผน
ขอบเขตแนวดิ่งและเวลา
พื้นที่หวงห้ามและพื้นที่อันตรายบางแห่งมีผลเฉพาะบางความสูงหรือบางช่วงเวลา และ กพท. ออกประกาศเพิ่มหรือยกเลิกพื้นที่ได้ตามสถานการณ์ ก่อนงานทุกครั้งต้องตรวจประกาศล่าสุดใน UAS Portal และประกาศพื้นที่ที่เกี่ยวข้อง แล้วบันทึกวันที่และเลขประกาศที่ตรวจไว้ในแฟ้มภารกิจ
ปฏิบัติการประจำโมดูล
ปฏิบัติการ: ตรวจอากาศและน่านฟ้าของวันงาน
- ดึง METAR และ TAF ของสนามบินที่ใกล้วิทยาเขตที่สุด ถอดรหัสด้วยตัวอย่างที่ 1 และด้วยมือเพื่อเทียบ
- เทียบกับข้อมูลเครื่องวัดลมที่จุดงาน อธิบายส่วนต่าง
- วัดระยะจากจุดงานถึงกึ่งกลางทางวิ่งของสนามบินที่ใกล้ที่สุด ใช้ตัวอย่างที่ 2 ตรวจเงื่อนไข
- ตรวจประกาศพื้นที่ล่าสุดของ กพท. บันทึกเลขและวันที่ของประกาศที่ตรวจ
- สรุปผลเป็นส่วนหนึ่งของแฟ้มภารกิจจากโมดูล 1
ข้อผิดพลาดที่พบบ่อย
ระวัง
- อ่านเวลาใน METAR เป็นเวลาไทย ทั้งที่เป็น UTC (Z)
- ลืมแปลงน็อตเป็น m/s ก่อนเทียบเกณฑ์ของผู้ผลิต
- ใช้ METAR ของสนามบินแทนสภาพที่จุดงาน
- วัดระยะจากอาคารผู้โดยสาร แทนกึ่งกลางทางวิ่ง
- ตัดสินจากสีบนแผนที่ โดยไม่ตรวจความสูงและเวลาของพื้นที่
สรุป
- METAR มีกลุ่มสถานี เวลา UTC ลม ทัศนวิสัย สภาพอากาศ เมฆ อุณหภูมิกับจุดน้ำค้าง และความกดอากาศ ถอดรหัสด้วยโปรแกรมได้
- METAR วัดที่สนามบิน ต้องใช้ร่วมกับข้อมูลที่จุดงาน
- ภายใน 9 km จากกึ่งกลางทางวิ่งต้องได้รับอนุญาต ห้ามในแนวร่อนและภายใน 1 km สูงไม่เกิน 45 m ที่ 1–4 km และ 90 m ที่ 4–9 km
- ตรวจพื้นที่ทั้งแนวราบ แนวดิ่ง และเวลา และบันทึกประกาศที่ตรวจ
แบบฝึกตรวจความเข้าใจ
- กลุ่ม 18015G25KT หมายถึงอะไร
- METAR เวลา 150300Z คือเวลาไทยกี่โมง
- จุดบินห่างกึ่งกลางทางวิ่ง 3 km นอกแนวร่อน สูงได้ไม่เกินเท่าใดเมื่อได้รับอนุญาต
- อุณหภูมิ 26 จุดน้ำค้าง 25 บอกอะไร
- ทำไม METAR ของสนามบินอาจไม่ตรงกับสภาพที่จุดงาน
เฉลย
- ลมจากทิศ 180 องศา 15 kt กระโชก 25 kt
- 10:00 น. (UTC + 7)
- 45 m
- อากาศชื้นมาก ใกล้อิ่มตัว อาจเกิดหมอกหรือเมฆต่ำ
- วัดที่สนามบินซึ่งอยู่ห่างออกไป สภาพพื้นที่และความสูงต่างกัน
สรุปสูตรสำคัญ
| ระยะจากกึ่งกลางทางวิ่ง | |
| ช่วงห่างอุณหภูมิกับจุดน้ำค้าง |
แหล่งอ้างอิงหลัก
- NOAA National Weather Service Aviation Weather Center. Aviation weather data (help). link
- Civil Aviation Authority of Thailand. (2024). AIP Thailand GEN 3.5 Meteorological services (AIRAC 2024-03-21). link
- Federal Aviation Administration. (2016). Aviation weather (AC 00-6B). link
- สำนักงานการบินพลเรือนแห่งประเทศไทย. (2561). ประกาศ สำนักงานการบินพลเรือนแห่งประเทศไทย เรื่อง แนวทางในการพิจารณาอนุญาตให้อากาศยานซึ่งไม่มีนักบิน ประเภทอากาศยานที่ควบคุมการบินจากภายนอกทำการบินภายในระยะเก้ากิโลเมตร (ห้าไมล์ทะเล) จากสนามบินหรือที่ขึ้นลงชั่วคราวของอากาศยาน พ.ศ. 2561. link
- สำนักงานการบินพลเรือนแห่งประเทศไทย. (2569). ข่าว กพท. ฉบับที่ 4/2569 ประกาศฉบับที่ 15 เงื่อนไขการบังคับอากาศยานซึ่งไม่มีนักบิน. link
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการในห้องแล็บหรือภาคสนามตามใบงาน พร้อม checklist ความปลอดภัย
หลักฐานการเรียนรู้: ใบงานที่ผ่านการตรวจและผล quiz