Skip to the content
FixTheRobot Explore Robotics / UAV / Module 1 / M1-T12

UAV Systems Engineering · Module 1

M1-T12: Complete UAV system architecture and data flow

A system diagram is only as good as its interface table: for every arrow, a producer, a consumer, a rate, a frame and an owner.

  • Lesson 12 of 12
  • UAV Fundamentals and System Architecture
  • Implementation-specific
  • About 5 minutes to read

This lesson ties Module 1 together. It lays out the end-to-end architecture from sensors to motors, shows how to write the interfaces down, and checks them mechanically for the inconsistencies that cause integration bugs.

Learning objectives

After this lesson, you should be able to:

  • Draw the end-to-end architecture with layers and ownership.
  • Write an interface table with rate, frame, units and timing for each flow.
  • Check producer and consumer consistency of rates and frames automatically.
  • Use the Architecture Builder to inspect and validate a design.

Conceptual explanation

The architecture has five layers: sensors, perception, state estimation, planning and supervision, and flight control with actuators. Data flows forward (sensing to action) and backward (state to planner). Each flow is an interface that two teams or two pieces of software must agree on.

End-to-end data flowSensors produce raw data; perception produces odometry and maps; the estimator produces state with covariance; the planner produces trajectories and setpoints; the flight controller produces motor commands; state returns to the planner.SensorsIMU, camera, LiDAR, GNSSPerceptionVIO, LIO, mapEstimationstate + covariancePlanningtrajectory, setpointsFlight controlPX4ActuatorsESC, motorsforward: commands; backward: state and health
The five-layer architecture, as built in the Architecture Builder.
Animation of a latency waterfall for two paths through a UAV system. The fast path from the IMU through the estimator and the controller to the motors accumulates a few milliseconds plus motor lag. The slow path from camera exposure through transfer, visual odometry and the link to the flight controller accumulates tens of milliseconds. Bars show each stage with its owner and rate, and a running total grows along the path.
Two paths through the system, stage by stage, with the owner and rate of each stage. The vision path is ten times slower than the inertial path, which is why the estimator must handle delayed measurements. Illustrative stage times. (Looping, about 6 seconds; drawn and computed for this course with illustrative values.)

Engineering intuition

Most integration failures are interface failures: a rate assumed to be 30 Hz that is 10 Hz, a pose in ENU consumed as NED, a timestamp of arrival treated as acquisition, a covariance that is a variance. Writing the interfaces as data (not as a diagram only) lets a program find the mismatches before the vehicle does. The same table becomes the Interface Control Document (lesson M7-T17) and the source of integration tests.

Mathematical formulation

Two consistency relations are worth checking for every producer–consumer pair:

Rate
fproducer≥frequired(consumer)f_{\text{producer}} \ge f_{\text{required}}(\text{consumer})
The consumer’s queue depth must also cover the jitter.
Latency
∑stage latencies along a path≤latency requirement of the path\sum \text{stage latencies along a path} \le \text{latency requirement of the path}

For the frame, producer and consumer must declare the same convention, or a conversion node must sit between them (lesson M1-T4): the check is equality of declared frames or the existence of a declared converter.

Architecture and data flow

The table below is the minimum interface list for the reference architecture. Rates are typical and must be replaced by measured values.

Reference interface table (typical values)
IDFrom → toContentRate (typical)Frame
IF1IMU → estimatorrate, specific force200–1000 Hzbody FRD / FLU
IF2Camera → VIOimages + stamps20–30 Hzoptical
IF3LiDAR → LIOpoint cloud + per-point time10–20 HzLiDAR
IF4VIO/LIO → estimatorodometry + covariancesensor rateENU / FLU
IF5Estimator → PX4external odometry≥ 30 Hz steadyNED / FRD
IF6Planner → PX4setpoint stream10–50 Hz, continuousNED
IF7PX4 → plannervehicle odometry, statusautopilot rateNED / FRD

Real-world UAV applications

  • Writing the ICD for Capstone 4.
  • Reviewing a third-party stack before integration.
  • Generating integration tests from the interface list.
  • Onboarding new engineers: one table explains the whole system.

Implementation example

This runs as shown: the interface table as data, with a check that every consumer’s rate requirement is met, every frame is declared or converted, and every consumer has a producer.

