BackActive development
Active development2025 to presentAuthor

OpenDroneKit

Open-source, offline-first drone inspection and GIS toolkit for Windows

Survey, inspect and measure. Nothing leaves your laptop.

167

Tracked capabilities

Status computed from passing tests against real inputs, never set by hand.

77 / 77

Images registered

Public OpenDroneMap Aukerman survey: 1.27 px mean reprojection error, 1.22 m georeference RMSE.

22

Mission templates

Exported to six autopilot formats.

Problem

Infrastructure inspection happens where the connectivity is not. A system that assumes a cloud backend is useless on a bridge, a tower or a remote site, which is where the inspections are.

The second problem is trust. An inspection tool that guesses produces reports nobody can act on: a fabricated defect wastes a crew's day, and a missed one is a structural risk. Deciding what the system does when it is uncertain is a design question, not an implementation detail.

What I built

One desktop app covering the whole inspection loop in six steps: plan, fly, reconstruct, detect, measure, report.

  • Plan: 22 mission templates, from grid and corridor to facade, tower, wind turbine and orbit, laid out with geofence containment, no-fly detours, altitude bands and terrain-aware AGL or AMSL following
  • Export to six autopilot formats: QGroundControl .plan, QGC WPL 110, DJI WPML .kmz, Litchi CSV, KML and GeoJSON
  • Fly: MAVLink 2 upload of mission, geofence and rally points to ArduPilot, tested against Copter 4.5.7 in SITL
  • Reconstruct: COLMAP structure-from-motion with georeferencing, producing a Cloud-Optimized GeoTIFF orthomosaic, DSM, DTM, hillshade, point cloud and mesh in a real coordinate system
  • Detect: trained models mark cracks, corrosion and solar faults for a person to review, each finding stamped with the SHA-256 of the weights that produced it
  • Measure: area, perimeter, volume and change against the real DSM and DTM
  • Report: HTML, PDF, DOCX and Markdown from the same report sections
  • Projects in SQLite, with PostgreSQL and PostGIS optional for multi-user deployments

Architecture

Plan, fly, reconstruct, detect, measure, report, with each stage producing artefacts the next can verify rather than trust. Georeferencing is solved at reconstruction, as a RANSAC Helmert similarity between camera centres and image geotags, so defects and measurements land in world coordinates rather than image coordinates.

Everything runs on the operator's machine: processing, detection, measurement and reporting. Requesting cloud reconstruction runs locally and says so; no imagery leaves the machine.

Refuse rather than fabricate

The governing design rule. Without a model, the AI declines to guess and explains why. Without georeferenced rasters, the report states that measurements are absent rather than printing zeros. A mock flight driver exists for testing and is always labelled SIMULATED in the UI.

A finding keeps the model key, the SHA-256 of the weights and its confidence. The reviewer's decision is stored separately, so review never erases what the model asserted, and a replaced weights file is reported as a mismatch rather than trusted.

Status is computed, not claimed

A capability counts as verified only when the tests it names pass against real inputs, and that status is computed from test results rather than set by hand. The repository tracks 167 capabilities this way.

SITL earned its place: it caught missions putting NAV_TAKEOFF at sequence 0, which MAVLink reserves for home, after every mock-based test had passed.

An inspection, end to end

Each stage produces artefacts the next one can verify rather than trust. The branches are where the system declines to continue, which is the design, not a failure of it.

  1. Plan the mission

    One of 22 templates, inside the geofence, around no-fly zones, following terrain.

  2. Fly it

    MAVLink 2 to ArduPilot, validated in SITL first.

  3. Reconstruct

    COLMAP, then georeferencing so results land in a real coordinate system.

    No CUDA COLMAP, skip dense stereo and say so
    Orthomosaic, DSM, DTM and hillshade that open in QGIS
  4. Detect

    Cracks, corrosion and solar faults, each finding tied to the exact weights that produced it.

    No model installed, decline and explain why
    Findings go to a person for review
  5. Measure

    Areas, lengths and volumes in metres, not pixels.

  6. Write the report

Defect models that ship

Each with its measured score and the weakness that limits it. Three other trained models were rejected rather than shipped, with the reasons kept.

ModelScoreKnown weakness
Crack segmentation · SegFormer-B5IoU 0.637 (held-out test)Thin and faint cracks are missed, so an empty mask is not evidence of a sound surface
Corrosion severity · SegFormer-B2Severe-pixel recall 0.788Errors fall between adjacent grades, so a reported grade can be one step optimistic
Solar cell defects · YOLO11lmAP50 0.8835Electroluminescence cell imagery only, not aerial or thermal photographs of installed panels
Solar thermal anomalies · ResNet18Balanced accuracy 0.724Soiling is the weak class: roughly two in three soiled modules are missed

Experiments

Reconstruction on a public survey

Question
Does the reconstruction hold up on real imagery someone else captured?
Method
The OpenDroneMap Aukerman Park dataset, 77 photographs at 0.033 m/px, through COLMAP and georeferencing in EPSG:32617.
Result
77 of 77 images registered, 1.27 px mean reprojection error, 1.22 m georeference RMSE.

Flight against a real autopilot

Question
Does mission upload survive a real MAVLink stack?
Method
ArduPilot Copter 4.5.7 in SITL, run locally in Docker.
Result
SITL caught a NAV_TAKEOFF-at-sequence-0 bug that every mock test had passed. Of three SITL flight tests, two pass; the third exposed a home-position bug that is being fixed.

Limitations and failure modes

  • No Windows installer or tagged release yet; it runs from source with Python 3.11.
  • Dense multi-view stereo needs a CUDA build of COLMAP. Without one, dense stereo is skipped and raster resolution drops to what the sparse cloud supports.
  • No model has been measured on Indian sites.
  • Reading FLIR or DJI thermal JPEGs directly is not implemented on main and is refused with that reason.

Gallery

Orthomosaic of the public Aukerman Park survey, 77 photographs at 0.033 m/px, reconstructed offline
Orthomosaic of the public Aukerman Park survey, 77 photographs at 0.033 m/px, reconstructed offline
Crack segmentation overlay, marked for a person to review
Crack segmentation overlay, marked for a person to review
The app over example data, the banner is the system's own, and it says so rather than implying a live connection
The app over example data, the banner is the system's own, and it says so rather than implying a live connection
First page of a generated inspection report
First page of a generated inspection report
Detector output on held-out CODEBRIM bridge imagery, efflorescence and spallation, with confidences
Detector output on held-out CODEBRIM bridge imagery, efflorescence and spallation, with confidences

Attribution

Built by me
OpenDroneKit is mine: mission planning, flight integration, reconstruction pipeline, geospatial outputs, defect models, measurement and reporting.
Based on external research
COLMAP, MAVLink, ArduPilot, SegFormer, YOLO and ResNet are upstream tools and architectures, integrated and trained here rather than authored. Sample imagery is the Aukerman Park dataset from the OpenDroneMap project. Not affiliated with DroneKit or OpenDroneMap.
Experiment performed by me
Model training, evaluation and the rejection decisions across the inspection task families.

Related