|
UAV Simulator
|
Represents a fixed‑wing UAV including its dynamics and 3D rendering. More...
#include <aircraft.h>
Classes | |
| struct | ControlInputs |
Public Member Functions | |
| Aircraft (const std::string &fname, int &vehicle_count) | |
| Construct a new Aircraft, load parameters, and initialize states. | |
| ~Aircraft () | |
| Destructor for Aircraft. | |
| void | load_a_plane (const std::string &filePath, int &vehicle_count) |
| Load an aircraft parameter file. | |
| easy3d::vec3 * | update_aircraft (easy3d::vec3 *vertices, easy3d::vec3 *axesVertices, double &dt) |
| Update aircraft states, geometry, and axes per simulation step. | |
| void | renderAircraft (easy3d::Viewer &viewer) |
| Render the aircraft model into the viewer. | |
| void | createAxesDrawable (easy3d::Viewer &viewer) |
| Create and render local coordinate axes. | |
| bool | animate (easy3d::Viewer *viewer, double dt) |
| Animate the aircraft for one frame. | |
| void | render_HUD (easy3d::TextRenderer &tr, easy3d::Viewer *viewer) const |
| Render HUD overlay of state variables. | |
| void | printState () |
| Print current state variables to console for debugging. | |
| easy3d::TrianglesDrawable * | getAircraftDrawable () const |
| Get the drawable for shading or viewer operations. | |
| 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. | |
| Eigen::VectorXd | getLateralState () const |
| Eigen::VectorXd | getLongitudinalState () const |
| Eigen::VectorXd | computeStateDot (const Eigen::VectorXd &X_in, const Eigen::VectorXd &U_in) |
Public Attributes | |
| double | clock |
| Simulation clock [s]. | |
| double | pn |
| double | pe |
| double | pd |
| Position in NED frame [m]. | |
| double | u |
| double | v |
| double | w |
| Body-axis velocities [m/s]. | |
| double | phi |
| double | theta |
| double | psi |
| Euler angles [rad]. | |
| double | p |
| double | q |
| double | r |
| Angular rates [rad/s]. | |
| double | V_m |
| Airspeed [m/s]. | |
| double | alpha |
| double | beta |
| AoA and sideslip. | |
| double | fx |
| double | fy |
| double | fz |
| Body-axis forces [N]. | |
| double | ell |
| double | m |
| double | n |
| Body-axis moments [Nm]. | |
| std::vector< double > | velocity_b |
| double | pn_dot |
| double | pe_dot |
| double | pd_dot |
| double | u_dot |
| double | v_dot |
| double | w_dot |
| double | phi_dot |
| double | theta_dot |
| double | psi_dot |
| double | p_dot |
| double | q_dot |
| double | r_dot |
| int | steps |
| double | dt |
| int | id |
| double | mass |
| double | Jx |
| double | Jy |
| double | Jz |
| double | Jxz |
| double | wing_area |
| double | wing_chord |
| double | wing_span |
| double | wing_aspect_ratio = (wing_span*wing_span)/wing_area |
| double | e |
| double | g |
| double | rho |
| double | k_motor |
| double | prop_area |
| double | prop_thrust_coef |
| double | prop_efficiency |
| double | prop_omega |
| double | Gamma |
| double | Gamma_1 |
| double | Gamma_2 |
| double | Gamma_3 |
| double | Gamma_4 |
| double | Gamma_5 |
| double | Gamma_6 |
| double | Gamma_7 |
| double | Gamma_8 |
| double | C_p_0 |
| double | C_p_beta |
| double | C_p_p |
| double | C_p_r |
| double | C_p_delta_a |
| double | C_p_delta_r |
| double | C_r_0 |
| double | C_r_beta |
| double | C_r_p |
| double | C_r_r |
| double | C_r_delta_a |
| double | C_r_delta_r |
| double | Cd_of_alpha |
| double | sigma_num |
| double | sigma_den |
| double | sigma_of_alpha |
| double | Cl_flat_plate |
| double | Cl_linear |
| double | Cl_of_alpha |
| double | CxAlpha |
| double | CxqAlpha |
| double | CxdeltaeAlpha |
| double | CzAlpha |
| double | CzqAlpha |
| double | CzdeltaeAlpha |
| Eigen::Vector3d | force_g |
| double | force_aero1 |
| Eigen::Vector3d | force_aero2 |
| Eigen::Vector3d | force_aero |
| double | force_prop1 |
| Eigen::Vector3d | force_prop2 |
| Eigen::Vector3d | force_prop |
| Eigen::Vector3d | Force |
| double | Aero_t1 = force_aero1 |
| Eigen::Vector3d | Aero_t2 |
| Eigen::Vector3d | Aero_torque |
| Eigen::Vector3d | Prop_torque |
| Eigen::Vector3d | Torque |
| double | C_L_0 |
| double | C_L_alpha |
| double | C_L_q |
| double | C_L_delta_e |
| double | C_D_0 |
| double | C_D_alpha |
| double | C_D_p |
| double | C_D_q |
| double | C_D_delta_e |
| double | C_m_0 |
| double | C_m_alpha |
| double | C_m_q |
| double | C_m_delta_e |
| double | C_Y_0 |
| double | C_Y_beta |
| double | C_Y_p |
| double | C_Y_r |
| double | C_Y_delta_a |
| double | C_Y_delta_r |
| double | C_ell_0 |
| double | C_ell_beta |
| double | C_ell_p |
| double | C_ell_r |
| double | C_ell_delta_a |
| double | C_ell_delta_r |
| double | C_n_0 |
| double | C_n_beta |
| double | C_n_p |
| double | C_n_r |
| double | C_n_delta_a |
| double | C_n_delta_r |
| double | C_prop |
| double | trans_rate |
| double | epsilon |
| double | alpha0 |
| double | beta0 |
| double | pn_0 |
| double | pe_0 |
| double | pd_0 |
| double | u_0 |
| double | v_0 |
| double | w_0 |
| double | phi_0 |
| double | theta_0 |
| double | psi_0 |
| double | p_0 |
| double | q_0 |
| double | r_0 |
| double | delta_t |
| double | delta_a |
| double | delta_e |
| double | delta_r |
| double | delta_t_max |
| double | delta_t_min |
| double | delta_a_max |
| double | delta_a_min |
| double | delta_e_max |
| double | delta_e_min |
| double | delta_r_max |
| double | delta_r_min |
| float | old_roll |
| float | old_pitch |
| float | old_yaw |
| float | old_pn |
| float | old_pe |
| float | old_pd |
| std::vector< double > | vertices_x |
| std::vector< double > | vertices_y |
| std::vector< double > | vertices_z |
| int | vertices_size |
| int | aircraft_scale = 20 |
| std::vector< std::vector< int > > | faces |
| std::vector< easy3d::vec3 > | vertices_aircraft |
| std::vector< unsigned int > | indices |
| std::vector< easy3d::vec3 > | dummy_points |
| std::vector< easy3d::vec3 > & | points |
| easy3d::TrianglesDrawable * | aircraft |
| easy3d::LinesDrawable * | axesDrawable |
| std::vector< easy3d::vec3 > | axes_vertices |
| std::vector< easy3d::vec3 > | original_vertices |
| std::vector< easy3d::vec3 > | axes_vertices_original |
| std::string | file_name |
| std::unique_ptr< easy3d::SurfaceMesh > | mesh |
| std::vector< double > | X = {pn,pe,pd,u,v,w,p,q,r,phi,theta,psi,fx,fy,fz,ell,m,n} |
Private Member Functions | |
| void | calculate_forces () |
| Perform force calculations (gravity, aero, prop). | |
| void | calculate_body_frame_velocity_and_angles () |
| Calculate body-frame velocity and angles. | |
| void | calculate_lift_drag_coefficients () |
| Calculate lift and drag coefficients. | |
| void | calculate_moments () |
| Calculate aerodynamic and propulsive moments. | |
| void | rotate (easy3d::vec3 *vertices) |
| Apply rotation to aircraft mesh vertices. | |
| void | rotate_axes (easy3d::vec3 *axesVertices) |
| Apply rotation to axes vertices. | |
| void | translate (easy3d::vec3 *vertices) |
| Apply translation to aircraft mesh vertices. | |
| void | translate_axes (easy3d::vec3 *axesVertices) |
| Apply translation to axes vertices. | |
| void | RK4 (std::vector< double > &X, double dt) |
| Integrate dynamics using Runge-Kutta 4th order. | |
| double | calculate_pn_dot (double &u, double &v, double &w, double &phi, double &theta, double &psi) |
| Compute derivative of north position (pn_dot). | |
| double | calculate_pe_dot (double &u, double &v, double &w, double &phi, double &theta, double &psi) |
| Compute derivative of east position (pe_dot). | |
| double | calculate_pd_dot (double &u, double &v, double &w, double &phi, double &theta) |
| Compute derivative of down position (pd_dot). | |
| double | calculate_phi_dot (double &p, double &q, double &r, double &phi, double &theta) |
| Compute derivative of roll angle (phi_dot). | |
| double | calculate_theta_dot (double &q, double &r, double &phi) |
| Compute derivative of pitch angle (theta_dot). | |
| double | calculate_psi_dot (double &q, double &r, double &phi, double &theta) |
| Compute derivative of yaw angle (psi_dot). | |
| double | calculate_u_dot (double &v, double &w, double &q, double &r, double &fx, double &mass) |
| Compute derivative of body-axis X velocity. | |
| double | calculate_v_dot (double &u, double &w, double &p, double &fy, double &mass) |
| Compute derivative of body-axis Y velocity. | |
| double | calculate_w_dot (double &u, double &v, double &p, double &q, double &fz, double &mass) |
| Compute derivative of body-axis Z velocity. | |
| 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. | |
| double | calculate_q_dot (double &p, double &r, double &m, double &Jy, double &Gamma_5, double &Gamma_6) |
| Compute derivative of pitch rate q. | |
| 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. | |
Friends | |
| class | GNC |
Represents a fixed‑wing UAV including its dynamics and 3D rendering.
Public members expose state variables and parameters, while methods handle:
| Aircraft::Aircraft | ( | const std::string & | fname, |
| int & | vehicle_count | ||
| ) |
Construct a new Aircraft, load parameters, and initialize states.
Constructor. Loads parameters and initializes state variables.
| Aircraft::~Aircraft | ( | ) |
| bool Aircraft::animate | ( | easy3d::Viewer * | viewer, |
| double | dt | ||
| ) |
Animate the aircraft for one frame.
Animation callback called by viewer per frame.
| viewer | Pointer to Easy3D viewer. |
| dt | Time step in seconds. |
| viewer | Pointer to Easy3D viewer. |
| dt | Time step in seconds. |
|
private |
Calculate body-frame velocity and angles.
Compute body-frame airspeed, angle of attack, and sideslip.
|
private |
Perform force calculations (gravity, aero, prop).
Calculate total aerodynamic, gravitational, and propulsion forces.
|
private |
Calculate lift and drag coefficients.
Compute lift and drag coefficients as functions of alpha and control inputs.
|
private |
Calculate aerodynamic and propulsive moments.
Calculate aerodynamic and propulsive moments (roll, pitch, yaw).
|
private |
Compute derivative of roll rate p.
|
private |
Compute derivative of down position (pd_dot).
|
private |
Compute derivative of east position (pe_dot).
|
private |
Compute derivative of roll angle (phi_dot).
|
private |
Compute derivative of north position (pn_dot).
|
private |
Compute derivative of yaw angle (psi_dot).
|
private |
Compute derivative of pitch rate q.
|
private |
Compute derivative of yaw rate r.
|
private |
Compute derivative of pitch angle (theta_dot).
|
private |
Compute derivative of body-axis X velocity.
|
private |
Compute derivative of body-axis Y velocity.
|
private |
Compute derivative of body-axis Z velocity.
| Eigen::VectorXd Aircraft::computeStateDot | ( | const Eigen::VectorXd & | X_in, |
| const Eigen::VectorXd & | U_in | ||
| ) |
| Aircraft::ControlInputs Aircraft::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.
Compute control inputs (δ_e, δ_a, δ_r, δ_t) that achieve trim.
| alpha | Angle of attack. |
| beta | Side slip angle. |
| phi | Roll angle. |
| p | Roll rate. |
| q | Pitch rate. |
| r | Yaw rate. |
| theta | Pitch angle. |
| Va | Airspeed. |
| R | Turn radius. |
| alpha | Angle of attack. |
| beta | Side slip angle. |
| phi | Roll angle. |
| p | Roll rate. |
| q | Pitch rate. |
| r | Yaw rate. |
| theta | Pitch angle. |
| Va | Airspeed. |
| R | Turn radius. |
| void Aircraft::createAxesDrawable | ( | easy3d::Viewer & | viewer | ) |
Create and render local coordinate axes.
Create and render a local coordinate frame.
| viewer | Reference to Easy3D viewer. |
|
inline |
Get the drawable for shading or viewer operations.
| Eigen::VectorXd Aircraft::getLateralState | ( | ) | const |
| Eigen::VectorXd Aircraft::getLongitudinalState | ( | ) | const |
| void Aircraft::load_a_plane | ( | const std::string & | filePath, |
| int & | vehicle_count | ||
| ) |
Load an aircraft parameter file.
================================
| filePath | File path of parameter file. |
| vehicle_count | Reference to vehicle counter. |
Load aircraft parameters from a text file and assign them to members.
| filePath | Path to parameter file. |
| vehicle_count | Reference to vehicle counter, used to assign ID. |
| void Aircraft::printState | ( | ) |
Print current state variables to console for debugging.
Debug print of current state variables to console.
| void Aircraft::render_HUD | ( | easy3d::TextRenderer & | tr, |
| easy3d::Viewer * | viewer | ||
| ) | const |
Render HUD overlay of state variables.
Render heads-up display (HUD) with aircraft states.
| tr | Text renderer for HUD. |
| viewer | Pointer to Easy3D viewer. |
| tr | Reference to Easy3D TextRenderer. |
| viewer | Pointer to Easy3D viewer. |
| void Aircraft::renderAircraft | ( | easy3d::Viewer & | viewer | ) |
Render the aircraft model into the viewer.
Load and render aircraft geometry using Easy3D.
| viewer | Reference to Easy3D viewer. |
|
private |
Integrate dynamics using Runge-Kutta 4th order.
Runge–Kutta 4th order integration to update state vector.
| X | State vector containing position, velocity, attitude, forces & moments. |
| dt | Time step (seconds). |
|
private |
Apply rotation to aircraft mesh vertices.
Apply rotation to aircraft mesh vertices using Euler angles.
|
private |
Apply rotation to axes vertices.
Apply rotation to local axes vertices.
|
private |
Apply translation to aircraft mesh vertices.
|
private |
Apply translation to axes vertices.
| easy3d::vec3 * Aircraft::update_aircraft | ( | easy3d::vec3 * | vertices, |
| easy3d::vec3 * | axesVertices, | ||
| double & | dt | ||
| ) |
Update aircraft states, geometry, and axes per simulation step.
Update aircraft state each simulation step, applying dynamics and geometry transforms.
| vertices | Pointer to aircraft vertex buffer. |
| axesVertices | Pointer to axes vertex buffer. |
| dt | Time step in seconds. |
| vertices | Vertex buffer for aircraft. |
| axesVertices | Vertex buffer for axes. |
| dt | Time step in seconds. |
|
friend |
| double Aircraft::Aero_t1 = force_aero1 |
| Eigen::Vector3d Aircraft::Aero_t2 |
| Eigen::Vector3d Aircraft::Aero_torque |
| easy3d::TrianglesDrawable* Aircraft::aircraft |
| int Aircraft::aircraft_scale = 20 |
| double Aircraft::alpha |
| double Aircraft::alpha0 |
| std::vector<easy3d::vec3> Aircraft::axes_vertices |
| std::vector<easy3d::vec3> Aircraft::axes_vertices_original |
| easy3d::LinesDrawable* Aircraft::axesDrawable |
| double Aircraft::beta |
AoA and sideslip.
| double Aircraft::beta0 |
| double Aircraft::C_D_0 |
| double Aircraft::C_D_alpha |
| double Aircraft::C_D_delta_e |
| double Aircraft::C_D_p |
| double Aircraft::C_D_q |
| double Aircraft::C_ell_0 |
| double Aircraft::C_ell_beta |
| double Aircraft::C_ell_delta_a |
| double Aircraft::C_ell_delta_r |
| double Aircraft::C_ell_p |
| double Aircraft::C_ell_r |
| double Aircraft::C_L_0 |
| double Aircraft::C_L_alpha |
| double Aircraft::C_L_delta_e |
| double Aircraft::C_L_q |
| double Aircraft::C_m_0 |
| double Aircraft::C_m_alpha |
| double Aircraft::C_m_delta_e |
| double Aircraft::C_m_q |
| double Aircraft::C_n_0 |
| double Aircraft::C_n_beta |
| double Aircraft::C_n_delta_a |
| double Aircraft::C_n_delta_r |
| double Aircraft::C_n_p |
| double Aircraft::C_n_r |
| double Aircraft::C_p_0 |
| double Aircraft::C_p_beta |
| double Aircraft::C_p_delta_a |
| double Aircraft::C_p_delta_r |
| double Aircraft::C_p_p |
| double Aircraft::C_p_r |
| double Aircraft::C_prop |
| double Aircraft::C_r_0 |
| double Aircraft::C_r_beta |
| double Aircraft::C_r_delta_a |
| double Aircraft::C_r_delta_r |
| double Aircraft::C_r_p |
| double Aircraft::C_r_r |
| double Aircraft::C_Y_0 |
| double Aircraft::C_Y_beta |
| double Aircraft::C_Y_delta_a |
| double Aircraft::C_Y_delta_r |
| double Aircraft::C_Y_p |
| double Aircraft::C_Y_r |
| double Aircraft::Cd_of_alpha |
| double Aircraft::Cl_flat_plate |
| double Aircraft::Cl_linear |
| double Aircraft::Cl_of_alpha |
| double Aircraft::clock |
Simulation clock [s].
| double Aircraft::CxAlpha |
| double Aircraft::CxdeltaeAlpha |
| double Aircraft::CxqAlpha |
| double Aircraft::CzAlpha |
| double Aircraft::CzdeltaeAlpha |
| double Aircraft::CzqAlpha |
| double Aircraft::delta_a |
| double Aircraft::delta_a_max |
| double Aircraft::delta_a_min |
| double Aircraft::delta_e |
| double Aircraft::delta_e_max |
| double Aircraft::delta_e_min |
| double Aircraft::delta_r |
| double Aircraft::delta_r_max |
| double Aircraft::delta_r_min |
| double Aircraft::delta_t |
| double Aircraft::delta_t_max |
| double Aircraft::delta_t_min |
| double Aircraft::dt |
| std::vector<easy3d::vec3> Aircraft::dummy_points |
| double Aircraft::e |
| double Aircraft::ell |
| double Aircraft::epsilon |
| std::vector<std::vector<int> > Aircraft::faces |
| std::string Aircraft::file_name |
| Eigen::Vector3d Aircraft::Force |
| Eigen::Vector3d Aircraft::force_aero |
| double Aircraft::force_aero1 |
| Eigen::Vector3d Aircraft::force_aero2 |
| Eigen::Vector3d Aircraft::force_g |
| Eigen::Vector3d Aircraft::force_prop |
| double Aircraft::force_prop1 |
| Eigen::Vector3d Aircraft::force_prop2 |
| double Aircraft::fx |
| double Aircraft::fy |
| double Aircraft::fz |
Body-axis forces [N].
| double Aircraft::g |
| double Aircraft::Gamma |
| double Aircraft::Gamma_1 |
| double Aircraft::Gamma_2 |
| double Aircraft::Gamma_3 |
| double Aircraft::Gamma_4 |
| double Aircraft::Gamma_5 |
| double Aircraft::Gamma_6 |
| double Aircraft::Gamma_7 |
| double Aircraft::Gamma_8 |
| int Aircraft::id |
| std::vector<unsigned int> Aircraft::indices |
| double Aircraft::Jx |
| double Aircraft::Jxz |
| double Aircraft::Jy |
| double Aircraft::Jz |
| double Aircraft::k_motor |
| double Aircraft::m |
| double Aircraft::mass |
| std::unique_ptr<easy3d::SurfaceMesh> Aircraft::mesh |
| double Aircraft::n |
Body-axis moments [Nm].
| float Aircraft::old_pd |
| float Aircraft::old_pe |
| float Aircraft::old_pitch |
| float Aircraft::old_pn |
| float Aircraft::old_roll |
| float Aircraft::old_yaw |
| std::vector<easy3d::vec3> Aircraft::original_vertices |
| double Aircraft::p |
| double Aircraft::p_0 |
| double Aircraft::p_dot |
| double Aircraft::pd |
Position in NED frame [m].
| double Aircraft::pd_0 |
| double Aircraft::pd_dot |
| double Aircraft::pe |
| double Aircraft::pe_0 |
| double Aircraft::pe_dot |
| double Aircraft::phi |
| double Aircraft::phi_0 |
| double Aircraft::phi_dot |
| double Aircraft::pn |
| double Aircraft::pn_0 |
| double Aircraft::pn_dot |
| std::vector<easy3d::vec3>& Aircraft::points |
| double Aircraft::prop_area |
| double Aircraft::prop_efficiency |
| double Aircraft::prop_omega |
| double Aircraft::prop_thrust_coef |
| Eigen::Vector3d Aircraft::Prop_torque |
| double Aircraft::psi |
Euler angles [rad].
| double Aircraft::psi_0 |
| double Aircraft::psi_dot |
| double Aircraft::q |
| double Aircraft::q_0 |
| double Aircraft::q_dot |
| double Aircraft::r |
Angular rates [rad/s].
| double Aircraft::r_0 |
| double Aircraft::r_dot |
| double Aircraft::rho |
| double Aircraft::sigma_den |
| double Aircraft::sigma_num |
| double Aircraft::sigma_of_alpha |
| int Aircraft::steps |
| double Aircraft::theta |
| double Aircraft::theta_0 |
| double Aircraft::theta_dot |
| Eigen::Vector3d Aircraft::Torque |
| double Aircraft::trans_rate |
| double Aircraft::u |
| double Aircraft::u_0 |
| double Aircraft::u_dot |
| double Aircraft::v |
| double Aircraft::v_0 |
| double Aircraft::v_dot |
| double Aircraft::V_m |
Airspeed [m/s].
| std::vector<double> Aircraft::velocity_b |
| std::vector<easy3d::vec3> Aircraft::vertices_aircraft |
| int Aircraft::vertices_size |
| std::vector<double> Aircraft::vertices_x |
| std::vector<double> Aircraft::vertices_y |
| std::vector<double> Aircraft::vertices_z |
| double Aircraft::w |
Body-axis velocities [m/s].
| double Aircraft::w_0 |
| double Aircraft::w_dot |
| double Aircraft::wing_area |
| double Aircraft::wing_chord |
| double Aircraft::wing_span |