stable v0.41

mavone.cpp
  - 優化mysql中 connect state 寫入
systemHandler.cpp
  - 電量 增加 電量%數 電壓
  - 經緯高 電量 in_air 於實體飛控板傳輸頻率
master
chiyu1468 2 years ago
parent 98e399cbd5
commit 37fcd66585

@ -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 -- Server version 8.0.29
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!50503 SET NAMES utf8 */; /*!50503 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */; /*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
@ -33,7 +33,8 @@ CREATE TABLE `NodeRed_one` (
`vehicle_lat` double DEFAULT NULL, `vehicle_lat` double DEFAULT NULL,
`vehicle_lon` double DEFAULT NULL, `vehicle_lon` double DEFAULT NULL,
`vehicle_head` float 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, `vehicle_speed` float DEFAULT NULL,
`drone_alt` float DEFAULT NULL, `drone_alt` float DEFAULT NULL,
`drone_air` tinyint DEFAULT NULL, `drone_air` tinyint DEFAULT NULL,
@ -46,7 +47,7 @@ CREATE TABLE `NodeRed_one` (
`command_para1` double DEFAULT NULL, `command_para1` double DEFAULT NULL,
`command_para2` double DEFAULT NULL, `command_para2` double DEFAULT NULL,
PRIMARY KEY (`SerialNo`) 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 */; /*!40101 SET character_set_client = @saved_cs_client */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
@ -58,4 +59,4 @@ CREATE TABLE `NodeRed_one` (
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; /*!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

@ -198,9 +198,6 @@ int main(int argc, char** argv)
// 確認系統是否仍連線 // 確認系統是否仍連線
if (gHandlerMask[handlerInfo.systemID]["is_connected"] == 0) { if (gHandlerMask[handlerInfo.systemID]["is_connected"] == 0) {
handlerInfo.handlerState = systemHandlerState::Disconnected; 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; break;
} }
@ -223,9 +220,6 @@ int main(int argc, char** argv)
// 確認系統是否仍連線 // 確認系統是否仍連線
if (gHandlerMask[handlerInfo.systemID]["is_connected"] == 0) { if (gHandlerMask[handlerInfo.systemID]["is_connected"] == 0) {
handlerInfo.handlerState = systemHandlerState::Disconnected; 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; break;
} }
@ -254,6 +248,9 @@ int main(int argc, char** argv)
case systemHandlerState::Disconnected : case systemHandlerState::Disconnected :
std::cout << "(mavone.cpp:while) SystemHandler:" << std::to_string(handlerInfo.systemID) << " at Disconnected. " << std::endl; //debug 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 // reset = true; //debug
break; break;
} }
@ -263,6 +260,7 @@ int main(int argc, char** argv)
// 刪除 Disconnected 的 handlerInfo // 刪除 Disconnected 的 handlerInfo
for (auto it = systemHandlerInfos.begin(); it != systemHandlerInfos.end(); /* no increment here */) { for (auto it = systemHandlerInfos.begin(); it != systemHandlerInfos.end(); /* no increment here */) {
if (it->handlerState == systemHandlerState::Disconnected) { if (it->handlerState == systemHandlerState::Disconnected) {
// 這個 if 如果不加 則副程序在結束以前就會被主程序放生 執行時會出現 SIGABRT 錯誤
if (it->systemThread.joinable()) { if (it->systemThread.joinable()) {
it->systemThread.join(); it->systemThread.join();
} }

@ -52,6 +52,11 @@ void systemHandler(System& system) {
// Put all the subscriber init in this section // Put all the subscriber init in this section
if (system.has_autopilot()) { 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) { telemetry.subscribe_position([&system, &telemetryInfo](Telemetry::Position position) {
// 轉換數字到字串用的暫存變數 // 轉換數字到字串用的暫存變數
std::ostringstream num_str_ss; std::ostringstream num_str_ss;
@ -81,6 +86,10 @@ void systemHandler(System& system) {
num_str_ss.str(""); 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) { telemetry.subscribe_attitude_euler([&system, &telemetryInfo](Telemetry::EulerAngle eulerAngle) {
// 轉換數字到字串用的暫存變數 // 轉換數字到字串用的暫存變數
std::ostringstream num_str_ss; std::ostringstream num_str_ss;
@ -109,16 +118,27 @@ void systemHandler(System& system) {
num_str_ss.str(""); 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) { telemetry.subscribe_battery([&system, &telemetryInfo](Telemetry::Battery battery) {
// 轉換數字到字串用的暫存變數 // 轉換數字到字串用的暫存變數
std::ostringstream num_str_ss; std::ostringstream num_str_ss;
// Store telemetry information // Store telemetry information
num_str_ss << std::fixed << std::setprecision(4) << battery.remaining_percent; 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(""); 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) { telemetry.subscribe_in_air([&system, &telemetryInfo](bool in_air) {
if(in_air){ if(in_air){
telemetryInfo["drone_air"] = "1"; 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. // Wait Until telemetryInfo get something. and if nothing get from System for 10 sec will cut off this connection.
_counter = 0; _counter = 0;
while(telemetryInfo.empty()){ while(telemetryInfo.empty()){

Loading…
Cancel
Save