navigation updated with completed dijkstra's algo

Dependents:   R5 2016 Robotics Team 1

navigation.h

Committer:
j_j205
Date:
2015-11-22
Revision:
1:a53d97b74fab
Parent:
0:fd72f6df078c
Child:
2:17bd430aeca1

File content as of revision 1:a53d97b74fab:

#ifndef NAVIGATION_H
#define NAVIGATION_H
#include "StepperMotor.h"
#include "stdint.h"
#include "mbed.h"
#include <vector>
#include <stack>

class Navigation
{
public:
    Navigation(int size);
    void addGraphNode(uint16_t src, uint16_t target, uint16_t dist,
                      uint16_t angle);
    void addGraphNode(uint16_t src);
    int graphSize() { return graph.size(); }
    uint16_t getVertex() { return vertex; }
    uint16_t getAngle() { return angle; }
    void setVertex(uint16_t target) { vertex = target; }
    int numNeighbors(int src) { return graph[src].size(); }
    int loadMap(char* inputFile);
    void getShortestPath(uint16_t destination);
    uint16_t getMinDist(uint16_t target) { return minDistance[target]; }
    void executeRoute(StepperMotor &leftMotor, StepperMotor &rightMotor);
    // utility functions
    void printPrevious(Serial &pc);
    void printRoute(Serial &pc);
    void printGraph(Serial &pc);

private:
    static const uint16_t MAX_DIST = 65535; // infinity
    static const uint16_t DEFAULT_VERTEX = 0;
    static const uint16_t DEFAULT_ANGLE = 0;
    static const int DEFAULT_SIZE = 1;
    static const int STEPS_PER_INCH = 20; //  per wheel diameter and stepper specs

    uint16_t vertex; // current vertex
    uint16_t angle; // current angle

    struct graphNode
    {
        uint16_t neighbor;
        uint16_t distance; // in inches
        uint16_t angle;
        graphNode(uint16_t arg_neighbor = MAX_DIST,
                  uint16_t arg_distance = MAX_DIST,
                  uint16_t arg_angle = MAX_DIST)
           : neighbor(arg_neighbor), distance(arg_distance), angle(arg_angle){}
    };

    std::vector<std::vector<graphNode> > graph;
    std::vector<uint16_t> minDistance;
    std::vector<int> previous;
    std::stack<uint16_t> route;
};

#endif // NAVIGATION_H