This class should be instantiated within another state to be used for detection of if the rover is stuck. Stuck detection is solely based off of a check interval on the current velocity and rotation. If the velocity and rotation are non-moving for more then a maximum interval count, we are considered stuck.
More...
#include <StuckDetection.hpp>
|
| | TimeIntervalBasedStuckDetector (double dMaximumStuckCount=3, double dStuckCheckIntervalSeconds=3) |
| | Construct a new Stuck Detector object.
|
| |
| | ~TimeIntervalBasedStuckDetector () |
| | Destroy the Stuck Detector object.
|
| |
| bool | CheckIfStuck (double dCurrentVelocity, double dCurrentAngularVelocity, double dVelocityThreshold=0.1, double dAngularVelocityThreshold=0.1) |
| | Checks if the rover meets stuck criteria based in the given parameters.
|
| |
| void | ResetStuckChecks () |
| | Reset stuck variables so rover does not go into stuck-state next check of CheckIfStuck.
|
| |
|
|
double | m_dMaximumStuckCount |
| |
|
double | m_dStuckCheckIntervalSeconds |
| |
|
unsigned int | m_unStuckChecksSoFar |
| |
|
std::chrono::system_clock::time_point | m_tmTimeSinceLastStuckCheck |
| |
This class should be instantiated within another state to be used for detection of if the rover is stuck. Stuck detection is solely based off of a check interval on the current velocity and rotation. If the velocity and rotation are non-moving for more then a maximum interval count, we are considered stuck.
- Author
- clayjay3 (clayt.nosp@m.onra.nosp@m.ycowe.nosp@m.n@gm.nosp@m.ail.c.nosp@m.om)
- Date
- 2024-04-23
◆ TimeIntervalBasedStuckDetector()
| statemachine::TimeIntervalBasedStuckDetector::TimeIntervalBasedStuckDetector |
( |
double |
dMaximumStuckCount = 3, |
|
|
double |
dStuckCheckIntervalSeconds = 3 |
|
) |
| |
|
inline |
Construct a new Stuck Detector object.
- Parameters
-
| dMaximumStuckCount | - The maximum number of times the rover can be not moving upon check interval before it is considered stuck. |
| dStuckCheckIntervalSeconds | - The interval in seconds that the function should check the current rover velocity and angular movement. |
- Author
- clayjay3 (clayt.nosp@m.onra.nosp@m.ycowe.nosp@m.n@gm.nosp@m.ail.c.nosp@m.om)
- Date
- 2024-04-23
69 {
70
71 m_dMaximumStuckCount = dMaximumStuckCount;
72 m_dStuckCheckIntervalSeconds = dStuckCheckIntervalSeconds;
73 m_unStuckChecksSoFar = 0;
74 m_tmTimeSinceLastStuckCheck = std::chrono::system_clock::now();
75 }
◆ ~TimeIntervalBasedStuckDetector()
| statemachine::TimeIntervalBasedStuckDetector::~TimeIntervalBasedStuckDetector |
( |
| ) |
|
|
inline |
◆ CheckIfStuck()
| bool statemachine::TimeIntervalBasedStuckDetector::CheckIfStuck |
( |
double |
dCurrentVelocity, |
|
|
double |
dCurrentAngularVelocity, |
|
|
double |
dVelocityThreshold = 0.1, |
|
|
double |
dAngularVelocityThreshold = 0.1 |
|
) |
| |
|
inline |
Checks if the rover meets stuck criteria based in the given parameters.
- Returns
- true - The rover is stuck.
-
false - The is not stuck.
- Author
- clayjay3 (clayt.nosp@m.onra.nosp@m.ycowe.nosp@m.n@gm.nosp@m.ail.c.nosp@m.om), Jason Pittman (jspen.nosp@m.cerp.nosp@m.ittma.nosp@m.n@gm.nosp@m.ail.c.nosp@m.om)
- Date
- 2024-04-23
97 {
98
99 bool bStuck = false;
100
101
102 std::chrono::system_clock::time_point tmCurrentTime = std::chrono::system_clock::now();
103 double dTimeSinceLastCheck = std::chrono::duration_cast<std::chrono::milliseconds>(tmCurrentTime - m_tmTimeSinceLastStuckCheck).count() / 1000.0;
104 if (dTimeSinceLastCheck > m_dStuckCheckIntervalSeconds)
105 {
106
107 m_tmTimeSinceLastStuckCheck = tmCurrentTime;
108
109
110 if (std::abs(dCurrentVelocity) < dVelocityThreshold && std::abs(dCurrentAngularVelocity) < dAngularVelocityThreshold)
111 {
112 ++m_unStuckChecksSoFar;
113 }
114 else
115 {
116 m_unStuckChecksSoFar = 0;
117 }
118 }
119
120
121 if (m_unStuckChecksSoFar > m_dMaximumStuckCount)
122 {
123
124 m_unStuckChecksSoFar = 0;
125
126 bStuck = true;
127 }
128
129
130 return bStuck;
131 }
◆ ResetStuckChecks()
| void statemachine::TimeIntervalBasedStuckDetector::ResetStuckChecks |
( |
| ) |
|
|
inline |
The documentation for this class was generated from the following file: