stack-of-tasks / pinocchio

A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
http://stack-of-tasks.github.io/pinocchio/
BSD 2-Clause "Simplified" License
1.83k stars 383 forks source link

CppAd & codegen test compilation failure #1999

Closed ghost closed 1 year ago

ghost commented 1 year ago

Pinocchio: 2.6.19 Boost: 1.78 Eigen: 3.3.7 same log for codegen test Log:

/home/harper/miniconda3/envs/my_env/include/boost/math/constants/constants.hpp: In instantiation of ‘constexpr typename boost::math::constants::detail::constant_return<Real, Policy>::type boost::math::constants::pi() [with T = CppAD::AD; Policy = boost::math::policies::policy<boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy>; typename boost::math::constants::detail::constant_return<Real, Policy>::type = CppAD::AD]’: /home/harper/miniconda3/envs/my_env/include/boost/math/constants/constants.hpp:259:3: required from ‘constexpr typename boost::math::constants::detail::constant_return::type boost::math::constants::pi() [with T = CppAD::AD; typename boost::math::constants::detail::constant_return::type = CppAD::AD]’ /home/harper/Apps/pinocchio/build/include/pinocchio/math/fwd.hpp:27:46: required from ‘const Scalar pinocchio::PI() [with Scalar = CppAD::AD]’ /home/harper/Apps/pinocchio/build/include/pinocchio/multibody/liegroup/special-orthogonal.hpp:65:48: required from ‘static typename Matrix2Like::Scalar pinocchio::SpecialOrthogonalOperationTpl<2, _Scalar, _Options>::log(const Eigen::MatrixBase&) [with Matrix2Like = Eigen::Matrix<CppAD::AD, 2, 2, 0, 2, 2>; _Scalar = CppAD::AD; int _Options = 0; typename Matrix2Like::Scalar = CppAD::AD]’ /home/harper/Apps/pinocchio/build/include/pinocchio/multibody/liegroup/special-orthogonal.hpp:142:55: required from ‘static void pinocchio::SpecialOrthogonalOperationTpl<2, _Scalar, _Options>::difference_impl(const Eigen::MatrixBase&, const Eigen::MatrixBase&, const Eigen::MatrixBase&) [with ConfigL_t = Eigen::Block<const Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>, 2, 1, false>; ConfigR_t = Eigen::Block<const Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>, 2, 1, false>; Tangent_t = Eigen::Block<Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>, 1, 1, false>; _Scalar = CppAD::AD; int _Options = 0]’ /home/harper/Apps/pinocchio/build/include/pinocchio/multibody/liegroup/liegroup-base.hxx:375:5: required from ‘void pinocchio::LieGroupBase::difference(const Eigen::MatrixBase&, const Eigen::MatrixBase&, const Eigen::MatrixBase&) const [with ConfigL_t = Eigen::Block<const Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>, 2, 1, false>; ConfigR_t = Eigen::Block<const Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>, 2, 1, false>; Tangent_t = Eigen::Block<Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>, 1, 1, false>; Derived = pinocchio::SpecialOrthogonalOperationTpl<2, CppAD::AD, 0>]’ /home/harper/Apps/pinocchio/build/include/pinocchio/multibody/liegroup/liegroup-algo.hxx:374:7: [ skipping 9 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ] /home/harper/miniconda3/envs/my_env/include/boost/variant/variant.hpp:2404:52: required from ‘typename Visitor::result_type boost::variant<T0, TN>::applyvisitor(Visitor&) const & [with Visitor = pinocchio::fusion::JointUnaryVisitorBase<pinocchio::DifferenceStep<pinocchio::LieGroupMap, Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>, Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>, Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1> >, void>::InternalVisitorModel<boost::fusion::vector<const Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>&, const Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>&, Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>&>, void>; T0 = pinocchio::JointModelRevoluteTpl<CppAD::AD, 0, 0>; TN = {pinocchio::JointModelRevoluteTpl<CppAD::AD, 0, 1>, pinocchio::JointModelRevoluteTpl<CppAD::AD, 0, 2>, pinocchio::JointModelMimic<pinocchio::JointModelRevoluteTpl<CppAD::AD, 0, 0> >, pinocchio::JointModelMimic<pinocchio::JointModelRevoluteTpl<CppAD::AD, 0, 1> >, pinocchio::JointModelMimic<pinocchio::JointModelRevoluteTpl<CppAD::AD, 0, 2> >, pinocchio::JointModelFreeFlyerTpl<CppAD::AD, 0>, pinocchio::JointModelPlanarTpl<CppAD::AD, 0>, pinocchio::JointModelRevoluteUnalignedTpl<CppAD::AD, 0>, pinocchio::JointModelSphericalTpl<CppAD::AD, 0>, pinocchio::JointModelSphericalZYXTpl<CppAD::AD, 0>, pinocchio::JointModelPrismaticTpl<CppAD::AD, 0, 0>, pinocchio::JointModelPrismaticTpl<CppAD::AD, 0, 1>, pinocchio::JointModelPrismaticTpl<CppAD::AD, 0, 2>, pinocchio::JointModelPrismaticUnalignedTpl<CppAD::AD, 0>, pinocchio::JointModelTranslationTpl<CppAD::AD, 0>, pinocchio::JointModelRevoluteUnboundedTpl<CppAD::AD, 0, 0>, pinocchio::JointModelRevoluteUnboundedTpl<CppAD::AD, 0, 1>, pinocchio::JointModelRevoluteUnboundedTpl<CppAD::AD, 0, 2>, pinocchio::JointModelRevoluteUnboundedUnalignedTpl<CppAD::AD, 0>, boost::recursive_wrapper<pinocchio::JointModelCompositeTpl<CppAD::AD, 0, pinocchio::JointCollectionDefaultTpl> >}; typename Visitor::result_type = void]’ /home/harper/miniconda3/envs/my_env/include/boost/variant/detail/apply_visitor_unary.hpp:48:72: required from ‘typename Visitor::result_type boost::apply_visitor(Visitor&, Visitable&&) [with Visitor = pinocchio::fusion::JointUnaryVisitorBase<pinocchio::DifferenceStep<pinocchio::LieGroupMap, Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>, Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>, Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1> >, void>::InternalVisitorModel<boost::fusion::vector<const Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>&, const Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>&, Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>&>, void>; Visitable = const pinocchio::JointModelTpl<CppAD::AD, 0, pinocchio::JointCollectionDefaultTpl>&; typename Visitor::result_type = void]’ /home/harper/Apps/pinocchio/build/include/pinocchio/multibody/visitor/joint-unary-visitor.hpp:69:36: required from ‘static ReturnType pinocchio::fusion::JointUnaryVisitorBase<JointVisitorDerived, ReturnType>::run(const pinocchio::JointModelTpl<Scalar, Options, JointCollectionTpl>&, ArgsTmp) [with Scalar = CppAD::AD; int Options = 0; JointCollectionTpl = pinocchio::JointCollectionDefaultTpl; ArgsTmp = boost::fusion::vector<const Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>&, const Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>&, Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>&>; JointVisitorDerived = pinocchio::DifferenceStep<pinocchio::LieGroupMap, Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>, Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>, Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1> >; ReturnType = void]’ /home/harper/Apps/pinocchio/build/include/pinocchio/algorithm/joint-configuration.hxx:83:16: required from ‘void pinocchio::difference(const pinocchio::ModelTpl<Scalar, Options, JointCollectionTpl>&, const Eigen::MatrixBase&, const Eigen::MatrixBase&, const Eigen::MatrixBase&) [with LieGroup_t = pinocchio::LieGroupMap; Scalar = CppAD::AD; int Options = 0; JointCollectionTpl = pinocchio::JointCollectionDefaultTpl; ConfigVectorIn1 = Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>; ConfigVectorIn2 = Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>; ReturnType = Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>]’ /home/harper/Apps/pinocchio/build/include/pinocchio/algorithm/joint-configuration.hpp:147:105: required from ‘void pinocchio::difference(const pinocchio::ModelTpl<Scalar, Options, JointCollectionTpl>&, const Eigen::MatrixBase&, const Eigen::MatrixBase&, const Eigen::MatrixBase&) [with Scalar = CppAD::AD; int Options = 0; JointCollectionTpl = pinocchio::JointCollectionDefaultTpl; ConfigVectorIn1 = Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>; ConfigVectorIn2 = Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>; ReturnType = Eigen::Matrix<CppAD::AD, -1, 1, 0, -1, 1>]’ /home/harper/Apps/pinocchio/unittest/cppad-joint-configurations.cpp:86:52: required from here /home/harper/miniconda3/envs/my_env/include/boost/math/constants/constants.hpp:259:3: error: no matching function for call to ‘boost::math::constants::detail::constant_pi<CppAD::AD >::get(boost::math::constants::construction_traits<CppAD::AD, boost::math::policies::policy<boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> >::type)’ 259 | BOOST_DEFINE_MATH_CONSTANT(pi, 3.141592653589793238462643383279502884e+00, "3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651e+00") | ^~~~~~ /home/harper/Apps/pinocchio/build/include/pinocchio/autodiff/cppad.hpp:35:34: note: template argument deduction/substitution failed: In file included from /home/harper/Apps/pinocchio/build/include/pinocchio/math/fwd.hpp:10, from /home/harper/Apps/pinocchio/build/include/pinocchio/autodiff/cppad.hpp:8, from /home/harper/Apps/pinocchio/unittest/cppad-joint-configurations.cpp:5: /home/harper/miniconda3/envs/my_env/include/boost/math/constants/constants.hpp:259:3: note: ‘boost::math::constants::construction_traits<CppAD::AD, boost::math::policies::policy<boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> >::type’ {aka ‘std::integralconstant<int, 0>’} is not derived from ‘const mpl::int_’ 259 | BOOST_DEFINE_MATH_CONSTANT(pi, 3.141592653589793238462643383279502884e+00, "3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651e+00") | ^~~~~~

