Path: blob/master/libraries/AC_Avoidance/AP_OAVisGraph.h
4182 views
#pragma once12#include "AC_Avoidance_config.h"34#if AP_OAPATHPLANNER_ENABLED56#include <AP_Common/AP_Common.h>7#include <AP_Common/AP_ExpandingArray.h>89/*10* Visibility graph used by Dijkstra's algorithm for path planning around fence, stay-out zones and moving obstacles11*/12class AP_OAVisGraph {13public:14AP_OAVisGraph();1516CLASS_NO_COPY(AP_OAVisGraph); /* Do not allow copies */1718// types of items held in graph19enum OAType : uint8_t {20OATYPE_SOURCE = 0,21OATYPE_DESTINATION,22OATYPE_INTERMEDIATE_POINT,23};2425// support up to 255 items of each type26typedef uint8_t oaid_num;2728// id for uniquely identifying objects held in visibility graphs and paths29class OAItemID {30public:31OAType id_type;32oaid_num id_num;33bool operator ==(const OAItemID &i) const { return ((id_type == i.id_type) && (id_num == i.id_num)); }34};3536struct VisGraphItem {37OAItemID id1; // first item's id38OAItemID id2; // second item's id39float distance_cm; // distance between the items40};4142// clear all elements from graph43void clear() { _num_items = 0; }4445// get number of items in visibility graph table46uint16_t num_items() const { return _num_items; }4748// add item to visiblity graph, returns true on success, false if graph is full49bool add_item(const OAItemID &id1, const OAItemID &id2, float distance_cm);5051// allow accessing graph as an array, 0 indexed52// Note: no protection against out-of-bounds accesses so use with num_items()53const VisGraphItem& operator[](uint16_t i) const { return _items[i]; }5455private:5657AP_ExpandingArray<VisGraphItem> _items;58uint16_t _num_items;59};6061#endif // AP_OAPATHPLANNER_ENABLED626364