8 #include <boost/test/unit_test.hpp>
9 #include <boost/utility/binary.hpp>
13 BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE)
28 const double scaling_factor = 2.;
29 ConstraintRef constraint_ref(jdata.
S.matrix()), constraint_ref_shared(jdata.
S.matrix());
30 ScaledConstraint scaled_constraint(constraint_ref_shared, scaling_factor);
32 BOOST_CHECK(constraint_ref.nv() == scaled_constraint.nv());
34 typedef typename JointModel::TangentVector_t TangentVector_t;
35 TangentVector_t
v = TangentVector_t::Random();
40 BOOST_CHECK(
m.isApprox(m_ref));
43 SE3 M = SE3::Random();
44 typename ScaledConstraint::DenseBase
S =
M.act(scaled_constraint);
45 typename ScaledConstraint::DenseBase S_ref = scaling_factor *
M.act(constraint_ref);
47 BOOST_CHECK(
S.isApprox(S_ref));
51 typename ScaledConstraint::DenseBase
S = scaled_constraint.matrix();
52 typename ScaledConstraint::DenseBase S_ref = scaling_factor * constraint_ref.matrix();
54 BOOST_CHECK(
S.isApprox(S_ref));
59 typename ScaledConstraint::DenseBase
S =
v.cross(scaled_constraint);
60 typename ScaledConstraint::DenseBase S_ref = scaling_factor *
v.cross(constraint_ref);
62 BOOST_CHECK(
S.isApprox(S_ref));
67 const Eigen::DenseIndex
dim = ScaledConstraint::MaxDim;
69 Eigen::MatrixXd Fout = scaled_constraint.transpose() * Fin;
70 Eigen::MatrixXd Fout_ref = scaling_factor * (constraint_ref.transpose() * Fin);
71 BOOST_CHECK(Fout.isApprox(Fout_ref));
73 Force force_in(Force::Random());
74 Eigen::MatrixXd Stf = (scaled_constraint.transpose() * force_in);
75 Eigen::MatrixXd Stf_ref = scaling_factor * (constraint_ref.transpose() * force_in);
76 BOOST_CHECK(Stf_ref.isApprox(Stf));
82 Eigen::MatrixXd YS =
Y * scaled_constraint;
83 Eigen::MatrixXd YS_ref = scaling_factor * (
Y * constraint_ref);
85 BOOST_CHECK(YS.isApprox(YS_ref));
92 template<
typename Jo
intModel>
121 typedef boost::variant<
129 template<
typename Jo
intModel,
typename MimicConfigurationTransform,
bool MimicIdentity>
137 const double scaling_factor = MimicIdentity ? 1. : 2.5;
138 const double offset = MimicIdentity ? 0 : 0.75;
147 BOOST_CHECK(jmodel_mimic.nq() == 0);
148 BOOST_CHECK(jmodel_mimic.nv() == 0);
150 BOOST_CHECK(jmodel_mimic.idx_q() == jmodel.
idx_q());
151 BOOST_CHECK(jmodel_mimic.idx_v() == jmodel.
idx_v());
156 LieGroupType().randomConfiguration(-ConfigVectorType::Ones(), ConfigVectorType::Ones());
160 jmodel.
calc(jdata, q0_mimic);
161 jmodel_mimic.
calc(jdata_mimic,
q0);
163 BOOST_CHECK(((
SE3)jdata.
M).isApprox((
SE3)jdata_mimic.M()));
164 BOOST_CHECK((scaling_factor * jdata.
S.matrix()).isApprox(jdata_mimic.
S.matrix()));
168 q0 = LieGroupType().randomConfiguration(-ConfigVectorType::Ones(), ConfigVectorType::Ones());
172 jmodel.
calc(jdata, q0_mimic, v0_mimic);
173 jmodel_mimic.
calc(jdata_mimic,
q0,
v0);
175 BOOST_CHECK(((
SE3)jdata.
M).isApprox((
SE3)jdata_mimic.M()));
176 BOOST_CHECK((scaling_factor * jdata.
S.matrix()).isApprox(jdata_mimic.
S.matrix()));
177 BOOST_CHECK(((
Motion)jdata.
v).isApprox((
Motion)jdata_mimic.v()));
180 template<
typename MimicConfigurationTransform,
bool MimicIdentity>
184 template<
typename Jo
intModel>
190 test_joint_mimic<JointModel, MimicConfigurationTransform, MimicIdentity>(jmodel);
198 test_joint_mimic<JointModelRevoluteUnaligned, MimicConfigurationTransform, MimicIdentity>(
207 test_joint_mimic<JointModelPrismaticUnaligned, MimicConfigurationTransform, MimicIdentity>(
215 typedef boost::variant<
220 typedef boost::variant<JointModelRUBX, JointModelRUBY, JointModelRUBZ> VariantUnboundedRevolute;
224 boost::mpl::for_each<VariantUnboundedRevolute::types>(
231 double scaling = 1., offset = 0.;
236 BOOST_CHECK(
q0 ==
q1);
241 BOOST_CHECK(
q1 == ConfigVectorType::Constant(offset));
244 BOOST_CHECK((scaling *
q0 + ConfigVectorType::Ones() * offset) ==
q1);
250 double scaling = 1., offset = 0.;
255 BOOST_CHECK(
q0.isApprox(
q1));
260 const double theta = atan2(
q0[1],
q0[0]);
263 ==
ConfigVectorType(math::cos(theta * scaling + offset), math::sin(theta * scaling + offset)));
272 jmodel.setIndexes(2, -1, -1, 3);
274 BOOST_CHECK(jmodel.idx_q() == jmodel_ref.
idx_q());
275 BOOST_CHECK(jmodel.idx_v() == jmodel_ref.
idx_v());
280 BOOST_CHECK(jmodel_generic.id() == jmodel.id());
282 BOOST_AUTO_TEST_SUITE_END()