From 3ea976c8c05a07b102a8a202c9c8dfe77c5b7f55 Mon Sep 17 00:00:00 2001
From: rhunt <rhunt@iastate.edu>
Date: Mon, 21 Mar 2022 00:31:31 +0100
Subject: [PATCH] send setpoint added

---
 groundStation/gui/MicroCART/MicroCart.cflags  |   1 +
 groundStation/gui/MicroCART/MicroCart.config  |   2 +
 groundStation/gui/MicroCART/MicroCart.creator |   1 +
 .../gui/MicroCART/MicroCart.cxxflags          |   1 +
 groundStation/gui/MicroCART/MicroCart.files   |  38 ++
 .../gui/MicroCART/MicroCart.includes          |   1 +
 .../gui/MicroCART/crazyflieworker.cpp         |   1 +
 groundStation/gui/MicroCART/crazyflieworker.h |   5 +-
 groundStation/gui/MicroCART/mainwindow.cpp    |  90 ++++-
 groundStation/gui/MicroCART/mainwindow.h      |  14 +-
 groundStation/gui/MicroCART/mainwindow.ui     | 330 ++++++------------
 11 files changed, 246 insertions(+), 238 deletions(-)
 create mode 100644 groundStation/gui/MicroCART/MicroCart.cflags
 create mode 100644 groundStation/gui/MicroCART/MicroCart.config
 create mode 100644 groundStation/gui/MicroCART/MicroCart.creator
 create mode 100644 groundStation/gui/MicroCART/MicroCart.cxxflags
 create mode 100644 groundStation/gui/MicroCART/MicroCart.files
 create mode 100644 groundStation/gui/MicroCART/MicroCart.includes

diff --git a/groundStation/gui/MicroCART/MicroCart.cflags b/groundStation/gui/MicroCART/MicroCart.cflags
new file mode 100644
index 000000000..68d516530
--- /dev/null
+++ b/groundStation/gui/MicroCART/MicroCart.cflags
@@ -0,0 +1 @@
+-std=c17
\ No newline at end of file
diff --git a/groundStation/gui/MicroCART/MicroCart.config b/groundStation/gui/MicroCART/MicroCart.config
new file mode 100644
index 000000000..e0284f425
--- /dev/null
+++ b/groundStation/gui/MicroCART/MicroCart.config
@@ -0,0 +1,2 @@
+// Add predefined macros for your project here. For example:
+// #define THE_ANSWER 42
diff --git a/groundStation/gui/MicroCART/MicroCart.creator b/groundStation/gui/MicroCART/MicroCart.creator
new file mode 100644
index 000000000..e94cbbd30
--- /dev/null
+++ b/groundStation/gui/MicroCART/MicroCart.creator
@@ -0,0 +1 @@
+[General]
diff --git a/groundStation/gui/MicroCART/MicroCart.cxxflags b/groundStation/gui/MicroCART/MicroCart.cxxflags
new file mode 100644
index 000000000..6435dfce2
--- /dev/null
+++ b/groundStation/gui/MicroCART/MicroCart.cxxflags
@@ -0,0 +1 @@
+-std=c++17
\ No newline at end of file
diff --git a/groundStation/gui/MicroCART/MicroCart.files b/groundStation/gui/MicroCART/MicroCart.files
new file mode 100644
index 000000000..b4d086dd0
--- /dev/null
+++ b/groundStation/gui/MicroCART/MicroCart.files
@@ -0,0 +1,38 @@
+MicroCART
+MicroCART.pro
+README.md
+controlworker.cpp
+controlworker.h
+crazyflieworker.cpp
+crazyflieworker.h
+gridlines.gif
+main.cpp
+mainwindow.cpp
+mainwindow.h
+mainwindow.ui
+moc_controlworker.cpp
+moc_crazyflieworker.cpp
+moc_mainwindow.cpp
+moc_predefs.h
+moc_qFlightInstruments.cpp
+moc_qattitudeindicator.cpp
+moc_qcustomplot.cpp
+moc_quaditem.cpp
+moc_slotprocess.cpp
+moc_trackerworker.cpp
+qFlightInstruments.cpp
+qFlightInstruments.h
+qcustomplot.cpp
+qcustomplot.h
+qrc_resources.cpp
+quad.png
+quaditem.cpp
+quaditem.h
+resources.qrc
+setpoint.cpp
+setpoint.h
+slotprocess.cpp
+slotprocess.h
+trackerworker.cpp
+trackerworker.h
+ui_mainwindow.h
diff --git a/groundStation/gui/MicroCART/MicroCart.includes b/groundStation/gui/MicroCART/MicroCart.includes
new file mode 100644
index 000000000..9c558e357
--- /dev/null
+++ b/groundStation/gui/MicroCART/MicroCart.includes
@@ -0,0 +1 @@
+.
diff --git a/groundStation/gui/MicroCART/crazyflieworker.cpp b/groundStation/gui/MicroCART/crazyflieworker.cpp
index 6e5be8620..d51f2ce76 100644
--- a/groundStation/gui/MicroCART/crazyflieworker.cpp
+++ b/groundStation/gui/MicroCART/crazyflieworker.cpp
@@ -1,4 +1,5 @@
 #include "crazyflieworker.h"
