17#include <easy3d/viewer/viewer.h>
18#include <easy3d/renderer/drawable_triangles.h>
19#include <easy3d/renderer/drawable_lines.h>
20#include <easy3d/renderer/vertex_array_object.h>
21#include <easy3d/core/surface_mesh.h>
22#include <easy3d/fileio/surface_mesh_io.h>
27#define _USE_MATH_DEFINES
263 std::vector<std::vector<int>>
faces;
282 std::unique_ptr<easy3d::SurfaceMesh>
mesh;
289 Aircraft(
const std::string& fname,
int& vehicle_count);
302 void load_a_plane(
const std::string& filePath,
int& vehicle_count);
308 std::vector <double>
X = {
pn,
pe,
pd,
u,
v,
w,
p,
q,
r,
phi,
theta,
psi,
fx,
fy,
fz,
ell,
m,
n};
340 bool animate(easy3d::Viewer* viewer,
double dt);
348 void render_HUD(easy3d::TextRenderer& tr, easy3d::Viewer* viewer)
const;
388 double p,
double q,
double r,
389 double theta,
double Va,
double R);
394 Eigen::VectorXd
computeStateDot(
const Eigen::VectorXd& X_in,
const Eigen::VectorXd& U_in);
418 void RK4(std::vector<double>&
X,
double dt);
Represents a fixed‑wing UAV including its dynamics and 3D rendering.
Definition aircraft.h:41
std::vector< std::vector< int > > faces
Definition aircraft.h:263
Eigen::VectorXd getLateralState() const
Definition aircraft.cpp:1117
double calculate_w_dot(double &u, double &v, double &p, double &q, double &fz, double &mass)
Compute derivative of body-axis Z velocity.
Definition aircraft.cpp:639
double beta0
Definition aircraft.h:212
double calculate_q_dot(double &p, double &r, double &m, double &Jy, double &Gamma_5, double &Gamma_6)
Compute derivative of pitch rate q.
Definition aircraft.cpp:659
double r_dot
Definition aircraft.h:69
Eigen::Vector3d Torque
Definition aircraft.h:166
double Gamma_5
Definition aircraft.h:101
void calculate_forces()
Perform force calculations (gravity, aero, prop).
Definition aircraft.cpp:256
double prop_area
Definition aircraft.h:89
double C_Y_r
Definition aircraft.h:190
double u
Definition aircraft.h:47
double pn_0
Definition aircraft.h:215
double delta_e_max
Definition aircraft.h:240
int vertices_size
Definition aircraft.h:257
double C_m_0
Definition aircraft.h:182
double C_Y_p
Definition aircraft.h:189
double calculate_phi_dot(double &p, double &q, double &r, double &phi, double &theta)
Compute derivative of roll angle (phi_dot).
Definition aircraft.cpp:593
double pe_dot
Definition aircraft.h:59
double C_ell_r
Definition aircraft.h:197
void translate(easy3d::vec3 *vertices)
Apply translation to aircraft mesh vertices.
Definition aircraft.cpp:711
void calculate_body_frame_velocity_and_angles()
Calculate body-frame velocity and angles.
Definition aircraft.cpp:302
double v_dot
Definition aircraft.h:62
double w_dot
Definition aircraft.h:63
double C_n_delta_r
Definition aircraft.h:206
double force_prop1
Definition aircraft.h:151
std::string file_name
Definition aircraft.h:280
double e
Definition aircraft.h:84
double C_D_q
Definition aircraft.h:179
double pd
Position in NED frame [m].
Definition aircraft.h:46
double prop_thrust_coef
Definition aircraft.h:90
void rotate_axes(easy3d::vec3 *axesVertices)
Apply rotation to axes vertices.
Definition aircraft.cpp:695
int aircraft_scale
Definition aircraft.h:261
double C_Y_beta
Definition aircraft.h:188
void renderAircraft(easy3d::Viewer &viewer)
Render the aircraft model into the viewer.
Definition aircraft.cpp:751
double C_L_q
Definition aircraft.h:173
double n
Body-axis moments [Nm].
Definition aircraft.h:53
double fx
Definition aircraft.h:52
double mass
Definition aircraft.h:75
double C_ell_p
Definition aircraft.h:196
double C_n_beta
Definition aircraft.h:202
Eigen::Vector3d Aero_t2
Definition aircraft.h:163
Eigen::Vector3d force_g
Definition aircraft.h:145
double C_r_p
Definition aircraft.h:116
double phi_0
Definition aircraft.h:223
void calculate_lift_drag_coefficients()
Calculate lift and drag coefficients.
Definition aircraft.cpp:313
std::vector< easy3d::vec3 > & points
Definition aircraft.h:268
Eigen::Vector3d force_prop2
Definition aircraft.h:152
double g
Definition aircraft.h:85
double wing_span
Definition aircraft.h:82
easy3d::vec3 * update_aircraft(easy3d::vec3 *vertices, easy3d::vec3 *axesVertices, double &dt)
Update aircraft states, geometry, and axes per simulation step.
Definition aircraft.cpp:852
double C_ell_0
Definition aircraft.h:194
Eigen::Vector3d force_aero
Definition aircraft.h:149
std::vector< easy3d::vec3 > vertices_aircraft
Definition aircraft.h:264
void rotate(easy3d::vec3 *vertices)
Apply rotation to aircraft mesh vertices.
Definition aircraft.cpp:679
std::vector< double > X
Definition aircraft.h:308
double r
Angular rates [rad/s].
Definition aircraft.h:49
std::vector< easy3d::vec3 > original_vertices
Definition aircraft.h:275
double pd_0
Definition aircraft.h:217
void translate_axes(easy3d::vec3 *axesVertices)
Apply translation to axes vertices.
Definition aircraft.cpp:735
double theta_dot
Definition aircraft.h:65
Eigen::Vector3d force_aero2
Definition aircraft.h:148
Eigen::VectorXd computeStateDot(const Eigen::VectorXd &X_in, const Eigen::VectorXd &U_in)
Definition aircraft.cpp:1146
double V_m
Airspeed [m/s].
Definition aircraft.h:50
double alpha0
Definition aircraft.h:211
double delta_t_min
Definition aircraft.h:237
double p_0
Definition aircraft.h:227
double C_ell_beta
Definition aircraft.h:195
double C_D_delta_e
Definition aircraft.h:180
float old_pd
Definition aircraft.h:252
float old_yaw
Definition aircraft.h:248
std::vector< double > vertices_z
Definition aircraft.h:256
double C_D_alpha
Definition aircraft.h:177
double delta_e_min
Definition aircraft.h:241
double psi_0
Definition aircraft.h:225
double C_m_delta_e
Definition aircraft.h:185
double C_ell_delta_r
Definition aircraft.h:199
std::unique_ptr< easy3d::SurfaceMesh > mesh
Definition aircraft.h:282
int steps
Definition aircraft.h:71
double C_L_alpha
Definition aircraft.h:172
double dt
Definition aircraft.h:72
bool animate(easy3d::Viewer *viewer, double dt)
Animate the aircraft for one frame.
Definition aircraft.cpp:892
double sigma_num
Definition aircraft.h:125
double q_dot
Definition aircraft.h:68
easy3d::TrianglesDrawable * aircraft
Definition aircraft.h:270
double CxAlpha
Definition aircraft.h:137
double pd_dot
Definition aircraft.h:60
double p
Definition aircraft.h:49
double C_p_beta
Definition aircraft.h:108
double CxdeltaeAlpha
Definition aircraft.h:139
double p_dot
Definition aircraft.h:67
double calculate_p_dot(double &p, double &q, double &r, double &ell, double &n, double &Gamma_1, double &Gamma_2, double &Gamma_3, double &Gamma_4)
Compute derivative of roll rate p.
Definition aircraft.cpp:649
double prop_efficiency
Definition aircraft.h:91
double wing_area
Definition aircraft.h:80
double phi_dot
Definition aircraft.h:64
double m
Definition aircraft.h:53
double C_r_0
Definition aircraft.h:114
easy3d::LinesDrawable * axesDrawable
Definition aircraft.h:273
double Gamma_8
Definition aircraft.h:104
double calculate_pe_dot(double &u, double &v, double &w, double &phi, double &theta, double &psi)
Compute derivative of east position (pe_dot).
Definition aircraft.cpp:565
double delta_r
Definition aircraft.h:234
double Jx
Definition aircraft.h:76
double fz
Body-axis forces [N].
Definition aircraft.h:52
double theta
Definition aircraft.h:48
double psi
Euler angles [rad].
Definition aircraft.h:48
double Gamma_3
Definition aircraft.h:99
double ell
Definition aircraft.h:53
double pn_dot
Definition aircraft.h:58
double clock
Simulation clock [s].
Definition aircraft.h:45
double Cl_linear
Definition aircraft.h:132
double w_0
Definition aircraft.h:221
double CzAlpha
Definition aircraft.h:140
double pn
Definition aircraft.h:46
double C_n_0
Definition aircraft.h:201
double fy
Definition aircraft.h:52
double C_p_p
Definition aircraft.h:109
float old_roll
Definition aircraft.h:246
double Jz
Definition aircraft.h:78
double v_0
Definition aircraft.h:220
double C_r_r
Definition aircraft.h:117
int id
Definition aircraft.h:73
Eigen::Vector3d force_prop
Definition aircraft.h:153
double C_p_0
Definition aircraft.h:107
double calculate_psi_dot(double &q, double &r, double &phi, double &theta)
Compute derivative of yaw angle (psi_dot).
Definition aircraft.cpp:611
double delta_r_max
Definition aircraft.h:242
double pe_0
Definition aircraft.h:216
double C_L_delta_e
Definition aircraft.h:174
double phi
Definition aircraft.h:48
void createAxesDrawable(easy3d::Viewer &viewer)
Create and render local coordinate axes.
Definition aircraft.cpp:804
double wing_chord
Definition aircraft.h:81
double q_0
Definition aircraft.h:228
double C_p_delta_r
Definition aircraft.h:112
double C_m_alpha
Definition aircraft.h:183
std::vector< unsigned int > indices
Definition aircraft.h:265
double r_0
Definition aircraft.h:229
std::vector< easy3d::vec3 > axes_vertices
Definition aircraft.h:274
double delta_e
Definition aircraft.h:233
double C_n_r
Definition aircraft.h:204
double q
Definition aircraft.h:49
double C_D_p
Definition aircraft.h:178
double delta_a_min
Definition aircraft.h:239
double delta_a_max
Definition aircraft.h:238
double Jy
Definition aircraft.h:77
double Aero_t1
Definition aircraft.h:161
double wing_aspect_ratio
Definition aircraft.h:83
double C_p_r
Definition aircraft.h:110
void calculate_moments()
Calculate aerodynamic and propulsive moments.
Definition aircraft.cpp:344
double C_m_q
Definition aircraft.h:184
void RK4(std::vector< double > &X, double dt)
Integrate dynamics using Runge-Kutta 4th order.
Definition aircraft.cpp:389
double CzqAlpha
Definition aircraft.h:141
double delta_t_max
Definition aircraft.h:236
double CzdeltaeAlpha
Definition aircraft.h:142
double calculate_theta_dot(double &q, double &r, double &phi)
Compute derivative of pitch angle (theta_dot).
Definition aircraft.cpp:602
double calculate_v_dot(double &u, double &w, double &p, double &fy, double &mass)
Compute derivative of body-axis Y velocity.
Definition aircraft.cpp:630
void render_HUD(easy3d::TextRenderer &tr, easy3d::Viewer *viewer) const
Render HUD overlay of state variables.
Definition aircraft.cpp:968
double Gamma
Definition aircraft.h:96
~Aircraft()
Destructor for Aircraft.
Definition aircraft.cpp:247
double calculate_pn_dot(double &u, double &v, double &w, double &phi, double &theta, double &psi)
Compute derivative of north position (pn_dot).
Definition aircraft.cpp:553
double CxqAlpha
Definition aircraft.h:138
Eigen::Vector3d Force
Definition aircraft.h:155
std::vector< easy3d::vec3 > axes_vertices_original
Definition aircraft.h:276
double C_D_0
Definition aircraft.h:176
double psi_dot
Definition aircraft.h:66
float old_pitch
Definition aircraft.h:247
double C_r_delta_a
Definition aircraft.h:118
std::vector< easy3d::vec3 > dummy_points
Definition aircraft.h:267
Eigen::VectorXd getLongitudinalState() const
Definition aircraft.cpp:1134
void printState()
Print current state variables to console for debugging.
Definition aircraft.cpp:940
double u_dot
Definition aircraft.h:61
Eigen::Vector3d Prop_torque
Definition aircraft.h:165
double C_n_p
Definition aircraft.h:203
double Cd_of_alpha
Definition aircraft.h:122
double C_Y_delta_r
Definition aircraft.h:192
double calculate_r_dot(double &p, double &q, double &r, double &ell, double &n, double &Gamma_1, double &Gamma_4, double &Gamma_7, double &Gamma_8)
Compute derivative of yaw rate r.
Definition aircraft.cpp:668
double Jxz
Definition aircraft.h:79
double alpha
Definition aircraft.h:51
double theta_0
Definition aircraft.h:224
double C_L_0
Definition aircraft.h:171
float old_pe
Definition aircraft.h:251
double delta_r_min
Definition aircraft.h:243
double w
Body-axis velocities [m/s].
Definition aircraft.h:47
double Gamma_1
Definition aircraft.h:97
double delta_a
Definition aircraft.h:232
double Gamma_6
Definition aircraft.h:102
float old_pn
Definition aircraft.h:250
double sigma_of_alpha
Definition aircraft.h:127
double k_motor
Definition aircraft.h:88
double pe
Definition aircraft.h:46
double epsilon
Definition aircraft.h:210
double prop_omega
Definition aircraft.h:92
std::vector< double > velocity_b
Definition aircraft.h:56
void load_a_plane(const std::string &filePath, int &vehicle_count)
Load an aircraft parameter file.
Definition aircraft.cpp:27
double Cl_flat_plate
Definition aircraft.h:130
double delta_t
Definition aircraft.h:231
double C_Y_0
Definition aircraft.h:187
std::vector< double > vertices_x
Definition aircraft.h:254
double beta
AoA and sideslip.
Definition aircraft.h:51
double sigma_den
Definition aircraft.h:126
double C_Y_delta_a
Definition aircraft.h:191
double v
Definition aircraft.h:47
double Gamma_2
Definition aircraft.h:98
double C_prop
Definition aircraft.h:208
double C_p_delta_a
Definition aircraft.h:111
double C_r_delta_r
Definition aircraft.h:119
double Gamma_4
Definition aircraft.h:100
double Cl_of_alpha
Definition aircraft.h:134
ControlInputs computeTrimControls(double alpha, double beta, double phi, double p, double q, double r, double theta, double Va, double R)
Compute control inputs that achieve trim for given flight conditions.
Definition aircraft.cpp:1025
Eigen::Vector3d Aero_torque
Definition aircraft.h:164
double u_0
Definition aircraft.h:219
easy3d::TrianglesDrawable * getAircraftDrawable() const
Get the drawable for shading or viewer operations.
Definition aircraft.h:358
std::vector< double > vertices_y
Definition aircraft.h:255
double Gamma_7
Definition aircraft.h:103
double rho
Definition aircraft.h:86
double C_ell_delta_a
Definition aircraft.h:198
double calculate_u_dot(double &v, double &w, double &q, double &r, double &fx, double &mass)
Compute derivative of body-axis X velocity.
Definition aircraft.cpp:621
double force_aero1
Definition aircraft.h:146
double C_n_delta_a
Definition aircraft.h:205
double calculate_pd_dot(double &u, double &v, double &w, double &phi, double &theta)
Compute derivative of down position (pd_dot).
Definition aircraft.cpp:579
double trans_rate
Definition aircraft.h:209
double C_r_beta
Definition aircraft.h:115
Guidance, Navigation, and Control system for the aircraft.
Definition gnc.h:21
Vec< 3, float > vec3
Definition common.h:19