BOOST_CHECK_MESSAGE(integrate(model_composite,q,q_dot).isApprox(integrate(model_zero_mass,q,q_dot)),std::string(" composite<R3xSO3> vs R3-SO3 - integrate model error "));
BOOST_CHECK_MESSAGE(interpolate(model_composite,q1,q2,u).isApprox(interpolate(model_zero_mass,q1,q2,u)),std::string(" composite<R3xSO3> vs R3-SO3 - interpolate model error "));
BOOST_CHECK_MESSAGE(differentiate(model_composite,q1,q2).isApprox(differentiate(model_zero_mass,q1,q2)),std::string(" composite<R3xSO3> vs R3-SO3 - differentiate model error "));
// BOOST_CHECK_MESSAGE(fabs(distance(model_composite, q1,q2) - distance(model_zero_mass ,q1,q2)) < 1e-12 ,std::string(" composite<R3xSO3> vs R3-SO3 - distance model error "));
BOOST_CHECK_MESSAGE(fabs(distance(model_composite,q1,q2).norm()-distance(model_zero_mass,q1,q2).norm())<=1e-6,std::string(" composite<R3xSO3> vs R3-SO3 - distance model error "));