Skip to content

Theta-Limited/OpenAthenaIOS

Repository files navigation

OpenAthena™ for iOS

OpenAthena for iOS

(This software is currently in alpha.)

An iOS port of the OpenAthena project

Find it the App Store

Get it on App Store

OpenAthena™ allows common drones to spot precise geodetic locations.

🖼️👨‍💻 + 🧮⛰️ = 🎯📍

OpenAthena Drone Camera Terrain Raycast Concept Diagram

Operation Guide

A note about GeoTIFF Digital Elevation Models/Maps:

OpenAthena for iOS needs GeoTIFF digital elevation models (aka elevation maps) data to calculate target locations within drone images. GeoTIFF files store terrain elevation data for an area on Earth. OpenAthena performs a ray-cast from a drone camera's position and orientation towards the terrain, which can be used to precisely locate any point within a given picture.

OpenAthena for iOS can now download elevation maps for the user from OpenTopography at the touch of a button. Downloaded elevation maps are saved in the app's local storage. Elevation maps can be imported, exported, or pre-fetched for the area surrounding any given lat,lon. When processing a drone image, OpenAthena will automatically search through its cache of elevation maps and select the correct one for the image being processed. If an elevation map is not found, OpenAthena will offer to download one. Image analysis can then continue.

If you are planning on operating in an offline enviroment, you can use the pre-fetch functionality to download elevation maps for later offline use.

To manage OpenAthena's elevation map cache, select "Manage Elevation Maps" from the main screen menu. From there, you can manage or search your cache for an elevation map based on lat,lon coordinates.

You can delete elevation maps by swiping right or you can inspect an elevation map by selecting the cache entry. Pressing "+" allows you to add a new elevation map to OpenAthena.

       

To add a new elevation map to OpenAthena, you can either download one from online or import one from a local file.

To download an elevation map from online, you input the desired lat,lon coordinates and length in meters of the bounding box and OpenAthena will fetch it. Alternatively, you can load a drone image and OpenAthena will offer to download an elevation map of the surrounding area if needed. (Internet access is needed to download elevation maps.)

OpenAthena can also import an elevation map in GeoTIFF format from local storage.

Calibrate your drone's compass sensor 🧭 and take photos :

It is strongly suggested that you should calibrate the drone's compass sensor for the local environment before taking photos to be used with OpenAthena. Consult your drone's operation manual for this procedure. The image metadata from an un-calibrated drone can be several degrees off from the correct heading. This can result in dramatic target-resolution inaccuracies if the sensor is not calibrated. Always verify a target match location from OpenAthena before use!

Select an Image 🖼:

This app is compatible with images taken by select models of DJI, Skydio, Autel, and Parrot aircraft models. The drone's position and its camera's orientation are automatically extracted from the image metadata.

OpenAthena™ iOS Image Selection demo using
DJI_0419.JPG

After loading a drone image, OpenAthena will search through its cache for an appropriate elevation map. If one is not found, OpenAthena will offer to download one for you.

Calculate a target 🧮 🎯:

Press the "🧮" button to calculate the target location on the ground. You can tap the result display box to copy the result text to your clipboard or open the position in Google Maps by clicking the blue hyperlink:

OpenAthena™ iOS Target Calculation demo using cobb.tiff and DJI_0419.JPG, output mode WGS84

Arbitrary Point Selection

OpenAthena allows users to tap any point in the image to locate it. Tapping on any point in the image will move the marker and calculate the new location.

OpenAthena for iOS demo of arbitrary point selection for raycast calculation

Application Settings (optional) ⚙:

OpenAthena for iOS supports multiple output modes for target calculation, including:

To change the ouptut mode of OpenAthena for iOS, tap the hamburger menu icon (three lines) at the top-right corner of the main screen and select "Settings":

Select your desired output mode by pressing its button in the list and then click the Save button.

OpenAthena™ iOS 🎯 Output Modes Activity demo NATO MGRS 10m

If you find your aircraft's compass sensor is still not providing correct heading information, you can use this slider to manually apply a configurable offset anywhere in the range of [-15.0,+15.0]. This offset will be added to your aircraft's camera heading before target calculation is performed.

Once you find a suitable correction value, you may then use the value for all other images taken during the same flight.

NOTE: This value is NOT for setting magnetic declination! Magnetic declination is already accounted for by your drone's onboard digital World Magnetic Model (WMM). Improper use of this Manual Offset setting will result in bad target calculation output.

Your selected manual correction value is saved automatically between launches of the app. To reset the value, tap the Reset button in the Settings screen or move the slider back to the middle.

Contributing

UI language translation

If you speak another language in addition to English, please consider contributing to the UI translation using the link below. The insights of a native-speaker are the only way to provide a good user experience for the program in a given language:

https://www.transifex.com/thetalimited/openathena-for-ios/

Code

If you're interested in contributing to this project, feel free to make a fork. This project will follow the fork and pull model for third-party contributors

Cloning this project with submodules

This project requires content from other git repositories to build correctly.

To clone this project properly, with the necessary submodules:

git clone --recursive git@github.com:Theta-Limited/OpenAthenaIOS.git # can also use https clone url instead

If you have already cloned, and wish to acquire the neccesary submodule contents:

git submodule init
git submodule update

If you wish to update the contents of submodules from their source:

git submodule update --remote