Program Listing for File dynamics_params.h¶
↰ Return to documentation for file (dynamics/dynamics_params.h)
#pragma once
#include "lupnt/core/constants.h"
#include "lupnt/core/definitions.h"
#include "lupnt/dynamics/dynamics.h"
namespace lupnt {
// ****************************************************************************
// Dynamics Parameters Interface
// ****************************************************************************
enum ParamsEstOption {
TrueFixed, // Use the true value
Estimated, // Estimate the value
Consider // Consider the value uncertainty
};
extern const std::map<ParamsEstOption, std::string> params_est_option2string;
extern const std::map<std::string, ParamsEstOption> string2params_est_option;
typedef std::map<std::string, std::pair<ParamsEstOption, VecX>> DynamicsParamWithOptionMap;
// class DynamicsParamWithOption {
// private:
// DynamicsParamWithOptionMap params_;
// public:
// /**
// * @brief Construct a new Dynamics Param With Option object, Set option tp TrueFixed
// *
// * @param dyn
// */
// DynamicsParamWithOption() {} // Empty constructor
// DynamicsParamWithOption(DynamicsParam params) {
// for (auto const& [key, val] : params) {
// params_[key] = std::make_pair(ParamsEstOption::TrueFixed, val); // Set default to
// TrueFixed
// }
// std::cout << "[DynamicsParamWithOption] Parameters are set to TrueFixed by default"
// << std::endl;
// }
// DynamicsParamWithOptionMap GetMap() { return params_; }
// void AddParam(std::string key, ParamsEstOption option, VecX value) {
// params_[key] = std::make_pair(option, value);
// }
// void UpdateParamValue(std::string key, VecX value) {
// if (params_.find(key) != params_.end()) {
// params_[key].second = value;
// }
// }
// void SetOption(std::string key, ParamsEstOption option) {
// if (params_.find(key) != params_.end()) {
// params_[key].first = option;
// }
// }
// void PrintKeys() {
// for (auto const& [key, val] : params_) {
// std::cout << key << ", ";
// }
// std::cout << std::endl;
// }
// DynamicsParam GetDynamicsParam() {
// DynamicsParam params;
// for (auto const& [key, val] : params_) {
// params[key] = val.second;
// }
// return params;
// }
// };
// /**
// * @brief Dynamics with parameters
// *
// */
// template <int N> class DynamicsWithParams : public Dynamics {
// protected:
// bool use_params_ = false;
// Ptr<Dynamics> dynamics_;
// DynamicsParamWithOption params_;
// public:
// DynamicsWithParams(Ptr<Dynamics> dyn) {
// use_params_ = false;
// dynamics_ = dyn;
// }
// DynamicsWithParams(Ptr<Dynamics> dyn, DynamicsParam params) {
// dynamics_ = dyn;
// use_params_ = true;
// params_ = DynamicsParamWithOption(params);
// }
// DynamicsWithParams(Ptr<Dynamics> dyn, DynamicsParamWithOption params) {
// dynamics_ = dyn;
// use_params_ = true;
// params_ = params;
// }
// DynamicsWithParams(Ptr<Dynamics> dyn, DynamicsParam params, ParamsEstOption option)
// {
// dynamics_ = dyn;
// use_params_ = true;
// params_ = DynamicsParamWithOption(params);
// for (auto const& [key, val] : params) {
// params_.SetOption(key, option); // set all to the same option
// }
// }
// void SetParamEstOption(std::string key, ParamsEstOption option) {
// params_.SetOption(key, option);
// }
// Dynamics* GetDynamics() { return dynamics_.get(); }
// DynamicsParam GetParams() { return params_.GetDynamicsParam(); }
// int GetTotalParamSize() {
// int total_size = 0;
// for (auto const& [key, val] : params_.GetMap()) {
// total_size += val.second.size();
// }
// return total_size;
// }
// int GetEstParamSize() {
// int total_size = 0;
// for (auto const& [key, val] : params_.GetMap()) {
// if (val.first == ParamsEstOption::Estimated) {
// total_size += val.second.size();
// }
// }
// return total_size;
// }
// int GetConsiderParamSize() {
// int total_size = 0;
// for (auto const& [key, val] : params_.GetMap()) {
// if (val.first == ParamsEstOption::Consider) {
// total_size += val.second.size();
// }
// }
// return total_size;
// }
// void UpdateParamValues(DynamicsParam params) {
// for (auto const& [key, val] : params) {
// params_.UpdateParamValue(key, val);
// }
// }
// VecX GetEstConsiderParamVector(DynamicsParam dyn_param) {
// VecX param_vec(GetEstParamSize() + GetConsiderParamSize());
// int idx = 0;
// for (auto const& [key, val] : params_.GetMap()) {
// if (val.first == ParamsEstOption::Estimated) {
// param_vec.segment(idx, val.second.size()) = dyn_param[key];
// idx += val.second.size();
// } else if (val.first == ParamsEstOption::Consider) {
// param_vec.segment(idx, val.second.size()) = dyn_param[key];
// idx += val.second.size();
// }
// }
// return param_vec;
// }
// State Propagate(const State& state, Real t0, Real tf, MatXd* stm) override {
// // warning
// std::cout << "Warning: Propagate does not consider parameters in stm when using "
// "DynamicsWithParams"
// << std::endl;
// dynamics_->SetParams(params_.GetDynamicsParam());
// return dynamics_->Propagate(state, t0, tf, stm);
// }
// VecX Propagate(const VecX& x0, Real t0, Real tf) override;
// VecX Propagate(const VecX& x0, Real t0, Real tf, MatXd* stm) override;
// };
} // namespace lupnt