GCC Code Coverage Report


Directory: ./
File: src/tasks/task-actuation-equality.cpp
Date: 2025-05-10 01:12:46
Exec Total Coverage
Lines: 0 47 0.0%
Branches: 0 122 0.0%

Line Branch Exec Source
1 //
2 // Copyright (c) 2021 CNRS INRIA LORIA
3 //
4 // This file is part of tsid
5 // tsid is free software: you can redistribute it
6 // and/or modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation, either version
8 // 3 of the License, or (at your option) any later version.
9 // tsid is distributed in the hope that it will be
10 // useful, but WITHOUT ANY WARRANTY; without even the implied warranty
11 // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // General Lesser Public License for more details. You should have
13 // received a copy of the GNU Lesser General Public License along with
14 // tsid If not, see
15 // <http://www.gnu.org/licenses/>.
16 //
17
18 #include <tsid/tasks/task-actuation-equality.hpp>
19 #include "tsid/robots/robot-wrapper.hpp"
20
21 namespace tsid {
22 namespace tasks {
23 using namespace math;
24 using namespace pinocchio;
25
26 ✗ TaskActuationEquality::TaskActuationEquality(const std::string& name,
27 ✗ RobotWrapper& robot)
28 ✗ : TaskActuation(name, robot), m_constraint(name, robot.na(), robot.na()) {
29 ✗ m_ref = Vector::Zero(robot.na());
30 ✗ m_weights = Vector::Ones(robot.na());
31 ✗ Vector m = Vector::Ones(robot.na());
32 ✗ mask(m);
33 }
34
35 ✗ const Vector& TaskActuationEquality::mask() const { return m_mask; }
36
37 ✗ void TaskActuationEquality::mask(const Vector& m) {
38 ✗ PINOCCHIO_CHECK_INPUT_ARGUMENT(m.size() == m_robot.na(),
39 "The size of the mask vector needs to equal " +
40 std::to_string(m_robot.na()));
41 ✗ m_mask = m;
42
43 ✗ const Vector::Index dim = static_cast<Vector::Index>(m.sum());
44 ✗ Matrix S = Matrix::Zero(dim, m_robot.na());
45 ✗ m_activeAxes.resize(dim);
46 ✗ unsigned int j = 0;
47 ✗ for (unsigned int i = 0; i < m.size(); i++)
48 ✗ if (m(i) != 0.0) {
49 ✗ PINOCCHIO_CHECK_INPUT_ARGUMENT(
50 m(i) == 1.0,
51 "Entries in the mask vector need to be either 0.0 or 1.0");
52 ✗ S(j, i) = m_weights(i);
53 ✗ m_activeAxes(j) = i;
54 ✗ j++;
55 }
56 ✗ m_constraint.resize((unsigned int)dim, m_robot.na());
57 ✗ m_constraint.setMatrix(S);
58
59 ✗ for (unsigned int i = 0; i < m_activeAxes.size(); i++)
60 ✗ m_constraint.vector()(i) =
61 ✗ m_ref(m_activeAxes(i)) * m_weights(m_activeAxes(i));
62 }
63
64 ✗ int TaskActuationEquality::dim() const { return (int)m_mask.sum(); }
65
66 // Reference should be the same size as robot.na(), even if a mask is used
67 // (masked dof values will just be ignored)
68 ✗ void TaskActuationEquality::setReference(ConstRefVector ref) {
69 ✗ PINOCCHIO_CHECK_INPUT_ARGUMENT(
70 ref.size() == m_robot.na(),
71 "The size of the reference vector needs to equal " +
72 std::to_string(m_robot.na()));
73 ✗ m_ref = ref;
74
75 ✗ for (unsigned int i = 0; i < m_activeAxes.size(); i++)
76 ✗ m_constraint.vector()(i) =
77 ✗ m_ref(m_activeAxes(i)) * m_weights(m_activeAxes(i));
78 }
79
80 ✗ const Vector& TaskActuationEquality::getReference() const { return m_ref; }
81
82 // Weighting vector should be the same size as robot.na(), even if a mask is
83 // used (masked dof values will just be ignored)
84 ✗ void TaskActuationEquality::setWeightVector(ConstRefVector weights) {
85 ✗ PINOCCHIO_CHECK_INPUT_ARGUMENT(
86 weights.size() == m_robot.na(),
87 "The size of the weight vector needs to equal " +
88 std::to_string(m_robot.na()));
89 ✗ m_weights = weights;
90
91 ✗ for (unsigned int i = 0; i < m_activeAxes.size(); i++) {
92 ✗ m_constraint.matrix()(i, m_activeAxes(i)) = m_weights(m_activeAxes(i));
93 ✗ m_constraint.vector()(i) =
94 ✗ m_ref(m_activeAxes(i)) * m_weights(m_activeAxes(i));
95 }
96 }
97
98 ✗ const Vector& TaskActuationEquality::getWeightVector() const {
99 ✗ return m_weights;
100 }
101
102 ✗ const ConstraintBase& TaskActuationEquality::getConstraint() const {
103 ✗ return m_constraint;
104 }
105
106 ✗ const ConstraintBase& TaskActuationEquality::compute(const double,
107 ConstRefVector,
108 ConstRefVector, Data&) {
109 ✗ return m_constraint;
110 }
111
112 } // namespace tasks
113 } // namespace tsid
114