+#include <iostream>
 
 CrazyflieWorker::CrazyflieWorker(QObject *parent) : QObject(parent)
 {
diff --git a/groundStation/gui/MicroCART/crazyflieworker.h b/groundStation/gui/MicroCART/crazyflieworker.h
index 8b5ae498e..f22f24135 100644
--- a/groundStation/gui/MicroCART/crazyflieworker.h
+++ b/groundStation/gui/MicroCART/crazyflieworker.h
@@ -20,8 +20,7 @@ class CrazyflieWorker : public QObject
 public:
     explicit CrazyflieWorker(QObject *parent = nullptr);
     ~CrazyflieWorker();
-    void setCurrAttSetpoint(float roll, float pitch, float yaw, float throttle);
-    void setCurrAttRateSetpoint(float rollRate, float pitchRate, float yawRate, float throttleRate);
+    
 
 signals:
     void gotParamValue(QString paramName, float value);
@@ -35,6 +34,8 @@ public slots:
     void sendAttSetpoint();
     void sendAttRateSetpoint();
     void getParamValue(QString paramName);
+    void setCurrAttSetpoint(float roll, float pitch, float yaw, float throttle);
+    void setCurrAttRateSetpoint(float rollRate, float pitchRate, float yawRate, float throttleRate);
 
 private:
     struct backend_conn * conn;
diff --git a/groundStation/gui/MicroCART/mainwindow.cpp b/groundStation/gui/MicroCART/mainwindow.cpp
index d62956482..26cf536a5 100644
--- a/groundStation/gui/MicroCART/mainwindow.cpp
+++ b/groundStation/gui/MicroCART/mainwindow.cpp
@@ -13,6 +13,7 @@
 
 #include "trackerworker.h"
 #include "controlworker.h"
+#include "crazyflieworker.h"
 #include "quaditem.h"
 #include "slotprocess.h"
 #include "qFlightInstruments.h"
@@ -24,11 +25,13 @@ MainWindow::MainWindow(QWidget *parent) :
     ui(new Ui::MainWindow),
     setpointList(new QStandardItemModel(this)),
     nextSpTimer(new QTimer(this)),
-    sp_x(0.0f),
-    sp_y(0.0f),
-    sp_z(0.0f),
+    sp_roll(0.0f),
+    sp_pitch(0.0f),
+    sp_yaw(0.0f),
+    sp_thrust(0.0f),
     trackerTimer(new QTimer(this)),
     workerStartTimer(new QTimer(this)),
+    crazyflieTimer(new QTimer(this)),
     backendProcess(new QProcess(this)),
     matlabProcess(new QProcess(this)),
     connectedWorkers(0)
@@ -41,7 +44,7 @@ MainWindow::MainWindow(QWidget *parent) :
     posScene->addItem(posIndicator);
 
     QGraphicsScene *attScene = new QGraphicsScene(this);
-    ui->attView->setScene(attScene);
+    //ui->attView->setScene(attScene);
     QADI * attIndicator = new QADI();
     attScene->addWidget(attIndicator);
 
@@ -75,6 +78,21 @@ MainWindow::MainWindow(QWidget *parent) :
     ControlWorker * controlWorker = new ControlWorker();
     controlWorker->moveToThread(cwThread);
 
+    /*Create worker for the crazyflie and moves it to new thread*/
+    QThread * crazyflieThread = new QThread(this);
+    CrazyflieWorker * crazyflieWorker = new CrazyflieWorker();
+    controlWorker->moveToThread(crazyflieThread);
+
+    /*sgnals from crazyflie worker*/
+    
+    /*signals to crazyflie worker*/
+    connect(this, SIGNAL (rateSetpointSignal(float, float, float, float)), crazyflieWorker, SLOT (setCurrAttSetpoint(float, float, float, float)));
+    connect(this, SIGNAL (angleSetpointSignal(float, float, float, float)), crazyflieWorker, SLOT (setCurrAttRateSetpoint(float, float, float, float)));
+    //dont knwo if i need next line
+    crazyflieTimer->setSingleShot(true);
+    connect(crazyflieTimer, SIGNAL(timeout()), this, SLOT (on_stopSetpointButton_clicked()));
+
+
     /* Connect signals from control worker */
     connect(controlWorker, SIGNAL (gotNodes(QStringList)), this, SLOT (newNodes(QStringList)));
     connect(controlWorker, SIGNAL (gotParams(QStringList)), this, SLOT (newParams(QStringList)));
@@ -94,10 +112,13 @@ MainWindow::MainWindow(QWidget *parent) :
     /* Connect and disconnect from backend when signals emitted */
     connect(workerStartTimer, SIGNAL (timeout()), trackerWorker, SLOT (connectBackend()));
     connect(workerStartTimer, SIGNAL (timeout()), controlWorker, SLOT (connectBackend()));
+    connect(workerStartTimer, SIGNAL (timeout()), crazyflieWorker, SLOT (connectBackend()));
     connect(this, SIGNAL (connectWorkers()), trackerWorker, SLOT (connectBackend()));
     connect(this, SIGNAL (connectWorkers()), controlWorker, SLOT (connectBackend()));
+    connect(this, SIGNAL (connectWorkers()), crazyflieWorker, SLOT (connectBackend()));
     connect(this, SIGNAL (disconnectWorkers()), trackerWorker, SLOT (disconnectBackend()));
     connect(this, SIGNAL (disconnectWorkers()), controlWorker, SLOT (disconnectBackend()));
+    connect(this, SIGNAL (disconnectWorkers()), crazyflieWorker, SLOT (disconnectBackend()));
 
     connect(backendProcess, SIGNAL (started()), this, SLOT (backendStarted()));
     connect(backendProcess, SIGNAL (errorOccurred(QProcess::ProcessError)), this, SLOT (backendError(QProcess::ProcessError)));
@@ -111,6 +132,9 @@ MainWindow::MainWindow(QWidget *parent) :
     connect(trackerWorker, SIGNAL (connected()), this, SLOT (workerConnected()));
     connect(trackerWorker, SIGNAL (disconnected()), this, SLOT (workerDisconnected()));
 
+    connect(crazyflieWorker, SIGNAL (connected()), this, SLOT (workerConnected()));
+    connect(crazyflieWorker, SIGNAL (disconnected()), this, SLOT (workerDisconnected()));
+
     /* Connect refresh button and refresh timer to tracker worker */
     connect(trackerTimer, SIGNAL(timeout()), this, SLOT(updatePosAtt()));
     // connect(ui->pbRefresh, SIGNAL (clicked()), this, SLOT (updatePosAtt()));
@@ -125,6 +149,7 @@ MainWindow::MainWindow(QWidget *parent) :
     trackerTimer->start(100);
     workerThread->start();
     cwThread->start();
+    crazyflieThread->start();
     matlabProcess->start();
 
     /* Connect the setpointlist to the model */
@@ -178,11 +203,11 @@ void MainWindow::updateTracker(float x, float y, float z, float p, float r, floa
     // ui->xActual->setText(QString::number(x));
     // ui->yActual->setText(QString::number(y));
     // ui->zActual->setText(QString::number(z));
-    ui->pActual->setText(QString::number(p));
-    ui->rActual->setText(QString::number(r));
-    ui->yActual->setText(QString::number(yaw));
+    ui->currPitchActual->setText(QString::number(p));
+    ui->currRollActual->setText(QString::number(r));
+    ui->currYawActual->setText(QString::number(yaw));
 
-    float dist = sqrt(pow(x - sp_x, 2.0) + pow(y - sp_y, 2.0) + pow(z - sp_z, 2.0));
+    //float dist = sqrt(pow(x - sp_x, 2.0) + pow(y - sp_y, 2.0) + pow(z - sp_z, 2.0));
 
     // ui->dist->setText(QString::number(dist));
 
@@ -399,8 +424,10 @@ void MainWindow::on_paramValue_returnPressed()
     //                     ui->paramValue->text().toFloat()));
 }
 
+
 void MainWindow::sendSetpoints()
 {
+
     // if (ui->sendX->isChecked()) {
     //     sp_x = ui->xSetpoint->text().toFloat();
     //     emit (setParamValue(ui->xSetpointSelect->currentText(),
@@ -596,3 +623,50 @@ void MainWindow::on_yawSetpoint_returnPressed()
     //                     blockDefs[BLOCK_CONSTANT]->param_names[0],
     //         ui->yawSetpoint->text().toFloat()));
 }
+
+void MainWindow::on_applySetpointButton_clicked()
+{
+    sp_roll   = ui->rollSetpointBox->text().toFloat();
+    sp_pitch  = ui->pitchSetpointBox->text().toFloat();
+    sp_yaw    = ui->yawSetpointBox->text().toFloat();
+    sp_thrust = ui->thrustSetpointBox->text().toFloat();
+
+    crazyflieTimer -> start(10000);
+
+    //testing print statements
+    std::cout << "roll: " << sp_roll << std::endl;
+    std::cout << "pitch: " << sp_pitch << std::endl;
+    std::cout << "yaw: " << sp_yaw << std::endl;
+
+    if(ui->angleRadioButton->isCheckable()) {
+        //send as angle setpoint
+        emit(angleSetpointSignal(sp_roll, sp_pitch, sp_yaw, sp_thrust));
+    }
+    else if (ui->rateRadioButton->isCheckable()) {
+        //send as rate setpoint
+        emit(rateSetpointSignal(sp_roll, sp_pitch, sp_yaw, sp_thrust));
+    }
+
+
+}
+
+void MainWindow::on_stopSetpointButton_clicked()
+{
+    sp_roll   = 0.0;
+    sp_pitch  = 0.0;
+    sp_yaw    = 0.0;
+    sp_thrust = 0.0;
+    //debug prints
+    std::cout << "roll: " << sp_roll << std::endl;
+    std::cout << "pitch: " << sp_pitch << std::endl;
+    std::cout << "yaw: " << sp_yaw << std::endl;
+
+    if(ui->angleRadioButton->isCheckable()) {
+        //send as angle setpoint
+        emit(angleSetpointSignal(sp_roll, sp_pitch, sp_yaw, sp_thrust));
+    }
+    else if (ui->rateRadioButton->isCheckable()) {
+        //send as rate setpoint
+        emit(rateSetpointSignal(sp_roll, sp_pitch, sp_yaw, sp_thrust));
+    }
+}
diff --git a/groundStation/gui/MicroCART/mainwindow.h b/groundStation/gui/MicroCART/mainwindow.h
index 4e24931aa..194eaa032 100644
--- a/groundStation/gui/MicroCART/mainwindow.h
+++ b/groundStation/gui/MicroCART/mainwindow.h
@@ -26,6 +26,8 @@ signals:
     void getNodeOutput(QString node);
     void setParamValue(QString node, QString param, float value);
     void getPosAttFromBackend();
+    void rateSetpointSignal(float roll, float pitch, float yaw, float throttle);
+    void angleSetpointSignal(float roll, float pitch, float yaw, float throttle);
 
 private slots:
     void on_pbStart_clicked();
@@ -91,15 +93,21 @@ private slots:
     void workerConnected();
     void workerDisconnected();
 
+    void on_applySetpointButton_clicked();
+
+    void on_stopSetpointButton_clicked();
+
 private:
     Ui::MainWindow *ui;
     QStandardItemModel * setpointList;
     QTimer * nextSpTimer;
-    float sp_x;
-    float sp_y;
-    float sp_z;
+    float sp_roll;
+    float sp_pitch;
+    float sp_yaw;
+    float sp_thrust;
     QTimer * trackerTimer;
     QTimer * workerStartTimer;
+    QTimer * crazyflieTimer;
     QProcess * backendProcess;
     QProcess * matlabProcess;
     int connectedWorkers;
diff --git a/groundStation/gui/MicroCART/mainwindow.ui b/groundStation/gui/MicroCART/mainwindow.ui
index ceea28e08..b76c0b0ed 100644
--- a/groundStation/gui/MicroCART/mainwindow.ui
+++ b/groundStation/gui/MicroCART/mainwindow.ui
@@ -2,6 +2,9 @@
 <ui version="4.0">
  <class>MainWindow</class>
  <widget class="QMainWindow" name="MainWindow">
+  <property name="enabled">
+   <bool>true</bool>
+  </property>
   <property name="geometry">
    <rect>
     <x>0</x>
@@ -10,6 +13,12 @@
     <height>1034</height>
    </rect>
   </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
   <property name="windowTitle">
    <string>MainWindow</string>
   </property>
@@ -17,8 +26,14 @@
    <layout class="QVBoxLayout" name="verticalLayout_1">
     <item>
      <widget class="QTabWidget" name="tabWidget">
+      <property name="maximumSize">
+       <size>
+        <width>16777215</width>
+        <height>1677</height>
+       </size>
+      </property>
       <property name="currentIndex">
-       <number>3</number>
+       <number>4</number>
       </property>
       <widget class="QWidget" name="backend">
        <attribute name="title">
@@ -148,7 +163,7 @@
                </sizepolicy>
               </property>
               <property name="text">
-               <string>Send Position</string>
+               <string>Send Setpoint</string>
               </property>
              </widget>
             </item>
@@ -158,16 +173,16 @@
                <enum>QFormLayout::ExpandingFieldsGrow</enum>
               </property>
               <item row="0" column="0">
-               <widget class="QLabel" name="pLabel">
+               <widget class="QLabel" name="pitchLabel">
                 <property name="text">
                  <string>Pitch</string>
                 </property>
                </widget>
               </item>
               <item row="0" column="1">
-               <widget class="QLineEdit" name="pActual">
+               <widget class="QLineEdit" name="pitchSetpointBox">
                 <property name="enabled">
-                 <bool>false</bool>
+                 <bool>true</bool>
                 </property>
                 <property name="sizePolicy">
                  <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -178,16 +193,16 @@
                </widget>
               </item>
               <item row="1" column="0">
-               <widget class="QLabel" name="rLabel">
+               <widget class="QLabel" name="rollLabel">
                 <property name="text">
                  <string>Roll</string>
                 </property>
                </widget>
               </item>
               <item row="1" column="1">
-               <widget class="QLineEdit" name="rActual">
+               <widget class="QLineEdit" name="rollSetpointBox">
                 <property name="enabled">
-                 <bool>false</bool>
+                 <bool>true</bool>
                 </property>
                 <property name="sizePolicy">
                  <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -198,16 +213,16 @@
                </widget>
               </item>
               <item row="2" column="0">
-               <widget class="QLabel" name="yLabel">
+               <widget class="QLabel" name="yawLabel">
                 <property name="text">
                  <string>Yaw</string>
                 </property>
                </widget>
               </item>
               <item row="2" column="1">
-               <widget class="QLineEdit" name="yActual">
+               <widget class="QLineEdit" name="yawSetpointBox">
                 <property name="enabled">
-                 <bool>false</bool>
+                 <bool>true</bool>
                 </property>
                 <property name="sizePolicy">
                  <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -217,51 +232,17 @@
                 </property>
                </widget>
               </item>
-             </layout>
-            </item>
-            <item>
-             <widget class="QPushButton" name="pbActualToWaypoint">
-              <property name="text">
-               <string>Send</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="Line" name="line_6">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QLabel" name="label_2">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="text">
-               <string>Send Rate</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <layout class="QFormLayout" name="formLayout">
-              <property name="fieldGrowthPolicy">
-               <enum>QFormLayout::ExpandingFieldsGrow</enum>
-              </property>
-              <item row="0" column="0">
-               <widget class="QLabel" name="pRateLabel">
+              <item row="3" column="0">
+               <widget class="QLabel" name="thrustlabel">
                 <property name="text">
-                 <string>Pitch Rate</string>
+                 <string>Thrust</string>
                 </property>
                </widget>
               </item>
-              <item row="0" column="1">
-               <widget class="QLineEdit" name="pRateActual">
+              <item row="3" column="1">
+               <widget class="QLineEdit" name="thrustSetpointBox">
                 <property name="enabled">
-                 <bool>false</bool>
+                 <bool>true</bool>
                 </property>
                 <property name="sizePolicy">
                  <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -271,74 +252,48 @@
                 </property>
                </widget>
               </item>
-              <item row="1" column="0">
-               <widget class="QLabel" name="rRateLabel">
+              <item row="4" column="0">
+               <widget class="QRadioButton" name="angleRadioButton">
                 <property name="text">
-                 <string>Roll Rate</string>
+                 <string>Angle</string>
                 </property>
                </widget>
               </item>
-              <item row="1" column="1">
-               <widget class="QLineEdit" name="rRateActual">
-                <property name="enabled">
-                 <bool>false</bool>
-                </property>
-                <property name="sizePolicy">
-                 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
-                </property>
-               </widget>
-              </item>
-              <item row="2" column="0">
-               <widget class="QLabel" name="yRateLabel">
+              <item row="4" column="1">
+               <widget class="QRadioButton" name="rateRadioButton">
                 <property name="text">
-                 <string>Yaw Rate</string>
-                </property>
-               </widget>
-              </item>
-              <item row="2" column="1">
-               <widget class="QLineEdit" name="yRateActual">
-                <property name="enabled">
-                 <bool>false</bool>
-                </property>
-                <property name="sizePolicy">
-                 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
+                 <string>Rate</string>
                 </property>
                </widget>
               </item>
              </layout>
             </item>
             <item>
-             <widget class="QPushButton" name="pbActualToSetpoint">
+             <widget class="QPushButton" name="applySetpointButton">
               <property name="text">
-               <string>Send</string>
+               <string>Apply</string>
               </property>
              </widget>
             </item>
             <item>
-             <widget class="Line" name="line_7">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
+             <widget class="QPushButton" name="stopSetpointButton">
+              <property name="text">
+               <string>Stop</string>
               </property>
              </widget>
             </item>
             <item>
-             <widget class="QLabel" name="label_3">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
+             <spacer name="verticalSpacer">
+              <property name="orientation">
+               <enum>Qt::Vertical</enum>
               </property>
-              <property name="text">
-               <string>Send Thrust</string>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>20</width>
+                <height>40</height>
+               </size>
               </property>
-             </widget>
+             </spacer>
             </item>
             <item>
              <layout class="QFormLayout" name="formLayout">
@@ -346,177 +301,98 @@
                <enum>QFormLayout::ExpandingFieldsGrow</enum>
               </property>
               <item row="0" column="0">
-               <widget class="QLabel" name="thrustLabel">
+               <widget class="QLabel" name="tsLabel">
                 <property name="text">
-                 <string>Thrust</string>
+                 <string>TS: </string>
                 </property>
                </widget>
               </item>
               <item row="0" column="1">
-               <widget class="QLineEdit" name="thrustActual">
-                <property name="enabled">
-                 <bool>false</bool>
+               <widget class="QLabel" name="tsActual">
+                <property name="text">
+                 <string>N/A</string>
                 </property>
-                <property name="sizePolicy">
-                 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
+               </widget>
+              </item>
+              <item row="1" column="0">
+               <widget class="QLabel" name="currRollLabel">
+                <property name="text">
+                 <string>Current Roll: </string>
                 </property>
                </widget>
               </item>
-             </layout>
-            </item>
-            <item>
-             <widget class="QPushButton" name="sendThrustButton">
-              <property name="text">
-               <string>To Waypoint</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QLabel" name="label_3">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="text">
-               <string>Send Thrust</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <layout class="QFormLayout" name="formLayout">
-              <property name="fieldGrowthPolicy">
-               <enum>QFormLayout::ExpandingFieldsGrow</enum>
-              </property>
-              <item row="0" column="0">
-               <widget class="QLabel" name="thrustLabel">
+              <item row="1" column="1">
+               <widget class="QLabel" name="currRollActual">
                 <property name="text">
-                 <string>Thrust</string>
+                 <string>N/A</string>
                 </property>
                </widget>
               </item>
-              <item row="0" column="1">
-               <widget class="QLineEdit" name="thrustActual">
-                <property name="enabled">
-                 <bool>false</bool>
+              <item row="2" column="0">
+               <widget class="QLabel" name="currPitchLabel">
+                <property name="text">
+                 <string>Current Pitch: </string>
                 </property>
-                <property name="sizePolicy">
-                 <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
+               </widget>
+              </item>
+              <item row="2" column="1">
+               <widget class="QLabel" name="currPitchActual">
+                <property name="text">
+                 <string>N/A</string>
                 </property>
                </widget>
               </item>
-             </layout>
-            </item>
-            <item>
-             <widget class="QPushButton" name="sendThrustButton">
-              <property name="text">
-               <string>Send</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="Line" name="line_7">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QLabel" name="label_4">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="text">
-               <string>Current Position</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="Line" name="line_7">
-              <property name="orientation">
-               <enum>Qt::Horizontal</enum>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <widget class="QLabel" name="label_4">
-              <property name="sizePolicy">
-               <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-                <horstretch>0</horstretch>
-                <verstretch>0</verstretch>
-               </sizepolicy>
-              </property>
-              <property name="text">
-               <string>Current Position</string>
-              </property>
-             </widget>
-            </item>
-            <item>
-             <layout class="QFormLayout" name="formLayout">
-              <property name="fieldGrowthPolicy">
-               <enum>QFormLayout::ExpandingFieldsGrow</enum>
-              </property>
-              <item row="0" column="0">
-               <widget class="QLabel" name="tsLabel">
+              <item row="3" column="0">
+               <widget class="QLabel" name="currYawLabel">
                 <property name="text">
-                 <string>TS: </string>
+                 <string>Current Yaw: </string>
                 </property>
                </widget>
               </item>
-              <item row="0" column="1">
-               <widget class="QLabel" name="tsActual">
+              <item row="3" column="1">
+               <widget class="QLabel" name="currYawActual">
                 <property name="text">
                  <string>N/A</string>
                 </property>
                </widget>
               </item>
-              <item row="1" column="0">
-               <widget class="QLabel" name="currRLabel">
+              <item row="4" column="0">
+               <widget class="QLabel" name="currRoleRateLabel">
                 <property name="text">
-                 <string>Current Roll: </string>
+                 <string>Current Roll Rate:</string>
                 </property>
                </widget>
               </item>
-              <item row="1" column="1">
-               <widget class="QLabel" name="currRActual">
-               <property name="text">
+              <item row="4" column="1">
+               <widget class="QLabel" name="currRollRateActual">
+                <property name="text">
                  <string>N/A</string>
                 </property>
                </widget>
               </item>
-              <item row="2" column="0">
-               <widget class="QLabel" name="currPLabel">
+              <item row="5" column="0">
+               <widget class="QLabel" name="currPitchRateLabel">
                 <property name="text">
-                 <string>Current Pitch: </string>
+                 <string>Current Pitch Rate:</string>
                 </property>
                </widget>
               </item>
-              <item row="2" column="1">
-               <widget class="QLabel" name="currPActual">
+              <item row="5" column="1">
+               <widget class="QLabel" name="currPitchRateActual">
                 <property name="text">
                  <string>N/A</string>
                 </property>
                </widget>
               </item>
-              <item row="3" column="0">
-               <widget class="QLabel" name="currYLabel">
+              <item row="6" column="0">
+               <widget class="QLabel" name="currYawRateLabel">
                 <property name="text">
-                 <string>Current Yaw: </string>
+                 <string>Current Yaw Rate:</string>
                 </property>
                </widget>
               </item>
-              <item row="3" column="1">
-               <widget class="QLabel" name="currYActual">
+              <item row="6" column="1">
+               <widget class="QLabel" name="currYawRateActual">
                 <property name="text">
                  <string>N/A</string>
                 </property>
@@ -538,9 +414,6 @@
               </property>
              </widget>
             </item>
-            <item>
-             <widget class="QGraphicsView" name="attView"/>
-            </item>
            </layout>
           </item>
          </layout>
@@ -557,7 +430,7 @@
      <x>0</x>
      <y>0</y>
      <width>1186</width>
-     <height>28</height>
+     <height>22</height>
     </rect>
    </property>
    <widget class="QMenu" name="menuScripts">
@@ -578,6 +451,13 @@
   <widget class="QStatusBar" name="statusBar"/>
  </widget>
  <layoutdefault spacing="6" margin="11"/>
+ <customwidgets>
+  <customwidget>
+   <class>QCustomPlot</class>
+   <extends>QWidget</extends>
+   <header>qcustomplot.h</header>
+  </customwidget>
+ </customwidgets>
  <resources/>
  <connections/>
 </ui>
-- 
GitLab