STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
fsw::control::RobustDDPController Class Reference

Robust Hybrid Optimal Controller. More...

#include <RobustDDPController.hpp>

Collaboration diagram for fsw::control::RobustDDPController:
[legend]

Classes

struct  Config
struct  Measurement
struct  NavState
struct  Command
struct  ActuationCommand
struct  EngineEstimate
struct  Diagnostics
struct  ControllerState
struct  Reference
struct  DDPSolution

Public Types

enum class  CommandType { THRUST_DESIRED , ALTITUDE_GOAL , PRESSURE_TARGET }

Public Member Functions

 RobustDDPController ()
 ~RobustDDPController ()
bool initialize (const Config &config)
void reset ()
std::pair< ActuationCommand, Diagnostics > step (const Measurement &meas, const NavState &nav, const Command &cmd)
 Execute one control step.
ControllerState getState () const

Private Member Functions

Eigen::VectorXd dynamicsStep (const Eigen::VectorXd &x, const Eigen::VectorXd &u, double mdot_F, double mdot_O) const
void linearize (const Eigen::VectorXd &x, const Eigen::VectorXd &u, double mdot_F, double mdot_O, Eigen::MatrixXd &A, Eigen::MatrixXd &B) const
EngineEstimate estimateEngine (double P_d_fuel, double P_d_ox) const
Reference buildReference (const NavState &nav, const Measurement &meas, const Command &cmd) const
Eigen::VectorXd buildState (const Measurement &meas) const
bool isStateSafe (const Eigen::VectorXd &x, CommandType cmd_type=CommandType::THRUST_DESIRED) const
DDPSolution solveDDP (const Eigen::VectorXd &x0, const Reference &ref, const Eigen::MatrixXd &u_init) const
double runningCost (const Eigen::VectorXd &x, const Eigen::VectorXd &u, const Reference &ref, int k, const Eigen::VectorXd &u_prev) const
Eigen::VectorXd enumerativeMPC (const Eigen::VectorXd &x0, const Reference &ref, int k) const
Eigen::VectorXd economicDecision (const Eigen::VectorXd &x, const Reference &ref, int k) const
Eigen::VectorXd filterAction (const Eigen::VectorXd &x, const Eigen::VectorXd &u_proposed, const Reference &ref, int k) const
bool isActionSafe (const Eigen::VectorXd &x, const Eigen::VectorXd &u, CommandType cmd_type, int num_steps=2) const
bool shouldCutoff (const NavState &nav) const
ActuationCommand computeActuation (const Eigen::VectorXd &u_relaxed) const

Private Attributes

Config config_
ControllerState state_
std::mutex state_mutex_
std::optional< Eigen::VectorXd > x_prev_
std::optional< Eigen::VectorXd > u_prev_applied_
std::optional< Eigen::MatrixXd > u_seq_prev_
int tick_ = 0

Detailed Description

Robust Hybrid Optimal Controller.

Implements the full mathematical framework from the paper: §4 Blowdown ullage dynamics (ideal-gas law, choked/subsonic flow) §6 Injector + chamber model (Cd·A·√(2ρΔP), chamber root-find) §7 Hard combustion constraints (MR, injector stiffness) §9 Robust min-max MPC §10 Enumerative robust MPC for binary valves §11 Open/close economic decision logic §12 Supervisory cutoff

  • DDP-based continuous relaxation (iLQR-style)

Definition at line 53 of file RobustDDPController.hpp.

Member Enumeration Documentation

◆ CommandType

Enumerator
THRUST_DESIRED 
ALTITUDE_GOAL 
PRESSURE_TARGET 

Definition at line 145 of file RobustDDPController.hpp.

Constructor & Destructor Documentation

◆ RobustDDPController()

fsw::control::RobustDDPController::RobustDDPController ( )

Definition at line 17 of file RobustDDPController.cpp.

References fsw::control::N_STATE, and state_.

◆ ~RobustDDPController()

fsw::control::RobustDDPController::~RobustDDPController ( )
default

Member Function Documentation

◆ buildReference()

◆ buildState()

◆ computeActuation()

◆ dynamicsStep()

◆ economicDecision()

◆ enumerativeMPC()

Eigen::VectorXd fsw::control::RobustDDPController::enumerativeMPC ( const Eigen::VectorXd & x0,
const Reference & ref,
int k ) const
private

◆ estimateEngine()

◆ filterAction()

Eigen::VectorXd fsw::control::RobustDDPController::filterAction ( const Eigen::VectorXd & x,
const Eigen::VectorXd & u_proposed,
const Reference & ref,
int k ) const
private

◆ getState()

RobustDDPController::ControllerState fsw::control::RobustDDPController::getState ( ) const

Definition at line 157 of file RobustDDPController.cpp.

References lock, state_, and state_mutex_.

◆ initialize()

bool fsw::control::RobustDDPController::initialize ( const Config & config)

Definition at line 26 of file RobustDDPController.cpp.

References config_, and reset().

Referenced by main().

◆ isActionSafe()

bool fsw::control::RobustDDPController::isActionSafe ( const Eigen::VectorXd & x,
const Eigen::VectorXd & u,
CommandType cmd_type,
int num_steps = 2 ) const
private

