93 lines
2.8 KiB
C++
93 lines
2.8 KiB
C++
#ifndef RECOVERYSYSTEM_H
|
|
#define RECOVERYSYSTEM_H
|
|
|
|
#include <string>
|
|
|
|
/**
|
|
* @brief Represents a recovery system for a rocket stage.
|
|
*
|
|
* The RecoverySystem class models parachutes, drogues, or streamers
|
|
* and handles deployment logic based on flight conditions.
|
|
*/
|
|
class RecoverySystem {
|
|
public:
|
|
/**
|
|
* @brief Deployment trigger types.
|
|
*/
|
|
enum class DeploymentType {
|
|
Apogee,
|
|
Altitude,
|
|
Timer
|
|
};
|
|
|
|
/**
|
|
* @brief Constructs a new RecoverySystem.
|
|
* @param name Name of the recovery device.
|
|
* @param deploymentType Type of deployment trigger (apogee, altitude, timer).
|
|
* @param triggerValue Value associated with deployment trigger (e.g., altitude in meters or time in seconds).
|
|
* @param dragCoefficient Drag coefficient of the recovery device.
|
|
* @param referenceArea Reference area (canopy projected area) in square meters.
|
|
*/
|
|
RecoverySystem(const std::string& name,
|
|
DeploymentType deploymentType,
|
|
double triggerValue,
|
|
double dragCoefficient,
|
|
double referenceArea);
|
|
|
|
/**
|
|
* @brief Default destructor.
|
|
*/
|
|
~RecoverySystem() = default;
|
|
|
|
/**
|
|
* @brief Checks if deployment conditions are met based on flight state.
|
|
* @param altitude Current altitude above ground (meters).
|
|
* @param velocity Current vertical velocity (m/s).
|
|
* @param time Elapsed flight time (seconds).
|
|
* @param atApogee Flag indicating if rocket has reached apogee.
|
|
* @return True if deployment should occur.
|
|
*/
|
|
bool checkDeploymentCondition(double altitude, double velocity, double time, bool atApogee) const;
|
|
|
|
/**
|
|
* @brief Marks the recovery system as deployed.
|
|
*/
|
|
void deploy();
|
|
|
|
/**
|
|
* @brief Returns whether the recovery system has been deployed.
|
|
* @return True if deployed.
|
|
*/
|
|
bool isDeployed() const;
|
|
|
|
/**
|
|
* @brief Gets the drag coefficient.
|
|
* @return Drag coefficient (dimensionless).
|
|
*/
|
|
double getDragCoefficient() const;
|
|
|
|
/**
|
|
* @brief Gets the reference area.
|
|
* @return Reference area (square meters).
|
|
*/
|
|
double getReferenceArea() const;
|
|
|
|
/**
|
|
* @brief Gets the name of the recovery system.
|
|
* @return Recovery system name as a constant reference.
|
|
*/
|
|
const std::string& getName() const;
|
|
|
|
private:
|
|
std::string name_; ///< Name of the recovery system.
|
|
|
|
DeploymentType deploymentType_; ///< Deployment trigger type.
|
|
double triggerValue_; ///< Trigger value (meters for altitude, seconds for timer).
|
|
|
|
double dragCoefficient_; ///< Drag coefficient after deployment.
|
|
double referenceArea_; ///< Reference area [m2].
|
|
|
|
bool deployed_; ///< Whether the recovery system has been deployed.
|
|
};
|
|
|
|
#endif // RECOVERYSYSTEM_H
|