Added debugMqtt and autoPilot
This commit is contained in:
@@ -11,10 +11,13 @@
|
|||||||
[env:esp32doit-devkit-v1]
|
[env:esp32doit-devkit-v1]
|
||||||
platform = espressif32
|
platform = espressif32
|
||||||
board = esp32doit-devkit-v1
|
board = esp32doit-devkit-v1
|
||||||
|
board_build.partitions = no_ota.csv
|
||||||
framework = arduino
|
framework = arduino
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
monitor_port = COM12
|
monitor_port = COM12
|
||||||
lib_deps =
|
lib_deps =
|
||||||
madhephaestus/ESP32Encoder@^0.4.0
|
madhephaestus/ESP32Encoder@^0.4.0
|
||||||
jvpernis/PS3 Controller Host@^1.1.0
|
jvpernis/PS3 Controller Host@^1.1.0
|
||||||
|
mikalhart/TinyGPSPlus@^1.0.2
|
||||||
|
knolleary/PubSubClient@^2.8
|
||||||
upload_port = COM12
|
upload_port = COM12
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#ifndef AUTOPILOT_H
|
||||||
|
#define AUTOPILOT_H
|
||||||
|
|
||||||
|
#include <TinyGPS++.h>
|
||||||
|
|
||||||
|
#include "route.h"
|
||||||
|
#include "moveControl.h"
|
||||||
|
|
||||||
|
class Autopilot {
|
||||||
|
public:
|
||||||
|
Autopilot();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Route *route;
|
||||||
|
MoveControl *moveControl;
|
||||||
|
TinyGPSPlus * gps;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // AUTOPILOT_H
|
||||||
+16
-1
@@ -47,4 +47,19 @@
|
|||||||
#define ACCELERATE_STEPS 1
|
#define ACCELERATE_STEPS 1
|
||||||
|
|
||||||
// PS3 Controller
|
// PS3 Controller
|
||||||
// ESP32 MAC BL 24:62:AB:F2:4B:3A
|
// ESP32 MAC BL 24:62:AB:F2:4B:3A
|
||||||
|
|
||||||
|
//Max Values for speed and rotation
|
||||||
|
#define MAX_SPEED 1.0
|
||||||
|
#define MAX_ROTATION 1.0
|
||||||
|
|
||||||
|
//Wlan / Mqtt config
|
||||||
|
#define WLAN_SSID "Kleiax2"
|
||||||
|
#define WLAN_PASSWORD "Punica-699"
|
||||||
|
#define WLAN_IP 0x0101a8c0 //192.168.1.1
|
||||||
|
#define WLAN_SUBNETMASK 0x0000FFFF //255.255.0.0
|
||||||
|
#define WLAN_GATEWAY 0x0100a8c0 //192.168.0.1
|
||||||
|
#define MQTT_SERVER 0x1300a8c0 //192.168.0.19
|
||||||
|
#define MQTT_PORT 1883
|
||||||
|
#define MQTT_BUFFER_SITE 50
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
#include "debugMqtt.h"
|
||||||
|
|
||||||
|
PubSubClient* DebugMqtt::client;
|
||||||
|
Loglevel DebugMqtt::loglevel;
|
||||||
|
bool DebugMqtt::isInit = false;
|
||||||
|
char DebugMqtt::msg[MQTT_BUFFER_SITE];
|
||||||
|
char DebugMqtt::topic[MQTT_BUFFER_SITE];
|
||||||
|
|
||||||
|
DebugMqtt::DebugMqtt(const char* name) {
|
||||||
|
this->name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DebugMqtt::sendMsg(Loglevel loglevel, String topic, String msg) {
|
||||||
|
snprintf (DebugMqtt::msg, MQTT_BUFFER_SITE, "%s: %s",this->name ,msg.c_str());
|
||||||
|
this->sendData(loglevel, topic, DebugMqtt::msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DebugMqtt::sendMsg(Loglevel loglevel, String msg) {
|
||||||
|
this->sendMsg(loglevel, "", msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DebugMqtt::sendData(Loglevel loglevel, String topic, String data) {
|
||||||
|
if (!DebugMqtt::isInit) {return;}
|
||||||
|
|
||||||
|
if (loglevel <= DebugMqtt::loglevel && loglevel > Loglevel::none) {
|
||||||
|
snprintf (DebugMqtt::topic, MQTT_BUFFER_SITE, "%s%s", DebugMqtt::enum_to_string(loglevel).c_str(), topic.c_str());
|
||||||
|
snprintf (DebugMqtt::msg, MQTT_BUFFER_SITE, "%s", data.c_str());
|
||||||
|
client->publish(DebugMqtt::topic, DebugMqtt::msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DebugMqtt::sendData(Loglevel loglevel, String data){
|
||||||
|
this->sendData(loglevel, "", data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DebugMqtt::init(PubSubClient *client, Loglevel loglevel) {
|
||||||
|
DebugMqtt::client = client;
|
||||||
|
DebugMqtt::loglevel = loglevel;
|
||||||
|
DebugMqtt::isInit = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DebugMqtt::changeLoglevel(Loglevel loglevel) {
|
||||||
|
DebugMqtt::loglevel = loglevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
String DebugMqtt::enum_to_string(Loglevel loglevel) {
|
||||||
|
switch(loglevel){
|
||||||
|
case Loglevel::error :
|
||||||
|
return "/Rover/Error";
|
||||||
|
case Loglevel::warn :
|
||||||
|
return "/Rover/Warn";
|
||||||
|
case Loglevel::info :
|
||||||
|
return "/Rover/Info";
|
||||||
|
case Loglevel::debug :
|
||||||
|
return "/Rover/Debug";
|
||||||
|
default:
|
||||||
|
return "INVALID ENUM";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
#ifndef DEBUG_MQTT_H
|
||||||
|
#define DEBUG_MQTT_H
|
||||||
|
|
||||||
|
#include <PubSubClient.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
enum Loglevel { none,
|
||||||
|
error,
|
||||||
|
warn,
|
||||||
|
info,
|
||||||
|
debug};
|
||||||
|
|
||||||
|
class DebugMqtt {
|
||||||
|
public:
|
||||||
|
DebugMqtt(const char* name);
|
||||||
|
void sendMsg(Loglevel loglevel, String topic, String msg);
|
||||||
|
void sendMsg(Loglevel loglevel, String msg);
|
||||||
|
void sendData(Loglevel loglevel, String topic, String data);
|
||||||
|
void sendData(Loglevel loglevel, String data);
|
||||||
|
|
||||||
|
static void init(PubSubClient *client, Loglevel loglevel);
|
||||||
|
static void changeLoglevel(Loglevel loglevel);
|
||||||
|
|
||||||
|
private:
|
||||||
|
const char* name;
|
||||||
|
|
||||||
|
static String enum_to_string(Loglevel loglevel);
|
||||||
|
|
||||||
|
static PubSubClient* client;
|
||||||
|
static Loglevel loglevel;
|
||||||
|
static bool isInit;
|
||||||
|
static char msg[MQTT_BUFFER_SITE];
|
||||||
|
static char topic[MQTT_BUFFER_SITE];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // DEBUG_MQTT_H
|
||||||
+83
-8
@@ -1,21 +1,36 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <Ps3Controller.h>
|
#include <Ps3Controller.h>
|
||||||
|
#include <WiFi.h>
|
||||||
|
#include <PubSubClient.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "motorControl.h"
|
#include "motorControl.h"
|
||||||
#include "moveControl.h"
|
#include "moveControl.h"
|
||||||
#include "speedometer.h"
|
#include "speedometer.h"
|
||||||
|
#include "debugMqtt.h"
|
||||||
|
|
||||||
void callbackControllerAction();
|
void callbackControllerAction();
|
||||||
void callbackControllerConnect();
|
void callbackControllerConnect();
|
||||||
void callbackControllerDisconnect();
|
void callbackControllerDisconnect();
|
||||||
void controllerPrintBattery();
|
void controllerPrintBattery();
|
||||||
|
|
||||||
|
void reconnectMqtt();
|
||||||
|
|
||||||
MotorControl left_motor;
|
MotorControl left_motor;
|
||||||
MotorControl right_motor;
|
MotorControl right_motor;
|
||||||
Speedometer speedometer_left;
|
Speedometer speedometer_left;
|
||||||
Speedometer speedometer_right;
|
Speedometer speedometer_right;
|
||||||
MoveControl moveController;
|
MoveControl moveController;
|
||||||
|
DebugMqtt debugger("main");
|
||||||
|
|
||||||
|
IPAddress local_IP(WLAN_IP);
|
||||||
|
IPAddress gateway(WLAN_GATEWAY);
|
||||||
|
IPAddress subnet(WLAN_SUBNETMASK);
|
||||||
|
IPAddress mqtt_server(MQTT_SERVER);
|
||||||
|
|
||||||
|
WiFiClient wifi_client;
|
||||||
|
PubSubClient mqtt_client(wifi_client);
|
||||||
|
|
||||||
|
|
||||||
uint64_t last_millis = 0;
|
uint64_t last_millis = 0;
|
||||||
int controller_battery = -1;
|
int controller_battery = -1;
|
||||||
@@ -28,12 +43,37 @@ void driveWithControllerShoulderTrigger(uint8_t left, uint8_t right);
|
|||||||
void changeDriveMode();
|
void changeDriveMode();
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(115200); // make sure your Serial Monitor is also set at this baud rate.
|
Serial.begin(115200);
|
||||||
|
|
||||||
|
// Configures static IP address
|
||||||
|
if (!WiFi.config(local_IP, gateway, subnet)) {
|
||||||
|
Serial.println("STA Failed to configure");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect to Wi-Fi network with SSID and password
|
||||||
|
Serial.print("Connecting to ");
|
||||||
|
Serial.println(WLAN_SSID);
|
||||||
|
WiFi.begin("Kleiax2", "Punica-699");
|
||||||
|
while (WiFi.status() != WL_CONNECTED) {
|
||||||
|
delay(500);
|
||||||
|
Serial.print(".");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print local IP address and start web server
|
||||||
|
Serial.println("");
|
||||||
|
Serial.println("WiFi connected.");
|
||||||
|
Serial.println("IP address: ");
|
||||||
|
Serial.println(WiFi.localIP());
|
||||||
|
|
||||||
|
mqtt_client.setServer(mqtt_server, MQTT_PORT);
|
||||||
|
reconnectMqtt();
|
||||||
|
|
||||||
|
DebugMqtt::init(&mqtt_client, Loglevel::debug);
|
||||||
|
|
||||||
Ps3.attach(callbackControllerAction);
|
Ps3.attach(callbackControllerAction);
|
||||||
Ps3.attachOnConnect(callbackControllerConnect);
|
Ps3.attachOnConnect(callbackControllerConnect);
|
||||||
Ps3.attachOnDisconnect(callbackControllerDisconnect);
|
Ps3.attachOnDisconnect(callbackControllerDisconnect);
|
||||||
Serial.println("\nReady to connect");
|
Serial.println("\nReady to connect a PS3 Controller... \n");
|
||||||
Ps3.begin();
|
Ps3.begin();
|
||||||
|
|
||||||
left_motor.init(M_PWM_1, PWM_CHANNEL_M1, M_DIR_11, M_DIR_12);
|
left_motor.init(M_PWM_1, PWM_CHANNEL_M1, M_DIR_11, M_DIR_12);
|
||||||
@@ -46,11 +86,13 @@ void setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
|
if (!mqtt_client.connected()) {
|
||||||
|
reconnectMqtt();
|
||||||
|
}
|
||||||
|
mqtt_client.loop();
|
||||||
|
|
||||||
if (millis() - last_millis > 1000) {
|
if (millis() - last_millis > 1000) {
|
||||||
Serial.printf("Speed L: %f, ", speedometer_left.getSpeed());
|
debugger.sendMsg(Loglevel::info, "loop : eine Sekinde");
|
||||||
left_motor.toString();
|
|
||||||
Serial.printf("Speed R: %f, ", speedometer_right.getSpeed());
|
|
||||||
right_motor.toString();
|
|
||||||
|
|
||||||
last_millis = millis();
|
last_millis = millis();
|
||||||
}
|
}
|
||||||
@@ -64,6 +106,28 @@ void loop() {
|
|||||||
moveController.runMoveControl();
|
moveController.runMoveControl();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void reconnectMqtt() {
|
||||||
|
// Loop until reconnection
|
||||||
|
while (!mqtt_client.connected()) {
|
||||||
|
Serial.print("Attempting MQTT connection...");
|
||||||
|
// Create a random client ID
|
||||||
|
String clientId = "ESP32Rover-";
|
||||||
|
clientId += String(random(0xffff), HEX);
|
||||||
|
// Attempt to connect
|
||||||
|
if (mqtt_client.connect(clientId.c_str())) {
|
||||||
|
Serial.println("connected");
|
||||||
|
// Once connected, publish an announcement...
|
||||||
|
mqtt_client.publish("/Rover/Info", "Connected");
|
||||||
|
} else {
|
||||||
|
Serial.print("failed, rc=");
|
||||||
|
Serial.print(mqtt_client.state());
|
||||||
|
Serial.println(" try again in 5 seconds");
|
||||||
|
// Wait 5 seconds before retrying
|
||||||
|
delay(5000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void callbackControllerAction() {
|
void callbackControllerAction() {
|
||||||
if (Ps3.event.button_down.r3) { controllerPrintBattery(); }
|
if (Ps3.event.button_down.r3) { controllerPrintBattery(); }
|
||||||
if (Ps3.event.button_down.l1) { moveController.setSpeed(speed -= 0.1); }
|
if (Ps3.event.button_down.l1) { moveController.setSpeed(speed -= 0.1); }
|
||||||
@@ -108,7 +172,11 @@ void controllerPrintBattery() {
|
|||||||
void driveWithControllerJoystick(int8_t x, int8_t y) {
|
void driveWithControllerJoystick(int8_t x, int8_t y) {
|
||||||
if (drive_mode != 1) return;
|
if (drive_mode != 1) return;
|
||||||
|
|
||||||
|
double value_per_step = MAX_SPEED * 2 / 256;
|
||||||
|
moveController.setSpeed((y * -1) * value_per_step);
|
||||||
|
|
||||||
|
value_per_step = MAX_ROTATION * 2 / 256;
|
||||||
|
moveController.setRotationspeed(x * value_per_step);
|
||||||
}
|
}
|
||||||
|
|
||||||
void driveWithControllerShoulderTrigger(uint8_t left, uint8_t right) {
|
void driveWithControllerShoulderTrigger(uint8_t left, uint8_t right) {
|
||||||
@@ -131,4 +199,11 @@ void changeDriveMode() {
|
|||||||
if (drive_mode == 2) {
|
if (drive_mode == 2) {
|
||||||
moveController.setSpeed(0);
|
moveController.setSpeed(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void getDis(double lat1, double lon1, double lat2, double lon2) {
|
||||||
|
double lat = (lat1 + lat2) / 2 * 0.01745;
|
||||||
|
double dx = 111.3 * cos(lat) * (lon1 - lon2);
|
||||||
|
double dy = 111.3 * (lat1 - lat2);
|
||||||
|
double erg = sqrt(dx * dx + dy * dy);
|
||||||
|
}
|
||||||
|
|||||||
+15
-14
@@ -25,7 +25,7 @@ void MoveControl::runMoveControl() {
|
|||||||
this->regulateMotors();
|
this->regulateMotors();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveControl::setDrivingStatus(drivingStatus status) {
|
void MoveControl::setDrivingStatus(DrivingStatus status) {
|
||||||
this->driving_status = status;
|
this->driving_status = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,13 +53,14 @@ void MoveControl::calcWheelSpeed() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MoveControl::regulateMotors() {
|
void MoveControl::regulateMotors() {
|
||||||
|
double ratio = 0;
|
||||||
switch (this->driving_status) {
|
switch (this->driving_status) {
|
||||||
case drivingStatus::stop :
|
case DrivingStatus::stop :
|
||||||
this->left_motor->setTargetPower(0);
|
this->left_motor->setTargetPower(0);
|
||||||
this->right_motor->setTargetPower(0);
|
this->right_motor->setTargetPower(0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case drivingStatus::straightForward :
|
case DrivingStatus::straightForward :
|
||||||
// Left motor
|
// Left motor
|
||||||
// Too slow
|
// Too slow
|
||||||
if (this->left_speedometer->getSpeed() < this->wheelspeed_left_target
|
if (this->left_speedometer->getSpeed() < this->wheelspeed_left_target
|
||||||
@@ -89,7 +90,7 @@ void MoveControl::regulateMotors() {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case drivingStatus::straightBackward :
|
case DrivingStatus::straightBackward :
|
||||||
// Left motor
|
// Left motor
|
||||||
// Too slow
|
// Too slow
|
||||||
if (this->left_speedometer->getSpeed() > this->wheelspeed_left_target
|
if (this->left_speedometer->getSpeed() > this->wheelspeed_left_target
|
||||||
@@ -119,8 +120,8 @@ void MoveControl::regulateMotors() {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case drivingStatus::arcForwardLeft : // Identical with arcForwardRight
|
case DrivingStatus::arcForwardLeft : // Identical with arcForwardRight
|
||||||
double ratio = this->wheelspeed_left_target / this->wheelspeed_right_target;
|
ratio = this->wheelspeed_left_target / this->wheelspeed_right_target;
|
||||||
|
|
||||||
// Left motor
|
// Left motor
|
||||||
// Too slow
|
// Too slow
|
||||||
@@ -151,8 +152,8 @@ void MoveControl::regulateMotors() {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case drivingStatus::arcForwardRight : // Identical with arcForwardLeft
|
case DrivingStatus::arcForwardRight : // Identical with arcForwardLeft
|
||||||
double ratio = this->wheelspeed_left_target / this->wheelspeed_right_target;
|
ratio = this->wheelspeed_left_target / this->wheelspeed_right_target;
|
||||||
|
|
||||||
// Left motor
|
// Left motor
|
||||||
// Too slow
|
// Too slow
|
||||||
@@ -183,8 +184,8 @@ void MoveControl::regulateMotors() {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case drivingStatus::arcBackwardLeft : // Identical with arcBackwardRight
|
case DrivingStatus::arcBackwardLeft : // Identical with arcBackwardRight
|
||||||
double ratio = this->wheelspeed_left_target / this->wheelspeed_right_target;
|
ratio = this->wheelspeed_left_target / this->wheelspeed_right_target;
|
||||||
|
|
||||||
// Left motor
|
// Left motor
|
||||||
// Too slow
|
// Too slow
|
||||||
@@ -215,8 +216,8 @@ void MoveControl::regulateMotors() {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case drivingStatus::arcBackwardRight : // Identical with arcBackwardLeft
|
case DrivingStatus::arcBackwardRight : // Identical with arcBackwardLeft
|
||||||
double ratio = this->wheelspeed_left_target / this->wheelspeed_right_target;
|
ratio = this->wheelspeed_left_target / this->wheelspeed_right_target;
|
||||||
|
|
||||||
// Left motor
|
// Left motor
|
||||||
// Too slow
|
// Too slow
|
||||||
@@ -247,7 +248,7 @@ void MoveControl::regulateMotors() {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case drivingStatus::rotateLeft :
|
case DrivingStatus::rotateLeft :
|
||||||
// Left motor
|
// Left motor
|
||||||
// Too slow
|
// Too slow
|
||||||
if (this->left_speedometer->getSpeed() > this->wheelspeed_left_target
|
if (this->left_speedometer->getSpeed() > this->wheelspeed_left_target
|
||||||
@@ -277,7 +278,7 @@ void MoveControl::regulateMotors() {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case drivingStatus::rotateRight :
|
case DrivingStatus::rotateRight :
|
||||||
// Left motor
|
// Left motor
|
||||||
// Too slow
|
// Too slow
|
||||||
if (this->left_speedometer->getSpeed() < this->wheelspeed_left_target
|
if (this->left_speedometer->getSpeed() < this->wheelspeed_left_target
|
||||||
|
|||||||
+7
-7
@@ -7,7 +7,7 @@
|
|||||||
#include "speedometer.h"
|
#include "speedometer.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
enum drivingStatus {stop,
|
enum DrivingStatus {stop,
|
||||||
straightForward,
|
straightForward,
|
||||||
straightBackward,
|
straightBackward,
|
||||||
arcForwardLeft,
|
arcForwardLeft,
|
||||||
@@ -17,10 +17,10 @@ enum drivingStatus {stop,
|
|||||||
rotateLeft,
|
rotateLeft,
|
||||||
rotateRight};
|
rotateRight};
|
||||||
|
|
||||||
enum regulateStatus {stop,
|
// enum regulateStatus {stop,
|
||||||
drive,
|
// drive,
|
||||||
rotateLeft,
|
// rotateLeft,
|
||||||
rotateRight};
|
// rotateRight};
|
||||||
|
|
||||||
class MoveControl {
|
class MoveControl {
|
||||||
public:
|
public:
|
||||||
@@ -28,7 +28,7 @@ class MoveControl {
|
|||||||
void init(MotorControl *left_motor, MotorControl *right_motor,
|
void init(MotorControl *left_motor, MotorControl *right_motor,
|
||||||
Speedometer *left_encoder, Speedometer *right_encoder);
|
Speedometer *left_encoder, Speedometer *right_encoder);
|
||||||
void runMoveControl();
|
void runMoveControl();
|
||||||
void setDrivingStatus(drivingStatus status);
|
void setDrivingStatus(DrivingStatus status);
|
||||||
void setSpeed(double speed);
|
void setSpeed(double speed);
|
||||||
void setRotationspeed(double speed);
|
void setRotationspeed(double speed);
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ class MoveControl {
|
|||||||
Speedometer *left_speedometer;
|
Speedometer *left_speedometer;
|
||||||
Speedometer *right_speedometer;
|
Speedometer *right_speedometer;
|
||||||
|
|
||||||
drivingStatus driving_status = drivingStatus::stop;
|
DrivingStatus driving_status = DrivingStatus::stop;
|
||||||
|
|
||||||
double x_speed = 0;
|
double x_speed = 0;
|
||||||
double rotation_speed = 0;
|
double rotation_speed = 0;
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
#include "route.h"
|
||||||
|
|
||||||
|
Route::Route(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Route::addPoint(Point point) {
|
||||||
|
this->points.push_back(point);
|
||||||
|
this->count_points++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Route::delRoute() {
|
||||||
|
this->points.clear();
|
||||||
|
this->count_points = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Point Route::startRoute() {
|
||||||
|
this->route_started = true;
|
||||||
|
this->route_finished = false;
|
||||||
|
|
||||||
|
this->it = this->points.begin();
|
||||||
|
return *it;
|
||||||
|
}
|
||||||
|
|
||||||
|
Point Route::getNextPoint() {
|
||||||
|
if (this->route_started && !route_finished) {
|
||||||
|
it++;
|
||||||
|
return *it;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (it == this->points.end()) {
|
||||||
|
this->route_finished = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Point fail;
|
||||||
|
return fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t Route::getNumberOfPoints() {
|
||||||
|
return this->count_points;
|
||||||
|
}
|
||||||
+40
@@ -0,0 +1,40 @@
|
|||||||
|
#ifndef ROUTE_H
|
||||||
|
#define ROUTE_H
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
#include "motorControl.h"
|
||||||
|
#include "speedometer.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
struct Point{
|
||||||
|
float N = 0;
|
||||||
|
float E = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Route {
|
||||||
|
public:
|
||||||
|
Route();
|
||||||
|
|
||||||
|
void addPoint(Point point);
|
||||||
|
void delRoute();
|
||||||
|
void resetRoute();
|
||||||
|
|
||||||
|
Point startRoute();
|
||||||
|
Point getNextPoint();
|
||||||
|
uint16_t getNumberOfPoints();
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::list<Point> points;
|
||||||
|
std::list<Point>::iterator it;
|
||||||
|
|
||||||
|
uint16_t count_points = 0;
|
||||||
|
|
||||||
|
bool route_started = false;
|
||||||
|
bool route_finished = false;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // ROUTE_H
|
||||||
Reference in New Issue
Block a user