jcarpent commented 1 year ago

From the given input, it is hard to reproduce your issue. @xeonz1 Could you provide a way to reproduce it?

jcarpent commented 1 year ago

I could not reproduce this issue locally on my machine with Boost 1.78 and Eigen 3.4.0. @xeonz1 I suggest you provide a docker image that reproduces your issue.

jcarpent commented 1 year ago

Finally, I've been able to reproduce your issues. @xeonz1 a fix is being now tested in #2000.

ghost commented 1 year ago

Finally, I've been able to reproduce your issues. @xeonz1 a fix is being now tested in #2000.

Great! I have tested the fix and it worked on mine as well. All cppad / codegen tests were able to be successfully compiled except for example-cpp-codegen-crba it seems to have an issue which I am not sure whether or not it is a pinocchio problem @jcarpent .

/usr/bin/ld: CMakeFiles/example-cpp-codegen-crba.dir/codegen-crba.cpp.o: in function `void CppAD::put_check_for_nan<CppAD::cg::CG >(CppAD::vector<CppAD::cg::CG > const&, std::cxx11::basic_string<char, std::char_traits, std::allocator >&)': codegen-crba.cpp:(.text._ZN5CppAD17put_check_for_nanINS_2cg2CGIdEEEEvRKNS_6vectorIT_EERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE[_ZN5CppAD17put_check_for_nanINS_2cg2CGIdEEEEvRKNS_6vectorIT_EERNSt7cxx1112basic_stringIcSt11char_traitsIcESaIcEEE]+0x74): undefined reference to CppAD::local::temp_file[abi:cxx11]()

P.S. it looks like this example does not explicitly link to the cppad lib in the compile commands:

[ 97%] Linking CXX executable example-cpp-codegen-crba cd /home/harper/Apps/pinocchio/build/examples/codegen && /home/harper/Apps/cmake-3.23.1/bin/cmake -E cmake_link_script CMakeFiles/example-cpp-codegen-crba.dir/link.txt --verbose=1 /usr/bin/c++ -pedantic -Wno-long-long -Wall -Wextra -Wcast-align -Wcast-qual -Wformat -Wwrite-strings -Wconversion -rdynamic "CMakeFiles/example-cpp-codegen-crba.dir/codegen-crba.cpp.o" -o example-cpp-codegen-crba -Wl,-rpath,/home/harper/Apps/pinocchio/build/src:/home/harper/miniconda3/envs/my_env/lib ../../src/libpinocchio.so.2.6.19 -ldl /home/harper/miniconda3/envs/my_env/lib/libboost_filesystem.so /home/harper/miniconda3/envs/my_env/lib/libboost_system.so /home/harper/miniconda3/envs/my_env/lib/libboost_serialization.so /home/harper/miniconda3/envs/my_env/lib/liburdfdom_sensor.so.3.0 /home/harper/miniconda3/envs/my_env/lib/liburdfdom_model.so.3.0 /home/harper/miniconda3/envs/my_env/lib/liburdfdom_world.so.3.0 /home/harper/miniconda3/envs/my_env/lib/libconsole_bridge.so.1.0 /home/harper/miniconda3/envs/my_env/lib/libtinyxml.so

An example is test-cpp-cppadcg-joint-configurations

[ 97%] Linking CXX executable test-cpp-cppadcg-joint-configurations cd /home/harper/Apps/pinocchio/build/unittest && /home/harper/Apps/cmake-3.23.1/bin/cmake -E cmake_link_script CMakeFiles/test-cpp-cppadcg-joint-configurations.dir/link.txt --verbose=1 /usr/bin/c++ -pedantic -Wno-long-long -Wall -Wextra -Wcast-align -Wcast-qual -Wformat -Wwrite-strings -Wconversion -rdynamic "CMakeFiles/test-cpp-cppadcg-joint-configurations.dir/cppadcg-joint-configurations.cpp.o" -o test-cpp-cppadcg-joint-configurations -Wl,-rpath,/home/harper/Apps/pinocchio/build/src:/home/harper/miniconda3/envs/my_env/lib:/usr/local/lib ../src/libpinocchio.so.2.6.19 /home/harper/miniconda3/envs/my_env/lib/libboost_unit_test_framework.so /usr/local/lib/libcppad_lib.so -ldl /home/harper/miniconda3/envs/my_env/lib/libboost_filesystem.so /home/harper/miniconda3/envs/my_env/lib/libboost_system.so /home/harper/miniconda3/envs/my_env/lib/libboost_serialization.so /home/harper/miniconda3/envs/my_env/lib/liburdfdom_sensor.so.3.0 /home/harper/miniconda3/envs/my_env/lib/liburdfdom_model.so.3.0 /home/harper/miniconda3/envs/my_env/lib/liburdfdom_world.so.3.0 /home/harper/miniconda3/envs/my_env/lib/libconsole_bridge.so.1.0 /home/harper/miniconda3/envs/my_env/lib/libtinyxml.so

Therefore, I changed line 9 in CMakeLists.txt in examples/codegen to

TARGET_LINK_LIBRARIES(example-cpp-codegen-crba PUBLIC ${CMAKE_DL_LIBS} ${cppad_LIBRARY})

and the example-cpp-codegen-crba example is compiled successfully.

ghost commented 1 year ago

Problem now solved and I will close this issue. Thank you.