◆ isStateSafe()

bool fsw::control::RobustDDPController::isStateSafe ( const Eigen::VectorXd & x,
CommandType cmd_type = CommandType::THRUST_DESIRED ) const
private

◆ linearize()

void fsw::control::RobustDDPController::linearize ( const Eigen::VectorXd & x,
const Eigen::VectorXd & u,
double mdot_F,
double mdot_O,
Eigen::MatrixXd & A,
Eigen::MatrixXd & B ) const
private

Definition at line 311 of file RobustDDPController.cpp.

References dynamicsStep(), fsw::control::N_CONTROL, and fsw::control::N_STATE.

Referenced by solveDDP().

◆ reset()

void fsw::control::RobustDDPController::reset ( )

◆ runningCost()

◆ shouldCutoff()

bool fsw::control::RobustDDPController::shouldCutoff ( const NavState & nav) const
private

Definition at line 876 of file RobustDDPController.cpp.

References config_, and fsw::control::G0.

Referenced by step().

◆ solveDDP()

◆ step()

std::pair< RobustDDPController::ActuationCommand, RobustDDPController::Diagnostics > fsw::control::RobustDDPController::step ( const Measurement & meas,
const NavState & nav,
const Command & cmd )

Execute one control step.

Pipeline:

  1. Build state x from measurements
  2. Build reference (F_ref, MR_ref) over horizon
  3. Update robustness bounds
  4. Check supervisory cutoff (§12)
  5. Solve DDP or enumerative MPC (§10)
  6. Safety filter — reachable tube (§9.3)
  7. Actuation quantization + dwell

Definition at line 49 of file RobustDDPController.cpp.

References buildReference(), buildState(), computeActuation(), config_, fsw::control::RobustDDPController::DDPSolution::cost, fsw::control::RobustDDPController::Diagnostics::cost, fsw::control::RobustDDPController::Diagnostics::cutoff_active, fsw::control::RobustDDPController::ActuationCommand::duty_F, fsw::control::RobustDDPController::ActuationCommand::duty_O, dynamicsStep(), economicDecision(), enumerativeMPC(), estimateEngine(), fsw::control::RobustDDPController::EngineEstimate::F, fsw::control::RobustDDPController::Diagnostics::F_estimated, fsw::control::RobustDDPController::Diagnostics::F_ref, fsw::control::RobustDDPController::Reference::F_ref, filterAction(), fsw::control::IDX_P_D_F, fsw::control::IDX_P_D_O, fsw::control::RobustDDPController::DDPSolution::iterations, lock, fsw::control::RobustDDPController::EngineEstimate::MR, fsw::control::RobustDDPController::Diagnostics::MR_estimated, fsw::control::RobustDDPController::Diagnostics::MR_ref, fsw::control::RobustDDPController::Reference::MR_ref, fsw::control::N_CONTROL, fsw::control::RobustDDPController::Diagnostics::P_ch, fsw::control::RobustDDPController::EngineEstimate::P_ch, fsw::control::RobustDDPController::Command::P_fuel_target, PRESSURE_TARGET, runningCost(), fsw::control::RobustDDPController::Diagnostics::safety_filtered, shouldCutoff(), solveDDP(), fsw::control::RobustDDPController::Diagnostics::solver_iters, state_, state_mutex_, tick_, fsw::control::RobustDDPController::Reference::type, fsw::control::RobustDDPController::ActuationCommand::u_F_on, fsw::control::RobustDDPController::ActuationCommand::u_O_on, u_prev_applied_, fsw::control::RobustDDPController::DDPSolution::u_seq, u_seq_prev_, fsw::control::RobustDDPController::ActuationCommand::valid, and x_prev_.

Referenced by engine.pipeline.thermal.wall_conduction.WallModel::advance(), enumerativeMPC(), main(), and engine.pipeline.thermal.wall_conduction.WallModel::soak().

Member Data Documentation

◆ config_

◆ state_

ControllerState fsw::control::RobustDDPController::state_
private

◆ state_mutex_

std::mutex fsw::control::RobustDDPController::state_mutex_
mutableprivate

Definition at line 289 of file RobustDDPController.hpp.

Referenced by getState(), reset(), and step().

◆ tick_

int fsw::control::RobustDDPController::tick_ = 0
private

Definition at line 294 of file RobustDDPController.hpp.

Referenced by reset(), and step().

◆ u_prev_applied_

std::optional<Eigen::VectorXd> fsw::control::RobustDDPController::u_prev_applied_
private

Definition at line 292 of file RobustDDPController.hpp.

Referenced by enumerativeMPC(), filterAction(), reset(), and step().

◆ u_seq_prev_

std::optional<Eigen::MatrixXd> fsw::control::RobustDDPController::u_seq_prev_
private

Definition at line 293 of file RobustDDPController.hpp.

Referenced by reset(), and step().

◆ x_prev_

std::optional<Eigen::VectorXd> fsw::control::RobustDDPController::x_prev_
private

Definition at line 291 of file RobustDDPController.hpp.

Referenced by reset(), and step().


The documentation for this class was generated from the following files: