refactore
This commit is contained in:
@@ -26,8 +26,8 @@ void DirectionChangeSignal::action() {
|
||||
}
|
||||
|
||||
|
||||
Autopilot::Autopilot(MoveControl* moveControl, const ControlPadInput *input, Navigation* navigation)
|
||||
: ManualControl(moveControl, input) {
|
||||
Autopilot::Autopilot(DriveModiParams params, Navigation* navigation)
|
||||
: ManualControl(params) {
|
||||
this->setInputMode(ManualControl::InputMode::Digital);
|
||||
this->directionChangeSignal = new DirectionChangeSignal(navigation);
|
||||
this->setDirectionChangeCallback(this->directionChangeSignal);
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
|
||||
|
||||
#include "navigation.h"
|
||||
#include "moveControl.h"
|
||||
#include "driveModi/Modi/ManualControl/manualControl.h"
|
||||
|
||||
class DirectionChangeSignal : public DirectionChangeWrapper {
|
||||
@@ -56,7 +55,7 @@ class Autopilot : public ManualControl {
|
||||
* @param moveControl for ManualControl
|
||||
* @param navigation for route instructions
|
||||
*/
|
||||
Autopilot(MoveControl* moveControl, const ControlPadInput *input, Navigation* navigation);
|
||||
Autopilot(DriveModiParams params, Navigation* navigation);
|
||||
|
||||
/**
|
||||
* @brief Destroy the Autopilot object
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* @file calibrateCompassM.cpp
|
||||
* @author Alexander Klein (alex@kleiax.de)
|
||||
* @brief
|
||||
* @version 0.1
|
||||
* @date 2023-09-03
|
||||
*
|
||||
* @copyright Copyright (c) 2023
|
||||
*
|
||||
*/
|
||||
|
||||
#include "calibrateCompassM.h"
|
||||
|
||||
CalibrateCompassM::CalibrateCompassM(DriveModiParams params) : ManualControl(params) {}
|
||||
|
||||
void CalibrateCompassM::setCalibrateCompass(CalibrateCompass *caliCompass) {
|
||||
if (caliCompass) {
|
||||
this->caliCompass = caliCompass;
|
||||
this->addChildComponent(this->caliCompass);
|
||||
} else if (this->caliCompass) {
|
||||
this->removeChildComponent(this->caliCompass);
|
||||
this->caliCompass = caliCompass;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* @file calibrateCompassM.h
|
||||
* @author Alexander Klein (alex@kleiax.de)
|
||||
* @brief
|
||||
* @version 0.1
|
||||
* @date 2023-09-03
|
||||
*
|
||||
* @copyright Copyright (c) 2023
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef CALIBRATE_COMPASS_M_H
|
||||
#define CALIBRATE_COMPASS_M_H
|
||||
|
||||
#include "calibrateCompass.h"
|
||||
|
||||
#include "driveModi/Modi/ManualControl/manualControl.h"
|
||||
|
||||
class CalibrateCompassM : public ManualControl {
|
||||
public:
|
||||
CalibrateCompassM(DriveModiParams params);
|
||||
|
||||
void setCalibrateCompass(CalibrateCompass* caliCompass = nullptr);
|
||||
|
||||
private:
|
||||
CalibrateCompass* caliCompass = nullptr;
|
||||
};
|
||||
|
||||
#endif //CALIBRATE_COMPASS_M_H
|
||||
@@ -11,8 +11,8 @@
|
||||
|
||||
#include "driveModi/Modi/CaptureRoute/captureRoute.h"
|
||||
|
||||
CaptureRoute::CaptureRoute(MoveControl* moveControl, const ControlPadInput *input, Navigation* navigation)
|
||||
: ManualControl(moveControl, input) {
|
||||
CaptureRoute::CaptureRoute(DriveModiParams params, Navigation* navigation)
|
||||
: ManualControl(params) {
|
||||
this->navigation = navigation;
|
||||
this->navigation->getRoute()->clear();
|
||||
this->navigation->getNTRIPClient()->setAutoReconnect(true);
|
||||
|
||||
@@ -33,7 +33,7 @@ class CaptureRoute : public ManualControl {
|
||||
* @param moveControl for ManualControl
|
||||
* @param navigation to add Points
|
||||
*/
|
||||
CaptureRoute(MoveControl* moveControl, const ControlPadInput *input, Navigation* navigation);
|
||||
CaptureRoute(DriveModiParams params, Navigation* navigation);
|
||||
|
||||
/**
|
||||
* @brief Destroy the Capture Route object
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
/**
|
||||
* @file consolControl.cpp
|
||||
* @author Alexander Klein (alex@kleiax.de)
|
||||
* @brief
|
||||
* @version 0.1
|
||||
* @date 2022-02-15
|
||||
*
|
||||
* @copyright Copyright (c) 2022
|
||||
*
|
||||
*/
|
||||
|
||||
#include "consolControl.h"
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
/**
|
||||
* @file consolControl.h
|
||||
* @author Alexander Klein (alex@kleiax.de)
|
||||
* @brief
|
||||
* @version 0.1
|
||||
* @date 2022-02-15
|
||||
*
|
||||
* @copyright Copyright (c) 2022
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef CONSOL_CONTROL_H
|
||||
#define CONSOL_CONTROL_H
|
||||
|
||||
#include "driveModi/driveModi.h"
|
||||
class ConsolControl : DriveModi{
|
||||
|
||||
};
|
||||
|
||||
#endif // CONSOL_CONTROL_H
|
||||
@@ -10,15 +10,6 @@
|
||||
*/
|
||||
#include "manualControl.h"
|
||||
|
||||
ManualControl::ManualControl(MoveControl* moveControl, const ControlPadInput *input)
|
||||
: DriveModi(moveControl) {
|
||||
this->input = input;
|
||||
}
|
||||
|
||||
ManualControl::~ManualControl() {
|
||||
|
||||
}
|
||||
|
||||
void ManualControl::run() {
|
||||
switch (this->inputMode) {
|
||||
case InputMode::Analog :
|
||||
@@ -34,16 +25,6 @@ void ManualControl::run() {
|
||||
}
|
||||
}
|
||||
|
||||
void ManualControl::setCalibrateCompass(CalibrateCompass *caliCompass) {
|
||||
if (caliCompass) {
|
||||
this->caliCompass = caliCompass;
|
||||
this->addChildComponent(this->caliCompass);
|
||||
} else if (this->caliCompass) {
|
||||
this->removeChildComponent(this->caliCompass);
|
||||
this->caliCompass = caliCompass;
|
||||
}
|
||||
}
|
||||
|
||||
void ManualControl::switchInputMode() {
|
||||
this->inputMode = (this->inputMode == InputMode::Analog) ? InputMode::Digital : InputMode::Analog;
|
||||
}
|
||||
@@ -51,7 +32,7 @@ void ManualControl::switchInputMode() {
|
||||
void ManualControl::analogControl() {
|
||||
// Have to be int16_t to avoid overflow (int8_t = 255 - 127 = -128)
|
||||
int16_t x = this->input->x - 127;
|
||||
int16_t y = this->input->y - 127;
|
||||
int16_t y = this-> input->y - 127;
|
||||
|
||||
// static int counter = 0;
|
||||
// if (counter % 60 == 0) {
|
||||
|
||||
@@ -11,10 +11,7 @@
|
||||
#ifndef MANUAL_CONTROL_H
|
||||
#define MANUAL_CONTROL_H
|
||||
|
||||
#include "moveControl.h"
|
||||
#include "driveModi/driveModi.h"
|
||||
#include "controlPadInput.h"
|
||||
#include "calibrateCompass.h"
|
||||
|
||||
class DirectionChangeWrapper {
|
||||
public:
|
||||
@@ -36,10 +33,7 @@ class ManualControl : public DriveModi {
|
||||
Digital
|
||||
};
|
||||
|
||||
ManualControl(MoveControl *moveControl, const ControlPadInput *input);
|
||||
~ManualControl();
|
||||
|
||||
void setCalibrateCompass(CalibrateCompass* caliCompass = nullptr);
|
||||
ManualControl(DriveModiParams params) : DriveModi(params){};
|
||||
|
||||
void switchInputMode();
|
||||
void setInputMode(InputMode mode) { this->inputMode = mode; }
|
||||
@@ -51,14 +45,12 @@ class ManualControl : public DriveModi {
|
||||
|
||||
protected:
|
||||
void run() override;
|
||||
const ControlPadInput* input;
|
||||
|
||||
private:
|
||||
void analogControl();
|
||||
void digitalControl();
|
||||
|
||||
bool lastLoopTurned = false;
|
||||
CalibrateCompass* caliCompass = nullptr;
|
||||
DirectionChangeWrapper* directionChangeWrapper = nullptr;
|
||||
InputMode inputMode = InputMode::Analog;
|
||||
};
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
*/
|
||||
#include "testMode.h"
|
||||
|
||||
TestMode::TestMode(MoveControl *moveControl, Navigation* navigation)
|
||||
: DriveModi(moveControl) {
|
||||
TestMode::TestMode(DriveModiParams params, Navigation* navigation)
|
||||
: DriveModi(params) {
|
||||
this->navigation = navigation;
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ class TestMode : public DriveModi {
|
||||
* @param moveControl
|
||||
* @param navigation
|
||||
*/
|
||||
TestMode(MoveControl *moveControl, Navigation* navigation);
|
||||
TestMode(DriveModiParams params, Navigation* navigation);
|
||||
~TestMode();
|
||||
|
||||
bool drive(int16_t cm = 0, int16_t degree = 0);
|
||||
|
||||
@@ -11,33 +11,22 @@
|
||||
|
||||
#include "driveModi/driveManager.h"
|
||||
|
||||
Modi& operator++(Modi& m, int) {
|
||||
return m = (m == Modi::TestMode) ? Modi::Off : static_cast<Modi>(static_cast<int>(m)+1);
|
||||
DriveManager::DriveManager(MoveControl *moveControl, SensorData* sensorData, ControlPadInput *input, bool wifi) {
|
||||
this->driveModiParams.input = input;
|
||||
this->driveModiParams.moveControl = moveControl;
|
||||
this->driveModiParams.sensorData = sensorData;
|
||||
|
||||
this->init(wifi);
|
||||
}
|
||||
|
||||
DriveManager::DriveManager(MoveControl *moveControl, SPIClass *spiPort, const ControlPadInput *input, bool wifi) {
|
||||
this->moveControl = moveControl;
|
||||
this->input = input;
|
||||
|
||||
this->spiPort = spiPort;
|
||||
this->navigation = new Navigation(spiPort, PinNumbers::gnssSpiCs);
|
||||
if (wifi)
|
||||
this->navigation->initNtrip(NTRIP_HOST, NTRIP_PORT, NTRIP_MOUNT_POINT, NTRIP_USER, NTRIP_PASSWORD);
|
||||
DriveManager::DriveManager(DriveModiParams params, bool wifi){
|
||||
this->driveModiParams = params;
|
||||
|
||||
this->addChildComponent(this->moveControl);
|
||||
this->addChildComponent(this->navigation);
|
||||
this->activateOnlyChilds();
|
||||
this->init(wifi);
|
||||
}
|
||||
|
||||
DriveManager::~DriveManager() {
|
||||
delete this->navigation;
|
||||
delete this->spiPort;
|
||||
}
|
||||
|
||||
void DriveManager::run() {}
|
||||
|
||||
void DriveManager::nextModus() {
|
||||
changeModus(this->currentModus++);
|
||||
}
|
||||
|
||||
void DriveManager::changeModus(Modi modus) {
|
||||
@@ -56,26 +45,22 @@ void DriveManager::changeModus(Modi modus) {
|
||||
break;
|
||||
|
||||
case Modi::ManualControl: {
|
||||
this->currentModusPtr = new ManualControl(this->moveControl, this->input);
|
||||
this->currentModusPtr = new ManualControl(this->driveModiParams);
|
||||
}
|
||||
break;
|
||||
|
||||
case Modi::CaptureRoute: {
|
||||
this->currentModusPtr = new CaptureRoute(this->moveControl, this->input, this->navigation);
|
||||
this->currentModusPtr = new CaptureRoute(this->driveModiParams, this->navigation);
|
||||
}
|
||||
break;
|
||||
|
||||
case Modi::Autopilot: {
|
||||
this->currentModusPtr = new Autopilot(this->moveControl, this->input, this->navigation);
|
||||
this->currentModusPtr = new Autopilot(this->driveModiParams, this->navigation);
|
||||
}
|
||||
break;
|
||||
|
||||
case Modi::ConsolControl:
|
||||
this->currentModusPtr = nullptr;
|
||||
break;
|
||||
|
||||
case Modi::TestMode: {
|
||||
this->currentModusPtr = new TestMode(this->moveControl, this->navigation);
|
||||
this->currentModusPtr = new TestMode(driveModiParams, this->navigation);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -88,3 +73,13 @@ void DriveManager::changeModus(Modi modus) {
|
||||
this->addChildComponent(this->currentModusPtr);
|
||||
}
|
||||
|
||||
void DriveManager::init(bool wifi) {
|
||||
this->navigation = new Navigation();
|
||||
if (wifi)
|
||||
this->navigation->initNtrip(NTRIP_HOST, NTRIP_PORT, NTRIP_MOUNT_POINT, NTRIP_USER, NTRIP_PASSWORD);
|
||||
|
||||
this->addChildComponent(this->driveModiParams.moveControl);
|
||||
this->addChildComponent(this->navigation);
|
||||
this->activateOnlyChilds();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,17 @@
|
||||
#include "driveModi.h"
|
||||
|
||||
DriveModi::DriveModi(MoveControl* moveControl) {
|
||||
DriveModi::DriveModi(MoveControl* moveControl, ControlPadInput* input, SensorData* sensorData) {
|
||||
this->moveControl = moveControl;
|
||||
this->moveControl->setDrivingStatus(MoveControl::Status::Drive);
|
||||
this->loopDelay = 40;
|
||||
this->input = input;
|
||||
this->sensorData = sensorData;
|
||||
this->init();
|
||||
}
|
||||
|
||||
DriveModi::DriveModi(DriveModiParams params){
|
||||
this->moveControl = params.moveControl;
|
||||
this->input = params.input;
|
||||
this->sensorData = params.sensorData;
|
||||
this->init();
|
||||
}
|
||||
|
||||
DriveModi::~DriveModi() {
|
||||
@@ -11,3 +19,8 @@ DriveModi::~DriveModi() {
|
||||
this->moveControl->setRotationSpeed(0);
|
||||
this->moveControl->setDrivingStatus(MoveControl::Status::Stop);
|
||||
}
|
||||
|
||||
void DriveModi::init() {
|
||||
this->moveControl->setDrivingStatus(MoveControl::Status::Drive);
|
||||
this->loopDelay = 40;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,14 @@
|
||||
|
||||
#include "component.h"
|
||||
#include "moveControl.h"
|
||||
#include "controlPadInput.h"
|
||||
#include "sensorData.h"
|
||||
|
||||
struct DriveModiParams {
|
||||
MoveControl* moveControl;
|
||||
ControlPadInput* input;
|
||||
SensorData* sensorData;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Baseclass to build DriveModi
|
||||
@@ -23,9 +31,12 @@
|
||||
*/
|
||||
class DriveModi : public Component {
|
||||
public:
|
||||
DriveModi(MoveControl* moveControl);
|
||||
DriveModi(MoveControl* moveControl, ControlPadInput* input, SensorData* sensorData);
|
||||
DriveModi(DriveModiParams);
|
||||
virtual ~DriveModi();
|
||||
|
||||
SensorData getSensorData() const { return this->sensorData; }
|
||||
|
||||
/**
|
||||
* @brief Set the max speed
|
||||
*
|
||||
@@ -48,8 +59,12 @@ class DriveModi : public Component {
|
||||
|
||||
protected:
|
||||
MoveControl *moveControl;
|
||||
ControlPadInput* input;
|
||||
SensorData* sensorData;
|
||||
double maxForwardSpeed = 1;
|
||||
double maxRotationSpeed = 7;
|
||||
|
||||
|
||||
private:
|
||||
void init();
|
||||
};
|
||||
#endif // DRIVEMODI_H
|
||||
|
||||
+10
-1
@@ -31,6 +31,8 @@
|
||||
#include "network.h"
|
||||
#include "debugMqtt.h"
|
||||
#include "battery.h"
|
||||
#include "sensors.h"
|
||||
#include "sensorData.h"
|
||||
#include "debugTimes.h"
|
||||
#include "controlPad.h"
|
||||
|
||||
@@ -55,6 +57,8 @@ OutputBuf* outputBuf;
|
||||
DebugMqtt* debugMqtt = nullptr;
|
||||
Battery* mainBattery;
|
||||
SPIClass* spiPort;
|
||||
Sensors* sensors;
|
||||
SensorData* sensorData;
|
||||
ControlPad* controlPad;
|
||||
|
||||
bool wifiIsActive;
|
||||
@@ -115,7 +119,11 @@ void setup() {
|
||||
std::cout << "Build timestamp: " << BUILD_TIMESTAMP << std::endl;
|
||||
std::cout << "All actions from the main program run on Core -> " << xPortGetCoreID() << std::endl;
|
||||
|
||||
driveManager = new DriveManager(&moveController, spiPort, controlPad->getControlPadDataPtr(), wifiIsActive);
|
||||
sensors = new Sensors();
|
||||
sensors->enableGnss(spiPort, PinNumbers::gnssSpiCs);
|
||||
sensors->enableCompass();
|
||||
sensorData = sensors->getSensorData();
|
||||
driveManager = new DriveManager(&moveController, sensorData, controlPad->getControlPadDataPtr(), wifiIsActive);
|
||||
|
||||
outputBuf->activateMqtt(true);
|
||||
|
||||
@@ -142,6 +150,7 @@ void loop() {
|
||||
#endif //MQTT
|
||||
wifiTime.stopConsol("WiFi-Time", 10);
|
||||
}
|
||||
sensors->loop();
|
||||
driveManager->loop();
|
||||
controlPad->loop();
|
||||
main_m->update();
|
||||
|
||||
Reference in New Issue
Block a user