Program Listing for File dynamics_params.cc

Return to documentation for file (dynamics/dynamics_params.cc)

// /**
//  * @file dynamics_params.cc
//  * @author your name (you@domain.com)
//  * @brief
//  * @version 0.1
//  * @date 2024-12-28
//  *
//  * @copyright Copyright (c) 2024
//  *
//  */

// #include "lupnt/dynamics/dynamics_params.h"

// namespace lupnt {

//   const std::map<ParamsEstOption, std::string> params_est_option2string
//       = {{ParamsEstOption::TrueFixed, "TrueFixed"},
//          {ParamsEstOption::Estimated, "Estimated"},
//          {ParamsEstOption::Consider, "Consider"}};

//   const std::map<std::string, ParamsEstOption> string2params_est_option
//       = {{"TrueFixed", ParamsEstOption::TrueFixed},
//          {"Estimated", ParamsEstOption::Estimated},
//          {"Consider", ParamsEstOption::Consider}};

//   /**
//    * @brief
//    *
//    * @param x0  state + parameters (est or consider)
//    * @param t0  initial time
//    * @param tf  final time
//    * @param stm  state transition matrix
//    * @return VecX
//    */
//   VecX DynamicsWithParams::Propagate(const VecX& x0, Real t0, Real tf, MatXd* stm) {
//     // state size
//     int n = x0.size();
//     int n_param_est = GetEstParamSize();
//     int n_param_consider = GetConsiderParamSize();
//     int n_param = n_param_est + n_param_consider;
//     int state_size = n - n_param;

//     // To compute the jacobians, x_with_params need to capture all estimated and considered
//     // parameters
//     auto func = [=, this](const VecX& x_with_est_params) {
//       VecX x = x_with_est_params.head(state_size);

//       if (use_params_) {
//         // extract the parameters from x_with_est_params
//         dynamics_->SetParams(params_.GetDynamicsParam());
//       }
//       VecX xf = dynamics_->Propagate(x, t0, tf, nullptr);  // Do not compute stm here

//       if (use_params_) {
//         DynamicsParam new_params
//             = dynamics_->GetParams();   // Get the updated parameters (often its constant)
//         UpdateParamValues(new_params);  // Update the parameters in the class
//         VecX new_params_vec
//             = GetEstConsiderParamVector(new_params);  // Get the updated parameters in vector
//             form
//         xf.conservativeResize(
//             n + new_params_vec.size());  // Resize the state vector to include the parameters
//         xf.tail(new_params_vec.size()) = new_params_vec;
//       }
//       return xf;
//     };

//     VecX x0_tmp = x0.cast<double>();
//     VecX xf;
//     if (stm != nullptr) {
//       *stm = jacobian(func, wrt(x0_tmp), at(x0_tmp), xf);
//     } else {
//       xf = func(x0_tmp);
//     }

//     return xf;
//   };

// }  // namespace lupnt