131 wind_ = Eigen::Vector3d::Zero();
136 delta_.
a = (act_cmds[0] - 1500.0)/500.0;
137 delta_.
e = -(act_cmds[1] - 1500.0)/500.0;
138 delta_.
t = (act_cmds[2] - 1000.0)/1000.0;
139 delta_.
r = -(act_cmds[3] - 1500.0)/500.0;
141 double p = x.
omega(0);
142 double q = x.
omega(1);
143 double r = x.
omega(2);
146 Eigen::Vector3d V_airspeed = x.
vel + x.
rot.inverse()*
wind_;
147 double ur = V_airspeed(0);
148 double vr = V_airspeed(1);
149 double wr = V_airspeed(2);
151 double Va = V_airspeed.norm();
153 Eigen::Matrix<double, 6, 1> forces;
156 if(Va > 1.0 && std::isfinite(Va))
164 double alpha =
atan2(wr , ur);
165 double beta =
asin(vr/Va);
167 double ca =
cos(alpha);
168 double sa =
sin(alpha);
170 double sign = (alpha >= 0? 1: -1);
172 double CL_a = (1 - sigma_a)*(
CL_.
O +
CL_.
alpha*alpha) + sigma_a*(2*sign*sa*sa*ca);
174 double CD_a =
CD_.
p + ((pow((
CL_.
O +
CL_.
alpha*(alpha)),2.0))/(3.14159*0.9*AR));
176 double CX_a = -CD_a*ca + CL_a*sa;
177 double CX_q_a = -
CD_.
q*ca +
CL_.
q*sa;
180 double CZ_a = -CD_a*sa - CL_a*ca;
181 double CZ_q_a = -
CD_.
q*sa -
CL_.
q*ca;
float atan2(float y, float x)
Eigen::Matrix< double, 6, 1 > updateForcesAndTorques(Current_State x, const int act_cmds[])
void set_wind(Eigen::Vector3d wind)
Fixedwing(ros::NodeHandle *nh)
bool param(const std::string ¶m_name, T ¶m_val, const T &default_val) const
struct rosflight_sim::Fixedwing::PropCoeff prop_
struct rosflight_sim::Fixedwing::Actuators delta_
struct rosflight_sim::Fixedwing::WingCoeff wing_