GCC Code Coverage Report


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