Skip to the content
FixTheRobot Explore Robotics / UAV / Capstone 1

UAV Systems Engineering · Capstone 1 of 4

Vision-Aided Autonomous UAV

Close the loop on vision: a UAV that estimates its own motion from a stereo camera and an IMU and flies a waypoint mission on that estimate.

  • Builds on modules 2, 3, 5
  • About 25–40 hours
  • Research-level

This project connects modules 2, 3 and 5. You will run a visual-inertial estimator on sensor data, wrap it with monitoring, and use its output to fly waypoints with a trajectory tracker, first on a dataset, then in simulation.

Mission and scope

A UAV must fly a rectangular waypoint mission 20 m by 10 m at 2.5 m/s in a textured indoor environment with no GNSS. Position comes only from a stereo camera and an IMU. The vehicle must return to within 0.5 m of its start after one lap and must stop safely if visual tracking fails.

Work in three stages so that each result is checked before the next depends on it: (A) estimator on a recorded dataset with ground truth, (B) closed loop in simulation, (C) failure injection.

What you will implement

  • Stereo camera and IMU data pipeline with timestamps preserved from acquisition (lesson M7-T8).
  • A visual-inertial odometry estimator: run VINS-Fusion or OpenVINS (lessons M4-T4, M4-T5) with calibration and IMU noise parameters you derived (lesson M3-T7).
  • State estimation wrapper that publishes pose, velocity and covariance and an estimator-health record (feature count, inlier ratio, NIS).
  • Waypoint navigation with a rate-limited trajectory generator (lesson M5-T10).
  • Trajectory tracking with PID and with MPC, compared on the same lap (lessons M5-T6, M5-T8).
  • Evaluation: ATE, RPE and closure error with evo, and tracking error statistics.

System architecture

Vision-aided UAV architectureStereo camera and IMU feed visual-inertial odometry. The estimator publishes state with covariance to a waypoint navigator and trajectory tracker, which command the flight controller. A monitor watches feature count, inlier ratio and innovation statistics.Stereo cameraIMU VIO front-endtracking + optimisation(VINS-Fusion / OpenVINS) StateestimationEKF + monitor Waypoint navigatortrajectory generator Trajectory trackerMPC / PID → PX4
Capstone 1 architecture. The monitor’s health record is part of the interface, not an afterthought.

Recommended starting points: EuRoC MAV or TUM-VI datasets for stage A (stereo camera, IMU and ground truth); PX4 SITL with a Gazebo stereo-camera model for stages BB and CC, using the external-odometry bridge of lesson M6-T10 once the estimator works.

Requirements

Capstone requirements and how each is verified
IDRequirementVerification method
R1Estimated position error after one 60 m lap shall be below 1.0% of distance on the dataset.Test: evo ATE/RPE on the dataset with ground truth
R2In simulation, the vehicle shall return within 0.5 m of its start after one lap at 2.5 m/s.Test: simulated closed-loop run, 10 seeds
R3The estimator shall publish pose, velocity, covariance and health at the camera rate with end-to-end latency below 80 ms (p99).Test: latency measurement (lesson M7-T6)
R4If the number of tracked features falls below the threshold for 1 s the vehicle shall hold position, and after 5 s land.Test: camera dropout injection in simulation
R5Tracking RMS error for the MPC shall be reported against the PID baseline on the same trajectory.Analysis: comparison table and plot
R6Estimator consistency: mean NIS of velocity updates within the 95% interval over the run.Analysis: NIS plot (lesson M3-T14)

Stage A: estimator on a dataset

  1. Pick a dataset sequence with stereo images, IMU and ground truth and verify its timestamps and calibration files.
  2. Set IMU noise parameters from an Allan analysis or the dataset’s documentation (lesson M3-T7).
  3. Run the estimator, record the trajectory, and evaluate with evo: absolute trajectory error and relative pose error per distance.
  4. Plot feature count and inlier ratio against error: find the frames where error grows.
  5. Write down the estimator’s drift as a percentage of distance and compare with requirement R1.

Stage B: closed loop in simulation

  1. Replace the dataset with a simulated stereo camera and IMU on PX4 SITL (lesson M6-T14).
  2. Feed the estimator output to PX4 as external odometry (lesson M6-T10) or fly in offboard mode using the estimator state directly.
  3. Implement the waypoint generator and fly the lap with a PID cascade, then with an MPC tracker.
  4. Measure return error, tracking error and latency.

Stage C: failures

Inject a camera dropout, a low-texture segment and a 20 ms camera-IMU timing offset. For each, record the monitor’s response and the vehicle’s behaviour, and update the FMEA row for visual odometry failure (lesson M8-T7). A capstone is not complete if the vehicle’s response to a visual failure was not observed.

Deliverables

  1. A short design note: architecture, interfaces and frames (with a table of every topic, frame and rate).
  2. Dataset evaluation report: ATE/RPE plots and table, drift percentage, discussion of the worst segments.
  3. Closed-loop results: tracking error for PID and MPC, return error over 10 runs.
  4. Failure-injection report: what each failure did and how the monitor responded.
  5. Code repository with a README that reproduces every figure from raw data.

Acceptance criteria and grading rubric

Acceptance criteria
CriterionAcceptableStrong
Estimator evaluationATE and RPE reported on a standard dataset with correct alignmentAlso correlates error with feature count and explains the worst segments
Closed loopLap flown in simulation with return error reportedCompares controllers with statistics over multiple seeds
MonitoringA feature-count rule triggers hold and landingUses NIS and covariance as well, with a measured false-alarm rate
TimingLatency reportedLatency budget per stage and a test of jitter effect
HonestyStates what was not testedQuantifies uncertainty and repeats runs

Common failure points

  • Starting with the closed loop before the estimator is validated: it is impossible to tell estimator error from controller error.
  • Using the dataset’s ground truth without the correct alignment (SE(3) or yaw-only): errors look huge or tiny for the wrong reason.
  • Wrong IMU noise parameters copied from another sensor.
  • Treating a perfect simulation camera as proof of real-world robustness: repeat with injected noise and blur.
  • Frames: ENU/FLU in ROS against NED/FRD in PX4 (lesson M1-T4).

References

Record your progress

Capstones are assessed by you against the rubric above, so this records your own sign-off.