Directory: | ./ |
---|---|
File: | unittest/rnea-second-order-derivatives.cpp |
Date: | 2025-02-12 21:03:38 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 147 | 147 | 100.0% |
Branches: | 334 | 644 | 51.9% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | // | ||
2 | // Copyright (c) 2017-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/joint-configuration.hpp" | ||
9 | #include "pinocchio/algorithm/rnea-second-order-derivatives.hpp" | ||
10 | #include "pinocchio/algorithm/rnea-derivatives.hpp" | ||
11 | #include "pinocchio/multibody/sample-models.hpp" | ||
12 | |||
13 | #include <iostream> | ||
14 | |||
15 | #include <boost/test/unit_test.hpp> | ||
16 | #include <boost/utility/binary.hpp> | ||
17 | |||
18 | BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE) | ||
19 | |||
20 |
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_rnea_derivatives_SO) |
21 | { | ||
22 | using namespace Eigen; | ||
23 | using namespace pinocchio; | ||
24 | |||
25 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Model model; |
26 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | buildModels::humanoidRandom(model); |
27 | |||
28 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | Data data(model), data_fd(model); |
29 | |||
30 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | model.lowerPositionLimit.head<3>().fill(-1.); |
31 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | model.upperPositionLimit.head<3>().fill(1.); |
32 | |||
33 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | VectorXd q = randomConfiguration(model); |
34 |
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)); |
35 |
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)); |
36 | |||
37 | // check with only q non-zero | ||
38 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Tensor3x dtau2_dq(model.nv, model.nv, model.nv); |
39 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Tensor3x dtau2_dv(model.nv, model.nv, model.nv); |
40 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Tensor3x dtau2_dqdv(model.nv, model.nv, model.nv); |
41 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Tensor3x dtau2_dadq(model.nv, model.nv, model.nv); |
42 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dq.setZero(); |
43 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dv.setZero(); |
44 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dqdv.setZero(); |
45 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dadq.setZero(); |
46 | |||
47 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ComputeRNEASecondOrderDerivatives( |
48 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | model, data, q, VectorXd::Zero(model.nv), VectorXd::Zero(model.nv), dtau2_dq, dtau2_dv, |
49 | dtau2_dqdv, dtau2_dadq); | ||
50 | |||
51 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Tensor3x dtau2_dq_fd(model.nv, model.nv, model.nv); |
52 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Tensor3x dtau2_dv_fd(model.nv, model.nv, model.nv); |
53 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Tensor3x dtau2_dqdv_fd(model.nv, model.nv, model.nv); |
54 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Tensor3x dtau2_dadq_fd(model.nv, model.nv, model.nv); |
55 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dq_fd.setZero(); |
56 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dv_fd.setZero(); |
57 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dqdv_fd.setZero(); |
58 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dadq_fd.setZero(); |
59 | |||
60 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | MatrixXd drnea_dq_plus(MatrixXd::Zero(model.nv, model.nv)); |
61 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | MatrixXd drnea_dv_plus(MatrixXd::Zero(model.nv, model.nv)); |
62 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | MatrixXd drnea_da_plus(MatrixXd::Zero(model.nv, model.nv)); |
63 | |||
64 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | MatrixXd temp1(MatrixXd::Zero(model.nv, model.nv)); |
65 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | MatrixXd temp2(MatrixXd::Zero(model.nv, model.nv)); |
66 | |||
67 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | VectorXd v_eps(VectorXd::Zero(model.nv)); |
68 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | VectorXd q_plus(model.nq); |
69 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | VectorXd v_plus(model.nv); |
70 | |||
71 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | MatrixXd rnea_partial_dq(MatrixXd::Zero(model.nv, model.nv)); |
72 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | MatrixXd rnea_partial_dv(MatrixXd::Zero(model.nv, model.nv)); |
73 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | MatrixXd rnea_partial_da(MatrixXd::Zero(model.nv, model.nv)); |
74 | |||
75 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | computeRNEADerivatives( |
76 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | model, data, q, VectorXd::Zero(model.nv), VectorXd::Zero(model.nv), rnea_partial_dq, |
77 | rnea_partial_dv, rnea_partial_da); | ||
78 | |||
79 | 2 | const double alpha = 1e-7; | |
80 | |||
81 |
2/2✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
|
66 | for (int k = 0; k < model.nv; ++k) |
82 | { | ||
83 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_eps[k] += alpha; |
84 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | q_plus = integrate(model, q, v_eps); |
85 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | computeRNEADerivatives( |
86 |
2/4✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
|
64 | model, data_fd, q_plus, VectorXd::Zero(model.nv), VectorXd::Zero(model.nv), drnea_dq_plus, |
87 | drnea_dv_plus, drnea_da_plus); | ||
88 |
3/6✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 32 times.
✗ Branch 8 not taken.
|
64 | temp1 = (drnea_dq_plus - rnea_partial_dq) / alpha; |
89 |
2/2✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 32 times.
|
2112 | for (int ii = 0; ii < model.nv; ii++) |
90 | { | ||
91 |
2/2✓ Branch 0 taken 32768 times.
✓ Branch 1 taken 1024 times.
|
67584 | for (int jj = 0; jj < model.nv; jj++) |
92 | { | ||
93 |
2/4✓ Branch 1 taken 32768 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32768 times.
✗ Branch 5 not taken.
|
65536 | dtau2_dq_fd(jj, ii, k) = temp1(jj, ii); |
94 | } | ||
95 | } | ||
96 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_eps[k] -= alpha; |
97 | } | ||
98 | |||
99 |
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 | Map<VectorXd> mq(dtau2_dq.data(), dtau2_dq.size()); |
100 |
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 | Map<VectorXd> mq_fd(dtau2_dq_fd.data(), dtau2_dq_fd.size()); |
101 |
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(mq.isApprox(mq_fd, sqrt(alpha))); |
102 | |||
103 | // Check with q and a non zero | ||
104 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dq.setZero(); |
105 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dv.setZero(); |
106 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dqdv.setZero(); |
107 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dadq.setZero(); |
108 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ComputeRNEASecondOrderDerivatives( |
109 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | model, data, q, VectorXd::Zero(model.nv), a, dtau2_dq, dtau2_dv, dtau2_dqdv, dtau2_dadq); |
110 | |||
111 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | rnea_partial_dq.setZero(); |
112 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | rnea_partial_dv.setZero(); |
113 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | rnea_partial_da.setZero(); |
114 | |||
115 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dq_fd.setZero(); |
116 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dadq_fd.setZero(); |
117 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | drnea_dq_plus.setZero(); |
118 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | drnea_dv_plus.setZero(); |
119 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | drnea_da_plus.setZero(); |
120 | |||
121 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | computeRNEADerivatives( |
122 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | model, data, q, VectorXd::Zero(model.nv), a, rnea_partial_dq, rnea_partial_dv, rnea_partial_da); |
123 | |||
124 |
2/2✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
|
66 | for (int k = 0; k < model.nv; ++k) |
125 | { | ||
126 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_eps[k] += alpha; |
127 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | q_plus = integrate(model, q, v_eps); |
128 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | computeRNEADerivatives( |
129 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | model, data_fd, q_plus, VectorXd::Zero(model.nv), a, drnea_dq_plus, drnea_dv_plus, |
130 | drnea_da_plus); | ||
131 |
3/6✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 32 times.
✗ Branch 8 not taken.
|
64 | temp1 = (drnea_dq_plus - rnea_partial_dq) / alpha; |
132 |
3/6✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 32 times.
✗ Branch 8 not taken.
|
64 | temp2 = (drnea_da_plus - rnea_partial_da) / alpha; |
133 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | temp2.triangularView<Eigen::StrictlyLower>() = |
134 |
3/6✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 32 times.
✗ Branch 8 not taken.
|
128 | temp2.transpose().triangularView<Eigen::StrictlyLower>(); |
135 |
2/2✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 32 times.
|
2112 | for (int ii = 0; ii < model.nv; ii++) |
136 | { | ||
137 |
2/2✓ Branch 0 taken 32768 times.
✓ Branch 1 taken 1024 times.
|
67584 | for (int jj = 0; jj < model.nv; jj++) |
138 | { | ||
139 |
2/4✓ Branch 1 taken 32768 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32768 times.
✗ Branch 5 not taken.
|
65536 | dtau2_dq_fd(jj, ii, k) = temp1(jj, ii); |
140 |
2/4✓ Branch 1 taken 32768 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32768 times.
✗ Branch 5 not taken.
|
65536 | dtau2_dadq_fd(jj, ii, k) = temp2(jj, ii); |
141 | } | ||
142 | } | ||
143 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_eps[k] -= alpha; |
144 | } | ||
145 |
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 | Map<VectorXd> maq(dtau2_dadq.data(), dtau2_dadq.size()); |
146 |
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 | Map<VectorXd> maq_fd(dtau2_dadq_fd.data(), dtau2_dadq_fd.size()); |
147 | |||
148 |
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(mq.isApprox(mq_fd, sqrt(alpha))); |
149 |
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(maq.isApprox(maq_fd, sqrt(alpha))); |
150 | |||
151 | // Check with q,v and a non zero | ||
152 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dq.setZero(); |
153 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dv.setZero(); |
154 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dqdv.setZero(); |
155 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dadq.setZero(); |
156 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ComputeRNEASecondOrderDerivatives( |
157 | model, data, q, v, a, dtau2_dq, dtau2_dv, dtau2_dqdv, dtau2_dadq); | ||
158 | |||
159 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | rnea_partial_dq.setZero(); |
160 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | rnea_partial_dv.setZero(); |
161 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | rnea_partial_da.setZero(); |
162 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | computeRNEADerivatives(model, data, q, v, a, rnea_partial_dq, rnea_partial_dv, rnea_partial_da); |
163 | |||
164 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dq_fd.setZero(); |
165 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dadq_fd.setZero(); |
166 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | drnea_dq_plus.setZero(); |
167 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | drnea_dv_plus.setZero(); |
168 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | drnea_da_plus.setZero(); |
169 | |||
170 |
2/2✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
|
66 | for (int k = 0; k < model.nv; ++k) |
171 | { | ||
172 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_eps[k] += alpha; |
173 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | q_plus = integrate(model, q, v_eps); |
174 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | computeRNEADerivatives( |
175 | model, data_fd, q_plus, v, a, drnea_dq_plus, drnea_dv_plus, drnea_da_plus); | ||
176 |
3/6✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 32 times.
✗ Branch 8 not taken.
|
64 | temp1 = (drnea_dq_plus - rnea_partial_dq) / alpha; |
177 |
3/6✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 32 times.
✗ Branch 8 not taken.
|
64 | temp2 = (drnea_da_plus - rnea_partial_da) / alpha; |
178 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | temp2.triangularView<Eigen::StrictlyLower>() = |
179 |
3/6✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 32 times.
✗ Branch 8 not taken.
|
128 | temp2.transpose().triangularView<Eigen::StrictlyLower>(); |
180 |
2/2✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 32 times.
|
2112 | for (int ii = 0; ii < model.nv; ii++) |
181 | { | ||
182 |
2/2✓ Branch 0 taken 32768 times.
✓ Branch 1 taken 1024 times.
|
67584 | for (int jj = 0; jj < model.nv; jj++) |
183 | { | ||
184 |
2/4✓ Branch 1 taken 32768 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32768 times.
✗ Branch 5 not taken.
|
65536 | dtau2_dq_fd(jj, ii, k) = temp1(jj, ii); |
185 |
2/4✓ Branch 1 taken 32768 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32768 times.
✗ Branch 5 not taken.
|
65536 | dtau2_dadq_fd(jj, ii, k) = temp2(jj, ii); |
186 | } | ||
187 | } | ||
188 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_eps[k] -= alpha; |
189 | } | ||
190 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dv_fd.setZero(); |
191 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | dtau2_dqdv_fd.setZero(); |
192 |
2/2✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
|
66 | for (int k = 0; k < model.nv; ++k) |
193 | { | ||
194 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_eps[k] += alpha; |
195 |
2/4✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
|
64 | v_plus = v + v_eps; |
196 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | computeRNEADerivatives( |
197 | model, data_fd, q, v_plus, a, drnea_dq_plus, drnea_dv_plus, drnea_da_plus); | ||
198 |
3/6✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 32 times.
✗ Branch 8 not taken.
|
64 | temp1 = (drnea_dv_plus - rnea_partial_dv) / alpha; |
199 |
3/6✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 32 times.
✗ Branch 8 not taken.
|
64 | temp2 = (drnea_dq_plus - rnea_partial_dq) / alpha; |
200 |
2/2✓ Branch 0 taken 1024 times.
✓ Branch 1 taken 32 times.
|
2112 | for (int ii = 0; ii < model.nv; ii++) |
201 | { | ||
202 |
2/2✓ Branch 0 taken 32768 times.
✓ Branch 1 taken 1024 times.
|
67584 | for (int jj = 0; jj < model.nv; jj++) |
203 | { | ||
204 |
2/4✓ Branch 1 taken 32768 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32768 times.
✗ Branch 5 not taken.
|
65536 | dtau2_dv_fd(jj, ii, k) = temp1(jj, ii); |
205 |
2/4✓ Branch 1 taken 32768 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32768 times.
✗ Branch 5 not taken.
|
65536 | dtau2_dqdv_fd(jj, ii, k) = temp2(jj, ii); |
206 | } | ||
207 | } | ||
208 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_eps[k] -= alpha; |
209 | } | ||
210 |
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 | Map<VectorXd> mv(dtau2_dv.data(), dtau2_dv.size()); |
211 |
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 | Map<VectorXd> mv_fd(dtau2_dv_fd.data(), dtau2_dv_fd.size()); |
212 | |||
213 |
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 | Map<VectorXd> mqv(dtau2_dqdv.data(), dtau2_dqdv.size()); |
214 |
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 | Map<VectorXd> mqv_fd(dtau2_dqdv_fd.data(), dtau2_dqdv_fd.size()); |
215 | |||
216 |
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(mq.isApprox(mq_fd, sqrt(alpha))); |
217 |
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(maq.isApprox(maq_fd, sqrt(alpha))); |
218 |
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(mv.isApprox(mv_fd, sqrt(alpha))); |
219 |
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(mqv.isApprox(mqv_fd, sqrt(alpha))); |
220 | |||
221 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data data2(model); |
222 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | ComputeRNEASecondOrderDerivatives(model, data2, q, v, a); |
223 | |||
224 |
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 | Map<VectorXd> mq2(data2.d2tau_dqdq.data(), (data2.d2tau_dqdq).size()); |
225 |
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 | Map<VectorXd> mv2(data2.d2tau_dvdv.data(), (data2.d2tau_dvdv).size()); |
226 |
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 | Map<VectorXd> mqv2(data2.d2tau_dqdv.data(), (data2.d2tau_dqdv).size()); |
227 |
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 | Map<VectorXd> maq2(data2.d2tau_dadq.data(), (data2.d2tau_dadq).size()); |
228 | |||
229 |
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(mq.isApprox(mq2, sqrt(alpha))); |
230 |
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(mv.isApprox(mv2, sqrt(alpha))); |
231 |
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(mqv.isApprox(mqv2, sqrt(alpha))); |
232 |
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(maq.isApprox(maq2, sqrt(alpha))); |
233 | 2 | } | |
234 | |||
235 | BOOST_AUTO_TEST_SUITE_END() | ||
236 |