stack-of-tasks/tsid

TSID does not compile with eigen 3.4.0

GiulioRomualdi opened this issue · 1 comments

Hi all! I'm trying to compile TSID in a conda environment.
I installed all the dependencies of tsid with conda. One of these dependencies is eigen. The latest eigen version provided by conda-forge is 3.4.0. Unfortunately, TSIS is not compatible with this eigen version. Indeed when I tried to compile the repo I got the following error

[ 83%] Building CXX object tests/CMakeFiles/tasks.dir/tasks.cpp.o
cd /home/gromualdi/robot-code/tsid/build/tests && /usr/bin/c++  -DBOOST_MPL_LIMIT_LIST_SIZE=30 -DBOOST_MPL_LIMIT_VECTOR_SIZE=30 -DEIGEN_RUNTIME_NO_MALLOC -DHPP_FCL_HAS_OCTOMAP -DHPP_FCL_HAVE_OCTOMAP -DOCTOMAP_MAJOR_VERSION=1 -DOCTOMAP_MINOR_VERSION=9 -DOCTOMAP_PATCH_VERSION=7 -DPINOCCHIO_WITH_HPP_FCL -DPINOCCHIO_WITH_URDFDOM -I/home/gromualdi/robot-code/tsid/build -I/home/gromualdi/robot-code/tsid/build/include -I/home/gromualdi/robot-code/tsid/include -isystem /home/gromualdi/mambaforge/envs/tsid-env/include/eigen3 -isystem /home/gromualdi/mambaforge/envs/tsid-env/include -isystem /home/gromualdi/mambaforge/envs/tsid-env/lib/urdfdom/cmake/../../../include -isystem /home/gromualdi/mambaforge/envs/tsid-env/lib/urdfdom_headers/cmake/../../../include  -pedantic -Wno-long-long -Wall -Wextra -Wcast-align -Wcast-qual -Wformat -Wwrite-strings -Wconversion     -DBOOST_TEST_DYN_LINK -DBOOST_TEST_MODULE=tasksTest '-DTSID_SOURCE_DIR="/home/gromualdi/robot-code/tsid"' -o CMakeFiles/tasks.dir/tasks.cpp.o -c /home/gromualdi/robot-code/tsid/tests/tasks.cpp
/home/gromualdi/robot-code/tsid/tests/tasks.cpp: In member function ‘void tasksTest::test_task_se3_equality::test_method()’:
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:103:5: error: reference to ‘Vector’ is ambiguous
  103 |     Vector dv = Jpinv * constraint.vector();
      |     ^~~~~~
In file included from /home/gromualdi/mambaforge/envs/tsid-env/include/eigen3/Eigen/Core:295,
                 from /home/gromualdi/robot-code/tsid/include/tsid/math/fwd.hpp:21,
                 from /home/gromualdi/robot-code/tsid/include/tsid/math/utils.hpp:21,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:23:
/home/gromualdi/mambaforge/envs/tsid-env/include/eigen3/Eigen/src/Core/Matrix.h:551:7: note: candidates are: ‘template<class Type, int Size> using Vector = Eigen::Matrix<Type, Size, 1>’
  551 | using Vector = Matrix<Type, Size, 1>;
      |       ^~~~~~
In file included from /home/gromualdi/robot-code/tsid/include/tsid/math/utils.hpp:21,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:23:
/home/gromualdi/robot-code/tsid/include/tsid/math/fwd.hpp:37:52: note:                 ‘typedef class Eigen::Matrix<double, -1, 1> tsid::math::Vector’
   37 |     typedef Eigen::Matrix<Scalar,Eigen::Dynamic,1> Vector;
      |                                                    ^~~~~~
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:106:18: error: ‘dv’ was not declared in this scope; did you mean ‘div’?
  106 |     if(!isFinite(dv))
      |                  ^~
      |                  div
In file included from /home/gromualdi/mambaforge/envs/tsid-env/include/boost/test/test_tools.hpp:45,
                 from /home/gromualdi/mambaforge/envs/tsid-env/include/boost/test/unit_test.hpp:18,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:20:
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:111:20: error: ‘dv’ was not declared in this scope; did you mean ‘div’?
  111 |     REQUIRE_FINITE(dv.transpose());
      |                    ^~
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:111:5: note: in expansion of macro ‘REQUIRE_FINITE’
  111 |     REQUIRE_FINITE(dv.transpose());
      |     ^~~~~~~~~~~~~~
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:113:13: error: ‘dv’ was not declared in this scope; did you mean ‘div’?
  113 |     v += dt*dv;
      |             ^~
      |             div
/home/gromualdi/robot-code/tsid/tests/tasks.cpp: In member function ‘void tasksTest::test_task_com_equality::test_method()’:
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:162:3: error: reference to ‘Vector3’ is ambiguous
  162 |   Vector3 com_ref = data.com[0] + pinocchio::SE3::Vector3(0.02,0.02,0.02);
      |   ^~~~~~~
In file included from /home/gromualdi/mambaforge/envs/tsid-env/include/eigen3/Eigen/Core:295,
                 from /home/gromualdi/robot-code/tsid/include/tsid/math/fwd.hpp:21,
                 from /home/gromualdi/robot-code/tsid/include/tsid/math/utils.hpp:21,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:23:
/home/gromualdi/mambaforge/envs/tsid-env/include/eigen3/Eigen/src/Core/Matrix.h:541:1: note: candidates are: ‘template<class Type> using Vector3 = Eigen::Matrix<Type, 3, 1>’
  541 | EIGEN_MAKE_TYPEDEFS(3, 3)
      | ^~~~~~~~~~~~~~~~~~~
In file included from /home/gromualdi/robot-code/tsid/include/tsid/math/utils.hpp:21,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:23:
/home/gromualdi/robot-code/tsid/include/tsid/math/fwd.hpp:42:39: note:                 ‘typedef class Eigen::Matrix<double, 3, 1> tsid::math::Vector3’
   42 |     typedef Eigen::Matrix<Scalar,3,1> Vector3;
      |                                       ^~~~~~~
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:163:70: error: ‘com_ref’ was not declared in this scope
  163 |   TrajectoryBase *traj = new TrajectoryEuclidianConstant("traj_com", com_ref);
      |                                                                      ^~~~~~~
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:183:5: error: reference to ‘Vector’ is ambiguous
  183 |     Vector dv = Jpinv * constraint.vector();
      |     ^~~~~~
In file included from /home/gromualdi/mambaforge/envs/tsid-env/include/eigen3/Eigen/Core:295,
                 from /home/gromualdi/robot-code/tsid/include/tsid/math/fwd.hpp:21,
                 from /home/gromualdi/robot-code/tsid/include/tsid/math/utils.hpp:21,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:23:
/home/gromualdi/mambaforge/envs/tsid-env/include/eigen3/Eigen/src/Core/Matrix.h:551:7: note: candidates are: ‘template<class Type, int Size> using Vector = Eigen::Matrix<Type, Size, 1>’
  551 | using Vector = Matrix<Type, Size, 1>;
      |       ^~~~~~
In file included from /home/gromualdi/robot-code/tsid/include/tsid/math/utils.hpp:21,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:23:
/home/gromualdi/robot-code/tsid/include/tsid/math/fwd.hpp:37:52: note:                 ‘typedef class Eigen::Matrix<double, -1, 1> tsid::math::Vector’
   37 |     typedef Eigen::Matrix<Scalar,Eigen::Dynamic,1> Vector;
      |                                                    ^~~~~~
In file included from /home/gromualdi/mambaforge/envs/tsid-env/include/boost/test/test_tools.hpp:45,
                 from /home/gromualdi/mambaforge/envs/tsid-env/include/boost/test/unit_test.hpp:18,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:20:
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:186:28: error: ‘dv’ was not declared in this scope; did you mean ‘div’?
  186 |     BOOST_REQUIRE(isFinite(dv));
      |                            ^~
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:188:13: error: ‘dv’ was not declared in this scope; did you mean ‘div’?
  188 |     v += dt*dv;
      |             ^~
      |             div
