GCC Code Coverage Report


Directory: ./
File: unittest/joint-jacobian.cpp
Date: 2025-04-30 16:14:33
Exec Total Coverage
Lines: 208 208 100.0%
Branches: 503 1024 49.1%

Line Branch Exec Source
1 //
2 // Copyright (c) 2015-2020 CNRS INRIA
3 //
4
5 #include "pinocchio/multibody/model.hpp"
6 #include "pinocchio/multibody/data.hpp"
7 #include "pinocchio/algorithm/jacobian.hpp"
8 #include "pinocchio/algorithm/kinematics.hpp"
9 #include "pinocchio/algorithm/rnea.hpp"
10 #include "pinocchio/spatial/act-on-set.hpp"
11 #include "pinocchio/multibody/sample-models.hpp"
12 #include "pinocchio/utils/timer.hpp"
13 #include "pinocchio/algorithm/joint-configuration.hpp"
14
15 #include <boost/test/unit_test.hpp>
16 #include <boost/utility/binary.hpp>
17 #include "utils/model-generator.hpp"
18
19 template<typename Derived>
20 1 inline bool isFinite(const Eigen::MatrixBase<Derived> & x)
21 {
22
5/10
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
1 return ((x - x).array() == (x - x).array()).all();
23 }
24
25 189 void test_jacobian_impl(const pinocchio::Model & model, pinocchio::JointIndex joint_id)
26 {
27 using namespace Eigen;
28 using namespace pinocchio;
29
30
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 pinocchio::Data data(model);
31
32
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 VectorXd q = pinocchio::neutral(model);
33
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 computeJointJacobians(model, data, q);
34
35
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 Data::Matrix6x Jrh(6, model.nv);
36
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 Jrh.fill(0);
37
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 getJointJacobian(model, data, joint_id, WORLD, Jrh);
38
39 /* Test J*q == v */
40
2/4
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 189 times.
✗ Branch 5 not taken.
189 VectorXd qdot = VectorXd::Random(model.nv);
41
2/4
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 189 times.
✗ Branch 5 not taken.
189 VectorXd qddot = VectorXd::Zero(model.nv);
42
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 rnea(model, data, q, qdot, qddot);
43
1/2
✓ Branch 3 taken 189 times.
✗ Branch 4 not taken.
189 Motion v = data.oMi[joint_id].act(data.v[joint_id]);
44
9/18
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 189 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 189 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 189 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 189 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 189 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 189 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 189 times.
✗ Branch 27 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 189 times.
189 BOOST_CHECK(v.toVector().isApprox(Jrh * qdot, 1e-12));
45
46 /* Test local jacobian: rhJrh == rhXo oJrh */
47
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 Data::Matrix6x rhJrh(6, model.nv);
48
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 rhJrh.fill(0);
49
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 getJointJacobian(model, data, joint_id, LOCAL, rhJrh);
50
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 Data::Matrix6x XJrh(6, model.nv);
51
2/4
✓ Branch 2 taken 189 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 189 times.
✗ Branch 6 not taken.
189 motionSet::se3Action(data.oMi[joint_id].inverse(), Jrh, XJrh);
52
7/14
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 189 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 189 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 189 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 189 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 189 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 189 times.
189 BOOST_CHECK(XJrh.isApprox(rhJrh, 1e-12));
53
54
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 XJrh.setZero();
55
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 Data data_jointJacobian(model);
56
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 computeJointJacobian(model, data_jointJacobian, q, joint_id, XJrh);
57
7/14
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 189 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 189 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 189 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 189 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 189 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 189 times.
189 BOOST_CHECK(XJrh.isApprox(rhJrh, 1e-12));
58
59 /* Test local world-aligned jacobian */
60
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 forwardKinematics(model, data, q, qdot);
61
2/4
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 189 times.
✗ Branch 5 not taken.
189 Data::Matrix6x WJrh = Data::Matrix6x::Zero(6, model.nv);
62
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 getJointJacobian(model, data, joint_id, LOCAL_WORLD_ALIGNED, WJrh);
63
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 Motion w_v = getVelocity(model, data, joint_id, LOCAL_WORLD_ALIGNED);
64
9/18
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 189 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 189 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 189 times.
✗ Branch 15 not taken.
✓ Branch 18 taken 189 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 189 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 189 times.
✗ Branch 25 not taken.
✓ Branch 27 taken 189 times.
✗ Branch 28 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 189 times.
189 BOOST_CHECK(w_v.toVector().isApprox(WJrh * qdot));
65
66 /* Test computeJointJacobians with pre-computation of the forward kinematics */
67
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 Data data_fk(model);
68
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 forwardKinematics(model, data_fk, q);
69
1/2
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
189 computeJointJacobians(model, data_fk);
70
71
7/14
✓ Branch 1 taken 189 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 189 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 189 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 189 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 189 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 189 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 189 times.
189 BOOST_CHECK(data_fk.J.isApprox(data.J));
72 189 }
73
74 BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE)
75
76
33/66
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
4 BOOST_AUTO_TEST_CASE(test_jacobian)
77 {
78
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Model model;
79
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::buildModels::humanoidRandom(model, false);
80
81
2/2
✓ Branch 0 taken 27 times.
✓ Branch 1 taken 1 times.
56 for (int j = 1; j < model.njoints; j++)
82 {
83
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 test_jacobian_impl(model, static_cast<pinocchio::JointIndex>(j));
84 }
85 2 }
86
87
33/66
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
4 BOOST_AUTO_TEST_CASE(test_jacobian_mimic)
88 {
89
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
14 for (int i = 0; i < pinocchio::MimicTestCases::N_CASES; i++)
90 {
91
1/2
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
12 const pinocchio::MimicTestCases mimic_test_case(i);
92 12 const pinocchio::Model & model_mimic = mimic_test_case.model_mimic;
93
2/2
✓ Branch 0 taken 162 times.
✓ Branch 1 taken 6 times.
336 for (int j = 1; j < model_mimic.njoints; j++)
94 {
95
1/2
✓ Branch 1 taken 162 times.
✗ Branch 2 not taken.
324 test_jacobian_impl(model_mimic, static_cast<pinocchio::JointIndex>(j));
96 }
97 12 }
98 2 }
99
100
33/66
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
4 BOOST_AUTO_TEST_CASE(test_jacobian_time_variation)
101 {
102 using namespace Eigen;
103 using namespace pinocchio;
104
105
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Model model;
106
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::buildModels::humanoidRandom(model, true, true);
107
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data(model);
108
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data_ref(model);
109 VectorXd q = randomConfiguration(
110
4/8
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
2 model, -1 * Eigen::VectorXd::Ones(model.nq), Eigen::VectorXd::Ones(model.nq));
111
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 VectorXd v = VectorXd::Random(model.nv);
112
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 VectorXd a = VectorXd::Random(model.nv);
113
114
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobiansTimeVariation(model, data, q, v);
115
116
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
2 BOOST_CHECK(isFinite(data.dJ));
117
118
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 forwardKinematics(model, data_ref, q, v, a);
119 Model::Index idx =
120
5/18
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
2 model.existJointName("rarm2") ? model.getJointId("rarm2") : (Model::Index)(model.njoints - 1);
121
122
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x J(6, model.nv);
123
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 J.fill(0.);
124
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x dJ(6, model.nv);
125
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 dJ.fill(0.);
126
127 // Regarding to the WORLD origin
128
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobian(model, data, idx, WORLD, J);
129
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
2 BOOST_CHECK(J.isApprox(getJointJacobian(model, data, idx, WORLD)));
130
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobianTimeVariation(model, data, idx, WORLD, dJ);
131
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Motion v_idx(J * v);
132
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 1 times.
2 BOOST_CHECK(v_idx.isApprox(data_ref.oMi[idx].act(data_ref.v[idx])));
133
134
4/8
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
2 Motion a_idx(J * a + dJ * v);
135
1/2
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
2 const Motion & a_ref = data_ref.oMi[idx].act(data_ref.a[idx]);
136
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
2 BOOST_CHECK(a_idx.isApprox(a_ref));
137
138 // Regarding to the LOCAL frame
139
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobian(model, data, idx, LOCAL, J);
140
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
2 BOOST_CHECK(J.isApprox(getJointJacobian(model, data, idx, LOCAL)));
141
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobianTimeVariation(model, data, idx, LOCAL, dJ);
142
143
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 v_idx = (Motion::Vector6)(J * v);
144
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
2 BOOST_CHECK(v_idx.isApprox(data_ref.v[idx]));
145
146
5/10
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
2 a_idx = (Motion::Vector6)(J * a + dJ * v);
147
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1 times.
2 BOOST_CHECK(a_idx.isApprox(data_ref.a[idx]));
148
149 // Regarding to the LOCAL_WORLD_ALIGNED frame
150
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobian(model, data, idx, LOCAL_WORLD_ALIGNED, J);
151
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
2 BOOST_CHECK(J.isApprox(getJointJacobian(model, data, idx, LOCAL_WORLD_ALIGNED)));
152
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobianTimeVariation(model, data, idx, LOCAL_WORLD_ALIGNED, dJ);
153
154
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 Data::SE3 worldMlocal = data.oMi[idx];
155
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 worldMlocal.translation().setZero();
156
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 Data::Motion world_v_local = data.ov[idx];
157
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 world_v_local.linear().setZero();
158
159
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 v_idx = (Motion::Vector6)(J * v);
160
8/16
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 1 times.
2 BOOST_CHECK(v_idx.isApprox(worldMlocal.act(data_ref.v[idx])));
161
162
5/10
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1 times.
✗ Branch 14 not taken.
2 a_idx = (Motion::Vector6)(J * a + dJ * v);
163
11/22
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
✓ Branch 29 taken 1 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 1 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 1 times.
✗ Branch 36 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 1 times.
2 BOOST_CHECK(a_idx.isApprox(
164 world_v_local.cross(worldMlocal.act(data_ref.v[idx])) + worldMlocal.act(data_ref.a[idx])));
165
166 // compare to finite differencies : WORLD
167 {
168
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Data data_ref(model), data_ref_plus(model);
169
170 2 const double alpha = 1e-8;
171
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Eigen::VectorXd q_plus(model.nq);
172
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 q_plus = integrate(model, q, alpha * v);
173
174
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x J_ref(6, model.nv);
175
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 J_ref.fill(0.);
176
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobians(model, data_ref, q);
177
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobian(model, data_ref, idx, WORLD, J_ref);
178
179
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x J_ref_plus(6, model.nv);
180
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 J_ref_plus.fill(0.);
181
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobians(model, data_ref_plus, q_plus);
182
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobian(model, data_ref_plus, idx, WORLD, J_ref_plus);
183
184
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x dJ_ref(6, model.nv);
185
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 dJ_ref.fill(0.);
186
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 dJ_ref = (J_ref_plus - J_ref) / alpha;
187
188
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobiansTimeVariation(model, data, q, v);
189
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x dJ(6, model.nv);
190
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 dJ.fill(0.);
191
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobianTimeVariation(model, data, idx, WORLD, dJ);
192
193
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
2 BOOST_CHECK(dJ.isApprox(dJ_ref, sqrt(alpha)));
194 2 }
195 // compare to finite differencies : LOCAL
196 {
197
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Data data_ref(model), data_ref_plus(model);
198
199 2 const double alpha = 1e-8;
200
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Eigen::VectorXd q_plus(model.nq);
201
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 q_plus = integrate(model, q, alpha * v);
202
203
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x J_ref(6, model.nv);
204
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 J_ref.fill(0.);
205
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobians(model, data_ref, q);
206
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobian(model, data_ref, idx, LOCAL, J_ref);
207
208
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x J_ref_plus(6, model.nv);
209
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 J_ref_plus.fill(0.);
210
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobians(model, data_ref_plus, q_plus);
211
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobian(model, data_ref_plus, idx, LOCAL, J_ref_plus);
212
213
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x dJ_ref(6, model.nv);
214
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 dJ_ref = (J_ref_plus - J_ref) / alpha;
215
216
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobiansTimeVariation(model, data, q, v);
217
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x dJ(6, model.nv);
218
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 dJ.fill(0.);
219
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobianTimeVariation(model, data, idx, LOCAL, dJ);
220
221
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
2 BOOST_CHECK(dJ.isApprox(dJ_ref, sqrt(alpha)));
222 2 }
223
224 // compare to finite differencies : LOCAL_WORLD_ALIGNED
225 {
226
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Data data_ref(model), data_ref_plus(model);
227
228 2 const double alpha = 1e-8;
229
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Eigen::VectorXd q_plus(model.nq);
230
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 q_plus = integrate(model, q, alpha * v);
231
232
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x J_ref(6, model.nv);
233
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 J_ref.fill(0.);
234
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobians(model, data_ref, q);
235
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobian(model, data_ref, idx, LOCAL_WORLD_ALIGNED, J_ref);
236
237
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x J_ref_plus(6, model.nv);
238
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 J_ref_plus.fill(0.);
239
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobians(model, data_ref_plus, q_plus);
240
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobian(model, data_ref_plus, idx, LOCAL_WORLD_ALIGNED, J_ref_plus);
241
242
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x dJ_ref(6, model.nv);
243
3/6
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
2 dJ_ref = (J_ref_plus - J_ref) / alpha;
244
245
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobiansTimeVariation(model, data, q, v);
246
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x dJ(6, model.nv);
247
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 dJ.fill(0.);
248
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobianTimeVariation(model, data, idx, LOCAL_WORLD_ALIGNED, dJ);
249
250
7/14
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 1 times.
2 BOOST_CHECK(dJ.isApprox(dJ_ref, sqrt(alpha)));
251 2 }
252 2 }
253
254
33/66
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 1 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 1 times.
✗ Branch 37 not taken.
✓ Branch 41 taken 1 times.
✗ Branch 42 not taken.
✓ Branch 45 taken 1 times.
✗ Branch 46 not taken.
✓ Branch 48 taken 1 times.
✗ Branch 49 not taken.
✓ Branch 52 taken 1 times.
✗ Branch 53 not taken.
✓ Branch 55 taken 1 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 1 times.
✗ Branch 59 not taken.
✓ Branch 61 taken 1 times.
✗ Branch 62 not taken.
✓ Branch 66 taken 1 times.
✗ Branch 67 not taken.
✓ Branch 70 taken 1 times.
✗ Branch 71 not taken.
✓ Branch 73 taken 1 times.
✗ Branch 74 not taken.
✓ Branch 77 taken 1 times.
✗ Branch 78 not taken.
✓ Branch 80 taken 1 times.
✗ Branch 81 not taken.
✓ Branch 83 taken 1 times.
✗ Branch 84 not taken.
✓ Branch 86 taken 1 times.
✗ Branch 87 not taken.
✓ Branch 91 taken 1 times.
✗ Branch 92 not taken.
✓ Branch 95 taken 1 times.
✗ Branch 96 not taken.
✓ Branch 98 taken 1 times.
✗ Branch 99 not taken.
✓ Branch 102 taken 1 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 1 times.
✗ Branch 106 not taken.
✓ Branch 108 taken 1 times.
✗ Branch 109 not taken.
✓ Branch 111 taken 1 times.
✗ Branch 112 not taken.
✓ Branch 116 taken 1 times.
✗ Branch 117 not taken.
4 BOOST_AUTO_TEST_CASE(test_timings)
255 {
256 using namespace Eigen;
257 using namespace pinocchio;
258
259
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Model model;
260
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::buildModels::humanoidRandom(model);
261
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data(model);
262
263 2 long flag = BOOST_BINARY(1111);
264
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 PinocchioTicToc timer(PinocchioTicToc::US);
265 #ifdef NDEBUG
266 #ifdef _INTENSE_TESTING_
267 const size_t NBT = 1000 * 1000;
268 #else
269 const size_t NBT = 10;
270 #endif
271 #else
272 2 const size_t NBT = 1;
273
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::cout << "(the time score in debug mode is not relevant) ";
274 #endif
275
276 2 bool verbose = flag & (flag - 1); // True is two or more binaries of the flag are 1.
277
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
2 if (verbose)
278
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 std::cout << "--" << std::endl;
279
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Eigen::VectorXd q = pinocchio::neutral(model);
280
281
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
2 if (flag >> 0 & 1)
282 {
283
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 timer.tic();
284
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
4 SMOOTH(NBT)
285 {
286
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobians(model, data, q);
287 }
288
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
2 if (verbose)
289
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::cout << "Compute =\t";
290
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 timer.toc(std::cout, NBT);
291 }
292
293
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
2 if (flag >> 1 & 1)
294 {
295
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobians(model, data, q);
296 Model::Index idx =
297
5/18
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
2 model.existJointName("rarm6") ? model.getJointId("rarm6") : (Model::Index)(model.njoints - 1);
298
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x Jrh(6, model.nv);
299
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Jrh.fill(0);
300
301
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 timer.tic();
302
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
4 SMOOTH(NBT)
303 {
304
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobian(model, data, idx, WORLD, Jrh);
305 }
306
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
2 if (verbose)
307
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::cout << "Copy =\t";
308
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 timer.toc(std::cout, NBT);
309 2 }
310
311
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
2 if (flag >> 2 & 1)
312 {
313
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobians(model, data, q);
314 Model::Index idx =
315
5/18
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
2 model.existJointName("rarm6") ? model.getJointId("rarm6") : (Model::Index)(model.njoints - 1);
316
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x Jrh(6, model.nv);
317
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Jrh.fill(0);
318
319
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 timer.tic();
320
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
4 SMOOTH(NBT)
321 {
322
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 getJointJacobian(model, data, idx, LOCAL, Jrh);
323 }
324
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
2 if (verbose)
325
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::cout << "Change frame =\t";
326
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 timer.toc(std::cout, NBT);
327 2 }
328
329
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
2 if (flag >> 3 & 1)
330 {
331
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobians(model, data, q);
332 Model::Index idx =
333
5/18
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
2 model.existJointName("rarm6") ? model.getJointId("rarm6") : (Model::Index)(model.njoints - 1);
334
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Data::Matrix6x Jrh(6, model.nv);
335
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Jrh.fill(0);
336
337
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 timer.tic();
338
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
4 SMOOTH(NBT)
339 {
340
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointJacobian(model, data, q, idx, Jrh);
341 }
342
1/2
✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
2 if (verbose)
343
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 std::cout << "Single jacobian =\t";
344
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 timer.toc(std::cout, NBT);
345 2 }
346 2 }
347
348 BOOST_AUTO_TEST_SUITE_END()
349