Skip to content

rmackay9/ngps_flight

 
 

Repository files navigation

NGPS: Next-Generation Positioning System

WIP License ROS2 ArduPilot
Python C++ PyTorch
OpenCV LightGlue

Next-Generation Positioning System (NGPS) for high-altitude drone navigation without GPS.

Description

This codebase implements a visual geo-localization system for drones that matches down-facing camera images against satellite reference images using deep learning-based feature matching. The system provides absolute position estimates to correct drift in Visual-Inertial Odometry (VIO) systems.

Main Components

  • ap_ngps_ros2: ROS2 node that performs visual geo-localization by matching camera images to satellite reference images using LightGlue/SuperPoint deep learning features. Runs at 1-2 Hz.

  • ap_ukf: Unscented Kalman Filter that fuses multiple sensor inputs:

    • NGPS absolute position (1-2 Hz)
    • VIO relative pose (10-20 Hz)
    • IMU data (high frequency) Outputs fused odometry at 10-20 Hz for flight control.
  • ap_vips: Visual-Inertial Odometry system that provides high-frequency relative pose estimates optimized for high-altitude flight.

How It Works

  1. NGPS module matches real-time camera frames to a georeferenced satellite reference image
  2. Provides absolute position estimates at low frequency (1-2 Hz)
  3. UKF fuses NGPS absolute positions with high-frequency VIO estimates
  4. Fused output sent to ArduPilot's EKF for final state estimation

Demo

Algorithm Demonstration Video

Related Articles & Blogs

Related Projects

  • ap_nongps - Earlier prototype implementation with SIFT-based feature matching and optical flow methods

TODO

  • Add a fallback VO pipeline
  • Add global optimisation for fusion
  • Update AP to accept position and odometry as separate sources to be fused internally
  • Add support for multiple reference images
  • Optimize feature matching for faster performance
  • Add calibration tools and documentation
  • Improve error handling and recovery
  • Add more unit tests
  • Document configuration parameters
  • Add example launch files for different scenarios
  • Performance profiling and optimization
  • Support for different camera models

Installation

See individual package READMEs:

  • ap_ngps_ros2/README.md
  • ap_ukf/README.md
  • ap_vips/README.md

Documentation

Acknowledgements

A huge shoutout to my partner in disguise, ChatGPT, for generating tests and helping with packaging this codebase.

Safety & Ethical Considerations

IMPORTANT DISCLAIMER: This software is provided for research and educational applications only. The developers and contributors of this project doesn't promote and are not responsible for any misuse.

License

See LICENSE file.

About

Global vision positioning system for UAVs in outdoor GNSS-denied environments

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C++ 88.2%
  • Python 5.2%
  • CMake 3.3%
  • Jupyter Notebook 1.7%
  • Shell 1.3%
  • C 0.2%
  • Other 0.1%