Go to the documentation of this file.
20 #ifndef VTOL_DYNAMICS_SIM_H
21 #define VTOL_DYNAMICS_SIM_H
23 #include <Eigen/Geometry>
42 Eigen::Matrix<double, 3, 3, Eigen::RowMajor>
inertia;
69 std::array<Eigen::Vector3d, MOTORS_MAX_AMOUNT>
motors;
78 std::array<Eigen::Vector3d, MOTORS_MAX_AMOUNT>
motors;
119 Eigen::Matrix<double, 8, 20, Eigen::RowMajor>
CS_rudder;
120 Eigen::Matrix<double, 8, 90, Eigen::RowMajor>
CS_beta;
122 Eigen::Matrix<double, 1, 47, Eigen::RowMajor>
AoA;
123 Eigen::Matrix<double, 90, 1, Eigen::ColMajor>
AoS;
125 Eigen::Matrix<double, 20, 1, Eigen::ColMajor>
actuator;
126 Eigen::Matrix<double, 8, 1, Eigen::ColMajor>
airspeed;
137 Eigen::Matrix<double, 8, 20, Eigen::RowMajor>
CmzRudder;
139 Eigen::Matrix<double, 40, 5, Eigen::RowMajor>
prop;
152 int8_t
init()
override;
154 const Eigen::Quaterniond& attitudeXYZW)
override;
155 void land()
override;
157 void process(
double dt_secs,
const std::vector<double>& unitless_setpoint)
override;
167 void getIMUMeasurement(Eigen::Vector3d& accOut, Eigen::Vector3d& gyroOut)
override;
168 bool getMotorsRpm(std::vector<double>& motorsRpm)
override;
191 void thruster(
double actuator,
double& thrust,
double& torque,
double& rpm)
const;
193 const Eigen::Vector3d& Faero,
194 const std::vector<double>& motors,
200 const std::array<double, 3>& servos,
201 Eigen::Vector3d& Faero,
202 Eigen::Vector3d& Maero);
218 const Eigen::Vector3d& moment,
219 const Eigen::Vector3d& prevAngVel)
const;
221 void setWindParameter(Eigen::Vector3d windMeanVelocityNED,
double wind_velocityVariance)
override;
223 const Eigen::Vector3d& angularVelocity);
232 const Eigen::Vector3d& estimatedVelocity,
233 const Eigen::Vector3d& windSpeed)
const;
247 #endif // VTOL_DYNAMICS_SIM_H
Eigen::Matrix< double, 40, 5, Eigen::RowMajor > prop
Eigen::Vector3d calculateNormalForceWithoutMass() const
void loadMotorsGeometry(const std::string &path)
Vtol dynamics simulator class.
std::vector< double > servoRange
std::normal_distribution< double > _distribution
Eigen::Matrix3d calculateRotationMatrix() const
int8_t init() override
Use rosparam here to initialize sim.
std::vector< double > prevActuators
Eigen::Matrix< double, 3, 3, Eigen::RowMajor > inertia
Eigen::Vector3d getAngularAcceleration() const
Eigen::Matrix< double, 8, 8, Eigen::RowMajor > CmzPolynomial
std::array< Eigen::Vector3d, MOTORS_MAX_AMOUNT > motors
void calculateCmyPolynomial(double airSpeedMod, Eigen::VectorXd &polynomialCoeffs) const
std::vector< double > _motorsSpeed
double calculateCmyElevator(double elevator_pos, double airspeed) const
std::vector< Geometry > geometry
bool getMotorsRpm(std::vector< double > &motorsRpm) override
std::array< Eigen::Vector3d, MOTORS_MAX_AMOUNT > motors
std::vector< double > crntActuators
Eigen::Matrix< double, 8, 20, Eigen::RowMajor > CmyElevator
Eigen::Matrix< double, 8, 1, Eigen::ColMajor > airspeed
Eigen::Vector3d bodylinearVel
std::default_random_engine _generator
const Moments & getMoments() const
void setInitialPosition(const Eigen::Vector3d &position, const Eigen::Quaterniond &attitudeXYZW) override
std::vector< double > motorMaxSpeed
double calculateCmxAileron(double aileron_pos, double airspeed) const
void _mapUnitlessSetpointToInternal(const std::vector< double > &cmd)
cmd is flexible, but it follows these rules:
Eigen::Vector3d airspeedFrd
void calculateCmxPolynomial(double airSpeedMod, Eigen::VectorXd &polynomialCoeffs) const
void updateActuators(double dtSecs)
constexpr size_t MOTORS_MIN_AMOUNT
Eigen::Vector3d getBodyLinearVelocity() const
Eigen::Matrix< double, 8, 6, Eigen::RowMajor > CDPolynomial
Eigen::Vector3d getVehicleAngularVelocity() const override
Eigen::Vector3d calculateAirSpeed(const Eigen::Matrix3d &rotationMatrix, const Eigen::Vector3d &estimatedVelocity, const Eigen::Vector3d &windSpeed) const
double calculateAnglesOfSideslip(const Eigen::Vector3d &airSpeed) const
double calculateCSBeta(double AoS_deg, double airspeed) const
void calculateCLPolynomial(double airSpeedMod, Eigen::VectorXd &polynomialCoeffs) const
double characteristicLength
std::vector< double > actuatorMin
double calculateDynamicPressure(double airSpeedMod) const
std::array< double, MOTORS_MAX_AMOUNT > motorsRpm
Eigen::Matrix< double, 8, 8, Eigen::RowMajor > CmxPolynomial
void loadParams(const std::string &path)
Eigen::Matrix< double, 8, 90, Eigen::RowMajor > CS_beta
Eigen::Matrix< double, 8, 20, Eigen::RowMajor > CS_rudder
int8_t calibrate(SimMode_t calibrationType) override
Eigen::Vector3d angularAccel
void loadTables(const std::string &path)
void calculateCSPolynomial(double airSpeedMod, Eigen::VectorXd &polynomialCoeffs) const
Eigen::Vector3d angularVel
Eigen::Vector3d calculateAngularAccel(const Eigen::Matrix< double, 3, 3, Eigen::RowMajor > &inertia, const Eigen::Vector3d &moment, const Eigen::Vector3d &prevAngVel) const
Eigen::Matrix< double, 8, 20, Eigen::RowMajor > CmzRudder
~VtolDynamics() final=default
Eigen::Vector3d getVehicleVelocity() const override
void calculateCmzPolynomial(double airSpeedMod, Eigen::VectorXd &polynomialCoeffs) const
Eigen::Vector3d initialPose
Eigen::Vector3d linearVelNed
Eigen::Vector3d getVehicleAirspeed() const override
void thruster(double actuator, double &thrust, double &torque, double &rpm) const
Eigen::Matrix< double, 8, 8, Eigen::RowMajor > CSPolynomial
Eigen::Vector3d getLinearAcceleration() const
double inertiaUncertainty
Eigen::Matrix< double, 8, 8, Eigen::RowMajor > CLPolynomial
void setWindParameter(Eigen::Vector3d windMeanVelocityNED, double wind_velocityVariance) override
const Forces & getForces() const
Eigen::Matrix< double, 90, 1, Eigen::ColMajor > AoS
Eigen::Vector3d calculateWind()
void calculateNewState(const Eigen::Vector3d &Maero, const Eigen::Vector3d &Faero, const std::vector< double > &motors, double dt_sec)
Eigen::Quaterniond initialAttitude
Eigen::Quaterniond attitude
constexpr size_t MOTORS_MAX_AMOUNT
std::vector< double > actuatorTimeConstants
Eigen::Vector3d linearAccel
Eigen::Vector3d getVehiclePosition() const override
Eigen::Vector3d gustVelocityNED
double calculateCmzRudder(double rudder_pos, double airspeed) const
Eigen::Quaterniond getVehicleAttitude() const override
double calculateCSRudder(double rudder_pos, double airspeed) const
void setInitialVelocity(const Eigen::Vector3d &linearVelocity, const Eigen::Vector3d &angularVelocity)
std::array< double, 3 > _servosValues
Eigen::Vector3d accelBias
void calculateAerodynamics(const Eigen::Vector3d &airspeed, double AoA, double AoS, const std::array< double, 3 > &servos, Eigen::Vector3d &Faero, Eigen::Vector3d &Maero)
Eigen::Matrix< double, 8, 20, Eigen::RowMajor > CmxAileron
Eigen::Matrix< double, 1, 47, Eigen::RowMajor > AoA
void calculateCDPolynomial(double airSpeedMod, Eigen::VectorXd &polynomialCoeffs) const
void getIMUMeasurement(Eigen::Vector3d &accOut, Eigen::Vector3d &gyroOut) override
std::vector< double > actuatorMax
double calculateAnglesOfAtack(const Eigen::Vector3d &airSpeed) const
Eigen::Matrix< double, 20, 1, Eigen::ColMajor > actuator
void process(double dt_secs, const std::vector< double > &unitless_setpoint) override
Eigen::Matrix< double, 8, 8, Eigen::RowMajor > CmyPolynomial
inno_vtol_dynamics
Author(s): Roman Fedorenko, Dmitry Ponomarev, Ezra Tal, Winter Guerra
autogenerated on Mon Dec 9 2024 03:13:35