13 template <
class RBDDynamics>
17 typedef typename RBDDynamics::SCALAR
SCALAR;
32 linearSystem_(linearSystem),
33 infiniteHorizonLQR_(),
34 stateSetpoint_(state_vector_t::Zero()),
35 id_torques_(control_vector_t::Zero()),
36 K_(feedback_matrix_t::Zero())
41 : fdSystem_(arg.fdSystem_->
clone()),
42 linearSystem_(arg.linearSystem_->
clone()),
43 infiniteHorizonLQR_(),
44 stateSetpoint_(arg.stateSetpoint_),
45 id_torques_(arg.id_torques_),
62 controlAction = id_torques_ - K_ * (state - stateSetpoint_);
66 const feedback_matrix_t&
getK() {
return K_; }
68 const state_matrix_t& Q_stab,
69 const control_matrix_t& R_stab,
72 computeIDTorques(id_torques_, stateSetpoint);
75 state_matrix_t A_setpoint = linearSystem_->getDerivativeState(stateSetpoint, id_torques_);
76 state_control_matrix_t B_setpoint = linearSystem_->getDerivativeControl(stateSetpoint, id_torques_);
78 bool success = infiniteHorizonLQR_.
compute(Q_stab, R_stab, A_setpoint, B_setpoint, K,
false,
true);
81 stateSetpoint_ = stateSetpoint;
92 const state_matrix_t& Q_stab,
93 const control_matrix_t& R_stab)
95 feedback_matrix_t K_temp = feedback_matrix_t::Zero();
107 linearSystem_ = system;
114 void computeIDTorques(control_vector_t& id_torques,
115 const state_vector_t& stateSetpoint,
116 const JointAcceleration_t& qdd = JointAcceleration_t::Zero())
118 typename RBDDynamics::ExtLinkForces_t extlinkforce(Eigen::Matrix<SCALAR, 6, 1>::Zero());
120 fdSystem_->dynamics().FixBaseID(stateSetpoint, qdd, extlinkforce, id_torques);
124 std::shared_ptr<ct::rbd::FixBaseFDSystem<RBDDynamics>> fdSystem_;
125 std::shared_ptr<ct::core::LinearSystem<2 * (RBDDynamics::NJOINTS), RBDDynamics::NJOINTS>> linearSystem_;
129 state_vector_t stateSetpoint_;
130 control_vector_t id_torques_;
131 feedback_matrix_t K_;
virtual ~InfiniteHorizonLQRwithInverseDynamics()
Definition: InfiniteHorizonLQRwithInverseDynamics.h:51
RBDDynamics::state_vector_t state_vector_t
Definition: InfiniteHorizonLQRwithInverseDynamics.h:19
A fix base rigid body system that uses forward dynamics.
Definition: FixBaseFDSystem.h:30
InfiniteHorizonLQRwithInverseDynamics(std::shared_ptr< ct::rbd::FixBaseFDSystem< RBDDynamics >> system, std::shared_ptr< ct::core::LinearSystem< 2 *(RBDDynamics::NJOINTS), RBDDynamics::NJOINTS >> linearSystem)
Definition: InfiniteHorizonLQRwithInverseDynamics.h:29
core::StateMatrix< RBDDynamics::NSTATE, SCALAR > state_matrix_t
Definition: InfiniteHorizonLQRwithInverseDynamics.h:22
bool designInfiniteHorizonLQR(const state_vector_t &stateSetpoint, const state_matrix_t &Q_stab, const control_matrix_t &R_stab, feedback_matrix_t &K)
Definition: InfiniteHorizonLQRwithInverseDynamics.h:67
InfiniteHorizonLQRwithInverseDynamics()
Definition: InfiniteHorizonLQRwithInverseDynamics.h:28
const state_vector_t & getStateSetpoint() const
Definition: InfiniteHorizonLQRwithInverseDynamics.h:102
RBDDynamics::JointAcceleration_t JointAcceleration_t
Definition: InfiniteHorizonLQRwithInverseDynamics.h:20
RBDDynamics::SCALAR SCALAR
Definition: InfiniteHorizonLQRwithInverseDynamics.h:17
bool designInfiniteHorizonLQR(const state_vector_t &stateSetpoint, const state_matrix_t &Q_stab, const control_matrix_t &R_stab)
Definition: InfiniteHorizonLQRwithInverseDynamics.h:91
const feedback_matrix_t & getK()
Definition: InfiniteHorizonLQRwithInverseDynamics.h:66
core::FeedbackMatrix< RBDDynamics::NSTATE, RBDDynamics::NJOINTS, SCALAR > feedback_matrix_t
Definition: InfiniteHorizonLQRwithInverseDynamics.h:25
InfiniteHorizonLQRwithInverseDynamics(const InfiniteHorizonLQRwithInverseDynamics &arg)
Definition: InfiniteHorizonLQRwithInverseDynamics.h:40
bool compute(const state_matrix_t &Q, const control_matrix_t &R, const state_matrix_t &A, const control_gain_matrix_t &B, control_feedback_t &K, bool RisDiagonal=false, bool solveRiccatiIteratively=false)
RBDDynamics::control_vector_t control_vector_t
Definition: InfiniteHorizonLQRwithInverseDynamics.h:18
void setLinearSystem(std::shared_ptr< ct::core::LinearSystem< 2 *(RBDDynamics::NJOINTS), RBDDynamics::NJOINTS >> system)
Definition: InfiniteHorizonLQRwithInverseDynamics.h:104
virtual InfiniteHorizonLQRwithInverseDynamics * clone() const override
Definition: InfiniteHorizonLQRwithInverseDynamics.h:52
core::StateMatrix< RBDDynamics::NJOINTS, SCALAR > control_matrix_t
Definition: InfiniteHorizonLQRwithInverseDynamics.h:23
Definition: InfiniteHorizonLQRwithInverseDynamics.h:14
const control_vector_t & getIDTorques() const
Definition: InfiniteHorizonLQRwithInverseDynamics.h:101
virtual void computeControl(const ct::core::StateVector< RBDDynamics::NSTATE, SCALAR > &state, const ct::core::Time &t, ct::core::ControlVector< RBDDynamics::NJOINTS, SCALAR > &controlAction) override
Definition: InfiniteHorizonLQRwithInverseDynamics.h:58
void setNonlinearSystem(std::shared_ptr< ct::rbd::FixBaseFDSystem< RBDDynamics >> system)
Definition: InfiniteHorizonLQRwithInverseDynamics.h:103
core::StateControlMatrix< RBDDynamics::NSTATE, RBDDynamics::NJOINTS, SCALAR > state_control_matrix_t
Definition: InfiniteHorizonLQRwithInverseDynamics.h:24