A dead reckoning navigation system using optical flow for unmanned aerial vehicles (UAV).
NOTICE: This project is private property and is protected by full copyright. All rights reserved.
This project aims to develop an advanced dead reckoning navigation system for drones, based on optical flow analysis. The system calculates course and speed by integrating data from multiple sources: dead reckoning algorithms, optical flow processing, and GPS (when available) using a complementary filter to determine the vehicle's current position.
The project primarily uses the AirSim simulator for development and testing. AirSim provides a realistic environment for algorithm development and validation before deploying to real hardware. In addition to simulation, test flights were also conducted using real drones (DJI Mini3 and YUNEEC H520) to validate the algorithms in real-world conditions.
-
Processing of drone flight logs and video recordings
-
Dead reckoning navigation implementation
-
Optical flow based position tracking
-
Complementary filtering for data fusion
-
Position estimation with and without GPS
-
Performance comparison between different navigation methods
-
Validation against ground truth data
-
AirSim simulator integration for development and testing
-
Support for both simulated and real-world flight data
.
├ cmake/ # CMake dependencies
├ data/ # Test data
├ docs/ # Documentation
├ src/ # Source code (C++ with CMake)
├ tests/ # Unit tests
└ tools/ # Utility scripts (mostly Python)
| Requirement | Version |
|---|---|
| AirSim with Unreal Engine | 4.27 |
| C++ compiler | 17 |
| CMake | 3.12+ |
| OpenCV | 4.9.0 |
| Eigen | 3.3+ |
| Boost | 1.65+ |
| Python | 3.9 |
Additional dependencies will be listed in CMakeLists.txt
-
Make sure all dependencies are installed
-
Clone the repository
git clone https://github.com/ITA-Flowers/FLORA-2.git
cd FLORA-2# Create build directory
mkdir build && cd build
# Configure
cmake ..
# Build
cmake --build . -j$(nproc) # On Linux/macOS
# or
cmake --build . -j%NUMBER_OF_PROCESSORS% # On WindowsThe following CMake options are available:
-
BUILD_TESTS=ON/OFF- Build unit and integration tests (default: ON) -
USE_EIGEN=ON/OFF- Fetch Eigen3 library if needed (default: ON) -
ENABLE_WARNINGS=ON/OFF- Enable all warning (default: ON)
Example:
cmake -DBUILD_TESTS=ON -DUSE_EIGEN=OFF ..If you need to completely reset your build configuration (e.g., after changing compilers or major dependencies):
# From the build directory, remove all generated files
rm -rf * # On Linux/macOS
# or
del /s /q * # On Windows, or simply delete the folder contents
# Reconfigure from scratch
cmake ..Alternatively, you can create a fresh build directory:
# From the project root
rm -rf build # On Linux/macOS (or delete it manually on Windows)
mkdir build && cd build
cmake ..For a "clean build" without resetting the configuration:
# From the build directory
cmake --build . --target clean
# Then rebuild
cmake --build .# Debug build
cmake -DCMAKE_BUILD_TYPE=Debug ..
# Release build
cmake -DCMAKE_BUILD_TYPE=Release ..
# Build with specific compiler
cmake -DCMAKE_CXX_COMPILER=g++-10 ..- Create a new branch for your feature:
git checkout develop
git pull
git checkout -b feature/feature-name- Work on your code, commit changes:
git add .
git commit -m "Descriptive commit message"- Push your branch and create a pull request:
git push origin feature/feature-name- Create a pull request to the develop branch in GitHub interface.
-
Assign at least one reviewer to your pull request
-
Address all comments and suggestions
-
Make requested changes and push additional commits
-
Request re-review after addressing feedback
-
PR will be merged by the reviewer after approval
If a change needs to be reverted:
- For uncommitted changes:
git checkout -- path/to/file
# Or to discard all changes
git restore .- For committed changes that haven't been pushed:
git reset HEAD~1 # Preserves changes in working directory
# Or
git reset --hard HEAD~1 # Discards changes completely- For changes that have been pushed:
git revert <commit-hash>
git push origin <branch-name>-
For reverting an entire feature branch after merge:
- Create a new PR that reverts the merge commit
- Document why the reversion was necessary
The project is in the early development phase. We are currently implementing the core components of the dead reckoning and optical flow algorithms.
This research project is protected by full copyright and is not available for use, copying, modification, or distribution without express written permission from the owner.