Overview
The airside system is an autonomous perception-decision-control system that runs on the drone. All workers use local space except for flight_interface_worker. A diagram of the pipeline is shown below.
Multiprocessing
TODO R D : Link to multiprocessing page when written
Workers
flight_interface_worker
Interfaces with the flight controller. The output of the worker is used for perception; the input is used for control.
Task:
Telemetry:
Polls the common flight controller for drone telemetry
Converts the telemetry position from global to local
Timestamps the telemetry and sends it to the appropriate worker(s)
Commands:
Receives commands from decision worker
If applicable, converts the command from local to global
Input:
decision_worker:
AirsideCommand
Output:
data_merge_worker: TODO:
OdometryAndTime
decision_worker: Tuple of:
TODO: telemetry
TODO: waypoint state
TODO: command ready state
video_input_worker
Perception.
Task:
Gets frames from the common camera and timestamps them
Output:
detect_target_worker:
ImageAndTime
detect_target_worker
Perception.
Input:
video_input_worker:
ImageAndTime
Task:
Gets images and detect objects to create bounding boxes
There may be 0 object detections and therefore 0 bounding boxes in the list
Sends the bounding boxes and with forwarded timestamp
Output:
data_merge_worker:
DetectionsAndTime
data_merge_worker
Perception.
Input:
flight_input_worker:
OdometryAndTime
detect_target_worker:
DetectionsAndTime
Task:
Gets telemetry data and bounding boxes along with their corresponding timestamp
Merges the telemetry data to the bounding boxes by closest timestamp
Output:
geolocation_worker:
MergedOdometryDetections
geolocation_worker
Perception.
Input:
data_merge_worker:
MergedOdometryDetections
Task:
Gets telemetry data and bounding boxes
Converts bounding boxes to locations in the world
Output:
cluster_estimation_worker:
list[DetectionInWorld]
cluster_estimation_worker
Perception.
Input:
geolocation_worker:
list[DetectionInWorld]
List length is the number of simultaneous detections in a single frame
Task:
Collects a scatter plot of locations of detected objects in the world
Estimates the location of each object
Output:
controller_worker:
list[ObjectInWorld]
List is sorted in descending order of confidence (i.e. index 0 is best, 1 is next best, etc.)
decision_worker
Decision.
Input:
flight_interface_worker: Tuple of:
TODO: telemetry
TODO: waypoint state
TODO: command ready state
cluster_estimation_worker:
list[PositionWorld]
Task:
Maintain model of world
Decide which landing pad to investigate
Search if there is no landing pad: TODO Write documentation
Output:
flight_interface_worker:
AirsideCommand