14 #include <boost/variant.hpp>
17 #include <boost/test/unit_test.hpp>
18 #include <boost/utility/binary.hpp>
20 BOOST_AUTO_TEST_SUITE(BOOST_TEST_MODULE)
25 SE3 M1 = SE3::Identity();
26 SE3 M2 = SE3::Random();
34 const Eigen::DenseIndex col = 0;
35 for (Eigen::DenseIndex k = 0; k < 3; ++k)
37 BOOST_CHECK(casadi::SX::is_equal(trans(k, col), M1.translation()[k]));
44 Motion v1 = Motion::Zero();
45 Motion v2 = Motion::Random();
56 SE3AD::Matrix3 & ad_rot = ad_M.
rotation();
64 casadi::SX cs_quat(4, 1);
67 casadi::Function eval_quat(
"eval_quat", casadi::SXVector{cs_rot}, casadi::SXVector{cs_quat});
69 for (
int k = 0; k < 1e4; ++k)
74 casadi::DM vec_rot(3, 3);
77 casadi::DM quat_res = eval_quat(casadi::DMVector{vec_rot})[0];
81 Eigen::Map<Eigen::Vector4d>(
static_cast<std::vector<double>
>(quat_res).
data());
97 typedef SE3::Vector3 Vector3;
98 typedef SE3::Matrix3 Matrix3;
101 typedef SE3AD::Vector3 Vector3AD;
103 SE3::Matrix3 RTarget;
107 Matrix3 R0 = quat0.toRotationMatrix();
112 Vector3AD nu_ad = Eigen::Map<Vector3AD>(
static_cast<std::vector<ADScalar>
>(cs_nu).
data());
113 auto log3_casadi_exp =
119 casadi::Function log3_casadi(
"log3_casadi", casadi::SXVector{cs_nu}, casadi::SXVector{cs_res});
121 std::vector<double> log3_casadi_input(3);
122 Eigen::Map<Vector3>(log3_casadi_input.data()) = nu0;
123 casadi::DM log3_casadi_res = log3_casadi(casadi::DMVector{log3_casadi_input})[0];
124 Vector3 res0 = Eigen::Map<Vector3>(
static_cast<std::vector<double>
>(log3_casadi_res).
data());
129 BOOST_CHECK(res0 == res0);
130 BOOST_CHECK(res0_ref == res0_ref);
131 BOOST_CHECK(res0.isApprox(res0_ref));
134 casadi::Function log3_casadi_jacobian(
135 "log3_casadi_jacobian", casadi::SXVector{cs_nu}, casadi::SXVector{log3_casadi_jacobian_exp});
137 casadi::DM log3_casadi_jacobian_res =
138 log3_casadi_jacobian(casadi::DMVector{log3_casadi_input})[0];
140 Eigen::Map<Matrix3>(
static_cast<std::vector<double>
>(log3_casadi_jacobian_res).
data());
142 BOOST_CHECK(jac0 == jac0);
144 ADScalar log3_casadi_gradient_exp = gradient(log3_casadi_exp[0], cs_nu);
146 casadi::Function log3_casadi_gradient(
147 "log3_casadi_jacobian", casadi::SXVector{cs_nu}, casadi::SXVector{log3_casadi_gradient_exp});
149 casadi::DM log3_casadi_gradient_res =
150 log3_casadi_gradient(casadi::DMVector{log3_casadi_input})[0];
152 Eigen::Map<Vector3>(
static_cast<std::vector<double>
>(log3_casadi_gradient_res).
data());
154 BOOST_CHECK(grad0 == grad0);
157 BOOST_AUTO_TEST_SUITE_END()