diff --git a/mavone/NodeRed_one.sql b/mavone/NodeRed_one.sql index c6cc9ec..0a68736 100644 --- a/mavone/NodeRed_one.sql +++ b/mavone/NodeRed_one.sql @@ -1,13 +1,13 @@ --- MySQL dump 10.13 Distrib 8.0.34, for Win64 (x86_64) +-- MySQL dump 10.13 Distrib 8.0.36, for Linux (x86_64) -- --- Host: 140.120.108.238 Database: Mav_one +-- Host: 172.17.0.2 Database: Mav_one -- ------------------------------------------------------ -- Server version 8.0.29 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!50503 SET NAMES utf8 */; +/*!50503 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; @@ -33,7 +33,8 @@ CREATE TABLE `NodeRed_one` ( `vehicle_lat` double DEFAULT NULL, `vehicle_lon` double DEFAULT NULL, `vehicle_head` float DEFAULT NULL, - `vehicle_bat` float DEFAULT NULL, + `vehicle_bat_volt` float DEFAULT NULL, + `vehicle_bat_perc` float DEFAULT NULL, `vehicle_speed` float DEFAULT NULL, `drone_alt` float DEFAULT NULL, `drone_air` tinyint DEFAULT NULL, @@ -46,7 +47,7 @@ CREATE TABLE `NodeRed_one` ( `command_para1` double DEFAULT NULL, `command_para2` double DEFAULT NULL, PRIMARY KEY (`SerialNo`) -) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +) ENGINE=InnoDB AUTO_INCREMENT=118 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -58,4 +59,4 @@ CREATE TABLE `NodeRed_one` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2023-12-15 8:39:43 +-- Dump completed on 2024-02-02 15:33:46 diff --git a/mavone/mavone.cpp b/mavone/mavone.cpp index 6f16486..94c5dc2 100644 --- a/mavone/mavone.cpp +++ b/mavone/mavone.cpp @@ -198,9 +198,6 @@ int main(int argc, char** argv) // 確認系統是否仍連線 if (gHandlerMask[handlerInfo.systemID]["is_connected"] == 0) { handlerInfo.handlerState = systemHandlerState::Disconnected; - // 更新 mavsys_connect_status 欄位 - sqlString = "UPDATE NodeRed_one SET mavsys_connect_status = 'Disconnected' WHERE SerialNO = " + std::to_string(handlerInfo.mysqlSN) + ";"; - stmt->execute(sqlString); break; } @@ -223,9 +220,6 @@ int main(int argc, char** argv) // 確認系統是否仍連線 if (gHandlerMask[handlerInfo.systemID]["is_connected"] == 0) { handlerInfo.handlerState = systemHandlerState::Disconnected; - // 更新 mavsys_connect_status 欄位 - sqlString = "UPDATE NodeRed_one SET mavsys_connect_status = 'Disconnected' WHERE SerialNO = " + std::to_string(handlerInfo.mysqlSN) + ";"; - stmt->execute(sqlString); break; } @@ -254,6 +248,9 @@ int main(int argc, char** argv) case systemHandlerState::Disconnected : std::cout << "(mavone.cpp:while) SystemHandler:" << std::to_string(handlerInfo.systemID) << " at Disconnected. " << std::endl; //debug + // 更新 mavsys_connect_status 欄位 + sqlString = "UPDATE NodeRed_one SET mavsys_connect_status = 'Disconnected' WHERE SerialNO = " + std::to_string(handlerInfo.mysqlSN) + ";"; + stmt->execute(sqlString); // reset = true; //debug break; } @@ -263,6 +260,7 @@ int main(int argc, char** argv) // 刪除 Disconnected 的 handlerInfo for (auto it = systemHandlerInfos.begin(); it != systemHandlerInfos.end(); /* no increment here */) { if (it->handlerState == systemHandlerState::Disconnected) { + // 這個 if 如果不加 則副程序在結束以前就會被主程序放生 執行時會出現 SIGABRT 錯誤 if (it->systemThread.joinable()) { it->systemThread.join(); } diff --git a/mavone/systemHandler.cpp b/mavone/systemHandler.cpp index 318e7a8..ae84248 100644 --- a/mavone/systemHandler.cpp +++ b/mavone/systemHandler.cpp @@ -52,6 +52,11 @@ void systemHandler(System& system) { // Put all the subscriber init in this section if (system.has_autopilot()) { + + auto set_rate_result = telemetry.set_rate_position(1.0); + if (set_rate_result != mavsdk::Telemetry::Result::Success) { + std::cout << "(systemHandler.cpp:systemHandler) Setting position rate failed:" << set_rate_result << std::endl; + } telemetry.subscribe_position([&system, &telemetryInfo](Telemetry::Position position) { // 轉換數字到字串用的暫存變數 std::ostringstream num_str_ss; @@ -81,6 +86,10 @@ void systemHandler(System& system) { num_str_ss.str(""); }); + // set_rate_result = telemetry.set_rate_attitude_euler(1.0); // only in v2.0 + // if (set_rate_result != mavsdk::Telemetry::Result::Success) { + // std::cout << "(systemHandler.cpp:systemHandler) Setting euler rate failed:" << set_rate_result << std::endl; + // } telemetry.subscribe_attitude_euler([&system, &telemetryInfo](Telemetry::EulerAngle eulerAngle) { // 轉換數字到字串用的暫存變數 std::ostringstream num_str_ss; @@ -109,16 +118,27 @@ void systemHandler(System& system) { num_str_ss.str(""); }); + set_rate_result = telemetry.set_rate_battery(1.0); + if (set_rate_result != mavsdk::Telemetry::Result::Success) { + std::cout << "(systemHandler.cpp:systemHandler) Setting battery rate failed:" << set_rate_result << std::endl; + } telemetry.subscribe_battery([&system, &telemetryInfo](Telemetry::Battery battery) { // 轉換數字到字串用的暫存變數 std::ostringstream num_str_ss; // Store telemetry information num_str_ss << std::fixed << std::setprecision(4) << battery.remaining_percent; - telemetryInfo["vehicle_bat"] = num_str_ss.str(); + telemetryInfo["vehicle_bat_perc"] = num_str_ss.str(); + num_str_ss.str(""); + num_str_ss << std::fixed << std::setprecision(4) << battery.voltage_v; + telemetryInfo["vehicle_bat_volt"] = num_str_ss.str(); num_str_ss.str(""); }); + set_rate_result = telemetry.set_rate_in_air(1.0); + if (set_rate_result != mavsdk::Telemetry::Result::Success) { + std::cout << "(systemHandler.cpp:systemHandler) Setting in_air rate failed:" << set_rate_result << std::endl; + } telemetry.subscribe_in_air([&system, &telemetryInfo](bool in_air) { if(in_air){ telemetryInfo["drone_air"] = "1"; @@ -135,6 +155,7 @@ void systemHandler(System& system) { } }); } + // Wait Until telemetryInfo get something. and if nothing get from System for 10 sec will cut off this connection. _counter = 0; while(telemetryInfo.empty()){