refactor all autopilot stuff

This commit is contained in:
2023-05-11 19:37:57 +02:00
parent 8945e5eb21
commit 6874aed6ed
5 changed files with 217 additions and 116 deletions
+15 -15
View File
@@ -116,40 +116,40 @@ bool Navigation::startNavigation() {
return this->navigationStarted;
}
CourseCorrection Navigation::getCourseCorrection() {
bool Navigation::getCourseCorrection(CourseCorrection& correction) {
//TODO: Check accuracy befor make something
CourseCorrection courseCorrection = {0, 0};
correction.correction = 0;
correction.distance = 0;
int16_t targetCourse = this->currentPosition.courseTo(this->targetPoint);
double distance = this->currentPosition.distanceTo(this->targetPoint);
if (distance < 0 || this->navigationFinished)
return courseCorrection;
return false;
// Check if I need a new Point
if (distance < MIN_DISTANCE_TO_REACH_POINT) {
bool goOn = this->nextPoint();
if (!goOn) {
if (!this->nextPoint()) {
this->navigationFinished = true;
this->navigationStarted = false;
return courseCorrection; // End of navigation
return false; // End of navigation
}
}
// correction = targetCourse - currentCourse
int16_t signedAzimuth = this->azimuth > 180 ? this->azimuth - 360 : this->azimuth;
int16_t correction = targetCourse - signedAzimuth;
if (correction > 180)
correction -= 360;
else if (correction < -180)
correction += 360;
int16_t correctionCourse = targetCourse - signedAzimuth;
if (correctionCourse > 180)
correctionCourse -= 360;
else if (correctionCourse < -180)
correctionCourse += 360;
// //Rotate result by 180° to corrigate Azimuth
// correction = correction > 180 ? correction -360 : correction;
// correctionCourse = correctionCourse > 180 ? correctionCourse -360 : correctionCourse;
courseCorrection.correction = correction;
courseCorrection.distance = distance;
return courseCorrection;
correction.correction = correctionCourse;
correction.distance = distance;
return true;
}
bool Navigation::addCurrentPosToRoute() {
+4 -2
View File
@@ -114,9 +114,11 @@ class Navigation {
*
* This should be called by the driver to get new instructions.
*
* @return CourseCorrection
* @param correction passed as refernce to get the data
* @return true if new correction data provided
* @return false if route is finished
*/
CourseCorrection getCourseCorrection();
bool getCourseCorrection(CourseCorrection& correction);
/**
* @brief Tries to add the current Position to the route