/home/gromualdi/robot-code/tsid/tests/tasks.cpp: In member function ‘void tasksTest::test_task_joint_posture::test_method()’:
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:231:3: error: reference to ‘Vector’ is ambiguous
  231 |   Vector q_ref = Vector::Random(na);
      |   ^~~~~~
In file included from /home/gromualdi/mambaforge/envs/tsid-env/include/eigen3/Eigen/Core:295,
                 from /home/gromualdi/robot-code/tsid/include/tsid/math/fwd.hpp:21,
                 from /home/gromualdi/robot-code/tsid/include/tsid/math/utils.hpp:21,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:23:
/home/gromualdi/mambaforge/envs/tsid-env/include/eigen3/Eigen/src/Core/Matrix.h:551:7: note: candidates are: ‘template<class Type, int Size> using Vector = Eigen::Matrix<Type, Size, 1>’
  551 | using Vector = Matrix<Type, Size, 1>;
      |       ^~~~~~
In file included from /home/gromualdi/robot-code/tsid/include/tsid/math/utils.hpp:21,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:23:
/home/gromualdi/robot-code/tsid/include/tsid/math/fwd.hpp:37:52: note:                 ‘typedef class Eigen::Matrix<double, -1, 1> tsid::math::Vector’
   37 |     typedef Eigen::Matrix<Scalar,Eigen::Dynamic,1> Vector;
      |                                                    ^~~~~~
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:232:72: error: ‘q_ref’ was not declared in this scope
  232 |   TrajectoryBase *traj = new TrajectoryEuclidianConstant("traj_joint", q_ref);
      |                                                                        ^~~~~
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:255:5: error: reference to ‘Vector’ is ambiguous
  255 |     Vector dv = Jpinv * constraint.vector();
      |     ^~~~~~
In file included from /home/gromualdi/mambaforge/envs/tsid-env/include/eigen3/Eigen/Core:295,
                 from /home/gromualdi/robot-code/tsid/include/tsid/math/fwd.hpp:21,
                 from /home/gromualdi/robot-code/tsid/include/tsid/math/utils.hpp:21,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:23:
/home/gromualdi/mambaforge/envs/tsid-env/include/eigen3/Eigen/src/Core/Matrix.h:551:7: note: candidates are: ‘template<class Type, int Size> using Vector = Eigen::Matrix<Type, Size, 1>’
  551 | using Vector = Matrix<Type, Size, 1>;
      |       ^~~~~~
In file included from /home/gromualdi/robot-code/tsid/include/tsid/math/utils.hpp:21,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:23:
/home/gromualdi/robot-code/tsid/include/tsid/math/fwd.hpp:37:52: note:                 ‘typedef class Eigen::Matrix<double, -1, 1> tsid::math::Vector’
   37 |     typedef Eigen::Matrix<Scalar,Eigen::Dynamic,1> Vector;
      |                                                    ^~~~~~
In file included from /home/gromualdi/mambaforge/envs/tsid-env/include/boost/test/test_tools.hpp:45,
                 from /home/gromualdi/mambaforge/envs/tsid-env/include/boost/test/unit_test.hpp:18,
                 from /home/gromualdi/robot-code/tsid/tests/tasks.cpp:20:
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:258:28: error: ‘dv’ was not declared in this scope; did you mean ‘div’?
  258 |     BOOST_REQUIRE(isFinite(dv));
      |                            ^~
/home/gromualdi/robot-code/tsid/tests/tasks.cpp:260:13: error: ‘dv’ was not declared in this scope; did you mean ‘div’?
  260 |     v += dt*dv;
      |             ^~
      |             div
