1
0
mirror of https://gitlab.com/lander-team/lander-cpp.git synced 2025-06-16 23:26:43 +00:00

91 lines
2.2 KiB
C++

#include <array>
#ifndef VEHICLE_H
#define VEHICLE_H
struct Vehicle {
double x, y, z;
double vx, vy, vz;
double vxBody, vyBody, vzBody;
double ax, ay, az;
double yaw, pitch, roll;
double phidot, thetadot, psidot;
double yawdot, pitchdot, rolldot;
double yawddot, pitchddot, rollddot;
double mass, massInitial, massPropellant, massBurnout, mdot;
double vehicleHeight, vehicleRadius, momentArm;
double burntime;
double burnVelocity;
double thrust, burnElapsed, burnStart;
bool thrustFiring = false;
double PIDx, PIDy, Fx, Fy, Fz;
double momentX, momentY, momentZ;
double I11, I22, I33;
double I11dot, I22dot, I33dot;
int maxServo;
int maxServoRate;
double xServoDegs, yServoDegs;
double xServoDegsDot, yServoDegsDot;
double Kp, Ki, Kd;
double yError, yPrevError;
double pError, pPrevError;
double i_yError, i_pError = 0;
double d_yError, d_pError;
double simTime;
int stepSize;
int time = 0;
};
void init_Vehicle(Vehicle &State) {
// PID Gains
State.Kp = -6.8699;
State.Ki = 0;
State.Kd = -0.775;
// Initial Velocity
State.vx = 0; // [m/s]
State.vy = 0; // [m/s]
State.vz = 0; // [m/s]
// Initial YPR
State.yaw = 45 * M_PI / 180; // [rad]
State.pitch = 45 * M_PI / 180; // [rad]
State.roll = 0 * M_PI / 180; // [rad]
// Initial YPRdot
State.yawdot = 1 * M_PI / 180; // [rad/s]
State.pitchdot = -1 * M_PI / 180; // [rad/s]
State.rolldot = 0 * M_PI / 180; // [rad/s]
// Servo Limitation
State.maxServo = 7; // [degs]
State.maxServoRate = 360; // [degs/sec]
// Vehicle Properties
State.massInitial = 1.2; // [kg]
State.vehicleHeight = 0.5318; // [m]
State.vehicleRadius = 0.05105; // [m]
State.momentArm = 0.145; // [m]
// Sim Step Size
State.stepSize = 1; // [ms]
// Other Properties
State.massPropellant = 0.06; // [kg]
State.massBurnout = State.massInitial - State.massPropellant; // [kg]
State.burntime = 3.45 - 0.148; // [s]
State.mdot = State.massPropellant / State.burntime; // [kg/s]
State.mass = State.massInitial; // [kg]
State.burnElapsed = 2000; // [s]
}
#endif