mirror of
https://gitlab.com/lander-team/lander-cpp.git
synced 2025-07-23 14:41:25 +00:00
Fixed differences between native and teensy, added getThrust() function to clean up thrustInfo()
This commit is contained in:
@@ -20,7 +20,7 @@ struct Vehicle {
|
||||
double burntime;
|
||||
double burnVelocity;
|
||||
double thrust, burnElapsed, burnStart;
|
||||
bool thrustFiring = false;
|
||||
int thrustFiring = 0; // 0: Pre-burn, 1: Mid-burn, 2: Post-burn
|
||||
|
||||
double PIDx, PIDy, Fx, Fy, Fz;
|
||||
double momentX, momentY, momentZ;
|
||||
|
@@ -8,41 +8,23 @@ void write2CSV(struct outVector &, struct Vehicle &);
|
||||
void printSimResults(struct Vehicle &);
|
||||
|
||||
void thrustInfo(Vehicle &State) {
|
||||
|
||||
if (State.burnElapsed != 2000) {
|
||||
// determine where in the thrust curve we're at based on elapsed burn time
|
||||
// as well as current mass
|
||||
State.burnElapsed = (State.time - State.burnStart) / 1000;
|
||||
State.mass = State.massInitial - (State.mdot * State.burnElapsed);
|
||||
}
|
||||
|
||||
else if (abs(State.burnVelocity + State.vz) < 0.001) {
|
||||
if ((std::abs(State.burnVelocity + State.vz) < 1.03) &&
|
||||
(State.thrustFiring == 0)) {
|
||||
// Start burn
|
||||
State.burnStart = State.time;
|
||||
State.burnElapsed = 0;
|
||||
}
|
||||
State.burnElapsed = 0.0;
|
||||
State.thrustFiring = 1;
|
||||
|
||||
else
|
||||
State.burnElapsed = 2000; // arbitrary number to ensure we don't burn
|
||||
getThrust(State);
|
||||
|
||||
if ((State.burnElapsed > 0.147) && (State.burnElapsed < 0.420)) {
|
||||
State.thrustFiring = true;
|
||||
State.thrust = 65.165 * State.burnElapsed - 2.3921;
|
||||
} else if (State.thrustFiring == 1) {
|
||||
State.burnElapsed = (State.time - State.burnStart) / 1000.0;
|
||||
State.mass = State.massInitial - (State.mdot * State.burnElapsed);
|
||||
|
||||
} else if ((State.burnElapsed > 0.419) && (State.burnElapsed < 3.383))
|
||||
State.thrust = 0.8932 * pow(State.burnElapsed, 6) -
|
||||
11.609 * pow(State.burnElapsed, 5) +
|
||||
60.739 * pow(State.burnElapsed, 4) -
|
||||
162.99 * pow(State.burnElapsed, 3) +
|
||||
235.6 * pow(State.burnElapsed, 2) -
|
||||
174.43 * State.burnElapsed + 67.17;
|
||||
getThrust(State);
|
||||
|
||||
else if ((State.burnElapsed > 3.382) && (State.burnElapsed < 3.46))
|
||||
State.thrust = -195.78 * State.burnElapsed - 675.11;
|
||||
|
||||
if (State.burnElapsed > 3.45) {
|
||||
State.thrustFiring = false;
|
||||
State.thrust = 0;
|
||||
} else {
|
||||
State.thrust = 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -11,6 +11,7 @@ void state2vec(struct Vehicle &, struct Vehicle &, struct outVector &);
|
||||
double derivative(double current, double previous, double step);
|
||||
double integral(double currentChange, double prevValue, double dt);
|
||||
double limit(double value, double upr, double lwr);
|
||||
void getThrust(struct Vehicle &);
|
||||
|
||||
// Any parameters that are constants should be declared here instead of
|
||||
// buried in code
|
||||
@@ -254,4 +255,26 @@ double limit(double value, double upr, double lwr) {
|
||||
value = value;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
void getThrust(Vehicle &State) {
|
||||
if ((State.burnElapsed > 0.147) && (State.burnElapsed < 0.420)) {
|
||||
State.thrust = 65.165 * State.burnElapsed - 2.3921;
|
||||
|
||||
} else if ((State.burnElapsed > 0.419) && (State.burnElapsed < 3.383))
|
||||
State.thrust = 0.8932 * pow(State.burnElapsed, 6.0) -
|
||||
11.609 * pow(State.burnElapsed, 5.0) +
|
||||
60.739 * pow(State.burnElapsed, 4.0) -
|
||||
162.99 * pow(State.burnElapsed, 3.0) +
|
||||
235.6 * pow(State.burnElapsed, 2.0) -
|
||||
174.43 * State.burnElapsed + 67.17;
|
||||
|
||||
else if ((State.burnElapsed > 3.382) && (State.burnElapsed < 3.46)) {
|
||||
State.thrust = -195.78 * State.burnElapsed + 675.11;
|
||||
}
|
||||
|
||||
if (State.burnElapsed > 3.45) {
|
||||
State.thrustFiring = 2;
|
||||
State.thrust = 0.0;
|
||||
}
|
||||
}
|
@@ -35,7 +35,6 @@ void initFile() {
|
||||
Serial.println("Card initialized.");
|
||||
|
||||
int i = 1;
|
||||
Serial.print("simOut_" + String(i) + ".csv");
|
||||
const char *fileName;
|
||||
|
||||
if (SD.exists("simOut.csv")) {
|
||||
@@ -84,38 +83,22 @@ void thrustInfo(Vehicle &State) {
|
||||
Serial.println("WARNING: thrustInfo not implemented for TEENSY");
|
||||
}
|
||||
|
||||
if (State.burnElapsed != 2000) {
|
||||
// determine where in the thrust curve we're at based on elapsed burn time
|
||||
// as well as current mass
|
||||
if ((abs(State.burnVelocity + State.vz) < 1.03) &&
|
||||
(State.thrustFiring == 0)) {
|
||||
// Start burn
|
||||
State.burnStart = State.time;
|
||||
State.burnElapsed = 0.0;
|
||||
State.thrustFiring = 1;
|
||||
|
||||
getThrust(State);
|
||||
|
||||
} else if (State.thrustFiring == 1) {
|
||||
State.burnElapsed = (State.time - State.burnStart) / 1000.0;
|
||||
State.mass = State.massInitial - (State.mdot * State.burnElapsed);
|
||||
|
||||
} else if (abs(State.burnVelocity + State.vz) < 0.01) {
|
||||
// Start burn
|
||||
State.burnStart = State.time;
|
||||
State.burnElapsed = 0;
|
||||
getThrust(State);
|
||||
|
||||
} else {
|
||||
State.burnElapsed = 2000; // arbitrary number to ensure we don't burn
|
||||
}
|
||||
// Serial.println(abs(State.burnVelocity + State.vz));
|
||||
|
||||
if ((State.burnElapsed > 0.147) && (State.burnElapsed < 0.420)) {
|
||||
State.thrustFiring = true;
|
||||
State.thrust = 65.165 * State.burnElapsed - 2.3921;
|
||||
} else if ((State.burnElapsed > 0.419) && (State.burnElapsed < 3.383))
|
||||
State.thrust = 0.8932 * pow(State.burnElapsed, 6) -
|
||||
11.609 * pow(State.burnElapsed, 5) +
|
||||
60.739 * pow(State.burnElapsed, 4) -
|
||||
162.99 * pow(State.burnElapsed, 3) +
|
||||
235.6 * pow(State.burnElapsed, 2) -
|
||||
174.43 * State.burnElapsed + 67.17;
|
||||
|
||||
else if ((State.burnElapsed > 3.382) && (State.burnElapsed < 3.46))
|
||||
State.thrust = -195.78 * State.burnElapsed - 675.11;
|
||||
|
||||
if (State.burnElapsed > 3.45) {
|
||||
State.thrustFiring = false;
|
||||
State.thrust = 0.0;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user