32 #include <pinocchio/algorithm/cholesky.hpp> 33 #include <pinocchio/algorithm/compute-all-terms.hpp> 34 #include <pinocchio/algorithm/joint-configuration.hpp> 35 #include <pinocchio/algorithm/rnea-derivatives.hpp> 36 #include <pinocchio/algorithm/rnea.hpp> 44 Eigen::VectorBlock<const Eigen::VectorXd>
q = x.head(num_positions_);
45 Eigen::VectorBlock<const Eigen::VectorXd>
v = x.tail(num_velocities_);
51 u_command_.noalias() = u_nle_ + u;
53 pinocchio_data_->Minv.setZero();
59 a_.noalias() = pinocchio_data_->Minv * u_command_;
61 du_command_dq_.noalias() = pinocchio_data_->Minv * pinocchio_data_->dtau_dq;
64 a_.noalias() = pinocchio_data_->Minv * u_nle_;
66 du_nle_dq_.noalias() = pinocchio_data_->Minv * pinocchio_data_->dtau_dq;
69 fx_.block(num_velocities_, 0, num_velocities_, num_velocities_).noalias() = du_nle_dq_ - du_command_dq_;
72 fu_.bottomRightCorner(num_velocities_, num_velocities_) = pinocchio_data_->Minv;
74 Eigen::Block<Eigen::MatrixXd> da_dx = fx_.block(num_velocities_, 0, num_velocities_, get_num_state_derivative());
75 Eigen::Block<Eigen::MatrixXd> da_du = fu_.block(num_velocities_, 0, num_velocities_, num_controls_);
82 Fx_.topRows(num_velocities_).setZero();
83 Fx_.bottomRows(num_velocities_).noalias() = dt_ * da_dx;
84 Fx_.topRightCorner(num_velocities_, num_velocities_).diagonal().array() += dt_;
87 Fx_.bottomRightCorner(num_velocities_, num_velocities_).diagonal().array() += 1.0;
89 Fu_.topRows(num_velocities_).setZero();
90 Fu_.bottomRows(num_velocities_).noalias() = dt_ * da_du;
95 case Integrator::SymplecticEuler:
97 a_.noalias() = pinocchio_data_->Minv * u_command_;
98 Eigen::VectorXd dx_v = dt_ * x.tail(num_velocities_) + dt_ * dt_ * a_;
100 Fx_.topRows(num_velocities_).noalias() = dt_ * dt_ * da_dx;
101 Fx_.bottomRows(num_velocities_).noalias() = dt_ * da_dx;
102 Fx_.topRightCorner(num_velocities_, num_velocities_).diagonal().array() += dt_;
105 Fx_.bottomRightCorner(num_velocities_, num_velocities_).diagonal().array() += 1.0;
107 Fu_.topRows(num_velocities_).noalias() = dt_ * dt_ * da_du;
108 Fu_.bottomRows(num_velocities_).noalias() = dt_ * da_du;
120 ComputeDerivatives(x, u);
155 ComputeDerivatives(x, u);
void computeAllTerms(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType > &v)
Mat & computeMinv(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< Mat > &Minv)
#define REGISTER_DYNAMICS_SOLVER_TYPE(TYPE, DERIV)
const DataTpl< Scalar, Options, JointCollectionTpl >::MatrixXs & decompose(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data)
void dIntegrateTransport(const LieGroupGenericTpl< LieGroupCollection > &lg, const Eigen::MatrixBase< Config_t > &q, const Eigen::MatrixBase< Tangent_t > &v, const Eigen::MatrixBase< JacobianIn_t > &J_in, const Eigen::MatrixBase< JacobianOut_t > &J_out, const ArgumentPosition arg)
void computeRNEADerivatives(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType1 > &v, const Eigen::MatrixBase< TangentVectorType2 > &a, const Eigen::MatrixBase< MatrixType1 > &rnea_partial_dq, const Eigen::MatrixBase< MatrixType2 > &rnea_partial_dv, const Eigen::MatrixBase< MatrixType3 > &rnea_partial_da)
void dIntegrate(const LieGroupGenericTpl< LieGroupCollection > &lg, const Eigen::MatrixBase< Config_t > &q, const Eigen::MatrixBase< Tangent_t > &v, const Eigen::MatrixBase< JacobianOut_t > &J, const ArgumentPosition arg, const AssignmentOperatorType op=SETTO)
Eigen::Matrix< T, NU, 1 > ControlVector
const DataTpl< Scalar, Options, JointCollectionTpl >::TangentVectorType & nonLinearEffects(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< ConfigVectorType > &q, const Eigen::MatrixBase< TangentVectorType > &v)
Eigen::Matrix< T, NX, 1 > StateVector