Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
competitionLogic.hpp
Go to the documentation of this file.
1#ifndef COMPETITIONLOGIC_HPP
2#define COMPETITIONLOGIC_HPP
3
4#include "logger.hpp"
5#include "types.hpp"
6#include <iostream>
7#include <string>
8
10{
11public:
13 {
16 USS
17 };
18
19 struct Penalty
20 {
21 int lap;
25 Eigen::Vector3d position;
26 };
27
28 CompetitionLogic(std::shared_ptr<Logger> logger, Track& track, MainConfig config);
29
30 bool evaluateOffCourse(Track& track, double time, Eigen::Vector3d& position, Eigen::Vector3d& orientation);
31
32 void evaluateConeHit(Track& track, double time, Eigen::Vector3d& position, Eigen::Vector3d& orientation);
33
35 Eigen::Vector3d lm1, Eigen::Vector3d lm2, Eigen::Vector3d& position, Eigen::Vector3d& orientation);
36
37 void evaluateTimeKeepings(Track& track, Eigen::Vector3d& position, Eigen::Vector3d& orientation, double time);
38
39 bool checkFinishConditionsMet(double time);
40
41 bool checkUSS(Track track, double time, Eigen::Vector3d position);
42
43 bool checkDNF(Track track, double time, Eigen::Vector3d position);
44
45 bool performAllChecks(Track& track, double time, Eigen::Vector3d& position, Eigen::Vector3d& orientation);
46
47 void setFinish(bool val);
48
49 void fillReport(Report& report, double time);
50
51private:
52 bool pointInTriangle(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d c, Eigen::Vector2d point);
53
54 std::vector<bool> pointsInTrackConnected(Track& track, std::vector<Eigen::Vector2d> points);
55
56 bool pointInPolygon(std::vector<Eigen::Vector2d> polyPoints, Eigen::Vector2d point);
57
58 std::pair<bool, bool> rayIntersectLineSegment(
59 Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d rayOrigin, Eigen::Vector2d rayDirection);
60
61 double cross2d(Eigen::Vector2d a, Eigen::Vector2d b);
62
63 std::vector<bool> pointsInTrackNotConnected(Track& track, std::vector<Eigen::Vector2d> points);
64
65 bool carConePolyIntersect(std::vector<Eigen::Vector2d> carPoly, std::vector<Eigen::Vector2d> conePoly);
66
67 double determinantLinePoint(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d c);
68
69 bool inLineSegement(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d position);
70
71 void evaluateTimeKeepingGateTrigger(Track track, double time, int index);
72
73 std::string discipline2str(Discipline d);
74
75 std::string penalty2str(PENALTY_TYPE p);
76
77 bool checkTimeout(double time);
78
79 std::vector<int> timeKeepingStatuses;
80
82
83 std::vector<std::vector<double>> triggerTimes;
84
85 bool started;
88
90
91 std::vector<double> lapTimes;
92 std::vector<double> currentSectorTimes;
93 std::vector<std::vector<double>> sectorTimes;
99 bool isDNF;
100 std::string dnf_reason = "";
101 std::vector<Penalty> penalties;
111};
112
113#endif /* COMPETITIONLOGIC_HPP */
bool checkUSS(Track track, double time, Eigen::Vector3d position)
std::vector< std::vector< double > > sectorTimes
double cross2d(Eigen::Vector2d a, Eigen::Vector2d b)
std::vector< double > currentSectorTimes
bool evaluateOffCourse(Track &track, double time, Eigen::Vector3d &position, Eigen::Vector3d &orientation)
bool pointInTriangle(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d c, Eigen::Vector2d point)
std::vector< bool > pointsInTrackConnected(Track &track, std::vector< Eigen::Vector2d > points)
bool checkDNF(Track track, double time, Eigen::Vector3d position)
std::vector< int > timeKeepingStatuses
std::vector< Penalty > penalties
bool carConePolyIntersect(std::vector< Eigen::Vector2d > carPoly, std::vector< Eigen::Vector2d > conePoly)
bool inLineSegement(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d position)
int timeKeepingStatus(Eigen::Vector3d lm1, Eigen::Vector3d lm2, Eigen::Vector3d &position, Eigen::Vector3d &orientation)
std::vector< bool > pointsInTrackNotConnected(Track &track, std::vector< Eigen::Vector2d > points)
bool pointInPolygon(std::vector< Eigen::Vector2d > polyPoints, Eigen::Vector2d point)
void setFinish(bool val)
std::string discipline2str(Discipline d)
std::vector< double > lapTimes
std::vector< int > timeKeepingFirstTriggerStatuses
std::vector< std::vector< double > > triggerTimes
void evaluateTimeKeepings(Track &track, Eigen::Vector3d &position, Eigen::Vector3d &orientation, double time)
bool checkFinishConditionsMet(double time)
bool performAllChecks(Track &track, double time, Eigen::Vector3d &position, Eigen::Vector3d &orientation)
std::pair< bool, bool > rayIntersectLineSegment(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d rayOrigin, Eigen::Vector2d rayDirection)
void evaluateTimeKeepingGateTrigger(Track track, double time, int index)
void fillReport(Report &report, double time)
double finishConditionsMetFirstTime
std::string penalty2str(PENALTY_TYPE p)
bool checkTimeout(double time)
void evaluateConeHit(Track &track, double time, Eigen::Vector3d &position, Eigen::Vector3d &orientation)
double determinantLinePoint(Eigen::Vector2d a, Eigen::Vector2d b, Eigen::Vector2d c)
std::shared_ptr< Logger > logger
Discipline
Definition types.hpp:172