From 837e8438db1a2fe60d91e93ccbc335631f0cfd1f Mon Sep 17 00:00:00 2001 From: rhunt <rhunt@iastate.edu> Date: Sun, 27 Mar 2022 20:50:55 +0200 Subject: [PATCH] merged --- groundStation/gui/MicroCART/mainwindow.cpp | 217 ++++++++++++++++++--- groundStation/gui/MicroCART/mainwindow.h | 2 + groundStation/gui/MicroCART/mainwindow.ui | 5 +- 3 files changed, 191 insertions(+), 33 deletions(-) diff --git a/groundStation/gui/MicroCART/mainwindow.cpp b/groundStation/gui/MicroCART/mainwindow.cpp index ff500b528..c82b64746 100644 --- a/groundStation/gui/MicroCART/mainwindow.cpp +++ b/groundStation/gui/MicroCART/mainwindow.cpp @@ -1,6 +1,9 @@ #include "mainwindow.h" #include "ui_mainwindow.h" +#include <bits/stdc++.h> +#include <math.h> + #include <QFileDialog> #include <QDesktopServices> #include <QMessageBox> @@ -288,23 +291,16 @@ void MainWindow::updatePosAtt() // emit(getNodeOutput(ui->yAttitudeSelect->currentText())); } -void MainWindow::updateTracker(float x, float y, float z, float p, float r, float yaw) +void MainWindow::updateTracker(float thrust, float pitch, float roll, float yaw, float pitchRate, float rollRate, float yawRate) { - // ui->xActual->setText(QString::number(x)); - // ui->yActual->setText(QString::number(y)); - // ui->zActual->setText(QString::number(z)); - ui->currPitchActual->setText(QString::number(p)); - ui->currRollActual->setText(QString::number(r)); + ui->currThrustActual->setText(QString::number(thrust)); + ui->currPitchActual->setText(QString::number(pitch)); + ui->currRollActual->setText(QString::number(roll)); 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)); - - // ui->dist->setText(QString::number(dist)); - - // if (!nextSpTimer->isActive() && ui->autonavEnabled->isChecked() && - // (dist < ui->autonavThreshold->text().toFloat())) { - // nextSpTimer->start(ui->autonavDelay->text().toInt()); - // } + ui->currPitchRateActual->setText(QString::number(pitchRate)); + ui->currRollRateActual->setText(QString::number(rollRate)); + ui->currYawRateActual->setText(QString::number(yawRate)); + } void MainWindow::on_pbStart_clicked() @@ -1059,35 +1055,183 @@ void MainWindow::on_gamepadPitchScale_valueChanged(int arg1) void MainWindow::graphLogs(QStringList logs) { + qInfo() << "start" << endl; + + ui->dataPlot->addGraph(); + ui->dataPlot->addGraph(); + ui->dataPlot->addGraph(); + ui->dataPlot->addGraph(); + ui->dataPlot->addGraph(); + ui->dataPlot->graph(0)->setPen(QPen(Qt::blue)); ui->dataPlot->graph(1)->setPen(QPen(Qt::red)); ui->dataPlot->graph(2)->setPen(QPen(Qt::green)); ui->dataPlot->graph(3)->setPen(QPen(Qt::black)); - //ui->dataPlot->graph(4)->setPen(QPen(Qt::purple)); - + ui->dataPlot->graph(4)->setPen(QPen(Qt::yellow)); + + qInfo() << "color" << endl; //parse data and put into vector - QVector<float> x0(logs.size()), y0(logs.size()); - QVector<float> x1(logs.size()), y1(logs.size()); - QVector<float> x2(logs.size()), y2(logs.size()); - QVector<float> x3(logs.size()), y3(logs.size()); - QVector<float> x4(logs.size()), y4(logs.size()); + QVector<double> x0(logs.size()), y0(logs.size()); + QVector<double> x1(logs.size()), y1(logs.size()); + QVector<double> x2(logs.size()), y2(logs.size()); + QVector<double> x3(logs.size()), y3(logs.size()); + QVector<double> x4(logs.size()), y4(logs.size()); - for(int i=0; i< logs.size(); i++) { + qInfo() << "vector size" << endl; + + QVector<std::string> tempConv; + + for(int i=0; i<logs.size(); i++) { + qInfo() << "i:" << i << endl; + tempConv.append(logs.at(i).toStdString()); + } + qInfo() << QString::fromStdString(tempConv.at(0)) << endl; + qInfo() << QString::fromStdString(tempConv.at(1)) << endl; + + float xmax = -INFINITY; + float ymax = -INFINITY; + float ymin = INFINITY; + bool log0 = true; + bool log1 = true; + bool log2 = true; + bool log3 = true; + bool log4 = true; + + for(int i=0; i<logs.size(); i++) { //use tokenizer here + std::vector <std::string> tokens; + std::stringstream check1(tempConv.at(i)); + std::string intermediate; + while(getline(check1, intermediate, ',')) { + tokens.push_back(intermediate); + } + + qInfo() << logs.size() << endl; + qInfo() << "tokens " << i << " :\n " << endl; + qInfo() << QString::fromStdString(tokens[0]) << endl; + qInfo() << QString::fromStdString(tokens[1]) << endl; + qInfo() << QString::fromStdString(tokens[2]) << endl; + qInfo() << QString::fromStdString(tokens[3]) << endl; + qInfo() << QString::fromStdString(tokens[4]) << endl; + qInfo() << QString::fromStdString(tokens[5]) << endl; + + //assign x and y values for log variables + if(tokens[1] != "NULL") { + x0[i] = std::stod(tokens[0]); + y0[i] = std::stod(tokens[1]); + if(y0[i]<ymin) { + ymin = y0[i]; + } + if(y0[i]>ymax) { + ymax = y0[i]; + } + if(i == logs.size()-1) { + xmax = x0[i]; + } + } + else { + log0 = false; + } + + qInfo() << ymin << endl; + + if(tokens[2] != "NULL") { + x1[i] = std::stod(tokens[0]); + y1[i] = std::stod(tokens[2]); + if(y1[i]<ymin) { + ymin = y1[i]; + } + if(y1[i]>ymax) { + ymax = y1[i]; + } + if(i == logs.size()-1) { + xmax = x1[i]; + } + } + else { + log1 = false; + } + if(tokens[3] != "NULL") { + x2[i] = std::stod(tokens[0]); + y2[i] = std::stod(tokens[3]); + if(y2[i]<ymin) { + ymin = y2[i]; + } + if(y2[i]>ymax) { + ymax = y2[i]; + } + if(i == logs.size()-1) { + xmax = x2[i]; + } + } + else { + log2 = false; + } + if(tokens[4] != "NULL") { + x3[i] = std::stod(tokens[0]); + y3[i] = std::stod(tokens[4]); + if(y3[i]<ymin) { + ymin = y3[i]; + } + if(y3[i]>ymax) { + ymax = y3[i]; + } + if(i == logs.size()-1) { + xmax = x3[i]; + } + } + else { + log3 = false; + } + if(tokens[5] != "NULL") { + x4[i] = std::stod(tokens[0]); + y4[i] = std::stod(tokens[5]); + if(y4[i]<ymin) { + ymin = y4[i]; + } + if(y4[i]>ymax) { + ymax = y4[i]; + } + if(i == logs.size()-1) { + xmax = x4[i]; + } + } + else { + log4 = false; + } + qInfo() << "i: " << i << endl; } + qInfo() << "yMin: " << ymin << endl; + qInfo() << "yMax: " << ymax << endl; + qInfo() << "xMax: " << xmax << endl; + qInfo() << x0 << endl; + qInfo() << y0 << endl; + //start graph and set data - ui->dataPlot->addGraph(); - // ui->dataPlot->graph(0)->setData(x0, y0); + + if(log0) { + ui->dataPlot->graph(0)->setData(x0, y0); + } + if(log1) { + ui->dataPlot->graph(1)->setData(x1, y1); + } + if(log2) { + ui->dataPlot->graph(2)->setData(x2, y2); + } + if(log3) { + ui->dataPlot->graph(3)->setData(x3, y3); + } + if(log4) { + ui->dataPlot->graph(4)->setData(x4, y4); + } //set lables and boundaries - ui->dataPlot->xAxis->setLabel("time"); - ui->dataPlot->yAxis->setLabel("angle"); - - ui->dataPlot->xAxis->setRange(0, 1); - ui->dataPlot->yAxis->setRange(0, 360); - + ui->dataPlot->xAxis->setLabel("Time"); + ui->dataPlot->yAxis->setLabel("Value"); + ui->dataPlot->xAxis->setRange(0, xmax); + ui->dataPlot->yAxis->setRange(ymin, ymax); ui->dataPlot->replot(); } @@ -1308,4 +1452,13 @@ void MainWindow::getLogEntryBoxChange5(QString text) { ui->logEntriesComboBox1->removeItem(idx); } } -} \ No newline at end of file +} + +void MainWindow::on_pb_stopLog_clicked() +{ + + qInfo() << "Hello?" << endl; + QStringList test = {"0,10,50,25,NULL,NULL","1,NULL,NULL,NULL,NULL,NULL"}; + graphLogs(test); + +} diff --git a/groundStation/gui/MicroCART/mainwindow.h b/groundStation/gui/MicroCART/mainwindow.h index 843c614e4..660cbef6b 100644 --- a/groundStation/gui/MicroCART/mainwindow.h +++ b/groundStation/gui/MicroCART/mainwindow.h @@ -172,6 +172,8 @@ private slots: void getLogEntryBoxChange4(QString text); void getLogEntryBoxChange5(QString text); + void on_pb_stopLog_clicked(); + private: Ui::MainWindow *ui; QStandardItemModel * setpointList; diff --git a/groundStation/gui/MicroCART/mainwindow.ui b/groundStation/gui/MicroCART/mainwindow.ui index b8e8daee5..64b5edd94 100644 --- a/groundStation/gui/MicroCART/mainwindow.ui +++ b/groundStation/gui/MicroCART/mainwindow.ui @@ -339,6 +339,9 @@ <height>26</height> </rect> </property> + <property name="decimals"> + <number>3</number> + </property> </widget> </widget> <widget class="QWidget" name="Gamepad"> @@ -1229,7 +1232,7 @@ <item row="0" column="0"> <widget class="QLabel" name="tsLabel"> <property name="text"> - <string>TS: </string> + <string>Curent Thrust:</string> </property> </widget> </item> -- GitLab