13 #include <boost/test/unit_test.hpp>
17 using namespace Eigen;
31 model.appendBodyToJoint(idx,
Y);
34 BOOST_AUTO_TEST_SUITE(JointUniversal)
42 axis1 << 1.0, 0.0, 0.0;
44 axis2 << 0.0, 1.0, 0.0;
46 Model modelUniversal, modelRXRY;
57 Data dataUniversal(modelUniversal);
58 Data dataRXRY(modelRXRY);
60 BOOST_CHECK(modelUniversal.
nv == modelRXRY.
nv);
61 BOOST_CHECK(modelUniversal.
nq == modelRXRY.
nq);
63 Eigen::VectorXd
q = Eigen::VectorXd::Ones(modelRXRY.
nq);
68 BOOST_CHECK(dataUniversal.oMi.back().isApprox(dataRXRY.oMi.back()));
69 BOOST_CHECK(dataUniversal.liMi.back().isApprox(dataRXRY.liMi.back()));
70 BOOST_CHECK(dataUniversal.Ycrb.back().matrix().isApprox(dataRXRY.Ycrb.back().matrix()));
72 Eigen::VectorXd
v = Eigen::VectorXd::Ones(modelRXRY.
nv);
76 BOOST_CHECK(dataUniversal.oMi.back().isApprox(dataRXRY.oMi.back()));
77 BOOST_CHECK(dataUniversal.liMi.back().isApprox(dataRXRY.liMi.back()));
78 BOOST_CHECK(dataUniversal.Ycrb.back().matrix().isApprox(dataRXRY.Ycrb.back().matrix()));
83 BOOST_CHECK(dataUniversal.com.back().isApprox(dataRXRY.com.back()));
84 BOOST_CHECK(dataUniversal.
nle.isApprox(dataRXRY.
nle));
85 BOOST_CHECK(dataUniversal.f.back().toVector().isApprox(dataRXRY.f.back().toVector()));
88 Eigen::VectorXd
a = Eigen::VectorXd::Ones(modelRXRY.
nv);
90 Eigen::VectorXd tauRXRY =
rnea(modelRXRY, dataRXRY,
q,
v,
a);
91 Eigen::VectorXd tauUniversal =
rnea(modelUniversal, dataUniversal,
q,
v,
a);
93 BOOST_CHECK(tauUniversal.isApprox(tauRXRY));
97 Eigen::VectorXd aAbaUniversal =
100 BOOST_CHECK(aAbaUniversal.isApprox(aAbaRXRY));
106 BOOST_CHECK(dataUniversal.
M.isApprox(dataRXRY.
M));
109 Eigen::Matrix<double, 6, Eigen::Dynamic> jacobianRXRY;
110 jacobianRXRY.resize(6, 2);
111 jacobianRXRY.setZero();
112 Eigen::Matrix<double, 6, Eigen::Dynamic> jacobianUniversal;
113 jacobianUniversal.resize(6, 2);
114 jacobianUniversal.setZero();
121 BOOST_CHECK(jacobianUniversal.isApprox(jacobianRXRY));
132 axis2 << -1., 0., 0.;
134 Model modelUniversal, modelRandomAxis;
144 modelRandomAxis, joint_model_RandomAxis, 0,
SE3::Identity(),
"random_axis", inertia);
146 Data dataUniversal(modelUniversal);
147 Data dataRandomAxis(modelRandomAxis);
149 BOOST_CHECK(modelUniversal.
nv == modelRandomAxis.
nv);
150 BOOST_CHECK(modelUniversal.
nq == modelRandomAxis.
nq);
152 Eigen::VectorXd
q = Eigen::VectorXd::Ones(modelRandomAxis.
nq);
157 BOOST_CHECK(dataUniversal.oMi.back().isApprox(dataRandomAxis.oMi.back()));
158 BOOST_CHECK(dataUniversal.liMi.back().isApprox(dataRandomAxis.liMi.back()));
159 BOOST_CHECK(dataUniversal.Ycrb.back().matrix().isApprox(dataRandomAxis.Ycrb.back().matrix()));
161 Eigen::VectorXd
v = Eigen::VectorXd::Ones(modelRandomAxis.
nv);
165 BOOST_CHECK(dataUniversal.oMi.back().isApprox(dataRandomAxis.oMi.back()));
166 BOOST_CHECK(dataUniversal.liMi.back().isApprox(dataRandomAxis.liMi.back()));
167 BOOST_CHECK(dataUniversal.Ycrb.back().matrix().isApprox(dataRandomAxis.Ycrb.back().matrix()));
172 BOOST_CHECK(dataUniversal.com.back().isApprox(dataRandomAxis.com.back()));
173 BOOST_CHECK(dataUniversal.
nle.isApprox(dataRandomAxis.
nle));
174 BOOST_CHECK(dataUniversal.f.back().toVector().isApprox(dataRandomAxis.f.back().toVector()));
177 Eigen::VectorXd
a = Eigen::VectorXd::Ones(modelRandomAxis.
nv);
179 Eigen::VectorXd tauRandomAxis =
rnea(modelRandomAxis, dataRandomAxis,
q,
v,
a);
180 Eigen::VectorXd tauUniversal =
rnea(modelUniversal, dataUniversal,
q,
v,
a);
182 BOOST_CHECK(tauUniversal.isApprox(tauRandomAxis));
185 Eigen::VectorXd aAbaRandomAxis =
187 Eigen::VectorXd aAbaUniversal =
190 BOOST_CHECK(aAbaUniversal.isApprox(aAbaRandomAxis));
196 BOOST_CHECK(dataUniversal.
M.isApprox(dataRandomAxis.
M));
199 Eigen::Matrix<double, 6, Eigen::Dynamic> jacobianRandomAxis;
200 jacobianRandomAxis.resize(6, 2);
201 jacobianRandomAxis.setZero();
202 Eigen::Matrix<double, 6, Eigen::Dynamic> jacobianUniversal;
203 jacobianUniversal.resize(6, 2);
204 jacobianUniversal.setZero();
211 BOOST_CHECK(jacobianUniversal.isApprox(jacobianRandomAxis));
214 BOOST_AUTO_TEST_SUITE_END()