mirror of
https://gitlab.com/lander-team/lander-cpp.git
synced 2025-07-24 23:21:29 +00:00
fixed, gonna make some more changes to make sure we're utilizing our whole burn
This commit is contained in:
@@ -19,7 +19,7 @@ double const g = -9.81;
|
||||
|
||||
void burnStartTimeCalc(Vehicle &State) {
|
||||
double velocity = State.vz;
|
||||
double h = 0;
|
||||
double h = 0.0;
|
||||
|
||||
double mass, thrust;
|
||||
|
||||
@@ -37,39 +37,39 @@ void burnStartTimeCalc(Vehicle &State) {
|
||||
else if ((i > 3.382) && (i < 3.46))
|
||||
thrust = -195.78 * i + 675.11;
|
||||
else
|
||||
thrust = 0;
|
||||
thrust = 0.0;
|
||||
|
||||
velocity = (((thrust / mass) + g) * dt) + velocity;
|
||||
h = (((thrust / mass) + g) * dt) + h;
|
||||
}
|
||||
State.z = h + (pow(velocity, 2) / (2 * -g)); // starting height
|
||||
State.z = 18.9;
|
||||
State.z = h + (pow(velocity, 2) / (2.0 * -g)); // starting height
|
||||
State.z = 19.05;
|
||||
State.burnVelocity = velocity; // terminal velocity
|
||||
|
||||
double burnStartTime = State.burnVelocity / -g;
|
||||
State.simTime = (State.burntime + burnStartTime) * 1000;
|
||||
State.simTime = (State.burntime + burnStartTime) * 1000.0;
|
||||
}
|
||||
|
||||
void vehicleDynamics(Vehicle &State, Vehicle &PrevState) {
|
||||
|
||||
// Moment of Inertia
|
||||
State.I11 = State.mass * ((1 / 12) * pow(State.vehicleHeight, 2) +
|
||||
pow(State.vehicleRadius, 2) / 4);
|
||||
State.I22 = State.mass * ((1 / 12) * pow(State.vehicleHeight, 2) +
|
||||
pow(State.vehicleRadius, 2) / 4);
|
||||
State.I11 = State.mass * ((1 / 12.0) * pow(State.vehicleHeight, 2) +
|
||||
pow(State.vehicleRadius, 2) / 4.0);
|
||||
State.I22 = State.mass * ((1 / 12.0) * pow(State.vehicleHeight, 2) +
|
||||
pow(State.vehicleRadius, 2) / 4.0);
|
||||
State.I33 = State.mass * 0.5 * pow(State.vehicleRadius, 2);
|
||||
|
||||
// Idot
|
||||
if (State.time < 0.1) {
|
||||
State.I11dot = 0;
|
||||
State.I22dot = 0;
|
||||
State.I33dot = 0;
|
||||
State.I11dot = 0.0;
|
||||
State.I22dot = 0.0;
|
||||
State.I33dot = 0.0;
|
||||
|
||||
State.x = 0;
|
||||
State.y = 0;
|
||||
State.x = 0.0;
|
||||
State.y = 0.0;
|
||||
|
||||
State.ax = 0;
|
||||
State.ay = 0;
|
||||
State.ax = 0.0;
|
||||
State.ay = 0.0;
|
||||
State.az = State.Fz / State.massInitial;
|
||||
|
||||
} else {
|
||||
@@ -145,7 +145,6 @@ void pidController(Vehicle &State, struct Vehicle &PrevState) {
|
||||
State.d_pError = derivative(State.pError, PrevState.pError, State.stepSize);
|
||||
|
||||
// TVC block properly
|
||||
|
||||
State.PIDx = (State.Kp * State.yError + State.Ki * State.i_yError +
|
||||
State.Kd * State.d_yError) /
|
||||
State.momentArm;
|
||||
@@ -154,8 +153,8 @@ void pidController(Vehicle &State, struct Vehicle &PrevState) {
|
||||
State.momentArm;
|
||||
|
||||
} else {
|
||||
State.PIDx = 0;
|
||||
State.PIDy = 0;
|
||||
State.PIDx = 0.0;
|
||||
State.PIDy = 0.0;
|
||||
}
|
||||
|
||||
// PID Force Limiter
|
||||
@@ -166,18 +165,18 @@ void pidController(Vehicle &State, struct Vehicle &PrevState) {
|
||||
void TVC(Vehicle &State, Vehicle &PrevState) {
|
||||
if (State.thrust < 0.1) {
|
||||
// Define forces and moments for t = 0
|
||||
State.Fx = 0;
|
||||
State.Fy = 0;
|
||||
State.Fx = 0.0;
|
||||
State.Fy = 0.0;
|
||||
State.Fz = g * State.massInitial;
|
||||
|
||||
State.momentX = 0;
|
||||
State.momentY = 0;
|
||||
State.momentZ = 0;
|
||||
State.momentX = 0.0;
|
||||
State.momentY = 0.0;
|
||||
State.momentZ = 0.0;
|
||||
|
||||
} else {
|
||||
// Convert servo position to degrees for comparison to max allowable
|
||||
State.xServoDegs = (180 / M_PI) * asin(State.PIDx / State.thrust);
|
||||
State.yServoDegs = (180 / M_PI) * asin(State.PIDy / State.thrust);
|
||||
State.xServoDegs = (180.0 / M_PI) * asin(State.PIDx / State.thrust);
|
||||
State.yServoDegs = (180.0 / M_PI) * asin(State.PIDy / State.thrust);
|
||||
|
||||
// Limit Servo Position
|
||||
State.xServoDegs = limit(State.xServoDegs, State.maxServo, -State.maxServo);
|
||||
@@ -238,12 +237,12 @@ void state2vec(Vehicle &State, Vehicle &PrevState, outVector &stateVector) {
|
||||
}
|
||||
|
||||
double derivative(double current, double previous, double step) {
|
||||
double dxdt = (current - previous) / (step / 1000);
|
||||
double dxdt = (current - previous) / (step / 1000.0);
|
||||
return dxdt;
|
||||
}
|
||||
|
||||
double integral(double currentChange, double prevValue, double dt) {
|
||||
return (currentChange * dt / 1000) + prevValue;
|
||||
return (currentChange * dt / 1000.0) + prevValue;
|
||||
}
|
||||
|
||||
double limit(double value, double upr, double lwr) {
|
||||
|
Reference in New Issue
Block a user