From 528de4f3f469c3177b36247e63c789c073fd8ca7 Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Wed, 20 Nov 2024 15:39:13 +0100 Subject: [PATCH 1/4] code conventions --- src/C++/Driver/src/KobukiDriver/CKobuki.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/C++/Driver/src/KobukiDriver/CKobuki.cpp b/src/C++/Driver/src/KobukiDriver/CKobuki.cpp index 02cfe9d..258f384 100755 --- a/src/C++/Driver/src/KobukiDriver/CKobuki.cpp +++ b/src/C++/Driver/src/KobukiDriver/CKobuki.cpp @@ -572,10 +572,10 @@ void CKobuki::Rotate(int degrees) { float radians = degrees * PI / 180.0; // Calculate the rotation speed in radians per second - double radpersec = 1; + double RADS_PER_SEC = 1; // calculator rotation time and give absolute value - float rotation_time = std::abs(radians / radpersec); + float rotation_time = std::abs(radians / RADS_PER_SEC); // Use original function to set the rotation speed in mm/s setRotationSpeed(radians); From 47b29a1c551a5cab33cc68628b21c22a9bfed53b Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Wed, 20 Nov 2024 15:49:21 +0100 Subject: [PATCH 2/4] added both json and idividual topic sending in cpp --- src/C++/Driver/src/main.cpp | 60 ++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/src/C++/Driver/src/main.cpp b/src/C++/Driver/src/main.cpp index aa0c5aa..12c310f 100644 --- a/src/C++/Driver/src/main.cpp +++ b/src/C++/Driver/src/main.cpp @@ -149,6 +149,64 @@ void logToFile() } } +void sendIndividualKobukiData(const TKobukiData &data) { + while (true) { + client.publishMessage("kobuki/data/timestamp", std::to_string(data.timestamp)); + client.publishMessage("kobuki/data/BumperCenter", std::to_string(data.BumperCenter)); + client.publishMessage("kobuki/data/BumperLeft", std::to_string(data.BumperLeft)); + client.publishMessage("kobuki/data/BumperRight", std::to_string(data.BumperRight)); + client.publishMessage("kobuki/data/WheelDropLeft", std::to_string(data.WheelDropLeft)); + client.publishMessage("kobuki/data/WheelDropRight", std::to_string(data.WheelDropRight)); + client.publishMessage("kobuki/data/CliffCenter", std::to_string(data.CliffCenter)); + client.publishMessage("kobuki/data/CliffLeft", std::to_string(data.CliffLeft)); + client.publishMessage("kobuki/data/CliffRight", std::to_string(data.CliffRight)); + client.publishMessage("kobuki/data/EncoderLeft", std::to_string(data.EncoderLeft)); + client.publishMessage("kobuki/data/EncoderRight", std::to_string(data.EncoderRight)); + client.publishMessage("kobuki/data/PWMleft", std::to_string(data.PWMleft)); + client.publishMessage("kobuki/data/PWMright", std::to_string(data.PWMright)); + client.publishMessage("kobuki/data/ButtonPress1", std::to_string(data.ButtonPress1)); + client.publishMessage("kobuki/data/ButtonPress2", std::to_string(data.ButtonPress2)); + client.publishMessage("kobuki/data/ButtonPress3", std::to_string(data.ButtonPress3)); + client.publishMessage("kobuki/data/Charger", std::to_string(data.Charger)); + client.publishMessage("kobuki/data/Battery", std::to_string(data.Battery)); + client.publishMessage("kobuki/data/overCurrent", std::to_string(data.overCurrent)); + client.publishMessage("kobuki/data/IRSensorRight", std::to_string(data.IRSensorRight)); + client.publishMessage("kobuki/data/IRSensorCenter", std::to_string(data.IRSensorCenter)); + client.publishMessage("kobuki/data/IRSensorLeft", std::to_string(data.IRSensorLeft)); + client.publishMessage("kobuki/data/GyroAngle", std::to_string(data.GyroAngle)); + client.publishMessage("kobuki/data/GyroAngleRate", std::to_string(data.GyroAngleRate)); + client.publishMessage("kobuki/data/CliffSensorRight", std::to_string(data.CliffSensorRight)); + client.publishMessage("kobuki/data/CliffSensorCenter", std::to_string(data.CliffSensorCenter)); + client.publishMessage("kobuki/data/CliffSensorLeft", std::to_string(data.CliffSensorLeft)); + client.publishMessage("kobuki/data/wheelCurrentLeft", std::to_string(data.wheelCurrentLeft)); + client.publishMessage("kobuki/data/wheelCurrentRight", std::to_string(data.wheelCurrentRight)); + client.publishMessage("kobuki/data/digitalInput", std::to_string(data.digitalInput)); + client.publishMessage("kobuki/data/analogInputCh0", std::to_string(data.analogInputCh0)); + client.publishMessage("kobuki/data/analogInputCh1", std::to_string(data.analogInputCh1)); + client.publishMessage("kobuki/data/analogInputCh2", std::to_string(data.analogInputCh2)); + client.publishMessage("kobuki/data/analogInputCh3", std::to_string(data.analogInputCh3)); + client.publishMessage("kobuki/data/frameId", std::to_string(data.frameId)); + client.publishMessage("kobuki/data/extraInfo/HardwareVersionPatch", std::to_string(data.extraInfo.HardwareVersionPatch)); + client.publishMessage("kobuki/data/extraInfo/HardwareVersionMinor", std::to_string(data.extraInfo.HardwareVersionMinor)); + client.publishMessage("kobuki/data/extraInfo/HardwareVersionMajor", std::to_string(data.extraInfo.HardwareVersionMajor)); + client.publishMessage("kobuki/data/extraInfo/FirmwareVersionPatch", std::to_string(data.extraInfo.FirmwareVersionPatch)); + client.publishMessage("kobuki/data/extraInfo/FirmwareVersionMinor", std::to_string(data.extraInfo.FirmwareVersionMinor)); + client.publishMessage("kobuki/data/extraInfo/FirmwareVersionMajor", std::to_string(data.extraInfo.FirmwareVersionMajor)); + client.publishMessage("kobuki/data/extraInfo/UDID0", std::to_string(data.extraInfo.UDID0)); + client.publishMessage("kobuki/data/extraInfo/UDID1", std::to_string(data.extraInfo.UDID1)); + client.publishMessage("kobuki/data/extraInfo/UDID2", std::to_string(data.extraInfo.UDID2)); + + if (!data.gyroData.empty()) { + const auto& latestGyro = data.gyroData.back(); + client.publishMessage("kobuki/data/gyroData/x", std::to_string(latestGyro.x)); + client.publishMessage("kobuki/data/gyroData/y", std::to_string(latestGyro.y)); + client.publishMessage("kobuki/data/gyroData/z", std::to_string(latestGyro.z)); + } + + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); + } +} + std::string serializeKobukiData(const TKobukiData &data) { std::string json = "{\"timestamp\":" + std::to_string(data.timestamp) + ",\"BumperCenter\":" + std::to_string(data.BumperCenter) + @@ -212,4 +270,4 @@ void sendKobukiData(TKobukiData &data) { client.publishMessage("kobuki/data", serializeKobukiData(data)); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); } -} \ No newline at end of file +} From a028a6f88f77c069c4491b2a2744af7fe6e39c0a Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Wed, 20 Nov 2024 16:07:39 +0100 Subject: [PATCH 3/4] change mqtt credentials --- src/C++/Driver/src/main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/C++/Driver/src/main.cpp b/src/C++/Driver/src/main.cpp index 12c310f..4b504ba 100644 --- a/src/C++/Driver/src/main.cpp +++ b/src/C++/Driver/src/main.cpp @@ -9,7 +9,8 @@ using namespace std; CKobuki robot; std::string readMQTT(); void parseMQTT(std::string message); -MqttClient client("mqtt://145.92.224.21:1883", "KobukiRPI", "ishak", "kobuki"); // create a client object +//ip, clientID, username, password +MqttClient client("mqtt://145.92.224.21:1883", "KobukiRPI", "rpi", "rpiwachtwoordofzo"); // create a client object std::string message = "stop"; std::string serializeKobukiData(const TKobukiData &data); void sendKobukiData(TKobukiData &data); From eb804c888cc146a0ec10dbb595a7dbd0f3d10eee Mon Sep 17 00:00:00 2001 From: Sam Hos Date: Wed, 20 Nov 2024 16:29:22 +0100 Subject: [PATCH 4/4] updated credentials to secure mqtt --- src/C++/Driver/src/main.cpp | 2 +- src/Python/flask/web/app.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/C++/Driver/src/main.cpp b/src/C++/Driver/src/main.cpp index 4b504ba..059e8e2 100644 --- a/src/C++/Driver/src/main.cpp +++ b/src/C++/Driver/src/main.cpp @@ -10,7 +10,7 @@ CKobuki robot; std::string readMQTT(); void parseMQTT(std::string message); //ip, clientID, username, password -MqttClient client("mqtt://145.92.224.21:1883", "KobukiRPI", "rpi", "rpiwachtwoordofzo"); // create a client object +MqttClient client("mqtt://145.92.224.21:1884", "KobukiRPI", "rpi", "rpiwachtwoordofzo"); // create a client object std::string message = "stop"; std::string serializeKobukiData(const TKobukiData &data); void sendKobukiData(TKobukiData &data); diff --git a/src/Python/flask/web/app.py b/src/Python/flask/web/app.py index 0dda4da..60ddd63 100644 --- a/src/Python/flask/web/app.py +++ b/src/Python/flask/web/app.py @@ -9,8 +9,8 @@ def on_message(client, userdata, message): # Create an MQTT client instance mqtt_client = mqtt.Client() -mqtt_client.username_pw_set("ishak", "kobuki") -mqtt_client.connect("localhost", 1883, 60) +mqtt_client.username_pw_set("server", "serverwachtwoordofzo") +mqtt_client.connect("localhost", 1884, 60) mqtt_client.loop_start() mqtt_client.subscribe("kobuki/data") mqtt_client.on_message = on_message # this lines needs to be under the function definition otherwise it cant find which function it needs to use