40     if (strstr(frame_str, 
"-heavy")) {
    43     if (strstr(frame_str, 
"-revthrust")) {
    46     if (strstr(frame_str, 
"-elevon")) {
    48     } 
else if (strstr(frame_str, 
"-vtail")) {
    50     } 
else if (strstr(frame_str, 
"-dspoilers")) {
    53     if (strstr(frame_str, 
"-elevrev")) {
    56     if (strstr(frame_str, 
"-catapult")) {
    61     if (strstr(frame_str, 
"-bungee")) {
    66     if (strstr(frame_str, 
"-throw")) {
    71    if (strstr(frame_str, 
"-tailsitter")) {
    77     if (strstr(frame_str, 
"-ice")) {
    95     const float max_alpha_delta = 0.8f;
    96     if (alpha-alpha0 > max_alpha_delta) {
    97         alpha = alpha0 + max_alpha_delta;
    98     } 
else if (alpha0-alpha > max_alpha_delta) {
    99         alpha = alpha0 - max_alpha_delta;
   101     double sigmoid = ( 1+exp(-M*(alpha-alpha0))+exp(M*(alpha+alpha0)) ) / (1+exp(-M*(alpha-alpha0))) / (1+exp(M*(alpha+alpha0)));
   102     double linear = (1.0-sigmoid) * (c_lift_0 + c_lift_a0*alpha); 
   103     double flatPlate = sigmoid*(2*copysign(1,alpha)*pow(sin(alpha),2)*cos(alpha)); 
   105     float result  = linear+flatPlate;
   118     double AR = pow(b,2)/
s;
   119     double c_drag_a = c_drag_p + pow(c_lift_0+c_lift_a0*alpha,2)/(
M_PI*oswald*AR);
   130     float effective_airspeed = 
airspeed;
   136         effective_airspeed += inputThrust * 20;
   170     double qbar = 1.0/2.0*rho*pow(effective_airspeed,2)*
s; 
   172     if (
is_zero(effective_airspeed))
   180         la = qbar*b*(c_l_0 + c_l_b*
beta + c_l_p*b*p/(2*effective_airspeed) + c_l_r*b*r/(2*effective_airspeed) + c_l_deltaa*inputAileron + c_l_deltar*inputRudder);
   181         ma = qbar*c*(c_m_0 + c_m_a*alpha + c_m_q*c*q/(2*effective_airspeed) + c_m_deltae*inputElevator);
   182         na = qbar*b*(c_n_0 + c_n_b*
beta + c_n_p*b*p/(2*effective_airspeed) + c_n_r*b*r/(2*effective_airspeed) + c_n_deltaa*inputAileron + c_n_deltar*inputRudder);
   188     la +=  CGOffset.
y * force.
z - CGOffset.
z * force.
y;
   189     ma += -CGOffset.
x * force.
z + CGOffset.
z * force.
x;
   190     na += -CGOffset.
y * force.
x + CGOffset.
x * force.
y;
   220     double c_x_a = -c_drag_a*cos(alpha)+c_lift_a*sin(alpha);
   221     double c_x_q = -c_drag_q*cos(alpha)+c_lift_q*sin(alpha);
   222     double c_z_a = -c_drag_a*sin(alpha)-c_lift_a*cos(alpha);
   223     double c_z_q = -c_drag_q*sin(alpha)-c_lift_q*cos(alpha);
   231     double qbar = 1.0/2.0*rho*pow(
airspeed,2)*
s; 
   241         ax = qbar*(c_x_a + c_x_q*c*q/(2*
airspeed) - c_drag_deltae*cos(alpha)*fabs(inputElevator) + c_lift_deltae*sin(alpha)*inputElevator);
   243         ay = qbar*(c_y_0 + c_y_b*
beta + c_y_p*b*p/(2*
airspeed) + c_y_r*b*r/(2*
airspeed) + c_y_deltaa*inputAileron + c_y_deltar*inputRudder);
   244         az = qbar*(c_z_a + c_z_q*c*q/(2*
airspeed) - c_drag_deltae*sin(alpha)*fabs(inputElevator) - c_lift_deltae*cos(alpha)*inputElevator);
   255     bool launch_triggered = input.
servos[6] > 1700;
   258         elevator = -elevator;
   264         float ch2 = elevator;
   265         aileron  = (ch2-ch1)/2.0
f;
   267         elevator = -(ch2+ch1)/2.0
f;
   273         float ch1 = elevator;
   276         elevator = (ch2-ch1)/2.0
f;
   277         rudder   = (ch2+ch1)/2.0
f;
   284         float elevon_left  = (dspoiler1_left + dspoiler2_left)/2;
   285         float elevon_right = (dspoiler1_right + dspoiler2_right)/2;
   286         aileron  = (elevon_right-elevon_left)/2;
   287         elevator = (elevon_left+elevon_right)/2;
   288         rudder = fabsf(dspoiler1_right - dspoiler2_right)/2 - fabsf(dspoiler1_left - dspoiler2_left)/2;
   298     float thrust     = throttle;
   318     rot_accel = 
getTorque(aileron, elevator, rudder, thrust, force);
   324         if (launch_triggered) {
   340     rpm1 = thrust * 7000;
 
void update_wind(const struct sitl_input &input)
Vector3< float > Vector3f
Plane(const char *home_str, const char *frame_str)
void add_noise(float throttle)
float filtered_servo_range(const struct sitl_input &input, uint8_t idx)
void calculate_forces(const struct sitl_input &input, Vector3f &rot_accel, Vector3f &body_accel)
float update(const struct Aircraft::sitl_input &input)
virtual bool on_ground() const
float dragCoeff(float alpha) const
Matrix3< T > transposed(void) const
const float hover_throttle
Vector3f getTorque(float inputAileron, float inputElevator, float inputRudder, float inputThrust, const Vector3f &force) const
bool is_zero(const T fVal1)
void update_mag_field_bf(void)
float constrain_float(const float amt, const float low, const float high)
void update_position(void)
void update_dynamics(const Vector3f &rot_accel)
struct SITL::Plane::@209 coefficient
Vector3f getForce(float inputAileron, float inputElevator, float inputRudder) const
enum SITL::Aircraft::@199 ground_behavior
virtual void update(const struct sitl_input &input)
float liftCoeff(float alpha) const
float filtered_servo_angle(const struct sitl_input &input, uint8_t idx)
bool reverse_elevator_rudder