Overview
Audience: Software members.
The repository named common contains cross subteam code used across multiple repositories.
Repository:
https://github.com/UWARG/common
Software
Setup
Follow the instructions: Autonomy Workflow Software
Install packages: pip install -r requirements.txt
Usage
Add this repository as a submodule.
Install submodule packages:
pip install -r [path to submodule]/requirements.txt
Use the modules under each subdirectory as a normal Python import.
Development
Activate the environment:
If you haven’t already, activate the virtual environment:
Windows command prompt:
venv\Scripts\activate.bat
Windows Powershell:
.\venv\Scripts\Activate.ps1
If you get an error with:
running scripts is disabled on this system
Run:
Set-ExecutionPolicy Unrestricted
This allows you to run any Powershell scripts at will. For more detail: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.3
Linux and MacOS:
source venv/bin/activate
You should now see
(venv)
in the prompt line.Confirm the virtual environment uses Python 3.11:
python --version
Literally use
python
, none of the fancy stuff above.Example output:
Python 3.11.9
When you’re done developing, make sure to either close the terminal or run:
Windows command prompt:
venv\Scripts\deactivate.bat
Everything else:
deactivate
This is important to avoid going to a different project and then accidentally polluting your current project’s virtual environment.
Data exchange structs
Spatial coordinate classes:
Spatial coordinate classes are organized along the following axes:
Coordinate system
Altitude
Name
Coordinate system | Altitude | Name | Class | Expected user |
---|---|---|---|---|
Local | No | No | LocationLocal (NE) | Airside |
Local | No | Yes | NamedLocationLocal | - |
Local | Yes | No | PositionLocal (NED) | Airside |
Local | Yes | Yes | NamedPositionLocal | - |
Global | No | No | LocationGlobal | Airside |
Global | No | Yes | NamedLocationGlobal | Pathing |
Global | Yes | No | PositionGlobal | Airside |
Global | Yes | Yes | NamedPositionGlobal | - |
GlobalRelativeAltitude | Yes | No | PositionGlobalRelativeAltitude | - |
GlobalRelativeAltitude | Yes | Yes | NamedPositionGlobalRelativeAltitude | Pathing |
Orientation:
Orientation is for all coordinate systems.
camera
Python serialization and deserialization for Autonomy.
Testing:
Attach a camera, then test the software:
cd camera python -m test_camera
Every nth image is saved as image0.png , image1.png , etc. They can be deleted after the test.
kml
Converts a list of waypoints to KML file for visualization (e.g. Google Earth, Google Maps).
Testing:
cd kml pytest
mavlink
Connection to drone using the MAVLink protocol. This module uses WGS 84 only.
Testing:
Start Mission Planner simulation with MAVLink forwarding: Mission Planner Simulated Ardupilot
Remember the home location.
Create a mission with a few waypoints and start the mission.
Run and make sure the home location matches:
python -m test_flight_controller
qr
QR scanning and text output.
Testing:
Unit tests:
cd qr pytest
Camera to QR integration:
Attach a camera and prepare a QR code to be shown, then test the software:
python -m camera_qr_example
The text output should be as expected.
image_encoding
Encode and decode images from numpy array to jpeg (raw bytes). See Profile Encode Repository and Formats for more details on why jpeg was chosen.
Testing:
cd image_encoding python -m test_image_encode_decode
There will be a result.jpg
in the image_encode
directory after the test to ensure that the images look similar.
network
TCP and UDP socket tools to send data across a network (private networks).
Testing:
Unit test:
cd network pytest
Integration test with image_encoding:
pytest (tests the whole repository) OR pytest test_send_image.py (tests only this integration test)