diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp index d238c94..bc67e79 100644 --- a/gui/MainWindow.cpp +++ b/gui/MainWindow.cpp @@ -80,7 +80,7 @@ void MainWindow::on_testButton2_clicked() double initialVelocityX = initialVelocity * std::cos(initialAngle / 57.2958); double initialVelocityZ = initialVelocity * std::sin(initialAngle / 57.2958); Rocket rocket; - std::vector initialState = {0.0, 0.0, 0.0, initialVelocityX, 0.0, initialVelocityZ}; + std::vector initialState = {0.0, 0.0, 0.0, initialVelocityX, 0.0, initialVelocityZ, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; rocket.setInitialState(initialState); rocket.setMass(mass); rocket.setDragCoefficient(dragCoeff); diff --git a/gui/MainWindow.ui b/gui/MainWindow.ui index d95e704..d0d198d 100644 --- a/gui/MainWindow.ui +++ b/gui/MainWindow.ui @@ -105,42 +105,17 @@ 260 80 161 - 120 + 151 - - - - Velocity - - - - - - - 50.0 - - - - - - - Angle - - - 90.0 - - - - - - mass + + true @@ -158,6 +133,20 @@ + + + + Angle + + + + + + + 50.0 + + + @@ -165,6 +154,34 @@ + + + + mass + + + + + + + Velocity + + + + + + + 0.01 + + + + + + + Time Step + + + diff --git a/sim/Propagator.cpp b/sim/Propagator.cpp index a2fcf23..7df4dbe 100644 --- a/sim/Propagator.cpp +++ b/sim/Propagator.cpp @@ -27,14 +27,21 @@ Propagator::Propagator(Rocket* r) // template types, and it derives from DESolver, so we can just reset the unique_ptr // and pass it a freshly allocated RK4Solver pointer - // The state vector has components of the form: (x, y, z, xdot, ydot, zdot) + // The state vector has components of the form: + // (x, y, z, xdot, ydot, zdot, pitch, yaw, roll, pitchRate, yawRate, rollRate) integrator.reset(new RK4Solver( /* dx/dt */ [](double, const std::vector& s) -> double {return s[3]; }, /* dy/dt */ [](double, const std::vector& s) -> double {return s[4]; }, /* dz/dt */ [](double, const std::vector& s) -> double {return s[5]; }, /* dvx/dt */ [this](double, const std::vector& ) -> double { return getForceX() / getMass(); }, /* dvy/dt */ [this](double, const std::vector& ) -> double { return getForceY() / getMass(); }, - /* dvz/dt */ [this](double, const std::vector& ) -> double { return getForceZ() / getMass(); })); + /* dvz/dt */ [this](double, const std::vector& ) -> double { return getForceZ() / getMass(); }, + /* dpitch/dt */ [this](double, const std::vector& s) -> double { return s[9]; }, + /* dyaw/dt */ [this](double, const std::vector& s) -> double { return s[10]; }, + /* droll/dt */ [this](double, const std::vector& s) -> double { return s[11]; }, + /* dpitchRate/dt */ [this](double, const std::vector& s) -> double { (getTorqueP() - s[7] * s[8] * (getIroll() - getIyaw())) / getIpitch(); }, + /* dyawRate/dt */ [this](double, const std::vector& s) -> double { (getTorqueQ() - s[6] * s[9] * (getIpitch() - getIroll())) / getIyaw(); }, + /* drollRate/dt */ [this](double, const std::vector& s) -> double { (getTorqueR() - s[6] * s[7] * (getIyaw() - getIpitch())) / getIroll(); })); integrator->setTimeStep(timeStep); diff --git a/sim/Propagator.h b/sim/Propagator.h index d275fd5..9022de7 100644 --- a/sim/Propagator.h +++ b/sim/Propagator.h @@ -48,6 +48,7 @@ public: void setSaveStats(bool s) { saveStates = s; } private: + double getMass(); double getForceX(); double getForceY(); double getForceZ(); @@ -56,7 +57,9 @@ private: double getTorqueQ(); double getTorqueR(); - double getMass(); + double getIpitch() { return 1.0; } + double getIyaw() { return 1.0; } + double getIroll() { return 1.0; } //private: @@ -65,8 +68,8 @@ private: Rocket* rocket; QtRocket* qtrocket; - std::vector currentState{0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; - std::vector tempRes{0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; + std::vector currentState{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; + std::vector tempRes{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; bool saveStates{true}; double currentTime{0.0}; double timeStep{0.01};