make[2]: *** [tests/CMakeFiles/tasks.dir/build.make:66: tests/CMakeFiles/tasks.dir/tasks.cpp.o] Error 1
make[2]: Leaving directory '/home/gromualdi/robot-code/tsid/build'
make[1]: *** [CMakeFiles/Makefile2:1523: tests/CMakeFiles/tasks.dir/all] Error 2
make[1]: Leaving directory '/home/gromualdi/robot-code/tsid/build'
make: *** [Makefile:144: all] Error 2

If I'm not mistaken this is related to this addition in eigen

Notice this should explain why the GitHub action related to the tsid feedstock is currently failing https://github.com/conda-forge/tsid-feedstock/pull/2/checks?check_run_id=3603496234

The following patch fixes the problem

diff --git a/tests/tasks.cpp b/tests/tasks.cpp
index ace6587..a787532 100644
--- a/tests/tasks.cpp
+++ b/tests/tasks.cpp
@@ -100,7 +100,7 @@ BOOST_AUTO_TEST_CASE ( test_task_se3_equality )
     BOOST_REQUIRE(isFinite(constraint.vector()));
 
     pseudoInverse(constraint.matrix(), Jpinv, 1e-4);
-    Vector dv = Jpinv * constraint.vector();
+    math::Vector dv = Jpinv * constraint.vector();
     BOOST_REQUIRE(isFinite(Jpinv));
     BOOST_CHECK(MatrixXd::Identity(6,6).isApprox(constraint.matrix()*Jpinv));
     if(!isFinite(dv))
@@ -159,7 +159,7 @@ BOOST_AUTO_TEST_CASE ( test_task_com_equality )
   BOOST_CHECK(task.Kp().isApprox(Kp));
   BOOST_CHECK(task.Kd().isApprox(Kd));
 
-  Vector3 com_ref = data.com[0] + pinocchio::SE3::Vector3(0.02,0.02,0.02);
+  math::Vector3 com_ref = data.com[0] + pinocchio::SE3::Vector3(0.02,0.02,0.02);
   TrajectoryBase *traj = new TrajectoryEuclidianConstant("traj_com", com_ref);
   TrajectorySample sample;
 
@@ -180,7 +180,7 @@ BOOST_AUTO_TEST_CASE ( test_task_com_equality )
     BOOST_REQUIRE(isFinite(constraint.vector()));
 
     pseudoInverse(constraint.matrix(), Jpinv, 1e-5);
-    Vector dv = Jpinv * constraint.vector();
+    math::Vector dv = Jpinv * constraint.vector();
     BOOST_REQUIRE(isFinite(Jpinv));
     BOOST_CHECK(MatrixXd::Identity(constraint.rows(),constraint.rows()).isApprox(constraint.matrix()*Jpinv));
     BOOST_REQUIRE(isFinite(dv));
@@ -228,7 +228,7 @@ BOOST_AUTO_TEST_CASE ( test_task_joint_posture )
   BOOST_CHECK(task.Kd().isApprox(Kd));
 
   cout<<"Gonna create reference trajectory\n";
-  Vector q_ref = Vector::Random(na);
+  math::Vector q_ref = math::Vector::Random(na);
   TrajectoryBase *traj = new TrajectoryEuclidianConstant("traj_joint", q_ref);
   TrajectorySample sample;
 
@@ -252,7 +252,7 @@ BOOST_AUTO_TEST_CASE ( test_task_joint_posture )
     BOOST_REQUIRE(isFinite(constraint.vector()));
 
     pseudoInverse(constraint.matrix(), Jpinv, 1e-5);
-    Vector dv = Jpinv * constraint.vector();
+    math::Vector dv = Jpinv * constraint.vector();
     BOOST_REQUIRE(isFinite(Jpinv));
     BOOST_CHECK(MatrixXd::Identity(na,na).isApprox(constraint.matrix()*Jpinv));
     BOOST_REQUIRE(isFinite(dv));

I've just noticed that #144 fixed the problem for the devel branch. I will switch to that branch