From 0d53f0440470b11fccdd52383dcf4268e638cb3a Mon Sep 17 00:00:00 2001 From: Dan Hert Date: Fri, 24 Nov 2023 12:47:30 +0100 Subject: [PATCH] updates for the new system --- launch/terminal.launch | 2 +- src/data_acquisition.cpp | 44 ++----- src/status.cpp | 269 ++++++++------------------------------- 3 files changed, 66 insertions(+), 249 deletions(-) diff --git a/launch/terminal.launch b/launch/terminal.launch index 497af43..ca9db19 100644 --- a/launch/terminal.launch +++ b/launch/terminal.launch @@ -48,7 +48,7 @@ - + diff --git a/src/data_acquisition.cpp b/src/data_acquisition.cpp index cd9dced..5c65edc 100644 --- a/src/data_acquisition.cpp +++ b/src/data_acquisition.cpp @@ -213,7 +213,6 @@ class Acquisition { // | -------------------- UAV configuration ------------------- | string _uav_name_; - string _nato_name_; string _uav_type_; string _run_type_; double _uav_mass_; @@ -272,7 +271,6 @@ Acquisition::Acquisition() { string tmp_uav_mass; param_loader.loadParam("uav_name", _uav_name_); - param_loader.loadParam("nato_name", _nato_name_); param_loader.loadParam("uav_type", _uav_type_); param_loader.loadParam("run_type", _run_type_); param_loader.loadParam("uav_mass", _uav_mass_); @@ -295,10 +293,9 @@ Acquisition::Acquisition() { { std::scoped_lock lock(mutex_status_msg_); - uav_status_.uav_name = _uav_name_; - uav_status_.nato_name = _nato_name_; - uav_status_.uav_type = _uav_type_; - uav_status_.uav_mass = _uav_mass_; + uav_status_.uav_name = _uav_name_; + uav_status_.uav_type = _uav_type_; + uav_status_.uav_mass = _uav_mass_; } // | ------------------- want hz handling ------------------- | @@ -884,7 +881,6 @@ void Acquisition::prefillUavStatus() { std::scoped_lock lock(mutex_status_msg_); uav_status_.uav_name = "N/A"; - uav_status_.nato_name = "N/A"; uav_status_.uav_type = "N/A"; uav_status_.uav_mass = 0.0; uav_status_.control_manager_diag_hz = 0.0; @@ -892,7 +888,6 @@ void Acquisition::prefillUavStatus() { uav_status_.gains.clear(); uav_status_.trackers.clear(); uav_status_.constraints.clear(); - uav_status_.fly_state = "N/A"; uav_status_.secs_flown = 0; uav_status_.odom_hz = 0.0; uav_status_.odom_x = 0.0; @@ -900,9 +895,8 @@ void Acquisition::prefillUavStatus() { uav_status_.odom_z = 0.0; uav_status_.odom_hdg = 0.0; uav_status_.odom_frame = "N/A"; - uav_status_.odom_estimators_hori.clear(); - uav_status_.odom_estimators_vert.clear(); - uav_status_.odom_estimators_hdg.clear(); + uav_status_.odom_estimators.clear(); + uav_status_.max_flight_z = 0.0; uav_status_.cpu_load = 0.0; uav_status_.cpu_ghz = 0.0; uav_status_.cpu_temperature = 0.0; @@ -1238,31 +1232,13 @@ void Acquisition::estimationDiagCallback(const mrs_msgs::EstimationDiagnosticsCo { std::scoped_lock lock(mutex_status_msg_); + uav_status_.max_flight_z = msg->max_flight_z; + uav_status_.odom_estimators = msg->switchable_state_estimators; - uav_status_.odom_estimators_hori = msg->switchable_state_estimators; - - for (size_t i = 0; i < uav_status_.odom_estimators_hori.size(); i++) { - if ((uav_status_.odom_estimators_hori[i] == msg->current_state_estimator) && i != 0) { - // put the active estimator as first in the vector - std::swap(uav_status_.odom_estimators_hori[0], uav_status_.odom_estimators_hori[i]); - } - } - - uav_status_.odom_estimators_vert = msg->switchable_state_estimators; - - for (size_t i = 0; i < uav_status_.odom_estimators_vert.size(); i++) { - if ((uav_status_.odom_estimators_vert[i] == msg->current_state_estimator) && i != 0) { - // put the active estimator as first in the vector - std::swap(uav_status_.odom_estimators_vert[0], uav_status_.odom_estimators_vert[i]); - } - } - - uav_status_.odom_estimators_hdg = msg->switchable_state_estimators; - - for (size_t i = 0; i < uav_status_.odom_estimators_hdg.size(); i++) { - if ((uav_status_.odom_estimators_hdg[i] == msg->current_state_estimator) && i != 0) { + for (size_t i = 0; i < uav_status_.odom_estimators.size(); i++) { + if ((uav_status_.odom_estimators[i] == msg->current_state_estimator) && i != 0) { // put the active estimator as first in the vector - std::swap(uav_status_.odom_estimators_hdg[0], uav_status_.odom_estimators_hdg[i]); + std::swap(uav_status_.odom_estimators[0], uav_status_.odom_estimators[i]); } } } diff --git a/src/status.cpp b/src/status.cpp index b788cd1..a826114 100644 --- a/src/status.cpp +++ b/src/status.cpp @@ -201,15 +201,11 @@ class Status { mrs_lib::ServiceClientHandler service_set_gains_; mrs_lib::ServiceClientHandler service_set_controller_; mrs_lib::ServiceClientHandler service_set_tracker_; - mrs_lib::ServiceClientHandler service_set_odometry_source_; - mrs_lib::ServiceClientHandler service_set_lat_estimator_; - mrs_lib::ServiceClientHandler service_set_alt_estimator_; - mrs_lib::ServiceClientHandler service_set_hdg_estimator_; + mrs_lib::ServiceClientHandler service_set_estimator_; mrs_lib::ServiceClientHandler service_hover_; // | -------------------- UAV configuration ------------------- | - string _nato_name_; string _uav_type_; /* string _run_type_; */ /* double _uav_mass_; */ @@ -242,9 +238,6 @@ class Status { vector goto_menu_text_; vector goto_menu_inputs_; - /* vector tf_static_list_compare_; */ - /* vector tf_static_list_add_; */ - string old_constraints; mrs_msgs::GimbalState gimbal_command; @@ -337,10 +330,7 @@ Status::Status() { service_set_gains_ = mrs_lib::ServiceClientHandler(nh_, "set_gains_out"); service_set_controller_ = mrs_lib::ServiceClientHandler(nh_, "set_controller_out"); service_set_tracker_ = mrs_lib::ServiceClientHandler(nh_, "set_tracker_out"); - service_set_odometry_source_ = mrs_lib::ServiceClientHandler(nh_, "set_odometry_source_out"); - service_set_lat_estimator_ = mrs_lib::ServiceClientHandler(nh_, "set_odometry_lat_estimator_out"); - service_set_alt_estimator_ = mrs_lib::ServiceClientHandler(nh_, "set_odometry_alt_estimator_out"); - service_set_hdg_estimator_ = mrs_lib::ServiceClientHandler(nh_, "set_odometry_hdg_estimator_out"); + service_set_estimator_ = mrs_lib::ServiceClientHandler(nh_, "set_estimator_out"); service_hover_ = mrs_lib::ServiceClientHandler(nh_, "hover_out"); // mrs_lib profiler profiler_ = mrs_lib::Profiler(nh_, "Status", _profiler_enabled_); @@ -887,88 +877,7 @@ bool Status::mainMenuHandler(int key_in) { mrs_msgs::String string_service; string_service.request.value = odometry_lat_sources_text_[line]; - service_set_odometry_source_.call(string_service, _service_num_calls_, _service_delay_); - printServiceResult(string_service.response.success, string_service.response.message); - - submenu_vec_.clear(); - return true; - } - } - break; - - case 6: - // Lat estimator - ret = submenu_vec_[0].iterate(odometry_lat_sources_text_, key_in, true); - - if (ret.has_value()) { - - int line = get<0>(ret.value()); - int key = get<1>(ret.value()); - - if (line == 666 && key == 666) { - - submenu_vec_.clear(); - return false; - - } else if (key == KEY_ENT) { - - mrs_msgs::String string_service; - string_service.request.value = odometry_lat_sources_text_[line]; - service_set_lat_estimator_.call(string_service, _service_num_calls_, _service_delay_); - printServiceResult(string_service.response.success, string_service.response.message); - - submenu_vec_.clear(); - return true; - } - } - break; - - case 7: - // Alt estimator - ret = submenu_vec_[0].iterate(odometry_alt_sources_text_, key_in, true); - - if (ret.has_value()) { - - int line = get<0>(ret.value()); - int key = get<1>(ret.value()); - - if (line == 666 && key == 666) { - - submenu_vec_.clear(); - return false; - - } else if (key == KEY_ENT) { - - mrs_msgs::String string_service; - string_service.request.value = odometry_alt_sources_text_[line]; - service_set_alt_estimator_.call(string_service, _service_num_calls_, _service_delay_); - printServiceResult(string_service.response.success, string_service.response.message); - - submenu_vec_.clear(); - return true; - } - } - break; - - case 8: - // Hdg estimator - ret = submenu_vec_[0].iterate(odometry_hdg_sources_text_, key_in, true); - - if (ret.has_value()) { - - int line = get<0>(ret.value()); - int key = get<1>(ret.value()); - - if (line == 666 && key == 666) { - - submenu_vec_.clear(); - return false; - - } else if (key == KEY_ENT) { - - mrs_msgs::String string_service; - string_service.request.value = odometry_hdg_sources_text_[line]; - service_set_hdg_estimator_.call(string_service, _service_num_calls_, _service_delay_); + service_set_estimator_.call(string_service, _service_num_calls_, _service_delay_); printServiceResult(string_service.response.success, string_service.response.message); submenu_vec_.clear(); @@ -1019,7 +928,7 @@ bool Status::mainMenuHandler(int key_in) { Menu menu(x, 31 + cols, confirm_text, 0); submenu_vec_.push_back(menu); - } else if (line == main_menu_text_.size() - 8) { + } else if (line == main_menu_text_.size() - 5) { // SET CONSTRAINTS { @@ -1041,7 +950,7 @@ bool Status::mainMenuHandler(int key_in) { submenu_vec_.push_back(menu); } - } else if (line == main_menu_text_.size() - 7) { + } else if (line == main_menu_text_.size() - 4) { // SET GAINS { @@ -1063,7 +972,7 @@ bool Status::mainMenuHandler(int key_in) { submenu_vec_.push_back(menu); } - } else if (line == main_menu_text_.size() - 6) { + } else if (line == main_menu_text_.size() - 3) { // SET CONTROLLER { @@ -1085,7 +994,7 @@ bool Status::mainMenuHandler(int key_in) { submenu_vec_.push_back(menu); } - } else if (line == main_menu_text_.size() - 5) { + } else if (line == main_menu_text_.size() - 2) { // SET TRACKER { @@ -1107,12 +1016,12 @@ bool Status::mainMenuHandler(int key_in) { submenu_vec_.push_back(menu); } - } else if (line == main_menu_text_.size() - 4) { + } else if (line == main_menu_text_.size() - 1) { // SET ODOMETRY SOURCE { std::scoped_lock lock(mutex_status_msg_); - odometry_lat_sources_text_ = uav_status_.odom_estimators_hori; + odometry_lat_sources_text_ = uav_status_.odom_estimators; } if (!odometry_lat_sources_text_.empty()) { @@ -1129,70 +1038,6 @@ bool Status::mainMenuHandler(int key_in) { submenu_vec_.push_back(menu); } - } else if (line == main_menu_text_.size() - 3) { - // SET LAT ESTIMATOR - - { - std::scoped_lock lock(mutex_status_msg_); - odometry_lat_sources_text_ = uav_status_.odom_estimators_hori; - } - - if (!odometry_lat_sources_text_.empty()) { - - int x; - int y; - int rows; - int cols; - - getyx(menu_vec_[0].getWin(), x, y); - getmaxyx(menu_vec_[0].getWin(), rows, cols); - - Menu menu(x, 31 + cols, odometry_lat_sources_text_, 6); - submenu_vec_.push_back(menu); - } - - } else if (line == main_menu_text_.size() - 2) { - // SET ALT ESTIMATOR - - { - std::scoped_lock lock(mutex_status_msg_); - odometry_alt_sources_text_ = uav_status_.odom_estimators_vert; - } - - if (!odometry_alt_sources_text_.empty()) { - int x; - int y; - int rows; - int cols; - - getyx(menu_vec_[0].getWin(), x, y); - getmaxyx(menu_vec_[0].getWin(), rows, cols); - - Menu menu(x, 31 + cols, odometry_alt_sources_text_, 7); - submenu_vec_.push_back(menu); - } - - } else if (line == main_menu_text_.size() - 1) { - // SET HDG ESTIMATOR - - { - std::scoped_lock lock(mutex_status_msg_); - odometry_hdg_sources_text_ = uav_status_.odom_estimators_hdg; - } - - if (!odometry_hdg_sources_text_.empty()) { - int x; - int y; - int rows; - int cols; - - getyx(menu_vec_[0].getWin(), x, y); - getmaxyx(menu_vec_[0].getWin(), rows, cols); - - Menu menu(x, 31 + cols, odometry_hdg_sources_text_, 8); - submenu_vec_.push_back(menu); - } - } else { printServiceResult(false, "undefined"); } @@ -2070,9 +1915,8 @@ void Status::uavStateHandler(WINDOW* win) { double cmd_hdg; std::string odom_frame; - std::string curr_estimator_hori; - std::string curr_estimator_vert; - std::string curr_estimator_hdg; + std::string curr_estimator; + double max_flight_z; bool null_tracker; @@ -2091,9 +1935,9 @@ void Status::uavStateHandler(WINDOW* win) { cmd_z = uav_status_.cmd_z; cmd_hdg = uav_status_.cmd_hdg; - uav_status_.odom_estimators_hori.empty() ? curr_estimator_hori = "NONE" : curr_estimator_hori = uav_status_.odom_estimators_hori[0]; - uav_status_.odom_estimators_vert.empty() ? curr_estimator_vert = "NONE" : curr_estimator_vert = uav_status_.odom_estimators_vert[0]; - uav_status_.odom_estimators_hdg.empty() ? curr_estimator_hdg = "NONE" : curr_estimator_hdg = uav_status_.odom_estimators_hdg[0]; + uav_status_.odom_estimators.empty() ? curr_estimator = "NONE" : curr_estimator = uav_status_.odom_estimators[0]; + + max_flight_z = uav_status_.max_flight_z; null_tracker = uav_status_.null_tracker; } @@ -2131,9 +1975,7 @@ void Status::uavStateHandler(WINDOW* win) { printLimitedDouble(win, 3, 1, "%4.0f", state_z, 1000); printLimitedDouble(win, 4, 1, "%4.1f", heading, 1000); - printLimitedString(win, 1, 6, curr_estimator_hori, 2); - printLimitedString(win, 3, 6, curr_estimator_vert, 2); - printLimitedString(win, 4, 6, curr_estimator_hdg, 2); + printLimitedString(win, 1, 6, curr_estimator, 2); } } @@ -2201,11 +2043,24 @@ void Status::uavStateHandler(WINDOW* win) { } int pos = odom_frame.find("/") + 1; - printLimitedString(win, 1, 11, odom_frame.substr(pos, odom_frame.length()), 15); + printLimitedString(win, 1, 11, odom_frame.substr(pos, odom_frame.length()), 14); + printLimitedString(win, 4, 11, curr_estimator, 14); + + double dist_to_max_z = max_flight_z - state_z; + if (dist_to_max_z < 0.0) { + wattron(win, COLOR_PAIR(RED)); + wattron(win, A_BLINK); + } else if (dist_to_max_z < 0.3) { + wattron(win, COLOR_PAIR(RED)); + } else if (dist_to_max_z < 1.0) { + wattron(win, COLOR_PAIR(YELLOW)); + } else { + wattron(win, COLOR_PAIR(GREEN)); + } - printLimitedString(win, 2, 11, "Hori: " + curr_estimator_hori, 15); - printLimitedString(win, 3, 11, "Vert: " + curr_estimator_vert, 15); - printLimitedString(win, 4, 11, "Head: " + curr_estimator_hdg, 15); + printLimitedDouble(win, 3, 11, "Max: %5.1f", max_flight_z, 1000); + wattron(win, COLOR_PAIR(color)); + wattroff(win, A_BLINK); } } @@ -2333,13 +2188,10 @@ void Status::controlManagerHandler(WINDOW* win) { } else { if (curr_controller != "Se3Controller" && curr_controller != "MpcController") { wattron(win, COLOR_PAIR(RED)); - printLimitedString(win, 1, 1, curr_controller, 29); - } else { - mvwprintw(win, 1, 1, curr_controller.c_str()); - wattron(win, COLOR_PAIR(NORMAL)); - mvwprintw(win, 1, 1 + curr_controller.length(), "%s", "/"); } - + printLimitedString(win, 1, 1, curr_controller, 13); + wattron(win, COLOR_PAIR(NORMAL)); + printLimitedString(win, 1, 1 + std::min(int(curr_controller.length()), 13), "/" + curr_gains, 10); wattron(win, COLOR_PAIR(color)); if (null_tracker) { @@ -2352,15 +2204,12 @@ void Status::controlManagerHandler(WINDOW* win) { } else { wattron(win, COLOR_PAIR(RED)); } - - printLimitedString(win, 2, 1, curr_tracker, 29); - - } else { - mvwprintw(win, 2, 1, curr_tracker.c_str()); - wattron(win, COLOR_PAIR(NORMAL)); - mvwprintw(win, 2, 1 + curr_tracker.length(), "%s", "/"); - wattron(win, COLOR_PAIR(color)); } + + printLimitedString(win, 2, 1, curr_tracker, 13); + wattron(win, COLOR_PAIR(NORMAL)); + printLimitedString(win, 2, 1 + std::min(int(curr_tracker.length()), 13), "/" + curr_constraints, 8); + wattron(win, COLOR_PAIR(color)); } if (!callbacks_enabled) { @@ -2374,7 +2223,7 @@ void Status::controlManagerHandler(WINDOW* win) { if (has_goal) { wattron(win, COLOR_PAIR(GREEN)); - mvwprintw(win, 2, 21, "FLY"); + mvwprintw(win, 2, 22, "FLY"); wattroff(win, COLOR_PAIR(GREEN)); } else { @@ -2384,17 +2233,17 @@ void Status::controlManagerHandler(WINDOW* win) { wattroff(win, COLOR_PAIR(YELLOW)); } - if (rate == 0) { - printNoData(win, 1, 2 + curr_controller.length()); - } else { - printLimitedString(win, 1, 2 + curr_controller.length(), curr_gains, 10); - } + /* if (rate == 0) { */ + /* printNoData(win, 1, 2 + curr_controller.length()); */ + /* } else { */ + /* printLimitedString(win, 1, 2 + curr_controller.length(), curr_gains, 10); */ + /* } */ - if (rate == 0) { - printNoData(win, 2, 2 + curr_tracker.length()); - } else { - printLimitedString(win, 2, 2 + curr_tracker.length(), curr_constraints, 10); - } + /* if (rate == 0) { */ + /* printNoData(win, 2, 2 + curr_tracker.length()); */ + /* } else { */ + /* printLimitedString(win, 2, 2 + curr_tracker.length(), curr_constraints, 10); */ + /* } */ } //} @@ -2765,7 +2614,6 @@ void Status::topLineHandler(WINDOW* win) { std::string uav_name; std::string uav_type; - std::string nato_name; bool collision_avoidance_enabled; @@ -2775,7 +2623,6 @@ void Status::topLineHandler(WINDOW* win) { std::scoped_lock lock(mutex_status_msg_); uav_name = uav_status_.uav_name; uav_type = uav_status_.uav_type; - nato_name = uav_status_.nato_name; collision_avoidance_enabled = uav_status_.collision_avoidance_enabled; avoiding_collision_ = uav_status_.avoiding_collision; automatic_start_can_takeoff_ = uav_status_.automatic_start_can_takeoff; @@ -2810,7 +2657,7 @@ void Status::topLineHandler(WINDOW* win) { tmp_time = 99.9; } - mvwprintw(win, 0, 10, " %s %s %s ", uav_name.c_str(), uav_type.c_str(), nato_name.c_str()); + mvwprintw(win, 0, 10, " %s %s ", uav_name.c_str(), uav_type.c_str()); if (!mini_) { /* printLimitedDouble(win, 0, 94, "%3.1f", tmp_time, 100); */ @@ -2967,7 +2814,6 @@ void Status::prefillUavStatus() { std::scoped_lock lock(mutex_status_msg_); uav_status_.uav_name = "N/A"; - uav_status_.nato_name = "N/A"; uav_status_.uav_type = "N/A"; uav_status_.uav_mass = 0.0; uav_status_.control_manager_diag_hz = 0.0; @@ -2975,7 +2821,6 @@ void Status::prefillUavStatus() { uav_status_.gains.clear(); uav_status_.trackers.clear(); uav_status_.constraints.clear(); - uav_status_.fly_state = "N/A"; uav_status_.secs_flown = 0; uav_status_.odom_hz = 0.0; uav_status_.odom_x = 0.0; @@ -2983,9 +2828,8 @@ void Status::prefillUavStatus() { uav_status_.odom_z = 0.0; uav_status_.odom_hdg = 0.0; uav_status_.odom_frame = "N/A"; - uav_status_.odom_estimators_hori.clear(); - uav_status_.odom_estimators_vert.clear(); - uav_status_.odom_estimators_hdg.clear(); + uav_status_.odom_estimators.clear(); + uav_status_.max_flight_z = 0.0; uav_status_.cpu_load = 0.0; uav_status_.cpu_ghz = 0.0; uav_status_.free_ram = 0.0; @@ -3077,10 +2921,7 @@ void Status::setupMainMenu() { main_menu_text_.push_back("Set Gains"); main_menu_text_.push_back("Set Controller"); main_menu_text_.push_back("Set Tracker"); - main_menu_text_.push_back("Set Odom Source"); - main_menu_text_.push_back("Set Lat Estimator"); - main_menu_text_.push_back("Set Alt Estimator"); - main_menu_text_.push_back("Set Hdg Estimator"); + main_menu_text_.push_back("Set Estimator"); Menu menu(1, 32, main_menu_text_); menu_vec_.push_back(menu);