IF = [  # id, producer, consumer, rate_hz (producer), required_hz (consumer), frame
    ("IF1", "imu", "estimator", 400, 200, "FLU"),
    ("IF2", "camera", "vio", 30, 20, "optical"),
    ("IF3", "lidar", "lio", 10, 10, "lidar"),
    ("IF4", "vio", "estimator", 30, 20, "ENU"),
    ("IF5", "estimator", "px4", 50, 30, "NED"),
    ("IF6", "planner", "px4", 30, 10, "NED"),
]
FRAMES_OF = {"estimator": {"FLU", "ENU", "optical", "lidar"}, "px4": {"NED"}}      # frames each consumer accepts without a converter
CONVERTERS = {("estimator", "px4"): "enu_to_ned bridge"}                               # declared converters

def check(interfaces, accepted, converters):
    problems = []
    for iid, prod, cons, hz, need, frame in interfaces:
        if hz < need: problems.append(f"{iid}: {prod} at {hz} Hz < {cons} needs {need} Hz")
        ok = frame in accepted.get(cons, {frame}) or (prod, cons) in converters
        if not ok: problems.append(f"{iid}: {cons} does not accept frame {frame} and no converter is declared")
    consumers = {c for _, _, c, *_ in interfaces}; producers = {p for _, p, *_ in interfaces}
    problems += [f"{c} consumes data but nothing produces it" for c in consumers if c not in producers and c not in {"px4", "estimator", "vio", "lio"}]
    return problems

assert check(IF, FRAMES_OF, CONVERTERS) == []
bad = IF + [("IF7", "planner", "px4", 5, 10, "ENU")]                                    # too slow and the wrong frame
problems = check(bad, FRAMES_OF, CONVERTERS)
print(problems)
assert len(problems) == 2 and "needs 10 Hz" in problems[0] and "does not accept frame ENU" in problems[1]
The interface table as data with an automatic consistency check.

Common engineering mistakes

A diagram without an interface table

The arrows hide rate, frame and timing assumptions.

No owner per interface

Nobody fixes a mismatch.

Rates quoted from datasheets, not measured

Drivers and load change them.

Forgetting the backward flows

State returning to the planner, health to the supervisor and logs to storage are interfaces too.

Treating the ICD as documentation, not a test source

Generate checks from it.

Failure modes

Failure modes, symptoms and causes
Failure modeHow it shows upLikely cause
Rate mismatchConsumer starves or interpolates stale dataProducer slower than the consumer assumes
Frame mismatchMirrored or rotated motionMissing conversion
Hidden dependencyOne failure takes down two functionsShared power, clock or bus not in the diagram
Version driftMessage layout changes break one sideNo version in the interface

Debugging approach

  1. Measure each interface’s actual rate, latency and frame against the table.
  2. Run the consistency check in CI on the ICD file.
  3. Walk each failure mode through the diagram and see where it is detected.
  4. Use the Architecture Builder’s checker on the design.

Practical exercises

  1. Add the supervisor flows (health records) to the table with rate and failure behaviour.
  2. Add a LiDAR-to-estimator path and decide its frame and converter.
  3. Extend the check to latency budgets and apply it to a 100 ms requirement.
  4. Build the reference architecture in the Architecture Builder and read every link’s inspector text.

Interview questions

Write an answer in your own words, then reveal the model answer. Nothing is sent anywhere.

Question 1

What makes an architecture diagram useful for integration?

Model answer

An interface table behind it: producer, consumer, rate, frame, units, timestamp semantics and owner for each arrow, checkable by a program.

Question 2

What are the most common interface mismatches?

Model answer

Rate, coordinate frame and timestamp meaning (acquisition versus arrival).

Question 3

Which flows are often forgotten?

Model answer

Backward state flow to the planner, health and covariance to the supervisor, and logging and time distribution.

References and further reading

Primary papers, official documentation and standards. Each claim above that is specific to a tool or version points here.

What’s next

Mark this lesson

Saved in this browser and synced to your account when you are signed in.

Practice this lesson

M1-L6: Build a UAV hardware architecture diagram

Wire the system blocks together and inspect each interface.

Next lesson

M2-T1: GNSS fundamentals

Explain pseudorange positioning and why four satellites are needed for three position coordinates and the receiver clock bias.