GCC Code Coverage Report


Directory: ./
File: include/crocoddyl/multibody/contacts/contact-1d.hxx
Date: 2025-03-26 19:23:43
Exec Total Coverage
Lines: 127 157 80.9%
Branches: 242 525 46.1%

Line Branch Exec Source
1 ///////////////////////////////////////////////////////////////////////////////
2 // BSD 3-Clause License
3 //
4 // Copyright (C) 2020-2025, LAAS-CNRS, University of Edinburgh,
5 // Heriot-Watt University
6 // Copyright note valid unless otherwise stated in individual files.
7 // All rights reserved.
8 ///////////////////////////////////////////////////////////////////////////////
9
10 namespace crocoddyl {
11
12 template <typename Scalar>
13 103 ContactModel1DTpl<Scalar>::ContactModel1DTpl(
14 std::shared_ptr<StateMultibody> state, const pinocchio::FrameIndex id,
15 const Scalar xref, const pinocchio::ReferenceFrame type,
16 const Matrix3s& rotation, const std::size_t nu, const Vector2s& gains)
17
3/6
✓ Branch 2 taken 103 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 103 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 103 times.
✗ Branch 10 not taken.
103 : Base(state, type, 1, nu), xref_(xref), Raxis_(rotation), gains_(gains) {
18 103 id_ = id;
19 103 }
20
21 template <typename Scalar>
22 3 ContactModel1DTpl<Scalar>::ContactModel1DTpl(
23 std::shared_ptr<StateMultibody> state, const pinocchio::FrameIndex id,
24 const Scalar xref, const pinocchio::ReferenceFrame type,
25 const Vector2s& gains)
26
3/6
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 3 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 3 times.
✗ Branch 10 not taken.
3 : Base(state, type, 1), xref_(xref), gains_(gains) {
27 3 id_ = id;
28
2/4
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
3 Raxis_ = Matrix3s::Identity();
29 3 }
30
31 #pragma GCC diagnostic push // TODO: Remove once the deprecated FrameXX has
32 // been removed in a future release
33 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
34
35 template <typename Scalar>
36 ContactModel1DTpl<Scalar>::ContactModel1DTpl(
37 std::shared_ptr<StateMultibody> state, const pinocchio::FrameIndex id,
38 const Scalar xref, const std::size_t nu, const Vector2s& gains)
39 : Base(state, pinocchio::ReferenceFrame::LOCAL, 1, nu),
40 xref_(xref),
41 gains_(gains) {
42 id_ = id;
43 Raxis_ = Matrix3s::Identity();
44 std::cerr << "Deprecated: Use constructor that passes the type of contact, "
45 "this assumes is pinocchio::LOCAL."
46 << std::endl;
47 }
48
49 template <typename Scalar>
50 ContactModel1DTpl<Scalar>::ContactModel1DTpl(
51 std::shared_ptr<StateMultibody> state, const pinocchio::FrameIndex id,
52 const Scalar xref, const Vector2s& gains)
53 : Base(state, pinocchio::ReferenceFrame::LOCAL, 1),
54 xref_(xref),
55 gains_(gains) {
56 id_ = id;
57 Raxis_ = Matrix3s::Identity();
58 std::cerr << "Deprecated: Use constructor that passes the type of contact, "
59 "this assumes is pinocchio::LOCAL."
60 << std::endl;
61 }
62
63 #pragma GCC diagnostic pop
64
65 template <typename Scalar>
66 687 void ContactModel1DTpl<Scalar>::calc(
67 const std::shared_ptr<ContactDataAbstract>& data,
68 const Eigen::Ref<const VectorXs>&) {
69 687 Data* d = static_cast<Data*>(data.get());
70
2/4
✓ Branch 2 taken 687 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 687 times.
✗ Branch 7 not taken.
687 pinocchio::updateFramePlacement(*state_->get_pinocchio().get(), *d->pinocchio,
71 id_);
72
2/4
✓ Branch 1 taken 687 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 687 times.
✗ Branch 6 not taken.
687 pinocchio::getFrameJacobian(*state_->get_pinocchio().get(), *d->pinocchio,
73 687 id_, pinocchio::LOCAL, d->fJf);
74
3/6
✓ Branch 1 taken 687 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 687 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 687 times.
✗ Branch 9 not taken.
687 d->v = pinocchio::getFrameVelocity(*state_->get_pinocchio().get(),
75 687 *d->pinocchio, id_);
76
77
1/2
✓ Branch 1 taken 687 times.
✗ Branch 2 not taken.
687 d->a0_local =
78 pinocchio::getFrameClassicalAcceleration(
79
1/2
✓ Branch 1 taken 687 times.
✗ Branch 2 not taken.
687 *state_->get_pinocchio().get(), *d->pinocchio, id_, pinocchio::LOCAL)
80
2/4
✓ Branch 2 taken 687 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 687 times.
✗ Branch 6 not taken.
1374 .linear();
81
82
2/4
✓ Branch 2 taken 687 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 687 times.
✗ Branch 6 not taken.
687 const Eigen::Ref<const Matrix3s> oRf = d->pinocchio->oMf[id_].rotation();
83
3/4
✓ Branch 1 taken 687 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 9 times.
✓ Branch 4 taken 678 times.
687 if (gains_[0] != Scalar(0.)) {
84
5/10
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 9 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 9 times.
✗ Branch 15 not taken.
18 d->dp = d->pinocchio->oMf[id_].translation() -
85
1/2
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
9 (xref_ * Raxis_ * Vector3s::UnitZ());
86
4/8
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 9 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
9 d->dp_local.noalias() = oRf.transpose() * d->dp;
87
3/6
✓ Branch 1 taken 9 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 9 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 9 times.
✗ Branch 8 not taken.
9 d->a0_local += gains_[0] * d->dp_local;
88 }
89
2/4
✓ Branch 1 taken 687 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 687 times.
✗ Branch 4 not taken.
687 if (gains_[1] != Scalar(0.)) {
90
4/8
✓ Branch 1 taken 687 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 687 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 687 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 687 times.
✗ Branch 11 not taken.
687 d->a0_local += gains_[1] * d->v.linear();
91 }
92
2/3
✓ Branch 0 taken 237 times.
✓ Branch 1 taken 450 times.
✗ Branch 2 not taken.
687 switch (type_) {
93 237 case pinocchio::ReferenceFrame::LOCAL:
94
5/10
✓ Branch 1 taken 237 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 237 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 237 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 237 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 237 times.
✗ Branch 14 not taken.
237 d->Jc.row(0) = (Raxis_ * d->fJf.template topRows<3>()).row(2);
95
3/6
✓ Branch 1 taken 237 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 237 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 237 times.
✗ Branch 8 not taken.
237 d->a0[0] = (Raxis_ * d->a0_local)[2];
96 237 break;
97 450 case pinocchio::ReferenceFrame::WORLD:
98 case pinocchio::ReferenceFrame::LOCAL_WORLD_ALIGNED:
99
6/12
✓ Branch 1 taken 450 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 450 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 450 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 450 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 450 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 450 times.
✗ Branch 17 not taken.
450 d->Jc.row(0) = (Raxis_ * oRf * d->fJf.template topRows<3>()).row(2);
100
4/8
✓ Branch 1 taken 450 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 450 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 450 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 450 times.
✗ Branch 11 not taken.
450 d->a0[0] = (Raxis_ * oRf * d->a0_local)[2];
101 450 break;
102 }
103 687 }
104
105 template <typename Scalar>
106 45 void ContactModel1DTpl<Scalar>::calcDiff(
107 const std::shared_ptr<ContactDataAbstract>& data,
108 const Eigen::Ref<const VectorXs>&) {
109 45 Data* d = static_cast<Data*>(data.get());
110 #if PINOCCHIO_VERSION_AT_LEAST(3, 0, 0)
111 45 const pinocchio::JointIndex joint =
112
1/2
✓ Branch 2 taken 45 times.
✗ Branch 3 not taken.
45 state_->get_pinocchio()->frames[d->frame].parentJoint;
113 #else
114 const pinocchio::JointIndex joint =
115 state_->get_pinocchio()->frames[d->frame].parent;
116 #endif
117
1/2
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
45 pinocchio::getJointAccelerationDerivatives(
118
1/2
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
45 *state_->get_pinocchio().get(), *d->pinocchio, joint, pinocchio::LOCAL,
119 45 d->v_partial_dq, d->a_partial_dq, d->a_partial_dv, d->a_partial_da);
120
1/2
✓ Branch 2 taken 45 times.
✗ Branch 3 not taken.
45 const std::size_t nv = state_->get_nv();
121
2/4
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
45 pinocchio::skew(d->v.linear(), d->vv_skew);
122
2/4
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
45 pinocchio::skew(d->v.angular(), d->vw_skew);
123
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
45 d->fXjdv_dq.noalias() = d->fXj * d->v_partial_dq;
124
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
45 d->fXjda_dq.noalias() = d->fXj * d->a_partial_dq;
125
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
45 d->fXjda_dv.noalias() = d->fXj * d->a_partial_dv;
126
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
45 d->da0_local_dx.leftCols(nv) = d->fXjda_dq.template topRows<3>();
127
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
45 d->da0_local_dx.leftCols(nv).noalias() +=
128
2/4
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
45 d->vw_skew * d->fXjdv_dq.template topRows<3>();
129
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
45 d->da0_local_dx.leftCols(nv).noalias() -=
130
2/4
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
45 d->vv_skew * d->fXjdv_dq.template bottomRows<3>();
131
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
45 d->da0_local_dx.rightCols(nv) = d->fXjda_dv.template topRows<3>();
132
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
45 d->da0_local_dx.rightCols(nv).noalias() +=
133
2/4
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
45 d->vw_skew * d->fJf.template topRows<3>();
134
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
45 d->da0_local_dx.rightCols(nv).noalias() -=
135
2/4
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
45 d->vv_skew * d->fJf.template bottomRows<3>();
136
2/4
✓ Branch 2 taken 45 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 45 times.
✗ Branch 6 not taken.
45 const Eigen::Ref<const Matrix3s> oRf = d->pinocchio->oMf[id_].rotation();
137
138
3/4
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
✓ Branch 4 taken 42 times.
45 if (gains_[0] != Scalar(0.)) {
139
1/2
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
3 pinocchio::skew(d->dp_local, d->dp_skew);
140
4/8
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 3 times.
✗ Branch 11 not taken.
3 d->da0_local_dx.leftCols(nv).noalias() +=
141
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 gains_[0] * d->dp_skew * d->fJf.template bottomRows<3>();
142
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
3 d->da0_local_dx.leftCols(nv).noalias() +=
143
3/6
✓ Branch 1 taken 3 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 3 times.
✗ Branch 8 not taken.
6 gains_[0] * d->fJf.template topRows<3>();
144 }
145
2/4
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 45 times.
✗ Branch 4 not taken.
45 if (gains_[1] != Scalar(0.)) {
146
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
45 d->da0_local_dx.leftCols(nv).noalias() +=
147
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
45 gains_[1] * d->fXjdv_dq.template topRows<3>();
148
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
45 d->da0_local_dx.rightCols(nv).noalias() +=
149
3/6
✓ Branch 1 taken 45 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 45 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 45 times.
✗ Branch 8 not taken.
90 gains_[1] * d->fJf.template topRows<3>();
150 }
151
2/3
✓ Branch 0 taken 23 times.
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
45 switch (type_) {
152 23 case pinocchio::ReferenceFrame::LOCAL:
153
4/8
✓ Branch 1 taken 23 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 23 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 23 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 23 times.
✗ Branch 11 not taken.
23 d->da0_dx.row(0) = (Raxis_ * d->da0_local_dx).row(2);
154 23 break;
155 22 case pinocchio::ReferenceFrame::WORLD:
156 case pinocchio::ReferenceFrame::LOCAL_WORLD_ALIGNED:
157 // Recalculate the constrained accelerations after imposing contact
158 // constraints. This is necessary for the forward-dynamics case.
159
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
22 d->a0_local = pinocchio::getFrameClassicalAcceleration(
160
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
22 *state_->get_pinocchio().get(), *d->pinocchio, id_,
161 pinocchio::LOCAL)
162
2/4
✓ Branch 2 taken 22 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 22 times.
✗ Branch 6 not taken.
44 .linear();
163
3/4
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 20 times.
22 if (gains_[0] != Scalar(0.)) {
164
3/6
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
2 d->a0_local += gains_[0] * d->dp_local;
165 }
166
2/4
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 22 times.
✗ Branch 4 not taken.
22 if (gains_[1] != Scalar(0.)) {
167
4/8
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 22 times.
✗ Branch 11 not taken.
22 d->a0_local += gains_[1] * d->v.linear();
168 }
169
4/8
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 22 times.
✗ Branch 11 not taken.
22 d->a0[0] = (Raxis_ * oRf * d->a0_local)[2];
170
171
3/6
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22 times.
✗ Branch 8 not taken.
22 pinocchio::skew((Raxis_ * oRf * d->a0_local).template head<3>(),
172
1/2
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
22 d->a0_skew);
173
4/8
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 22 times.
✗ Branch 11 not taken.
22 d->a0_world_skew.noalias() = d->a0_skew * Raxis_ * oRf;
174
5/10
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 22 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 22 times.
✗ Branch 14 not taken.
22 d->da0_dx.row(0) = (Raxis_ * oRf * d->da0_local_dx).row(2);
175
3/6
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22 times.
✗ Branch 8 not taken.
22 d->da0_dx.leftCols(nv).row(0) -=
176
3/6
✓ Branch 1 taken 22 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 22 times.
✗ Branch 8 not taken.
22 (d->a0_world_skew * d->fJf.template bottomRows<3>()).row(2);
177 22 break;
178 }
179 45 }
180
181 template <typename Scalar>
182 20 void ContactModel1DTpl<Scalar>::updateForce(
183 const std::shared_ptr<ContactDataAbstract>& data, const VectorXs& force) {
184
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 20 times.
20 if (force.size() != 1) {
185 throw_pretty(
186 "Invalid argument: " << "lambda has wrong dimension (it should be 1)");
187 }
188 20 Data* d = static_cast<Data*>(data.get());
189
2/4
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 20 times.
✗ Branch 5 not taken.
20 const Eigen::Ref<const Matrix3s> R = d->jMf.rotation();
190
3/6
✓ Branch 1 taken 20 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 20 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 20 times.
✗ Branch 9 not taken.
20 data->f.linear()[2] = force[0];
191
3/6
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 20 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 20 times.
✗ Branch 9 not taken.
20 data->f.linear().template head<2>().setZero();
192
2/4
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 20 times.
✗ Branch 6 not taken.
20 data->f.angular().setZero();
193
2/3
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
20 switch (type_) {
194 8 case pinocchio::ReferenceFrame::LOCAL:
195
7/14
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 8 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 8 times.
✗ Branch 14 not taken.
✓ Branch 17 taken 8 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 8 times.
✗ Branch 21 not taken.
8 data->fext.linear() = (R * Raxis_.transpose()).col(2) * force[0];
196
5/10
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 8 times.
✗ Branch 9 not taken.
✓ Branch 12 taken 8 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 8 times.
✗ Branch 16 not taken.
8 data->fext.angular() = d->jMf.translation().cross(data->fext.linear());
197
1/2
✓ Branch 2 taken 8 times.
✗ Branch 3 not taken.
8 data->dtau_dq.setZero();
198 8 break;
199 12 case pinocchio::ReferenceFrame::WORLD:
200 case pinocchio::ReferenceFrame::LOCAL_WORLD_ALIGNED:
201
2/4
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
12 const Eigen::Ref<const Matrix3s> oRf = d->pinocchio->oMf[id_].rotation();
202
4/8
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 12 times.
✗ Branch 11 not taken.
12 d->f_local.linear().noalias() =
203
5/10
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 12 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 12 times.
✗ Branch 14 not taken.
12 (oRf.transpose() * Raxis_.transpose()).col(2) * force[0];
204
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 d->f_local.angular().setZero();
205
2/4
✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 12 times.
✗ Branch 7 not taken.
12 data->fext = data->jMf.act(d->f_local);
206
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 pinocchio::skew(d->f_local.linear(), d->f_skew);
207
4/8
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 12 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 12 times.
✗ Branch 11 not taken.
12 d->fJf_df.noalias() = d->f_skew * d->fJf.template bottomRows<3>();
208
4/8
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 12 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 12 times.
✗ Branch 12 not taken.
12 data->dtau_dq.noalias() =
209
2/4
✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
12 -d->fJf.template topRows<3>().transpose() * d->fJf_df;
210 12 break;
211 }
212 20 }
213
214 template <typename Scalar>
215 std::shared_ptr<ContactDataAbstractTpl<Scalar> >
216 741 ContactModel1DTpl<Scalar>::createData(pinocchio::DataTpl<Scalar>* const data) {
217 return std::allocate_shared<Data>(Eigen::aligned_allocator<Data>(), this,
218
1/2
✓ Branch 2 taken 741 times.
✗ Branch 3 not taken.
741 data);
219 }
220
221 template <typename Scalar>
222 template <typename NewScalar>
223 ContactModel1DTpl<NewScalar> ContactModel1DTpl<Scalar>::cast() const {
224 typedef ContactModel1DTpl<NewScalar> ReturnType;
225 typedef StateMultibodyTpl<NewScalar> StateType;
226 ReturnType ret(
227 std::make_shared<StateType>(state_->template cast<NewScalar>()), id_,
228 scalar_cast<NewScalar>(xref_), type_, Raxis_.template cast<NewScalar>(),
229 nu_, gains_.template cast<NewScalar>());
230 return ret;
231 }
232
233 template <typename Scalar>
234 15 void ContactModel1DTpl<Scalar>::print(std::ostream& os) const {
235 15 os << "ContactModel1D {frame=" << state_->get_pinocchio()->frames[id_].name
236
4/8
✓ Branch 6 taken 15 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 15 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 15 times.
✗ Branch 13 not taken.
✓ Branch 15 taken 15 times.
✗ Branch 16 not taken.
30 << ", axis=" << (Raxis_ * Vector3s::UnitZ()).transpose() << "}";
237 15 }
238
239 template <typename Scalar>
240 const Scalar ContactModel1DTpl<Scalar>::get_reference() const {
241 return xref_;
242 }
243
244 template <typename Scalar>
245 const typename MathBaseTpl<Scalar>::Vector2s&
246 ContactModel1DTpl<Scalar>::get_gains() const {
247 return gains_;
248 }
249
250 template <typename Scalar>
251 const typename MathBaseTpl<Scalar>::Matrix3s&
252 ContactModel1DTpl<Scalar>::get_axis_rotation() const {
253 return Raxis_;
254 }
255
256 template <typename Scalar>
257 void ContactModel1DTpl<Scalar>::set_reference(const Scalar reference) {
258 xref_ = reference;
259 }
260
261 template <typename Scalar>
262 3 void ContactModel1DTpl<Scalar>::set_axis_rotation(const Matrix3s& rotation) {
263 3 Raxis_ = rotation;
264 3 }
265
266 } // namespace crocoddyl
267