GCC Code Coverage Report


Directory: ./
File: unittest/regressor.cpp
Date: 2025-02-12 21:03:38
Exec Total Coverage
Lines: 252 252 100.0%
Branches: 778 1534 50.7%

Line Branch Exec Source
1 //
2 // Copyright (c) 2018-2024 CNRS INRIA
3 //
4
5 #include "pinocchio/spatial/fwd.hpp"
6 #include "pinocchio/spatial/explog.hpp"
7 #include "pinocchio/algorithm/regressor.hpp"
8 #include "pinocchio/algorithm/rnea.hpp"
9 #include "pinocchio/algorithm/frames.hpp"
10 #include "pinocchio/algorithm/joint-configuration.hpp"
11 #include "pinocchio/algorithm/center-of-mass.hpp"
12 #include "pinocchio/multibody/sample-models.hpp"
13 #include "pinocchio/algorithm/compute-all-terms.hpp"
14
15 #include <iostream>
16
17 #include <boost/test/unit_test.hpp>
18 #include <boost/utility/binary.hpp>
19
20 BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE)
21
22
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_kinematic_regressor_joint)
23 {
24 using namespace Eigen;
25 using namespace pinocchio;
26
27
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Model model;
28
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 buildModels::humanoidRandom(model);
29
30
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data(model);
31
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data_ref(model);
32
33
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.lowerPositionLimit.head<7>().fill(-1.);
34
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.upperPositionLimit.head<7>().fill(1.);
35
36 // const std::string joint_name = "larm5_joint";
37 // const JointIndex joint_id = model.getJointId(joint_name);
38
39
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const VectorXd q = randomConfiguration(model);
40
41
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 forwardKinematics(model, data, q);
42
43 2 const double eps = 1e-8;
44
2/2
✓ Branch 0 taken 27 times.
✓ Branch 1 taken 1 times.
56 for (JointIndex joint_id = 1; joint_id < (JointIndex)model.njoints; ++joint_id)
45 {
46
2/4
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
54 Data::Matrix6x kinematic_regressor_L(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
47
2/4
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
54 Data::Matrix6x kinematic_regressor_LWA(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
48
2/4
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
54 Data::Matrix6x kinematic_regressor_W(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
49
50
2/4
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
54 Data::Matrix6x kinematic_regressor_L_fd(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
51
2/4
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
54 Data::Matrix6x kinematic_regressor_LWA_fd(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
52
2/4
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
54 Data::Matrix6x kinematic_regressor_W_fd(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
53
54
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 computeJointKinematicRegressor(model, data, joint_id, LOCAL, kinematic_regressor_L);
55
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 computeJointKinematicRegressor(
56 model, data, joint_id, LOCAL_WORLD_ALIGNED, kinematic_regressor_LWA);
57
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 computeJointKinematicRegressor(model, data, joint_id, WORLD, kinematic_regressor_W);
58
59
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 Model model_plus = model;
60
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 Data data_plus(model_plus);
61 54 const SE3 & oMi = data.oMi[joint_id];
62
3/6
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 27 times.
✗ Branch 8 not taken.
54 const SE3 Mi_LWA = SE3(oMi.rotation(), SE3::Vector3::Zero());
63 54 const SE3 & oMi_plus = data_plus.oMi[joint_id];
64
2/2
✓ Branch 0 taken 729 times.
✓ Branch 1 taken 27 times.
1512 for (int i = 1; i < model.njoints; ++i)
65 {
66
2/4
✓ Branch 1 taken 729 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 729 times.
✗ Branch 5 not taken.
1458 Motion::Vector6 v = Motion::Vector6::Zero();
67 1458 const SE3 & M_placement = model.jointPlacements[(JointIndex)i];
68 1458 SE3 & M_placement_plus = model_plus.jointPlacements[(JointIndex)i];
69
2/2
✓ Branch 0 taken 4374 times.
✓ Branch 1 taken 729 times.
10206 for (Eigen::DenseIndex k = 0; k < 6; ++k)
70 {
71
1/2
✓ Branch 1 taken 4374 times.
✗ Branch 2 not taken.
8748 v[k] = eps;
72
4/8
✓ Branch 1 taken 4374 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4374 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4374 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4374 times.
✗ Branch 11 not taken.
8748 M_placement_plus = M_placement * exp6(Motion(v));
73
74
1/2
✓ Branch 1 taken 4374 times.
✗ Branch 2 not taken.
8748 forwardKinematics(model_plus, data_plus, q);
75
76
2/4
✓ Branch 1 taken 4374 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4374 times.
✗ Branch 5 not taken.
8748 const Motion diff_L = log6(oMi.actInv(oMi_plus));
77
5/10
✓ Branch 1 taken 4374 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4374 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4374 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4374 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4374 times.
✗ Branch 14 not taken.
8748 kinematic_regressor_L_fd.middleCols<6>(6 * (i - 1)).col(k) = diff_L.toVector() / eps;
78
1/2
✓ Branch 1 taken 4374 times.
✗ Branch 2 not taken.
8748 const Motion diff_LWA = Mi_LWA.act(diff_L);
79
5/10
✓ Branch 1 taken 4374 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4374 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4374 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4374 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4374 times.
✗ Branch 14 not taken.
8748 kinematic_regressor_LWA_fd.middleCols<6>(6 * (i - 1)).col(k) = diff_LWA.toVector() / eps;
80
1/2
✓ Branch 1 taken 4374 times.
✗ Branch 2 not taken.
8748 const Motion diff_W = oMi.act(diff_L);
81
5/10
✓ Branch 1 taken 4374 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4374 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 4374 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 4374 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 4374 times.
✗ Branch 14 not taken.
8748 kinematic_regressor_W_fd.middleCols<6>(6 * (i - 1)).col(k) = diff_W.toVector() / eps;
82
1/2
✓ Branch 1 taken 4374 times.
✗ Branch 2 not taken.
8748 v[k] = 0.;
83 }
84
85
1/2
✓ Branch 1 taken 729 times.
✗ Branch 2 not taken.
1458 M_placement_plus = M_placement;
86 }
87
88
7/14
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 27 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 27 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 27 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 27 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 27 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 27 times.
54 BOOST_CHECK(kinematic_regressor_L.isApprox(kinematic_regressor_L_fd, sqrt(eps)));
89
7/14
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 27 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 27 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 27 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 27 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 27 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 27 times.
54 BOOST_CHECK(kinematic_regressor_LWA.isApprox(kinematic_regressor_LWA_fd, sqrt(eps)));
90
7/14
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 27 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 27 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 27 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 27 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 27 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 27 times.
54 BOOST_CHECK(kinematic_regressor_W.isApprox(kinematic_regressor_W_fd, sqrt(eps)));
91 54 }
92 2 }
93
94
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_kinematic_regressor_joint_placement)
95 {
96 using namespace Eigen;
97 using namespace pinocchio;
98
99
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Model model;
100
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 buildModels::humanoidRandom(model);
101
102
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data(model);
103
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data_ref(model);
104
105
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.lowerPositionLimit.head<7>().fill(-1.);
106
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.upperPositionLimit.head<7>().fill(1.);
107
108
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const VectorXd q = randomConfiguration(model);
109
110
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 forwardKinematics(model, data, q);
111
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 forwardKinematics(model, data_ref, q);
112
113
2/2
✓ Branch 0 taken 27 times.
✓ Branch 1 taken 1 times.
56 for (JointIndex joint_id = 1; joint_id < (JointIndex)model.njoints; ++joint_id)
114 {
115
2/4
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
54 Data::Matrix6x kinematic_regressor_L(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
116
2/4
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
54 Data::Matrix6x kinematic_regressor_LWA(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
117
2/4
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
54 Data::Matrix6x kinematic_regressor_W(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
118
119
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 computeJointKinematicRegressor(
120
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 model, data, joint_id, LOCAL, SE3::Identity(), kinematic_regressor_L);
121
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 computeJointKinematicRegressor(
122
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 model, data, joint_id, LOCAL_WORLD_ALIGNED, SE3::Identity(), kinematic_regressor_LWA);
123
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 computeJointKinematicRegressor(
124
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 model, data, joint_id, WORLD, SE3::Identity(), kinematic_regressor_W);
125
126
2/4
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
54 Data::Matrix6x kinematic_regressor_L_ref(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
127
2/4
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
54 Data::Matrix6x kinematic_regressor_LWA_ref(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
128
2/4
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 27 times.
✗ Branch 5 not taken.
54 Data::Matrix6x kinematic_regressor_W_ref(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
129
130
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 computeJointKinematicRegressor(model, data_ref, joint_id, LOCAL, kinematic_regressor_L_ref);
131
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 computeJointKinematicRegressor(
132 model, data_ref, joint_id, LOCAL_WORLD_ALIGNED, kinematic_regressor_LWA_ref);
133
1/2
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
54 computeJointKinematicRegressor(model, data_ref, joint_id, WORLD, kinematic_regressor_W_ref);
134
135
7/14
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 27 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 27 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 27 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 27 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 27 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 27 times.
54 BOOST_CHECK(kinematic_regressor_L.isApprox(kinematic_regressor_L_ref));
136
7/14
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 27 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 27 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 27 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 27 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 27 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 27 times.
54 BOOST_CHECK(kinematic_regressor_LWA.isApprox(kinematic_regressor_LWA_ref));
137
7/14
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 27 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 27 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 27 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 27 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 27 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 27 times.
54 BOOST_CHECK(kinematic_regressor_W.isApprox(kinematic_regressor_W_ref));
138 54 }
139 2 }
140
141
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_kinematic_regressor_frame)
142 {
143 using namespace Eigen;
144 using namespace pinocchio;
145
146
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Model model;
147
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 buildModels::humanoidRandom(model);
148
149
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.lowerPositionLimit.head<7>().fill(-1.);
150
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.upperPositionLimit.head<7>().fill(1.);
151
152
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 const std::string joint_name = "larm5_joint";
153
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const JointIndex joint_id = model.getJointId(joint_name);
154
3/6
✓ 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.
2 model.addBodyFrame("test_body", joint_id, SE3::Random(), -1);
155
156
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data(model);
157
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data_ref(model);
158
159
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const VectorXd q = randomConfiguration(model);
160
161
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 forwardKinematics(model, data, q);
162
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 updateFramePlacements(model, data);
163
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 forwardKinematics(model, data_ref, q);
164
165 2 const double eps = 1e-8;
166
2/2
✓ Branch 0 taken 55 times.
✓ Branch 1 taken 1 times.
112 for (FrameIndex frame_id = 1; frame_id < (FrameIndex)model.nframes; ++frame_id)
167 {
168 110 const Frame & frame = model.frames[frame_id];
169
170
2/4
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 55 times.
✗ Branch 5 not taken.
110 Data::Matrix6x kinematic_regressor_L(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
171
2/4
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 55 times.
✗ Branch 5 not taken.
110 Data::Matrix6x kinematic_regressor_LWA(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
172
2/4
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 55 times.
✗ Branch 5 not taken.
110 Data::Matrix6x kinematic_regressor_W(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
173
174
1/2
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
110 computeFrameKinematicRegressor(model, data, frame_id, LOCAL, kinematic_regressor_L);
175
1/2
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
110 computeFrameKinematicRegressor(
176 model, data, frame_id, LOCAL_WORLD_ALIGNED, kinematic_regressor_LWA);
177
1/2
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
110 computeFrameKinematicRegressor(model, data, frame_id, WORLD, kinematic_regressor_W);
178
179
2/4
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 55 times.
✗ Branch 5 not taken.
110 Data::Matrix6x kinematic_regressor_L_ref(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
180
2/4
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 55 times.
✗ Branch 5 not taken.
110 Data::Matrix6x kinematic_regressor_LWA_ref(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
181
2/4
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 55 times.
✗ Branch 5 not taken.
110 Data::Matrix6x kinematic_regressor_W_ref(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
182
183 110 computeJointKinematicRegressor(
184
1/2
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
110 model, data_ref, frame.parentJoint, LOCAL, frame.placement, kinematic_regressor_L_ref);
185 110 computeJointKinematicRegressor(
186
1/2
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
110 model, data_ref, frame.parentJoint, LOCAL_WORLD_ALIGNED, frame.placement,
187 kinematic_regressor_LWA_ref);
188 110 computeJointKinematicRegressor(
189
1/2
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
110 model, data_ref, frame.parentJoint, WORLD, frame.placement, kinematic_regressor_W_ref);
190
191
7/14
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 55 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 55 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 55 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 55 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 55 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 55 times.
110 BOOST_CHECK(kinematic_regressor_L.isApprox(kinematic_regressor_L_ref));
192
7/14
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 55 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 55 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 55 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 55 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 55 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 55 times.
110 BOOST_CHECK(kinematic_regressor_LWA.isApprox(kinematic_regressor_LWA_ref));
193
7/14
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 55 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 55 times.
✗ Branch 12 not taken.
✓ Branch 15 taken 55 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 55 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 55 times.
✗ Branch 22 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 55 times.
110 BOOST_CHECK(kinematic_regressor_W.isApprox(kinematic_regressor_W_ref));
194
195
2/4
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 55 times.
✗ Branch 5 not taken.
110 Data::Matrix6x kinematic_regressor_L_fd(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
196
2/4
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 55 times.
✗ Branch 5 not taken.
110 Data::Matrix6x kinematic_regressor_LWA_fd(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
197
2/4
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 55 times.
✗ Branch 5 not taken.
110 Data::Matrix6x kinematic_regressor_W_fd(Data::Matrix6x::Zero(6, 6 * (model.njoints - 1)));
198
199
1/2
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
110 Model model_plus = model;
200
1/2
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
110 Data data_plus(model_plus);
201 110 const SE3 & oMf = data.oMf[frame_id];
202
3/6
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 55 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 55 times.
✗ Branch 8 not taken.
110 const SE3 Mf_LWA = SE3(oMf.rotation(), SE3::Vector3::Zero());
203 110 const SE3 & oMf_plus = data_plus.oMf[frame_id];
204
2/2
✓ Branch 0 taken 1485 times.
✓ Branch 1 taken 55 times.
3080 for (int i = 1; i < model.njoints; ++i)
205 {
206
2/4
✓ Branch 1 taken 1485 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1485 times.
✗ Branch 5 not taken.
2970 Motion::Vector6 v = Motion::Vector6::Zero();
207 2970 const SE3 & M_placement = model.jointPlacements[(JointIndex)i];
208 2970 SE3 & M_placement_plus = model_plus.jointPlacements[(JointIndex)i];
209
2/2
✓ Branch 0 taken 8910 times.
✓ Branch 1 taken 1485 times.
20790 for (Eigen::DenseIndex k = 0; k < 6; ++k)
210 {
211
1/2
✓ Branch 1 taken 8910 times.
✗ Branch 2 not taken.
17820 v[k] = eps;
212
4/8
✓ Branch 1 taken 8910 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8910 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8910 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 8910 times.
✗ Branch 11 not taken.
17820 M_placement_plus = M_placement * exp6(Motion(v));
213
214
1/2
✓ Branch 1 taken 8910 times.
✗ Branch 2 not taken.
17820 forwardKinematics(model_plus, data_plus, q);
215
1/2
✓ Branch 1 taken 8910 times.
✗ Branch 2 not taken.
17820 updateFramePlacements(model_plus, data_plus);
216
217
2/4
✓ Branch 1 taken 8910 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8910 times.
✗ Branch 5 not taken.
17820 const Motion diff_L = log6(oMf.actInv(oMf_plus));
218
5/10
✓ Branch 1 taken 8910 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8910 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8910 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 8910 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 8910 times.
✗ Branch 14 not taken.
17820 kinematic_regressor_L_fd.middleCols<6>(6 * (i - 1)).col(k) = diff_L.toVector() / eps;
219
1/2
✓ Branch 1 taken 8910 times.
✗ Branch 2 not taken.
17820 const Motion diff_LWA = Mf_LWA.act(diff_L);
220
5/10
✓ Branch 1 taken 8910 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8910 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8910 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 8910 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 8910 times.
✗ Branch 14 not taken.
17820 kinematic_regressor_LWA_fd.middleCols<6>(6 * (i - 1)).col(k) = diff_LWA.toVector() / eps;
221
1/2
✓ Branch 1 taken 8910 times.
✗ Branch 2 not taken.
17820 const Motion diff_W = oMf.act(diff_L);
222
5/10
✓ Branch 1 taken 8910 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 8910 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 8910 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 8910 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 8910 times.
✗ Branch 14 not taken.
17820 kinematic_regressor_W_fd.middleCols<6>(6 * (i - 1)).col(k) = diff_W.toVector() / eps;
223
1/2
✓ Branch 1 taken 8910 times.
✗ Branch 2 not taken.
17820 v[k] = 0.;
224 }
225
226
1/2
✓ Branch 1 taken 1485 times.
✗ Branch 2 not taken.
2970 M_placement_plus = M_placement;
227 }
228
229
7/14
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 55 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 55 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 55 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 55 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 55 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 55 times.
110 BOOST_CHECK(kinematic_regressor_L.isApprox(kinematic_regressor_L_fd, sqrt(eps)));
230
7/14
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 55 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 55 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 55 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 55 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 55 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 55 times.
110 BOOST_CHECK(kinematic_regressor_LWA.isApprox(kinematic_regressor_LWA_fd, sqrt(eps)));
231
7/14
✓ Branch 1 taken 55 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 55 times.
✗ Branch 6 not taken.
✓ Branch 11 taken 55 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 55 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 55 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 55 times.
✗ Branch 21 not taken.
✗ Branch 25 not taken.
✓ Branch 26 taken 55 times.
110 BOOST_CHECK(kinematic_regressor_W.isApprox(kinematic_regressor_W_fd, sqrt(eps)));
232 110 }
233 2 }
234
235
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_static_regressor)
236 {
237 using namespace Eigen;
238 using namespace pinocchio;
239
240
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Model model;
241
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 buildModels::humanoidRandom(model);
242
243
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data(model);
244
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data_ref(model);
245
246
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.lowerPositionLimit.head<7>().fill(-1.);
247
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.upperPositionLimit.head<7>().fill(1.);
248
249
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 VectorXd q = randomConfiguration(model);
250
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeStaticRegressor(model, data, q);
251
252
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 VectorXd phi(4 * (model.njoints - 1));
253
2/2
✓ Branch 0 taken 27 times.
✓ Branch 1 taken 1 times.
56 for (int k = 1; k < model.njoints; ++k)
254 {
255 54 const Inertia & Y = model.inertias[(size_t)k];
256
4/8
✓ Branch 1 taken 27 times.
✗ Branch 2 not taken.
✓ Branch 5 taken 27 times.
✗ Branch 6 not taken.
✓ Branch 10 taken 27 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 27 times.
✗ Branch 14 not taken.
54 phi.segment<4>(4 * (k - 1)) << Y.mass(), Y.mass() * Y.lever();
257 }
258
259
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Vector3d com = centerOfMass(model, data_ref, q);
260
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Vector3d static_com_ref;
261
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 static_com_ref << com;
262
263
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Vector3d static_com = data.staticRegressor * phi;
264
265
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(static_com.isApprox(static_com_ref));
266 2 }
267
268
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_body_regressor)
269 {
270 using namespace Eigen;
271 using namespace pinocchio;
272
273
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Inertia I(Inertia::Random());
274
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Motion v(Motion::Random());
275
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Motion a(Motion::Random());
276
277
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 Force f = I * a + I.vxiv(v);
278
279
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 Inertia::Vector6 f_regressor = bodyRegressor(v, a) * I.toDynamicParameters();
280
281
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 29 not taken.
✓ Branch 30 taken 1 times.
2 BOOST_CHECK(f_regressor.isApprox(f.toVector()));
282 2 }
283
284
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_joint_body_regressor)
285 {
286 using namespace Eigen;
287 using namespace pinocchio;
288
289
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Model model;
290
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 buildModels::manipulator(model);
291
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data(model);
292
293 2 JointIndex JOINT_ID = JointIndex(model.njoints) - 1;
294
295
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 VectorXd q = randomConfiguration(model);
296
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 VectorXd v = Eigen::VectorXd::Random(model.nv);
297
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 VectorXd a = Eigen::VectorXd::Random(model.nv);
298
299
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 rnea(model, data, q, v, a);
300
301
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 Force f = data.f[JOINT_ID];
302
303 Inertia::Vector6 f_regressor =
304
4/8
✓ 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.
2 jointBodyRegressor(model, data, JOINT_ID) * model.inertias[JOINT_ID].toDynamicParameters();
305
306
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 29 not taken.
✓ Branch 30 taken 1 times.
2 BOOST_CHECK(f_regressor.isApprox(f.toVector()));
307 2 }
308
309
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_frame_body_regressor)
310 {
311 using namespace Eigen;
312 using namespace pinocchio;
313
314
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Model model;
315
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 buildModels::manipulator(model);
316
317 2 JointIndex JOINT_ID = JointIndex(model.njoints) - 1;
318
319
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const SE3 & framePlacement = SE3::Random();
320
2/4
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
2 FrameIndex FRAME_ID = model.addBodyFrame("test_body", JOINT_ID, framePlacement, -1);
321
322
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data(model);
323
324
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 VectorXd q = randomConfiguration(model);
325
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 VectorXd v = Eigen::VectorXd::Random(model.nv);
326
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 VectorXd a = Eigen::VectorXd::Random(model.nv);
327
328
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 rnea(model, data, q, v, a);
329
330
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 Force f = framePlacement.actInv(data.f[JOINT_ID]);
331
1/2
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
2 Inertia I = framePlacement.actInv(model.inertias[JOINT_ID]);
332
333 Inertia::Vector6 f_regressor =
334
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 frameBodyRegressor(model, data, FRAME_ID) * I.toDynamicParameters();
335
336
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 29 not taken.
✓ Branch 30 taken 1 times.
2 BOOST_CHECK(f_regressor.isApprox(f.toVector()));
337 2 }
338
339
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_joint_torque_regressor)
340 {
341 using namespace Eigen;
342 using namespace pinocchio;
343
344
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Model model;
345
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 buildModels::humanoidRandom(model);
346
347
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.lowerPositionLimit.head<7>().fill(-1.);
348
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.upperPositionLimit.head<7>().fill(1.);
349
350
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data(model);
351
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data_ref(model);
352
353
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 VectorXd q = randomConfiguration(model);
354
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 VectorXd v = Eigen::VectorXd::Random(model.nv);
355
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 VectorXd a = Eigen::VectorXd::Random(model.nv);
356
357
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 rnea(model, data_ref, q, v, a);
358
359
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Eigen::VectorXd params(10 * (model.njoints - 1));
360
2/2
✓ Branch 0 taken 27 times.
✓ Branch 1 taken 1 times.
56 for (JointIndex i = 1; i < (Model::JointIndex)model.njoints; ++i)
361
3/6
✓ Branch 2 taken 27 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 27 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 27 times.
✗ Branch 9 not taken.
54 params.segment<10>((int)((i - 1) * 10)) = model.inertias[i].toDynamicParameters();
362
363
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeJointTorqueRegressor(model, data, q, v, a);
364
365
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 Eigen::VectorXd tau_regressor = data.jointTorqueRegressor * params;
366
367
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(tau_regressor.isApprox(data_ref.tau));
368 2 }
369
370
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_kinetic_energy_regressor)
371 {
372 using namespace Eigen;
373 using namespace pinocchio;
374
375
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Model model;
376
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 buildModels::humanoidRandom(model);
377
378
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.lowerPositionLimit.head<7>().fill(-1.);
379
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.upperPositionLimit.head<7>().fill(1.);
380
381
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data(model);
382
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data_ref(model);
383
384
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const VectorXd q = randomConfiguration(model);
385
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const VectorXd v = Eigen::VectorXd::Random(model.nv);
386
387
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeAllTerms(model, data_ref, q, v);
388
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 auto target_energy = computeKineticEnergy(model, data_ref);
389
390
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const auto regressor = computeKineticEnergyRegressor(model, data, q, v);
391
392
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Eigen::VectorXd params(10 * (model.njoints - 1));
393
2/2
✓ Branch 0 taken 27 times.
✓ Branch 1 taken 1 times.
56 for (JointIndex i = 1; i < (Model::JointIndex)model.njoints; ++i)
394
3/6
✓ Branch 2 taken 27 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 27 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 27 times.
✗ Branch 9 not taken.
54 params.segment<10>(Eigen::DenseIndex((i - 1) * 10)) = model.inertias[i].toDynamicParameters();
395
396
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const double kinetic_energy_regressor = data.kineticEnergyRegressor * params;
397
398
6/12
✓ 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 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
2 BOOST_CHECK_CLOSE(kinetic_energy_regressor, target_energy, 1e-12);
399 2 }
400
401
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_potential_energy_regressor)
402 {
403 using namespace Eigen;
404 using namespace pinocchio;
405
406
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Model model;
407
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 buildModels::humanoidRandom(model);
408
409
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.lowerPositionLimit.head<7>().fill(-1.);
410
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 model.upperPositionLimit.head<7>().fill(1.);
411
412
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data(model);
413
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 pinocchio::Data data_ref(model);
414
415
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const VectorXd q = randomConfiguration(model);
416
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const VectorXd v = Eigen::VectorXd::Random(model.nv);
417
418
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computeAllTerms(model, data_ref, q, v);
419
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 const double target_energy = computePotentialEnergy(model, data_ref);
420
421
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 Eigen::VectorXd params(10 * (model.njoints - 1));
422
2/2
✓ Branch 0 taken 27 times.
✓ Branch 1 taken 1 times.
56 for (JointIndex i = 1; i < (Model::JointIndex)model.njoints; ++i)
423
3/6
✓ Branch 2 taken 27 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 27 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 27 times.
✗ Branch 9 not taken.
54 params.segment<10>(Eigen::DenseIndex((i - 1) * 10)) = model.inertias[i].toDynamicParameters();
424
425
1/2
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
2 computePotentialEnergyRegressor(model, data, q);
426
2/4
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
2 const double potential_energy_regressor = data.potentialEnergyRegressor * params;
427
428
6/12
✓ 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 13 taken 1 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
2 BOOST_CHECK_CLOSE(potential_energy_regressor, target_energy, 1e-12);
429 2 }
430
431 BOOST_AUTO_TEST_SUITE_END()
432