GCC Code Coverage Report


Directory: ./
File: src/feature/feature-vector3.cpp
Date: 2025-05-13 12:28:21
Exec Total Coverage
Lines: 0 56 0.0%
Branches: 0 130 0.0%

Line Branch Exec Source
1 /*
2 * Copyright 2010,
3 * François Bleibel,
4 * Olivier Stasse,
5 *
6 * CNRS/AIST
7 *
8 */
9
10 /* --------------------------------------------------------------------- */
11 /* --- INCLUDE --------------------------------------------------------- */
12 /* --------------------------------------------------------------------- */
13
14 /* --- SOT --- */
15 //#define VP_DEBUG
16 //#define VP_DEBUG_MODE 45
17 #include <sot/core/debug.hh>
18 #include <sot/core/exception-feature.hh>
19 #include <sot/core/factory.hh>
20 #include <sot/core/feature-vector3.hh>
21 #include <sot/core/matrix-geometry.hh>
22
23 using namespace dynamicgraph::sot;
24 using namespace std;
25 using namespace dynamicgraph;
26
27 ✗ DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN(FeatureVector3, "FeatureVector3");
28
29 /* --------------------------------------------------------------------- */
30 /* --- CLASS ----------------------------------------------------------- */
31 /* --------------------------------------------------------------------- */
32
33 ✗ FeatureVector3::FeatureVector3(const string &pointName)
34 : FeatureAbstract(pointName),
35 ✗ vectorSIN(NULL,
36 ✗ "sotFeatureVector3(" + name + ")::input(vector3)::vector"),
37 ✗ positionSIN(
38 ✗ NULL, "sotFeaturePoint6d(" + name + ")::input(matrixHomo)::position"),
39 ✗ articularJacobianSIN(
40 ✗ NULL, "sotFeatureVector3(" + name + ")::input(matrix)::Jq"),
41 ✗ positionRefSIN(
42 ✗ NULL, "sotFeatureVector3(" + name + ")::input(vector)::positionRef") {
43 ✗ jacobianSOUT.addDependency(positionSIN);
44 ✗ jacobianSOUT.addDependency(articularJacobianSIN);
45
46 ✗ errorSOUT.addDependency(vectorSIN);
47 ✗ errorSOUT.addDependency(positionSIN);
48 ✗ errorSOUT.addDependency(positionRefSIN);
49
50 ✗ signalRegistration(vectorSIN << positionSIN << articularJacobianSIN
51 ✗ << positionRefSIN);
52 }
53
54 /* --------------------------------------------------------------------- */
55 /* --------------------------------------------------------------------- */
56 /* --------------------------------------------------------------------- */
57
58 ✗ unsigned int &FeatureVector3::getDimension(unsigned int &dim, int /*time*/) {
59 sotDEBUG(25) << "# In {" << endl;
60
61 ✗ return dim = 3;
62 }
63
64 /* --------------------------------------------------------------------- */
65 /** Compute the interaction matrix from a subset of
66 * the possible features.
67 */
68 ✗ Matrix &FeatureVector3::computeJacobian(Matrix &J, int time) {
69 sotDEBUG(15) << "# In {" << endl;
70
71 ✗ const Matrix &Jq = articularJacobianSIN(time);
72 ✗ const Vector &vect = vectorSIN(time);
73 ✗ const MatrixHomogeneous &M = positionSIN(time);
74 ✗ MatrixRotation R;
75 ✗ R = M.linear();
76
77 ✗ Matrix Skew(3, 3);
78 ✗ Skew(0, 0) = 0;
79 ✗ Skew(0, 1) = -vect(2);
80 ✗ Skew(0, 2) = vect(1);
81 ✗ Skew(1, 0) = vect(2);
82 ✗ Skew(1, 1) = 0;
83 ✗ Skew(1, 2) = -vect(0);
84 ✗ Skew(2, 0) = -vect(1);
85 ✗ Skew(2, 1) = vect(0);
86 ✗ Skew(2, 2) = 0;
87
88 ✗ Matrix RSk(3, 3);
89 ✗ RSk = R * Skew;
90
91 ✗ J.resize(3, Jq.cols());
92 ✗ for (unsigned int i = 0; i < 3; ++i)
93 ✗ for (int j = 0; j < Jq.cols(); ++j) {
94 ✗ J(i, j) = 0;
95 ✗ for (unsigned int k = 0; k < 3; ++k) {
96 ✗ J(i, j) -= RSk(i, k) * Jq(k + 3, j);
97 }
98 }
99
100 sotDEBUG(15) << "# Out }" << endl;
101 ✗ return J;
102 }
103
104 /** Compute the error between two visual features from a subset
105 *a the possible features.
106 */
107 ✗ Vector &FeatureVector3::computeError(Vector &Mvect3, int time) {
108 sotDEBUGIN(15);
109
110 ✗ const MatrixHomogeneous &M = positionSIN(time);
111 ✗ const Vector &vect = vectorSIN(time);
112 ✗ const Vector &vectdes = positionRefSIN(time);
113
114 sotDEBUG(15) << "M = " << M << std::endl;
115 sotDEBUG(15) << "v = " << vect << std::endl;
116 sotDEBUG(15) << "vd = " << vectdes << std::endl;
117
118 ✗ MatrixRotation R;
119 ✗ R = M.linear();
120 ✗ Mvect3.resize(3);
121 ✗ Mvect3 = R * vect;
122 ✗ Mvect3 -= vectdes;
123
124 sotDEBUGOUT(15);
125 ✗ return Mvect3;
126 }
127
128 ✗ void FeatureVector3::display(std::ostream &os) const {
129 ✗ os << "Vector3 <" << name << ">";
130 }
131