GCC Code Coverage Report


Directory: ./
File: include/crocoddyl/multibody/residuals/control-gravity.hxx
Date: 2025-05-13 10:30:51
Exec Total Coverage
Lines: 0 40 0.0%
Branches: 0 74 0.0%

Line Branch Exec Source
1 ///////////////////////////////////////////////////////////////////////////////
2 // BSD 3-Clause License
3 //
4 // Copyright (C) 2020-2025, LAAS-CNRS, University of Edinburgh
5 // Copyright note valid unless otherwise stated in individual files.
6 // All rights reserved.
7 ///////////////////////////////////////////////////////////////////////////////
8
9 namespace crocoddyl {
10
11 template <typename Scalar>
12 ResidualModelControlGravTpl<Scalar>::ResidualModelControlGravTpl(
13 std::shared_ptr<StateMultibody> state, const std::size_t nu)
14 : Base(state, state->get_nv(), nu, true, false),
15 pin_model_(*state->get_pinocchio()) {
16 if (nu_ == 0) {
17 throw_pretty("Invalid argument: "
18 << "it seems to be an autonomous system, if so, don't add "
19 "this residual function");
20 }
21 }
22
23 template <typename Scalar>
24 ResidualModelControlGravTpl<Scalar>::ResidualModelControlGravTpl(
25 std::shared_ptr<StateMultibody> state)
26 : Base(state, state->get_nv(), state->get_nv(), true, false),
27 pin_model_(*state->get_pinocchio()) {}
28
29 template <typename Scalar>
30 void ResidualModelControlGravTpl<Scalar>::calc(
31 const std::shared_ptr<ResidualDataAbstract> &data,
32 const Eigen::Ref<const VectorXs> &x, const Eigen::Ref<const VectorXs> &) {
33 Data *d = static_cast<Data *>(data.get());
34
35 const Eigen::VectorBlock<const Eigen::Ref<const VectorXs>, Eigen::Dynamic> q =
36 x.head(state_->get_nq());
37 data->r = d->actuation->tau -
38 pinocchio::computeGeneralizedGravity(pin_model_, d->pinocchio, q);
39 }
40
41 template <typename Scalar>
42 void ResidualModelControlGravTpl<Scalar>::calc(
43 const std::shared_ptr<ResidualDataAbstract> &data,
44 const Eigen::Ref<const VectorXs> &x) {
45 Data *d = static_cast<Data *>(data.get());
46
47 const Eigen::VectorBlock<const Eigen::Ref<const VectorXs>, Eigen::Dynamic> q =
48 x.head(state_->get_nq());
49 data->r = -pinocchio::computeGeneralizedGravity(pin_model_, d->pinocchio, q);
50 }
51
52 template <typename Scalar>
53 void ResidualModelControlGravTpl<Scalar>::calcDiff(
54 const std::shared_ptr<ResidualDataAbstract> &data,
55 const Eigen::Ref<const VectorXs> &x, const Eigen::Ref<const VectorXs> &) {
56 Data *d = static_cast<Data *>(data.get());
57
58 // Compute the derivatives of the residual residual
59 const Eigen::VectorBlock<const Eigen::Ref<const VectorXs>, Eigen::Dynamic> q =
60 x.head(state_->get_nq());
61 Eigen::Block<MatrixXs, Eigen::Dynamic, Eigen::Dynamic, true> Rq =
62 data->Rx.leftCols(state_->get_nv());
63 pinocchio::computeGeneralizedGravityDerivatives(pin_model_, d->pinocchio, q,
64 Rq);
65 Rq *= Scalar(-1);
66 data->Ru = d->actuation->dtau_du;
67 }
68
69 template <typename Scalar>
70 void ResidualModelControlGravTpl<Scalar>::calcDiff(
71 const std::shared_ptr<ResidualDataAbstract> &data,
72 const Eigen::Ref<const VectorXs> &x) {
73 Data *d = static_cast<Data *>(data.get());
74
75 // Compute the derivatives of the residual residual
76 const Eigen::VectorBlock<const Eigen::Ref<const VectorXs>, Eigen::Dynamic> q =
77 x.head(state_->get_nq());
78 Eigen::Block<MatrixXs, Eigen::Dynamic, Eigen::Dynamic, true> Rq =
79 data->Rx.leftCols(state_->get_nv());
80 pinocchio::computeGeneralizedGravityDerivatives(pin_model_, d->pinocchio, q,
81 Rq);
82 Rq *= Scalar(-1);
83 }
84
85 template <typename Scalar>
86 std::shared_ptr<ResidualDataAbstractTpl<Scalar> >
87 ResidualModelControlGravTpl<Scalar>::createData(
88 DataCollectorAbstract *const data) {
89 return std::allocate_shared<Data>(Eigen::aligned_allocator<Data>(), this,
90 data);
91 }
92
93 template <typename Scalar>
94 template <typename NewScalar>
95 ResidualModelControlGravTpl<NewScalar>
96 ResidualModelControlGravTpl<Scalar>::cast() const {
97 typedef ResidualModelControlGravTpl<NewScalar> ReturnType;
98 typedef StateMultibodyTpl<NewScalar> StateType;
99 ReturnType ret(
100 std::static_pointer_cast<StateType>(state_->template cast<NewScalar>()),
101 nu_);
102 return ret;
103 }
104
105 template <typename Scalar>
106 void ResidualModelControlGravTpl<Scalar>::print(std::ostream &os) const {
107 os << "ResidualModelControlGrav";
108 }
109
110 } // namespace crocoddyl
111