GCC Code Coverage Report


Directory: ./
File: include/crocoddyl/multibody/contact-base.hxx
Date: 2025-03-26 19:23:43
Exec Total Coverage
Lines: 32 59 54.2%
Branches: 7 44 15.9%

Line Branch Exec Source
1 ///////////////////////////////////////////////////////////////////////////////
2 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019-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 #include "crocoddyl/multibody/contact-base.hpp"
11
12 namespace crocoddyl {
13
14 template <typename Scalar>
15 2059 ContactModelAbstractTpl<Scalar>::ContactModelAbstractTpl(
16 std::shared_ptr<StateMultibody> state, const pinocchio::ReferenceFrame type,
17 const std::size_t nc, const std::size_t nu)
18 2059 : state_(state), nc_(nc), nu_(nu), id_(0), type_(type) {}
19
20 template <typename Scalar>
21 22 ContactModelAbstractTpl<Scalar>::ContactModelAbstractTpl(
22 std::shared_ptr<StateMultibody> state, const pinocchio::ReferenceFrame type,
23 const std::size_t nc)
24
1/2
✓ Branch 4 taken 22 times.
✗ Branch 5 not taken.
22 : state_(state), nc_(nc), nu_(state->get_nv()), id_(0), type_(type) {}
25
26 template <typename Scalar>
27 ContactModelAbstractTpl<Scalar>::ContactModelAbstractTpl(
28 std::shared_ptr<StateMultibody> state, const std::size_t nc,
29 const std::size_t nu)
30 : state_(state),
31 nc_(nc),
32 nu_(nu),
33 id_(0),
34 type_(pinocchio::ReferenceFrame::LOCAL) {
35 std::cerr << "Deprecated: Use constructor that passes the type of contact, "
36 "this assumes is pinocchio::LOCAL."
37 << std::endl;
38 }
39
40 template <typename Scalar>
41 ContactModelAbstractTpl<Scalar>::ContactModelAbstractTpl(
42 std::shared_ptr<StateMultibody> state, const std::size_t nc)
43 : state_(state),
44 nc_(nc),
45 nu_(state->get_nv()),
46 id_(0),
47 type_(pinocchio::ReferenceFrame::LOCAL) {
48 std::cerr << "Deprecated: Use constructor that passes the type of contact, "
49 "this assumes is pinocchio::LOCAL."
50 << std::endl;
51 }
52
53 template <typename Scalar>
54 86442 void ContactModelAbstractTpl<Scalar>::updateForceDiff(
55 const std::shared_ptr<ContactDataAbstract>& data, const MatrixXs& df_dx,
56 const MatrixXs& df_du) const {
57
2/4
✓ Branch 1 taken 86442 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 86442 times.
172884 if (static_cast<std::size_t>(df_dx.rows()) != nc_ ||
58
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 86442 times.
86442 static_cast<std::size_t>(df_dx.cols()) != state_->get_ndx())
59 throw_pretty("df_dx has wrong dimension");
60
61
2/4
✓ Branch 1 taken 86442 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 86442 times.
172884 if (static_cast<std::size_t>(df_du.rows()) != nc_ ||
62
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 86442 times.
86442 static_cast<std::size_t>(df_du.cols()) != nu_)
63 throw_pretty("df_du has wrong dimension");
64
65 86442 data->df_dx = df_dx;
66 86442 data->df_du = df_du;
67 86442 }
68
69 template <typename Scalar>
70 8 void ContactModelAbstractTpl<Scalar>::setZeroForce(
71 const std::shared_ptr<ContactDataAbstract>& data) const {
72 8 data->f.setZero();
73 8 data->fext.setZero();
74 8 }
75
76 template <typename Scalar>
77 void ContactModelAbstractTpl<Scalar>::setZeroForceDiff(
78 const std::shared_ptr<ContactDataAbstract>& data) const {
79 data->df_dx.setZero();
80 data->df_du.setZero();
81 }
82
83 template <typename Scalar>
84 std::shared_ptr<ContactDataAbstractTpl<Scalar> >
85 ContactModelAbstractTpl<Scalar>::createData(
86 pinocchio::DataTpl<Scalar>* const data) {
87 return std::allocate_shared<ContactDataAbstract>(
88 Eigen::aligned_allocator<ContactDataAbstract>(), this, data);
89 }
90
91 template <typename Scalar>
92 void ContactModelAbstractTpl<Scalar>::print(std::ostream& os) const {
93 os << boost::core::demangle(typeid(*this).name());
94 }
95
96 template <typename Scalar>
97 const std::shared_ptr<StateMultibodyTpl<Scalar> >&
98 2412767 ContactModelAbstractTpl<Scalar>::get_state() const {
99 2412767 return state_;
100 }
101
102 template <typename Scalar>
103 1283322 std::size_t ContactModelAbstractTpl<Scalar>::get_nc() const {
104 1283322 return nc_;
105 }
106
107 template <typename Scalar>
108 167129 std::size_t ContactModelAbstractTpl<Scalar>::get_nu() const {
109 167129 return nu_;
110 }
111
112 template <typename Scalar>
113 164175 pinocchio::FrameIndex ContactModelAbstractTpl<Scalar>::get_id() const {
114 164175 return id_;
115 }
116
117 template <typename Scalar>
118 182486 pinocchio::ReferenceFrame ContactModelAbstractTpl<Scalar>::get_type() const {
119 182486 return type_;
120 }
121
122 template <typename Scalar>
123 9 void ContactModelAbstractTpl<Scalar>::set_id(const pinocchio::FrameIndex id) {
124 9 id_ = id;
125 9 }
126
127 template <typename Scalar>
128 void ContactModelAbstractTpl<Scalar>::set_type(
129 const pinocchio::ReferenceFrame type) {
130 type_ = type;
131 }
132
133 template <class Scalar>
134 50 std::ostream& operator<<(std::ostream& os,
135 const ContactModelAbstractTpl<Scalar>& model) {
136 50 model.print(os);
137 50 return os;
138 }
139
140 } // namespace crocoddyl
141