/* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* a stratospheric blimp simulator class */ #pragma once #include "SIM_config.h" #if AP_SIM_STRATOBLIMP_ENABLED #include "SIM_Aircraft.h" #include namespace SITL { /* a stratospheric blimp simulator */ class StratoBlimp : public Aircraft { public: StratoBlimp(const char *frame_str); /* update model by one time step */ void update(const struct sitl_input &input) override; /* static object creator */ static Aircraft *create(const char *frame_str) { return NEW_NOTHROW StratoBlimp(frame_str); } static const struct AP_Param::GroupInfo var_info[]; protected: void calculate_forces(const struct sitl_input &input, Vector3f &rot_accel, Vector3f &body_accel); private: void calculate_coefficients(); void handle_motor(float throttle, float tilt, Vector3f &body_acc, Vector3f &rot_accel, float lateral_position); void get_drag(const Vector3f &velocity_linear, const Vector3f &velocity_rot, float altitude, Vector3f &drag_linear, Vector3f &drag_rotaccel); float get_lift(float altitude); float air_density; float EAS2TAS; float drag_yaw; bool released; bool helper_balloon_attached = true; AP_Float mass; AP_Float helium_mass; AP_Float arm_length; AP_Float motor_thrust; AP_Float drag_fwd; AP_Float drag_side; AP_Float drag_up; AP_Float altitude_target; AP_Float target_climb_rate; AP_Float turn_rate; AP_Float motor_angle; AP_Float yaw_rate_max; AP_Float moi_roll; AP_Float moi_yaw; AP_Float moi_pitch; AP_Float center_of_lift; AP_Float center_of_drag; AP_Float free_lift_rate; }; } #endif // AP_SIM_STRATOBLIMP_ENABLED