44 const ModelTpl<Scalar, Options> &model, DataTpl<Scalar, Options> &data,
45 const Eigen::MatrixBase<ConfigType> &q, Eigen::MatrixBase<VelType>
const &v,
46 const Eigen::MatrixBase<MatrixType> &actMatrix,
47 const pinocchio::container::aligned_vector<
48 RigidConstraintModelTpl<Scalar, Options>> &constraint_models,
49 pinocchio::container::aligned_vector<
50 RigidConstraintDataTpl<Scalar, Options>> &constraint_datas,
51 const Eigen::MatrixBase<OutType> &res_) {
52 namespace pin = pinocchio;
53 using MatrixXs = Eigen::Matrix<Scalar, -1, -1>;
54 assert(constraint_models.size() == constraint_datas.size() &&
55 "constraint_models and constraint_datas do not have the same size");
57 OutType &res = res_.const_cast_derived();
59 const long nu = actMatrix.cols();
60 const long nv = model.nv;
61 assert(nv == actMatrix.rows() &&
"Actuation matrix dimension inconsistent.");
63 pin::computeAllTerms(model, data, q, v);
64 const auto &nle = data.nle;
69 assert(res.size() == nu + d);
70 MatrixXs work(nv, nu + d);
72 work.leftCols(nu) = actMatrix;
73 auto JacT = work.rightCols(d);
74 pin::getConstraintsJacobian(model, data, constraint_models, constraint_datas,
78 Eigen::ColPivHouseholderQR<Eigen::Ref<MatrixXs>> qr(work);
pinocchio::ModelTpl< Scalar, Options > PinModel
static constexpr int Options
PINOCCHIO_ALIGNED_STD_VECTOR(RCM) RCMVector
pinocchio::DataTpl< Scalar, Options > PinData
pinocchio::RigidConstraintDataTpl< Scalar, Options > RCD
void underactuatedConstrainedInverseDynamics(const ModelTpl< Scalar, Options > &model, DataTpl< Scalar, Options > &data, const Eigen::MatrixBase< ConfigType > &q, Eigen::MatrixBase< VelType > const &v, const Eigen::MatrixBase< MatrixType > &actMatrix, const pinocchio::container::aligned_vector< RigidConstraintModelTpl< Scalar, Options > > &constraint_models, pinocchio::container::aligned_vector< RigidConstraintDataTpl< Scalar, Options > > &constraint_datas, const Eigen::MatrixBase< OutType > &res_)