1#ifndef ROBUST_DDP_CONTROLLER_HPP
2#define ROBUST_DDP_CONTROLLER_HPP
38constexpr double G0 = 9.807;
240 Eigen::VectorXd
dynamicsStep(
const Eigen::VectorXd& x,
const Eigen::VectorXd& u,
double mdot_F,
241 double mdot_O)
const;
243 void linearize(
const Eigen::VectorXd& x,
const Eigen::VectorXd& u,
double mdot_F,
double mdot_O,
244 Eigen::MatrixXd& A, Eigen::MatrixXd& B)
const;
262 const Eigen::MatrixXd& u_init)
const;
265 int k,
const Eigen::VectorXd& u_prev)
const;
274 Eigen::VectorXd
filterAction(
const Eigen::VectorXd& x,
const Eigen::VectorXd& u_proposed,
278 int num_steps = 2)
const;
Eigen::VectorXd filterAction(const Eigen::VectorXd &x, const Eigen::VectorXd &u_proposed, const Reference &ref, int k) const
Eigen::VectorXd dynamicsStep(const Eigen::VectorXd &x, const Eigen::VectorXd &u, double mdot_F, double mdot_O) const
EngineEstimate estimateEngine(double P_d_fuel, double P_d_ox) const
void linearize(const Eigen::VectorXd &x, const Eigen::VectorXd &u, double mdot_F, double mdot_O, Eigen::MatrixXd &A, Eigen::MatrixXd &B) const
Eigen::VectorXd economicDecision(const Eigen::VectorXd &x, const Reference &ref, int k) const
std::optional< Eigen::VectorXd > x_prev_
Eigen::VectorXd enumerativeMPC(const Eigen::VectorXd &x0, const Reference &ref, int k) const
ActuationCommand computeActuation(const Eigen::VectorXd &u_relaxed) const
bool shouldCutoff(const NavState &nav) const
double runningCost(const Eigen::VectorXd &x, const Eigen::VectorXd &u, const Reference &ref, int k, const Eigen::VectorXd &u_prev) const
bool isStateSafe(const Eigen::VectorXd &x, CommandType cmd_type=CommandType::THRUST_DESIRED) const
Reference buildReference(const NavState &nav, const Measurement &meas, const Command &cmd) const
bool isActionSafe(const Eigen::VectorXd &x, const Eigen::VectorXd &u, CommandType cmd_type, int num_steps=2) const
bool initialize(const Config &config)
std::pair< ActuationCommand, Diagnostics > step(const Measurement &meas, const NavState &nav, const Command &cmd)
Execute one control step.
ControllerState getState() const
DDPSolution solveDDP(const Eigen::VectorXd &x0, const Reference &ref, const Eigen::MatrixXd &u_init) const
Eigen::VectorXd buildState(const Measurement &meas) const
std::optional< Eigen::MatrixXd > u_seq_prev_
std::optional< Eigen::VectorXd > u_prev_applied_
constexpr int IDX_M_GAS_O
constexpr double GAMMA_N2
constexpr int IDX_M_GAS_F
constexpr int IDX_M_GAS_COPV
constexpr double R_GAS_N2
Motorized ball valve position: raw ADC counts -> % open.
std::vector< double > u_sequence
std::chrono::steady_clock::time_point timestamp
std::vector< double > MR_ref
std::vector< double > P_fuel_ref
std::vector< double > P_ox_ref
std::vector< double > F_ref