GCC Code Coverage Report


Directory: ./
File: include/crocoddyl/multibody/contact-base.hxx
Date: 2025-02-24 23:41:29
Exec Total Coverage
Lines: 33 44 75.0%
Branches: 6 32 18.8%

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