Directory: | ./ |
---|---|
File: | unittest/frames-derivatives.cpp |
Date: | 2025-02-12 21:03:38 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 326 | 326 | 100.0% |
Branches: | 766 | 1530 | 50.1% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | // | ||
2 | // Copyright (c) 2020 INRIA | ||
3 | // | ||
4 | |||
5 | #include "pinocchio/algorithm/jacobian.hpp" | ||
6 | #include "pinocchio/algorithm/joint-configuration.hpp" | ||
7 | #include "pinocchio/algorithm/kinematics.hpp" | ||
8 | #include "pinocchio/algorithm/kinematics-derivatives.hpp" | ||
9 | #include "pinocchio/algorithm/frames.hpp" | ||
10 | #include "pinocchio/algorithm/frames-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_frames_derivatives_velocity) |
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 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
4 | const Model::JointIndex jointId = model.existJointName("rarm2_joint") |
29 |
4/12✓ Branch 0 taken 1 times.
✗ Branch 1 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 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
|
4 | ? model.getJointId("rarm2_joint") |
30 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
2 | : (Model::Index)(model.njoints - 1); |
31 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
4 | Frame frame("rand", jointId, 0, SE3::Random(), OP_FRAME); |
32 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | FrameIndex frameId = model.addFrame(frame); |
33 | |||
34 |
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 31 not taken.
✓ Branch 32 taken 1 times.
|
2 | BOOST_CHECK(model.getFrameId("rand") == frameId); |
35 |
6/12✓ 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 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(model.frames[frameId].parentJoint == jointId); |
36 | |||
37 |
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_ref(model); |
38 | |||
39 |
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.); |
40 |
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.); |
41 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | VectorXd q = randomConfiguration(model); |
42 |
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)); |
43 |
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)); |
44 | |||
45 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | computeForwardKinematicsDerivatives(model, data, q, v, a); |
46 | |||
47 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x partial_dq(6, model.nv); |
48 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | partial_dq.setZero(); |
49 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x partial_dq_local_world_aligned(6, model.nv); |
50 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | partial_dq_local_world_aligned.setZero(); |
51 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x partial_dq_local(6, model.nv); |
52 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | partial_dq_local.setZero(); |
53 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x partial_dv(6, model.nv); |
54 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | partial_dv.setZero(); |
55 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x partial_dv_local_world_aligned(6, model.nv); |
56 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | partial_dv_local_world_aligned.setZero(); |
57 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x partial_dv_local(6, model.nv); |
58 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | partial_dv_local.setZero(); |
59 | |||
60 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameVelocityDerivatives(model, data, frameId, WORLD, partial_dq, partial_dv); |
61 | |||
62 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameVelocityDerivatives( |
63 | model, data, frameId, LOCAL_WORLD_ALIGNED, partial_dq_local_world_aligned, | ||
64 | partial_dv_local_world_aligned); | ||
65 | |||
66 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameVelocityDerivatives(model, data, frameId, LOCAL, partial_dq_local, partial_dv_local); |
67 | |||
68 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x J_ref(6, model.nv); |
69 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | J_ref.setZero(); |
70 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x J_ref_local_world_aligned(6, model.nv); |
71 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | J_ref_local_world_aligned.setZero(); |
72 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x J_ref_local(6, model.nv); |
73 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | J_ref_local.setZero(); |
74 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | computeJointJacobians(model, data_ref, q); |
75 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameJacobian(model, data_ref, frameId, WORLD, J_ref); |
76 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameJacobian(model, data_ref, frameId, LOCAL_WORLD_ALIGNED, J_ref_local_world_aligned); |
77 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameJacobian(model, data_ref, frameId, LOCAL, J_ref_local); |
78 | |||
79 |
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 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 28 not taken.
✓ Branch 29 taken 1 times.
|
2 | BOOST_CHECK(data_ref.oMf[frameId].isApprox(data.oMf[frameId])); |
80 |
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(partial_dv.isApprox(J_ref)); |
81 |
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(partial_dv_local_world_aligned.isApprox(J_ref_local_world_aligned)); |
82 |
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(partial_dv_local.isApprox(J_ref_local)); |
83 | |||
84 | // Check against finite differences | ||
85 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x partial_dq_fd(6, model.nv); |
86 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | partial_dq_fd.setZero(); |
87 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x partial_dq_fd_local_world_aligned(6, model.nv); |
88 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | partial_dq_fd_local_world_aligned.setZero(); |
89 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x partial_dq_fd_local(6, model.nv); |
90 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | partial_dq_fd_local.setZero(); |
91 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x partial_dv_fd(6, model.nv); |
92 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | partial_dv_fd.setZero(); |
93 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x partial_dv_fd_local_world_aligned(6, model.nv); |
94 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | partial_dv_fd_local_world_aligned.setZero(); |
95 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x partial_dv_fd_local(6, model.nv); |
96 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | partial_dv_fd_local.setZero(); |
97 | 2 | const double alpha = 1e-8; | |
98 | |||
99 | // dvel/dv | ||
100 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Eigen::VectorXd v_plus(v); |
101 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data data_plus(model); |
102 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | forwardKinematics(model, data_ref, q, v); |
103 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Motion v0 = getFrameVelocity(model, data, frameId, WORLD); |
104 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Motion v0_local_world_aligned = getFrameVelocity(model, data, frameId, LOCAL_WORLD_ALIGNED); |
105 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Motion v0_local = getFrameVelocity(model, data, frameId, LOCAL); |
106 |
2/2✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
|
66 | for (int k = 0; k < model.nv; ++k) |
107 | { | ||
108 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_plus[k] += alpha; |
109 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | forwardKinematics(model, data_plus, q, v_plus); |
110 | |||
111 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | partial_dv_fd.col(k) = |
112 |
5/10✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 32 times.
✗ Branch 14 not taken.
|
128 | (getFrameVelocity(model, data_plus, frameId, WORLD) - v0).toVector() / alpha; |
113 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | partial_dv_fd_local_world_aligned.col(k) = |
114 |
2/4✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
|
64 | (getFrameVelocity(model, data_plus, frameId, LOCAL_WORLD_ALIGNED) - v0_local_world_aligned) |
115 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | .toVector() |
116 |
2/4✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
|
128 | / alpha; |
117 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | partial_dv_fd_local.col(k) = |
118 |
5/10✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 32 times.
✗ Branch 14 not taken.
|
128 | (getFrameVelocity(model, data_plus, frameId, LOCAL) - v0_local).toVector() / alpha; |
119 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_plus[k] -= alpha; |
120 | } | ||
121 | |||
122 |
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(partial_dv.isApprox(partial_dv_fd, sqrt(alpha))); |
123 |
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( |
124 | partial_dv_local_world_aligned.isApprox(partial_dv_fd_local_world_aligned, sqrt(alpha))); | ||
125 |
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(partial_dv_local.isApprox(partial_dv_fd_local, sqrt(alpha))); |
126 | |||
127 | // dvel/dq | ||
128 |
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 | Eigen::VectorXd q_plus(q), v_eps(Eigen::VectorXd::Zero(model.nv)); |
129 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | forwardKinematics(model, data_ref, q, v); |
130 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | updateFramePlacements(model, data_ref); |
131 | |||
132 |
2/2✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
|
66 | for (int k = 0; k < model.nv; ++k) |
133 | { | ||
134 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_eps[k] += alpha; |
135 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | q_plus = integrate(model, q, v_eps); |
136 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | forwardKinematics(model, data_plus, q_plus, v); |
137 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | updateFramePlacements(model, data_plus); |
138 | |||
139 | Motion v_plus_local_world_aligned = | ||
140 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | getFrameVelocity(model, data_plus, frameId, LOCAL_WORLD_ALIGNED); |
141 |
4/8✓ Branch 2 taken 32 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 32 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 32 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 32 times.
✗ Branch 13 not taken.
|
64 | SE3::Vector3 trans = data_plus.oMf[frameId].translation() - data_ref.oMf[frameId].translation(); |
142 |
4/8✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
|
64 | v_plus_local_world_aligned.linear() -= v_plus_local_world_aligned.angular().cross(trans); |
143 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | partial_dq_fd.col(k) = |
144 |
5/10✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 32 times.
✗ Branch 14 not taken.
|
128 | (getFrameVelocity(model, data_plus, frameId, WORLD) - v0).toVector() / alpha; |
145 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | partial_dq_fd_local_world_aligned.col(k) = |
146 |
4/8✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
|
128 | (v_plus_local_world_aligned - v0_local_world_aligned).toVector() / alpha; |
147 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | partial_dq_fd_local.col(k) = |
148 |
5/10✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 32 times.
✗ Branch 14 not taken.
|
128 | (getFrameVelocity(model, data_plus, frameId, LOCAL) - v0_local).toVector() / alpha; |
149 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_eps[k] -= alpha; |
150 | } | ||
151 | |||
152 |
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(partial_dq.isApprox(partial_dq_fd, sqrt(alpha))); |
153 |
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( |
154 | partial_dq_local_world_aligned.isApprox(partial_dq_fd_local_world_aligned, sqrt(alpha))); | ||
155 |
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(partial_dq_local.isApprox(partial_dq_fd_local, sqrt(alpha))); |
156 | 2 | } | |
157 | |||
158 |
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_kinematics_derivatives_acceleration) |
159 | { | ||
160 | using namespace Eigen; | ||
161 | using namespace pinocchio; | ||
162 | |||
163 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Model model; |
164 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | buildModels::humanoidRandom(model); |
165 | |||
166 |
2/4✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
|
4 | const Model::JointIndex jointId = model.existJointName("rarm2_joint") |
167 |
4/12✓ Branch 0 taken 1 times.
✗ Branch 1 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 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
|
4 | ? model.getJointId("rarm2_joint") |
168 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
2 | : (Model::Index)(model.njoints - 1); |
169 |
4/8✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 12 not taken.
|
4 | Frame frame("rand", jointId, 0, SE3::Random(), OP_FRAME); |
170 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | FrameIndex frameId = model.addFrame(frame); |
171 | |||
172 |
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 31 not taken.
✓ Branch 32 taken 1 times.
|
2 | BOOST_CHECK(model.getFrameId("rand") == frameId); |
173 |
6/12✓ 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 23 not taken.
✓ Branch 24 taken 1 times.
|
2 | BOOST_CHECK(model.frames[frameId].parentJoint == jointId); |
174 | |||
175 |
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_ref(model); |
176 | |||
177 |
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.); |
178 |
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.); |
179 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | VectorXd q = randomConfiguration(model); |
180 |
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)); |
181 |
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)); |
182 | |||
183 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | computeForwardKinematicsDerivatives(model, data, q, v, a); |
184 | |||
185 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dq(6, model.nv); |
186 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dq.setZero(); |
187 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dq_local(6, model.nv); |
188 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dq_local.setZero(); |
189 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dq_local_world_aligned(6, model.nv); |
190 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dq_local_world_aligned.setZero(); |
191 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dq(6, model.nv); |
192 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dq.setZero(); |
193 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dq_local_world_aligned(6, model.nv); |
194 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dq_local_world_aligned.setZero(); |
195 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dq_local(6, model.nv); |
196 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dq_local.setZero(); |
197 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dv(6, model.nv); |
198 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dv.setZero(); |
199 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dv_local_world_aligned(6, model.nv); |
200 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dv_local_world_aligned.setZero(); |
201 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dv_local(6, model.nv); |
202 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dv_local.setZero(); |
203 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_da(6, model.nv); |
204 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_da.setZero(); |
205 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_da_local_world_aligned(6, model.nv); |
206 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_da_local_world_aligned.setZero(); |
207 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_da_local(6, model.nv); |
208 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_da_local.setZero(); |
209 | |||
210 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameAccelerationDerivatives( |
211 | model, data, frameId, WORLD, v_partial_dq, a_partial_dq, a_partial_dv, a_partial_da); | ||
212 | |||
213 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameAccelerationDerivatives( |
214 | model, data, frameId, LOCAL_WORLD_ALIGNED, v_partial_dq_local_world_aligned, | ||
215 | a_partial_dq_local_world_aligned, a_partial_dv_local_world_aligned, | ||
216 | a_partial_da_local_world_aligned); | ||
217 | |||
218 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameAccelerationDerivatives( |
219 | model, data, frameId, LOCAL, v_partial_dq_local, a_partial_dq_local, a_partial_dv_local, | ||
220 | a_partial_da_local); | ||
221 | |||
222 | // Check v_partial_dq against getFrameVelocityDerivatives | ||
223 | { | ||
224 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data data_v(model); |
225 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | computeForwardKinematicsDerivatives(model, data_v, q, v, a); |
226 | |||
227 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dq_ref(6, model.nv); |
228 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dq_ref.setZero(); |
229 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dq_ref_local_world_aligned(6, model.nv); |
230 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dq_ref_local_world_aligned.setZero(); |
231 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dq_ref_local(6, model.nv); |
232 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dq_ref_local.setZero(); |
233 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dv_ref(6, model.nv); |
234 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dv_ref.setZero(); |
235 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dv_ref_local_world_aligned(6, model.nv); |
236 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dv_ref_local_world_aligned.setZero(); |
237 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dv_ref_local(6, model.nv); |
238 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dv_ref_local.setZero(); |
239 | |||
240 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameVelocityDerivatives(model, data_v, frameId, WORLD, v_partial_dq_ref, v_partial_dv_ref); |
241 | |||
242 |
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(v_partial_dq.isApprox(v_partial_dq_ref)); |
243 |
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_partial_da.isApprox(v_partial_dv_ref)); |
244 | |||
245 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameVelocityDerivatives( |
246 | model, data_v, frameId, LOCAL_WORLD_ALIGNED, v_partial_dq_ref_local_world_aligned, | ||
247 | v_partial_dv_ref_local_world_aligned); | ||
248 | |||
249 |
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(v_partial_dq_local_world_aligned.isApprox(v_partial_dq_ref_local_world_aligned)); |
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 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_partial_da_local_world_aligned.isApprox(v_partial_dv_ref_local_world_aligned)); |
251 | |||
252 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameVelocityDerivatives( |
253 | model, data_v, frameId, LOCAL, v_partial_dq_ref_local, v_partial_dv_ref_local); | ||
254 | |||
255 |
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(v_partial_dq_local.isApprox(v_partial_dq_ref_local)); |
256 |
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_partial_da_local.isApprox(v_partial_dv_ref_local)); |
257 | 2 | } | |
258 | |||
259 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x J_ref(6, model.nv); |
260 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | J_ref.setZero(); |
261 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x J_ref_local(6, model.nv); |
262 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | J_ref_local.setZero(); |
263 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x J_ref_local_world_aligned(6, model.nv); |
264 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | J_ref_local_world_aligned.setZero(); |
265 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | computeJointJacobians(model, data_ref, q); |
266 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameJacobian(model, data_ref, frameId, WORLD, J_ref); |
267 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameJacobian(model, data_ref, frameId, LOCAL_WORLD_ALIGNED, J_ref_local_world_aligned); |
268 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameJacobian(model, data_ref, frameId, LOCAL, J_ref_local); |
269 | |||
270 |
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_partial_da.isApprox(J_ref)); |
271 |
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_partial_da_local_world_aligned.isApprox(J_ref_local_world_aligned)); |
272 |
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_partial_da_local.isApprox(J_ref_local)); |
273 | |||
274 | // Check against finite differences | ||
275 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_da_fd(6, model.nv); |
276 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_da_fd.setZero(); |
277 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_da_fd_local_world_aligned(6, model.nv); |
278 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_da_fd_local_world_aligned.setZero(); |
279 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_da_fd_local(6, model.nv); |
280 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_da_fd_local.setZero(); |
281 | 2 | const double alpha = 1e-8; | |
282 | |||
283 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | Eigen::VectorXd v_plus(v), a_plus(a); |
284 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data data_plus(model); |
285 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | forwardKinematics(model, data_ref, q, v, a); |
286 | |||
287 | // dacc/da | ||
288 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Motion a0 = getFrameAcceleration(model, data, frameId, WORLD); |
289 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Motion a0_local_world_aligned = getFrameAcceleration(model, data, frameId, LOCAL_WORLD_ALIGNED); |
290 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Motion a0_local = getFrameAcceleration(model, data, frameId, LOCAL); |
291 |
2/2✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
|
66 | for (int k = 0; k < model.nv; ++k) |
292 | { | ||
293 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | a_plus[k] += alpha; |
294 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | forwardKinematics(model, data_plus, q, v, a_plus); |
295 | |||
296 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | a_partial_da_fd.col(k) = |
297 |
5/10✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 32 times.
✗ Branch 14 not taken.
|
128 | (getFrameAcceleration(model, data_plus, frameId, WORLD) - a0).toVector() / alpha; |
298 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | a_partial_da_fd_local_world_aligned.col(k) = |
299 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | (getFrameAcceleration(model, data_plus, frameId, LOCAL_WORLD_ALIGNED) |
300 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | - a0_local_world_aligned) |
301 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | .toVector() |
302 |
2/4✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
|
128 | / alpha; |
303 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | a_partial_da_fd_local.col(k) = |
304 |
5/10✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 32 times.
✗ Branch 14 not taken.
|
128 | (getFrameAcceleration(model, data_plus, frameId, LOCAL) - a0_local).toVector() / alpha; |
305 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | a_plus[k] -= alpha; |
306 | } | ||
307 |
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(a_partial_da.isApprox(a_partial_da_fd, sqrt(alpha))); |
308 |
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( |
309 | a_partial_da_local_world_aligned.isApprox(a_partial_da_fd_local_world_aligned, sqrt(alpha))); | ||
310 |
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(a_partial_da_local.isApprox(a_partial_da_fd_local, sqrt(alpha))); |
311 | |||
312 | // dacc/dv | ||
313 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dv_fd(6, model.nv); |
314 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dv_fd.setZero(); |
315 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dv_fd_local_world_aligned(6, model.nv); |
316 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dv_fd_local_world_aligned.setZero(); |
317 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dv_fd_local(6, model.nv); |
318 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dv_fd_local.setZero(); |
319 |
2/2✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
|
66 | for (int k = 0; k < model.nv; ++k) |
320 | { | ||
321 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_plus[k] += alpha; |
322 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | forwardKinematics(model, data_plus, q, v_plus, a); |
323 | |||
324 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | a_partial_dv_fd.col(k) = |
325 |
5/10✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 32 times.
✗ Branch 14 not taken.
|
128 | (getFrameAcceleration(model, data_plus, frameId, WORLD) - a0).toVector() / alpha; |
326 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | a_partial_dv_fd_local_world_aligned.col(k) = |
327 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | (getFrameAcceleration(model, data_plus, frameId, LOCAL_WORLD_ALIGNED) |
328 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | - a0_local_world_aligned) |
329 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | .toVector() |
330 |
2/4✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
|
128 | / alpha; |
331 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | a_partial_dv_fd_local.col(k) = |
332 |
5/10✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 32 times.
✗ Branch 14 not taken.
|
128 | (getFrameAcceleration(model, data_plus, frameId, LOCAL) - a0_local).toVector() / alpha; |
333 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_plus[k] -= alpha; |
334 | } | ||
335 | |||
336 |
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(a_partial_dv.isApprox(a_partial_dv_fd, sqrt(alpha))); |
337 |
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( |
338 | a_partial_dv_local_world_aligned.isApprox(a_partial_dv_fd_local_world_aligned, sqrt(alpha))); | ||
339 |
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(a_partial_dv_local.isApprox(a_partial_dv_fd_local, sqrt(alpha))); |
340 | |||
341 | // dacc/dq | ||
342 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dq.setZero(); |
343 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dv.setZero(); |
344 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_da.setZero(); |
345 | |||
346 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dq_local_world_aligned.setZero(); |
347 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dv_local_world_aligned.setZero(); |
348 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_da_local_world_aligned.setZero(); |
349 | |||
350 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dq_local.setZero(); |
351 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dv_local.setZero(); |
352 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_da_local.setZero(); |
353 | |||
354 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dq_fd(6, model.nv); |
355 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dq_fd.setZero(); |
356 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dq_fd_local_world_aligned(6, model.nv); |
357 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dq_fd_local_world_aligned.setZero(); |
358 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dq_fd_local(6, model.nv); |
359 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dq_fd_local.setZero(); |
360 | |||
361 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | computeForwardKinematicsDerivatives(model, data, q, v, a); |
362 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameAccelerationDerivatives( |
363 | model, data, frameId, WORLD, v_partial_dq, a_partial_dq, a_partial_dv, a_partial_da); | ||
364 | |||
365 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameAccelerationDerivatives( |
366 | model, data, frameId, LOCAL_WORLD_ALIGNED, v_partial_dq_local_world_aligned, | ||
367 | a_partial_dq_local_world_aligned, a_partial_dv_local_world_aligned, | ||
368 | a_partial_da_local_world_aligned); | ||
369 | |||
370 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameAccelerationDerivatives( |
371 | model, data, frameId, LOCAL, v_partial_dq_local, a_partial_dq_local, a_partial_dv_local, | ||
372 | a_partial_da_local); | ||
373 | |||
374 |
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 | Eigen::VectorXd q_plus(q), v_eps(Eigen::VectorXd::Zero(model.nv)); |
375 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | forwardKinematics(model, data_ref, q, v, a); |
376 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | updateFramePlacements(model, data_ref); |
377 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | a0 = getFrameAcceleration(model, data, frameId, WORLD); |
378 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | a0_local_world_aligned = getFrameAcceleration(model, data, frameId, LOCAL_WORLD_ALIGNED); |
379 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | a0_local = getFrameAcceleration(model, data, frameId, LOCAL); |
380 | |||
381 |
2/2✓ Branch 0 taken 32 times.
✓ Branch 1 taken 1 times.
|
66 | for (int k = 0; k < model.nv; ++k) |
382 | { | ||
383 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_eps[k] += alpha; |
384 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | q_plus = integrate(model, q, v_eps); |
385 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | forwardKinematics(model, data_plus, q_plus, v, a); |
386 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | updateFramePlacements(model, data_plus); |
387 | |||
388 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | a_partial_dq_fd.col(k) = |
389 |
5/10✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 32 times.
✗ Branch 14 not taken.
|
128 | (getFrameAcceleration(model, data_plus, frameId, WORLD) - a0).toVector() / alpha; |
390 | Motion a_plus_local_world_aligned = | ||
391 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | getFrameAcceleration(model, data_plus, frameId, LOCAL_WORLD_ALIGNED); |
392 | const SE3::Vector3 trans = | ||
393 |
4/8✓ Branch 2 taken 32 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 32 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 32 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 32 times.
✗ Branch 13 not taken.
|
64 | data_plus.oMf[frameId].translation() - data_ref.oMf[frameId].translation(); |
394 |
4/8✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
|
64 | a_plus_local_world_aligned.linear() -= a_plus_local_world_aligned.angular().cross(trans); |
395 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | a_partial_dq_fd_local_world_aligned.col(k) = |
396 |
4/8✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
|
128 | (a_plus_local_world_aligned - a0_local_world_aligned).toVector() / alpha; |
397 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | a_partial_dq_fd_local.col(k) = |
398 |
5/10✓ 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.
✓ Branch 10 taken 32 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 32 times.
✗ Branch 14 not taken.
|
128 | (getFrameAcceleration(model, data_plus, frameId, LOCAL) - a0_local).toVector() / alpha; |
399 |
1/2✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
|
64 | v_eps[k] -= alpha; |
400 | } | ||
401 | |||
402 |
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(a_partial_dq.isApprox(a_partial_dq_fd, sqrt(alpha))); |
403 |
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( |
404 | a_partial_dq_local_world_aligned.isApprox(a_partial_dq_fd_local_world_aligned, sqrt(alpha))); | ||
405 |
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(a_partial_dq_local.isApprox(a_partial_dq_fd_local, sqrt(alpha))); |
406 | |||
407 | // Test other signatures | ||
408 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dq_other(6, model.nv); |
409 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dq_other.setZero(); |
410 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dq_local_other(6, model.nv); |
411 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dq_local_other.setZero(); |
412 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dq_local_world_aligned_other(6, model.nv); |
413 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dq_local_world_aligned_other.setZero(); |
414 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dv_other(6, model.nv); |
415 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dv_other.setZero(); |
416 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dv_local_other(6, model.nv); |
417 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dv_local_other.setZero(); |
418 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x v_partial_dv_local_world_aligned_other(6, model.nv); |
419 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | v_partial_dv_local_world_aligned_other.setZero(); |
420 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dq_other(6, model.nv); |
421 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dq_other.setZero(); |
422 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dq_local_world_aligned_other(6, model.nv); |
423 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dq_local_world_aligned_other.setZero(); |
424 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dq_local_other(6, model.nv); |
425 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dq_local_other.setZero(); |
426 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dv_other(6, model.nv); |
427 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dv_other.setZero(); |
428 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dv_local_world_aligned_other(6, model.nv); |
429 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dv_local_world_aligned_other.setZero(); |
430 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_dv_local_other(6, model.nv); |
431 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_dv_local_other.setZero(); |
432 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_da_other(6, model.nv); |
433 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_da_other.setZero(); |
434 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_da_local_world_aligned_other(6, model.nv); |
435 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_da_local_world_aligned_other.setZero(); |
436 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | Data::Matrix6x a_partial_da_local_other(6, model.nv); |
437 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | a_partial_da_local_other.setZero(); |
438 | |||
439 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameAccelerationDerivatives( |
440 | model, data, frameId, WORLD, v_partial_dq_other, v_partial_dv_other, a_partial_dq_other, | ||
441 | a_partial_dv_other, a_partial_da_other); | ||
442 | |||
443 |
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(v_partial_dq_other.isApprox(v_partial_dq)); |
444 |
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(v_partial_dv_other.isApprox(a_partial_da)); |
445 |
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_partial_dq_other.isApprox(a_partial_dq)); |
446 |
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_partial_dv_other.isApprox(a_partial_dv)); |
447 |
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_partial_da_other.isApprox(a_partial_da)); |
448 | |||
449 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameAccelerationDerivatives( |
450 | model, data, frameId, LOCAL_WORLD_ALIGNED, v_partial_dq_local_world_aligned_other, | ||
451 | v_partial_dv_local_world_aligned_other, a_partial_dq_local_world_aligned_other, | ||
452 | a_partial_dv_local_world_aligned_other, a_partial_da_local_world_aligned_other); | ||
453 | |||
454 |
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(v_partial_dq_local_world_aligned_other.isApprox(v_partial_dq_local_world_aligned)); |
455 |
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(v_partial_dv_local_world_aligned_other.isApprox(a_partial_da_local_world_aligned)); |
456 |
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_partial_dq_local_world_aligned_other.isApprox(a_partial_dq_local_world_aligned)); |
457 |
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_partial_dv_local_world_aligned_other.isApprox(a_partial_dv_local_world_aligned)); |
458 |
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_partial_da_local_world_aligned_other.isApprox(a_partial_da_local_world_aligned)); |
459 | |||
460 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | getFrameAccelerationDerivatives( |
461 | model, data, frameId, LOCAL, v_partial_dq_local_other, v_partial_dv_local_other, | ||
462 | a_partial_dq_local_other, a_partial_dv_local_other, a_partial_da_local_other); | ||
463 | |||
464 |
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(v_partial_dq_local_other.isApprox(v_partial_dq_local)); |
465 |
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(v_partial_dv_local_other.isApprox(a_partial_da_local)); |
466 |
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_partial_dq_local_other.isApprox(a_partial_dq_local)); |
467 |
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_partial_dv_local_other.isApprox(a_partial_dv_local)); |
468 |
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_partial_da_local_other.isApprox(a_partial_da_local)); |
469 | 2 | } | |
470 | |||
471 | BOOST_AUTO_TEST_SUITE_END() | ||
472 |