C2 link and detect-and-avoid
UAT 402 Advanced UAS Technology and BVLOS Operations
Lesson
By the end of this module you will be able to
- Explain the DAA well-clear definition and the parameters DMOD, HMD, ZTHR and modified tau
- Compute whether and when an encounter will lose well clear
- Break down the avoidance timeline and find the required detection range
- Compare avoidance by the pilot over C2 with onboard avoidance
Why this matters
UAT 312 computed the time available to decide after seeing another aircraft, and UAT 207 designed C2 links and failsafes. The drone knowledge base’s unit on C2 link design and lost-link covers telemetry, video links, redundancy, latency and lost-link procedures, and its unit on C2 and abnormal events in simulation stresses that a returning video feed does not confirm that C2 is sound or that DAA capability exists. This module turns “avoiding in time” into a criterion checked with numbers.
The well-clear definition
A DAA system must keep well clear of other aircraft. RTCA DO-365 (MOPS for DAA systems) sets values for larger unmanned aircraft in its first phase; per NASA’s WellClear documentation these are DMOD = HMD = 4,000 ft (about 1,219 m), ZTHR = 450 ft and modified tau 35 s. Loss of well clear occurs when both horizontal and vertical conditions hold. Horizontally, the current range is below DMOD or modified tau is between 0 and 35 s, and the predicted closest horizontal distance (HMD) is below 4,000 ft; vertically, the height difference is within ZTHR. Modified tau approximates the time until range reaches DMOD. For small drones, ASTM F3442 sets separate DAA performance requirements, so the values in this example are used to practise the principle.
Example 1 Three aircraft on the display
The pipeline drone is at the origin. Three aircraft are shown: one head-on 4 km away at a similar height, one crossing that will pass 2 km away, and one head-on but 200 m higher (hypothetical data).
import numpy as np
FT = 0.3048
DMOD, HMD, ZTHR, TAU = 4000 * FT, 4000 * FT, 450 * FT, 35.0 # DO-365 well-clear values (Phase 1)
def check(p_rel, v_rel, dz):
r = np.linalg.norm(p_rel)
rdot = p_rel @ v_rel / r
tau_mod = (DMOD**2 - r**2) / (r * rdot) if rdot < 0 else float("inf")
t_cpa = max(0.0, -(p_rel @ v_rel) / (v_rel @ v_rel))
hmd = np.linalg.norm(p_rel + v_rel * t_cpa)
horiz = (r <= DMOD or 0 <= tau_mod <= TAU) and hmd <= HMD
lowc = horiz and abs(dz) <= ZTHR
return tau_mod, hmd, lowc
cases = { # intruder relative position (m), relative velocity (m/s), height difference (m)
"head-on 4 km": (np.array([4000.0, 0]), np.array([-70.0, 0]), 30),
"crossing, passes 2 km": (np.array([3000.0, 2000]), np.array([-60.0, 0]), 30),
"head-on 4 km, 200 m above": (np.array([4000.0, 0]), np.array([-70.0, 0]), 200),
}
for name, (p, v, dz) in cases.items():
start = next((s for s in range(0, 121) if check(p + v * s, v, dz)[2]), None)
tau, hmd, _ = check(p, v, dz)
msg = f"loss of well clear in {start} s" if start is not None else "stays well clear"
print(f"{name:26s} now: tau_mod {tau:5.1f} s HMD {hmd:5.0f} m -> {msg}")
head-on 4 km now: tau_mod 51.8 s HMD 0 m -> loss of well clear in 15 s
crossing, passes 2 km now: tau_mod 64.0 s HMD 2000 m -> stays well clear
head-on 4 km, 200 m above now: tau_mod 51.8 s HMD 0 m -> stays well clear
The head-on aircraft at the same level will lose well clear in 15 seconds, though it is still 4 km away. The crossing aircraft at 2 km and the one 200 m higher (above the ZTHR of about 137 m) stay well clear. Judging by current range alone is wrong in both directions; direction and relative velocity matter.
The avoidance timeline
The required detection range depends on the total time from the sensor first seeing an aircraft to the avoidance taking effect: detecting and establishing a stable track, sending data down the C2 link, displaying it, the pilot deciding, sending the command up, and the time the drone takes to actually change direction. If the system can avoid onboard, the steps through C2 and the human disappear.
Example 2 How far away must we see?
Using assumed times for each step, compare closing speeds of 60 and 90 m/s, with avoidance complete before entering DMOD.
DMOD = 4000 * 0.3048 # m
steps_pilot = {"detect and track": 8, "C2 downlink + display": 1.5, "pilot decides": 12,
"C2 uplink": 0.5, "manoeuvre takes effect": 8}
steps_onboard = {"detect and track": 8, "onboard decision": 1, "manoeuvre takes effect": 8}
for name, steps in [("pilot in the loop", steps_pilot), ("onboard avoidance", steps_onboard)]:
t = sum(steps.values())
for v_close in (60, 90): # closing speed m/s
r = v_close * t + DMOD
print(f"{name:18s} timeline {t:4.1f} s closing {v_close} m/s -> detect by {r/1000:.2f} km")
pilot in the loop timeline 30.0 s closing 60 m/s -> detect by 3.02 km
pilot in the loop timeline 30.0 s closing 90 m/s -> detect by 3.92 km
onboard avoidance timeline 17.0 s closing 60 m/s -> detect by 2.24 km
onboard avoidance timeline 17.0 s closing 90 m/s -> detect by 2.75 km
With the pilot deciding over C2, the sensor must see aircraft 3–4 km away, while onboard avoidance needs 2.2–2.8 km. Many sensors on small drones cannot see light aircraft that far. An ADS-B receiver only helps with aircraft carrying a transmitter; the rest need ground radar, observers or the strategic mitigations from Module 1.
Module lab
Lab: measuring the real system timeline
- In SITL, inject simulated aircraft over MAVLink and measure the time from data arrival to display on the ground station
- Have each learner decide to avoid when alerted; record the times and find the mean and maximum
- Measure how long the training drone takes to turn 90 degrees at cruise speed
- Put the real values into Example 2 and compare with the range your sensor or ADS-B receiver can see
- Write the limitations of the team’s DAA system honestly
Common mistakes
Watch out
- Judging by current range alone without relative velocity
- Using the pilot’s best decision time instead of the measured maximum
- Forgetting C2 time in both directions
- Assuming ADS-B shows every aircraft
- Applying large-aircraft well-clear values to small drones without checking the applicable standard
Summary
- Well clear combines horizontal (DMOD, HMD, modified tau) and vertical (ZTHR) criteria
- Modified tau gives the time before reaching DMOD, so it alerts earlier than range alone
- Required detection range = closing speed × timeline + DMOD
- Onboard avoidance greatly shortens the timeline by removing C2 and the human
Check your understanding
- About how many metres is DMOD in the first phase of DO-365?
- Has an aircraft 200 m higher lost vertical well clear?
- With a 20 s timeline, 50 m/s closing speed and DMOD 1,219 m, at what range must it be seen?
- What does modified tau mean when the aircraft is flying away?
- Why does a working video feed not confirm DAA capability?
Answers
- About 1,219 m (4,000 ft)
- No, because ZTHR of 450 ft is about 137 m
- m
- It has no alerting meaning, because range is increasing ()
- Video is mission data; it does not systematically detect, track and alert on other aircraft
Key formulas
| Modified tau | |
| Required detection range |
Key references
- RTCA. (2022). Minimum operational performance standards (MOPS) for detect and avoid (DAA) systems (DO-365C). link
- NASA Langley Formal Methods. WellClear: Formal definitions and algorithms for DAA well-clear (software documentation). link
- ASTM International. (2025). Standard specification for detect and avoid system performance requirements (ASTM F3442-25). link
- Joint Authorities for Rulemaking on Unmanned Systems. (2024). JARUS guidelines on Specific Operations Risk Assessment (SORA), main body, edition 2.5 (JAR-DEL-SRM-SORA-MB-2.5). link
Further reading
Study the assigned knowledge units in advance, review media and take the module quiz
C2 link design and lost-link procedures
C2 and abnormal events in simulation
In class / field
Lab or field practice from worksheets with a safety checklist
Learning evidence: Checked worksheets and quiz results