Mission concept and assessment
UAT 304 UAS Mission Planning and Autonomous Flight
Lesson
By the end of this module you will be able to
- Write a mission concept that states the task, area, time, system and crew
- Compute the flight window from legal hours and sunrise and sunset times
- Decide to proceed, adjust or postpone from several weather sources using criteria set in advance
- Assess the site and record readiness evidence before starting
Why this matters
UAT 312 covered survey lanes, RTL energy and geofences. This course focuses on how a team decides to start work with reasons that can be checked. The drone knowledge base’s unit on defining the mission concept explains that a mission concept states what will be done, where, when, with which system and crew, and must include the surroundings and the changes that could invalidate its assumptions. Its unit on bringing weather into the mission plan recommends comparing several sources and recording the reasons before choosing to proceed, adjust or postpone. ISO 21384-3:2023 sets out UAS operational procedures from planning to after flight. The course case is a municipal operations centre that must inspect 10 flood-risk points on 15 October 2026. The weather figures are hypothetical.
The mission concept
A good mission concept answers five questions in writing: deliverable (for example images of all 10 risk points with coordinates), area (boundaries, heights, obstacles, people), time (when flight is possible and the deadline), system (aircraft, payload, charged batteries) and crew (pilot, observer, coordinator), and it lists what is not yet ready. A good-looking map with no times or boundaries is not a mission concept.
The flight window
CAAT News No. 4/2569 sets the general condition that flights may take place from 06:00 to 18:00. The periods 04:01–05:59 and 18:01–24:00 need an exemption, and flight from 00:01 to 04:00 is prohibited. Besides the legal hours, the work needs enough light, so the team computes sunrise and sunset with the NOAA equations, which use a zenith of 90.833° to allow for atmospheric refraction and the size of the sun.
Example 1 The flight window for 15 October 2026 in Bangkok
The team starts 15 minutes after sunrise and stops 15 minutes before sunset so that there is enough light for images, and intersects this with the legal hours.
import math
from datetime import date
LAT, LON, TZ = 13.75, 100.50, 7
DAY = date(2026, 10, 15)
BUFFER = 15 # minutes
def sunrise_sunset(lat, lon, day, tz):
g = 2 * math.pi / 365 * (day.timetuple().tm_yday - 1)
eqt = 229.18 * (0.000075 + 0.001868 * math.cos(g) - 0.032077 * math.sin(g)
- 0.014615 * math.cos(2 * g) - 0.040849 * math.sin(2 * g))
decl = (0.006918 - 0.399912 * math.cos(g) + 0.070257 * math.sin(g) - 0.006758 * math.cos(2 * g)
+ 0.000907 * math.sin(2 * g) - 0.002697 * math.cos(3 * g) + 0.00148 * math.sin(3 * g))
phi = math.radians(lat)
h = math.degrees(math.acos(math.cos(math.radians(90.833)) / (math.cos(phi) * math.cos(decl))
- math.tan(phi) * math.tan(decl)))
rise = 720 - 4 * (lon + h) - eqt + tz * 60
sset = 720 - 4 * (lon - h) - eqt + tz * 60
return rise, sset
def hhmm(m):
return f"{int(m // 60):02d}:{int(round(m % 60)):02d}"
rise, sset = sunrise_sunset(LAT, LON, DAY, TZ)
start = max(6 * 60, rise + BUFFER)
end = min(18 * 60, sset - BUFFER)
print(f"sunrise {hhmm(rise)}, sunset {hhmm(sset)}")
print(f"flight window {hhmm(start)}-{hhmm(end)} ({(end - start) / 60:.1f} h)")
sorties = [(3189, 3), (3144, 2), (3055, 3), (2130, 2)] # m, inspection points (from UAT 304 Module 3)
SPEED, HOVER_MIN, SWAP_MIN = 8, 1.0, 15
t = 8 * 60 # start at 08:00
for k, (length, n) in enumerate(sorties, 1):
fly = length / SPEED / 60 + n * HOVER_MIN
print(f"sortie {k}: {hhmm(t)}-{hhmm(t + fly)} ({fly:.1f} min)")
t += fly + SWAP_MIN
print(f"finished by {hhmm(t - SWAP_MIN)}, inside window: {t - SWAP_MIN <= end}")
sunrise 06:08, sunset 17:59
flight window 06:23-17:44 (11.3 h)
sortie 1: 08:00-08:10 (9.6 min)
sortie 2: 08:25-08:33 (8.6 min)
sortie 3: 08:48-08:58 (9.4 min)
sortie 4: 09:13-09:19 (6.4 min)
finished by 09:19, inside window: True
All four sorties finish well before noon, but a free window all day does not mean flying is possible all day. In the rainy season, thunderstorms often build in the afternoon, so the team schedules work in the morning and keeps spare time in case it must postpone.
Deciding from several weather sources
Each weather source has its own limits. A report from a nearby airport is measured at the airport, not at the work site; a site anemometer measures only one low point; a forecast gives trends ahead. The FAA’s Aviation Weather (AC 00-6B) explains weather phenomena that affect flight, and the PHAK stresses setting personal minimums in advance rather than deciding under pressure on site. The team in this case uses the worst value across all sources against the manufacturer’s and the organisation’s limits.
Example 2 Proceed or postpone?
Team limits: mean wind up to 10 m/s, gusts up to 12 m/s, visibility at least 5 km, and no thunderstorm (hypothetical data).
KT, KMH = 0.5144, 1 / 3.6
LIMITS = {"wind": 10.0, "gust": 12.0, "vis_km": 5.0}
sources = { # source: values converted from original units to m/s and km
"airport METAR 08:00": {"wind": 12 * KT, "gust": 22 * KT, "vis_km": 10, "ts": False},
"site anemometer 08:10": {"wind": 6.5, "gust": 11.8, "vis_km": None, "ts": False},
"forecast 14:00": {"wind": 20 * KMH, "gust": 50 * KMH, "vis_km": 6, "ts": True},
}
def decide(names):
worst_wind = max(sources[n]["wind"] for n in names)
worst_gust = max(sources[n]["gust"] for n in names)
vis = [sources[n]["vis_km"] for n in names if sources[n]["vis_km"] is not None]
reasons = []
if worst_wind > LIMITS["wind"]:
reasons.append(f"wind {worst_wind:.1f} m/s")
if worst_gust > LIMITS["gust"]:
reasons.append(f"gust {worst_gust:.1f} m/s")
if vis and min(vis) < LIMITS["vis_km"]:
reasons.append(f"visibility {min(vis)} km")
if any(sources[n]["ts"] for n in names):
reasons.append("thunderstorm")
return ("GO" if not reasons else "NO-GO"), reasons, worst_wind, worst_gust
for label, names in (("morning", ["airport METAR 08:00", "site anemometer 08:10"]), ("afternoon", ["forecast 14:00"])):
d, why, w, g = decide(names)
print(f"{label:<9} worst wind {w:.1f} m/s, gust {g:.1f} m/s -> {d} {why if why else ''}")
morning worst wind 6.5 m/s, gust 11.8 m/s -> GO
afternoon worst wind 5.6 m/s, gust 13.9 m/s -> NO-GO ['gust 13.9 m/s', 'thunderstorm']
The morning passes, even though the gust at the site is close to the limit. The afternoon fails on both the gust and the thunderstorm. Recording reasons like this means that if anyone later asks why the team did or did not fly, it can answer with data rather than feelings.
Site assessment
The drone knowledge base’s unit on site assessment and readiness recommends recording constraints, stakeholders, risks and evidence before deciding to start. The minimum list covers the take-off and landing point and an emergency landing point, the tallest obstacle, power lines, people and vehicles that may enter, GNSS and radio interference, landowners whose permission is needed, and the crew’s access route.
Module lab
Lab: a mission concept file
- Write a one-page mission concept for a point-inspection job on campus, answering the five questions in this lesson
- Compute the flight window for the day with Example 1 and schedule the sorties
- Collect weather from at least three sources on the morning of the job, decide with Example 2 and record the reasons
- Visit the site, photograph it and record the minimum list
- Present to the instructor, who decides ready or not ready, with a list of fixes
Common mistakes
Watch out
- Writing a plan with no times or boundaries
- Using one weather source, or picking only the sources you want to pass
- Setting limits on site under pressure
- Forgetting time for battery swaps and checks between sorties
- Having no emergency landing point
Summary
- A mission concept states the deliverable, area, time, system and crew, including what is not yet ready
- The flight window is the overlap of legal hours (06:00–18:00 under the CAAT general conditions) and enough light for the work
- Decide from the worst value across several sources against limits set in advance, and record the reasons
- Assess the real site with evidence before starting
Check your understanding
- How many m/s is a 20 kt wind?
- How many m/s is a 36 km/h wind?
- Sunrise is at 06:10 with a 15-minute buffer and the rules allow flight from 06:00. What is the earliest start?
- Two sources report gusts of 9 and 13 m/s with a 12 m/s limit. What is the decision under the worst-value rule?
- Why set limits in advance?
Answers
- m/s
- m/s
- 06:25
- Do not fly, because the worst value, 13 m/s, exceeds the limit
- So that on-site pressure does not lead the team to accept risks it should not
Key formulas
| Hour angle at sunrise and sunset | |
| Sunrise time (minutes UTC) | |
| Wind unit conversions |
Key references
- International Organization for Standardization. (2023). Unmanned aircraft systems — Part 3: Operational procedures (ISO 21384-3:2023). link
- สำนักงานการบินพลเรือนแห่งประเทศไทย. (2569). ข่าว กพท. ฉบับที่ 4/2569 ประกาศฉบับที่ 15 เงื่อนไขการบังคับอากาศยานซึ่งไม่มีนักบิน. link
- สำนักงานการบินพลเรือนแห่งประเทศไทย. (2565). เอกสารแนวทาง CAAT-GM-UAS-002 (ปรับปรุงครั้งที่ 00). link
- NOAA Global Monitoring Laboratory. General solar position calculations. link
- Federal Aviation Administration. (2023). Pilot's handbook of aeronautical knowledge (FAA-H-8083-25C). link
- Federal Aviation Administration. (2016). Aviation weather (AC 00-6B). link
Further reading
Study the assigned knowledge units in advance, review media and take the module quiz
Defining the mission concept
Integrating weather into the mission plan
Brief: questions, deliverables and team roles
Site assessment and go/no-go decisions
In class / field
Lab or field practice from worksheets with a safety checklist
Learning evidence: Checked worksheets and quiz results