diff --git a/pps_ws/src/d_fall_pps/GUI_Qt/studentGUI/include/MainWindow.h b/pps_ws/src/d_fall_pps/GUI_Qt/studentGUI/include/MainWindow.h index f602d16293f3b8714b06d29a6c5ea004738e14bf..be4888a000e4ac892adc5da572790d1404c9a286 100644 --- a/pps_ws/src/d_fall_pps/GUI_Qt/studentGUI/include/MainWindow.h +++ b/pps_ws/src/d_fall_pps/GUI_Qt/studentGUI/include/MainWindow.h @@ -208,6 +208,9 @@ private: void highlightSafeControllerTab(); void highlightCustomControllerTab(); + bool setpointInsideBox(Setpoint setpoint, CrazyflieContext context); + Setpoint correctSetpointBox(Setpoint setpoint, CrazyflieContext context); + const std::vector<float> m_cutoff_voltages {3.1966, 3.2711, 3.3061, 3.3229, 3.3423, 3.3592, 3.3694, 3.385, 3.4006, 3.4044, 3.4228, 3.4228, 3.4301, 3.4445, 3.4531, 3.4677, 3.4705, 3.4712, 3.4756, 3.483, 3.4944, 3.5008, 3.5008, 3.5084, 3.511, 3.5122, 3.5243, 3.5329, 3.5412, 3.5529, 3.5609, 3.5625, 3.5638, 3.5848, 3.6016, 3.6089, 3.6223, 3.628, 3.6299, 3.6436, 3.6649, 3.6878, 3.6983, 3.7171, 3.7231, 3.7464, 3.7664, 3.7938, 3.8008, 3.816, 3.8313, 3.8482, 3.866, 3.8857, 3.8984, 3.9159, 3.9302, 3.9691, 3.997, 4.14 }; }; diff --git a/pps_ws/src/d_fall_pps/GUI_Qt/studentGUI/src/MainWindow.cpp b/pps_ws/src/d_fall_pps/GUI_Qt/studentGUI/src/MainWindow.cpp index 817af1e6d6a742c796ca6b997ea5004b2af9ecfc..16e466035ff962b902f5cc4057150ff29fdc793d 100644 --- a/pps_ws/src/d_fall_pps/GUI_Qt/studentGUI/src/MainWindow.cpp +++ b/pps_ws/src/d_fall_pps/GUI_Qt/studentGUI/src/MainWindow.cpp @@ -142,6 +142,9 @@ MainWindow::MainWindow(int argc, char **argv, QWidget *parent) : ui->label_battery->setStyleSheet("QLabel { color : red; }"); m_battery_state = BATTERY_STATE_NORMAL; + ui->error_label->setStyleSheet("QLabel { color : red; }"); + ui->error_label->clear(); + initialize_custom_setpoint(); } @@ -481,6 +484,20 @@ void MainWindow::on_set_setpoint_button_clicked() if(!ui->new_setpoint_yaw->text().isEmpty()) msg_setpoint.yaw = (ui->new_setpoint_yaw->text()).toFloat() * DEG2RAD; + + if(!setpointInsideBox(msg_setpoint, m_context)) + { + ROS_INFO("Corrected setpoint, was out of bounds"); + + // correct the setpoint given the box size + msg_setpoint = correctSetpointBox(msg_setpoint, m_context); + ui->error_label->setText("Setpoint is outside safety box"); + } + else + { + ui->error_label->clear(); + } + this->controllerSetpointPublisher.publish(msg_setpoint); ROS_INFO_STREAM("Setpoint change clicked with:" << msg_setpoint.x << ", "<< msg_setpoint.y << ", "<< msg_setpoint.z << ", "<< msg_setpoint.yaw); @@ -688,3 +705,43 @@ void MainWindow::on_customButton_3_clicked() this->PPSClientStudentCustomButtonPublisher.publish(msg_custom_button); ROS_INFO("Custom button 3 pressed"); } + +Setpoint MainWindow::correctSetpointBox(Setpoint setpoint, CrazyflieContext context) +{ + Setpoint corrected_setpoint; + corrected_setpoint = setpoint; + + if(setpoint.x > context.localArea.xmax) + corrected_setpoint.x = context.localArea.xmax; + if(setpoint.y > context.localArea.ymax) + corrected_setpoint.y = context.localArea.ymax; + if(setpoint.z > context.localArea.zmax) + corrected_setpoint.z = context.localArea.zmax; + + if(setpoint.x < context.localArea.xmin) + corrected_setpoint.x = context.localArea.xmin; + if(setpoint.y < context.localArea.ymin) + corrected_setpoint.y = context.localArea.ymin; + if(setpoint.z < context.localArea.zmin) + corrected_setpoint.z = context.localArea.zmin; + +} + +bool MainWindow::setpointInsideBox(Setpoint setpoint, CrazyflieContext context) +{ + //position check + if((setpoint.x < context.localArea.xmin) or (setpoint.x > context.localArea.xmax)) { + ROS_INFO_STREAM("x outside safety box"); + return false; + } + if((setpoint.y < context.localArea.ymin) or (setpoint.y > context.localArea.ymax)) { + ROS_INFO_STREAM("y outside safety box"); + return false; + } + if((setpoint.z < context.localArea.zmin) or (setpoint.z > context.localArea.zmax)) { + ROS_INFO_STREAM("z outside safety box"); + return false; + } + + return true; +} diff --git a/pps_ws/src/d_fall_pps/GUI_Qt/studentGUI/src/MainWindow.ui b/pps_ws/src/d_fall_pps/GUI_Qt/studentGUI/src/MainWindow.ui index 4eb82b0ea3a04a23d3c0fb8e1f8fce3e55836ece..88cf08e5ce445fe31c88bde317df0329f9d9a7f2 100644 --- a/pps_ws/src/d_fall_pps/GUI_Qt/studentGUI/src/MainWindow.ui +++ b/pps_ws/src/d_fall_pps/GUI_Qt/studentGUI/src/MainWindow.ui @@ -171,7 +171,7 @@ <item row="3" column="0"> <widget class="QTabWidget" name="tabWidget"> <property name="currentIndex"> - <number>1</number> + <number>0</number> </property> <widget class="QWidget" name="tab_3"> <attribute name="title"> @@ -536,6 +536,19 @@ </property> </widget> </item> + <item row="3" column="1"> + <widget class="QLineEdit" name="current_setpoint_z"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="readOnly"> + <bool>true</bool> + </property> + </widget> + </item> <item row="3" column="0"> <widget class="QLabel" name="label_9"> <property name="sizePolicy"> @@ -562,8 +575,8 @@ </property> </widget> </item> - <item row="3" column="1"> - <widget class="QLineEdit" name="current_setpoint_z"> + <item row="4" column="1"> + <widget class="QLineEdit" name="current_setpoint_yaw"> <property name="sizePolicy"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> <horstretch>0</horstretch> @@ -593,19 +606,6 @@ </property> </widget> </item> - <item row="4" column="1"> - <widget class="QLineEdit" name="current_setpoint_yaw"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="readOnly"> - <bool>true</bool> - </property> - </widget> - </item> <item row="3" column="2"> <widget class="QLineEdit" name="new_setpoint_z"> <property name="sizePolicy"> @@ -650,6 +650,13 @@ </property> </widget> </item> + <item row="5" column="1"> + <widget class="QLabel" name="error_label"> + <property name="text"> + <string/> + </property> + </widget> + </item> </layout> </widget> </item> diff --git a/pps_ws/src/d_fall_pps/src/PPSClient.cpp b/pps_ws/src/d_fall_pps/src/PPSClient.cpp index 7335c70925d5cb36f5ff1c81db1d77f496470ac3..8f8d560e75e9fc9a9decdcce1c8bbc6beef8e177 100755 --- a/pps_ws/src/d_fall_pps/src/PPSClient.cpp +++ b/pps_ws/src/d_fall_pps/src/PPSClient.cpp @@ -1013,7 +1013,6 @@ int main(int argc, char* argv[]) // namespace string for the parameter service that is running on the machine of this // agent namespace_to_own_agent_parameter_service = "ParameterService"; - // Create a node handle to the parameter service running on this agent's machine ros::NodeHandle nodeHandle_to_own_agent_parameter_service(namespace_to_own_agent_parameter_service); @@ -1068,7 +1067,6 @@ int main(int argc, char* argv[]) controller_setpoint.y = default_setpoint[1]; controller_setpoint.z = default_setpoint[2]; controller_setpoint.yaw = default_setpoint[3]; - //ros::service::waitForService("/CentralManagerService/CentralManager"); centralManager = nodeHandle.serviceClient<CMQuery>("/CentralManagerService/Query", false);