open_vins icon indicating copy to clipboard operation
open_vins copied to clipboard

ceres-solve 2.2.0 Manifold compile failure

Open Genozen opened this issue 2 years ago • 5 comments
trafficstars

Prior to this, I had to build Ceres from source, but later I was able to use sudo apt to reinstall Ceres.

My workspace dir includes:

  • build
  • ceres-solver
  • install
  • log
  • src
colcon build --parallel-workers 1
Starting >>> ov_core 
Finished <<< ov_core [0.18s]                     
Starting >>> ov_init
--- stderr: ov_init                               
In file included from /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.cpp:22:
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:32:64: error: expected class-name before ‘{’ token
   32 | class State_JPLQuatLocal : public ceres::LocalParameterization {
      |                                                                ^
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:44:8: error: ‘bool ov_init::State_JPLQuatLocal::Plus(const double*, const double*, double*) const’ marked ‘override’, but does not override
   44 |   bool Plus(const double *x, const double *delta, double *x_plus_delta) const override;
      |        ^~~~
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:57:8: error: ‘bool ov_init::State_JPLQuatLocal::ComputeJacobian(const double*, double*) const’ marked ‘override’, but does not override
   57 |   bool ComputeJacobian(const double *x, double *jacobian) const override;
      |        ^~~~~~~~~~~~~~~
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:59:7: error: ‘int ov_init::State_JPLQuatLocal::GlobalSize() const’ marked ‘override’, but does not override
   59 |   int GlobalSize() const override { return 4; };
      |       ^~~~~~~~~~
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:61:7: error: ‘int ov_init::State_JPLQuatLocal::LocalSize() const’ marked ‘override’, but does not override
   61 |   int LocalSize() const override { return 3; };
      |       ^~~~~~~~~
gmake[2]: *** [CMakeFiles/ov_init_lib.dir/build.make:132: CMakeFiles/ov_init_lib.dir/src/ceres/State_JPLQuatLocal.cpp.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
In file included from /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/dynamic/DynamicInitializer.cpp:27:
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:32:64: error: expected class-name before ‘{’ token
   32 | class State_JPLQuatLocal : public ceres::LocalParameterization {
      |                                                                ^
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:44:8: error: ‘bool ov_init::State_JPLQuatLocal::Plus(const double*, const double*, double*) const’ marked ‘override’, but does not override
   44 |   bool Plus(const double *x, const double *delta, double *x_plus_delta) const override;
      |        ^~~~
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:57:8: error: ‘bool ov_init::State_JPLQuatLocal::ComputeJacobian(const double*, double*) const’ marked ‘override’, but does not override
   57 |   bool ComputeJacobian(const double *x, double *jacobian) const override;
      |        ^~~~~~~~~~~~~~~
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:59:7: error: ‘int ov_init::State_JPLQuatLocal::GlobalSize() const’ marked ‘override’, but does not override
   59 |   int GlobalSize() const override { return 4; };
      |       ^~~~~~~~~~
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:61:7: error: ‘int ov_init::State_JPLQuatLocal::LocalSize() const’ marked ‘override’, but does not override
   61 |   int LocalSize() const override { return 3; };
      |       ^~~~~~~~~
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/dynamic/DynamicInitializer.cpp: In member function ‘bool ov_init::DynamicInitializer::initialize(double&, Eigen::MatrixXd&, std::vector<std::shared_ptr<ov_type::Type> >&, std::shared_ptr<ov_type::IMU>&, std::map<double, std::shared_ptr<ov_type::PoseJPL> >&, std::unordered_map<long unsigned int, std::shared_ptr<ov_type::Landmark> >&)’:
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/dynamic/DynamicInitializer.cpp:673:30: error: no matching function for call to ‘ceres::Problem::AddParameterBlock(double*&, int, ov_init::State_JPLQuatLocal*&)’
  673 |     problem.AddParameterBlock(var_ori, 4, ceres_jplquat);
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/include/ceres/ceres.h:64,
                 from /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/Factor_GenericPrior.h:25,
                 from /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/dynamic/DynamicInitializer.cpp:24:
/usr/local/include/ceres/problem.h:259:8: note: candidate: ‘void ceres::Problem::AddParameterBlock(double*, int)’
  259 |   void AddParameterBlock(double* values, int size);
      |        ^~~~~~~~~~~~~~~~~
/usr/local/include/ceres/problem.h:259:8: note:   candidate expects 2 arguments, 3 provided
/usr/local/include/ceres/problem.h:271:8: note: candidate: ‘void ceres::Problem::AddParameterBlock(double*, int, ceres::Manifold*)’
  271 |   void AddParameterBlock(double* values, int size, Manifold* manifold);
      |        ^~~~~~~~~~~~~~~~~
/usr/local/include/ceres/problem.h:271:62: note:   no known conversion for argument 3 from ‘ov_init::State_JPLQuatLocal*’ to ‘ceres::Manifold*’
  271 |   void AddParameterBlock(double* values, int size, Manifold* manifold);
      |                                                    ~~~~~~~~~~^~~~~~~~
/home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/dynamic/DynamicInitializer.cpp:766:32: error: no matching function for call to ‘ceres::Problem::AddParameterBlock(double*&, int, ov_init::State_JPLQuatLocal*&)’
  766 |       problem.AddParameterBlock(var_calib_ori, 4, ceres_calib_jplquat);
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/include/ceres/ceres.h:64,
                 from /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/Factor_GenericPrior.h:25,
                 from /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/dynamic/DynamicInitializer.cpp:24:
/usr/local/include/ceres/problem.h:259:8: note: candidate: ‘void ceres::Problem::AddParameterBlock(double*, int)’
  259 |   void AddParameterBlock(double* values, int size);
      |        ^~~~~~~~~~~~~~~~~
/usr/local/include/ceres/problem.h:259:8: note:   candidate expects 2 arguments, 3 provided
/usr/local/include/ceres/problem.h:271:8: note: candidate: ‘void ceres::Problem::AddParameterBlock(double*, int, ceres::Manifold*)’
  271 |   void AddParameterBlock(double* values, int size, Manifold* manifold);
      |        ^~~~~~~~~~~~~~~~~
/usr/local/include/ceres/problem.h:271:62: note:   no known conversion for argument 3 from ‘ov_init::State_JPLQuatLocal*’ to ‘ceres::Manifold*’
  271 |   void AddParameterBlock(double* values, int size, Manifold* manifold);
      |                                                    ~~~~~~~~~~^~~~~~~~
gmake[2]: *** [CMakeFiles/ov_init_lib.dir/build.make:160: CMakeFiles/ov_init_lib.dir/src/dynamic/DynamicInitializer.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:143: CMakeFiles/ov_init_lib.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2
---
Failed   <<< ov_init [17.5s, exited with code 2]

Summary: 1 package finished [17.8s]
  1 package failed: ov_init
  1 package had stderr output: ov_init
  4 packages not processed

Genozen avatar Sep 26 '23 03:09 Genozen

Looks like a bad version of ceres. What version are you using? Did you install libceres-dev?

On Mon, Sep 25, 2023 at 8:38 PM Genozen @.***> wrote:

Prior to this, I had to build Ceres from source, but later I was able to use sudo apt to reinstall Ceres.

My workspace dir includes:

  • build
  • ceres-solver
  • install
  • log
  • src

colcon build --parallel-workers 1 Starting >>> ov_core Finished <<< ov_core [0.18s] Starting >>> ov_init --- stderr: ov_init In file included from /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.cpp:22: /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:32:64: error: expected class-name before ‘{’ token 32 | class State_JPLQuatLocal : public ceres::LocalParameterization { | ^ /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:44:8: error: ‘bool ov_init::State_JPLQuatLocal::Plus(const double*, const double*, double*) const’ marked ‘override’, but does not override 44 | bool Plus(const double x, const double delta, double x_plus_delta) const override; | ^~~~ /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:57:8: error: ‘bool ov_init::State_JPLQuatLocal::ComputeJacobian(const double, double) const’ marked ‘override’, but does not override 57 | bool ComputeJacobian(const double x, double jacobian) const override; | ^~~~~~~~~~~~~~~ /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:59:7: error: ‘int ov_init::State_JPLQuatLocal::GlobalSize() const’ marked ‘override’, but does not override 59 | int GlobalSize() const override { return 4; }; | ^~~~~~~~~~ /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:61:7: error: ‘int ov_init::State_JPLQuatLocal::LocalSize() const’ marked ‘override’, but does not override 61 | int LocalSize() const override { return 3; }; | ^~~~~~~~~ gmake[2]: *** [CMakeFiles/ov_init_lib.dir/build.make:132: CMakeFiles/ov_init_lib.dir/src/ceres/State_JPLQuatLocal.cpp.o] Error 1 gmake[2]: *** Waiting for unfinished jobs.... In file included from /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/dynamic/DynamicInitializer.cpp:27: /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:32:64: error: expected class-name before ‘{’ token 32 | class State_JPLQuatLocal : public ceres::LocalParameterization { | ^ /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:44:8: error: ‘bool ov_init::State_JPLQuatLocal::Plus(const double, const double, double) const’ marked ‘override’, but does not override 44 | bool Plus(const double x, const double delta, double x_plus_delta) const override; | ^~~~ /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:57:8: error: ‘bool ov_init::State_JPLQuatLocal::ComputeJacobian(const double, double) const’ marked ‘override’, but does not override 57 | bool ComputeJacobian(const double x, double jacobian) const override; | ^~~~~~~~~~~~~~~ /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:59:7: error: ‘int ov_init::State_JPLQuatLocal::GlobalSize() const’ marked ‘override’, but does not override 59 | int GlobalSize() const override { return 4; }; | ^~~~~~~~~~ /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/State_JPLQuatLocal.h:61:7: error: ‘int ov_init::State_JPLQuatLocal::LocalSize() const’ marked ‘override’, but does not override 61 | int LocalSize() const override { return 3; }; | ^~~~~~~~~ /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/dynamic/DynamicInitializer.cpp: In member function ‘bool ov_init::DynamicInitializer::initialize(double&, Eigen::MatrixXd&, std::vector<std::shared_ptr<ov_type::Type> >&, std::shared_ptr<ov_type::IMU>&, std::map<double, std::shared_ptr<ov_type::PoseJPL> >&, std::unordered_map<long unsigned int, std::shared_ptr<ov_type::Landmark> >&)’: /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/dynamic/DynamicInitializer.cpp:673:30: error: no matching function for call to ‘ceres::Problem::AddParameterBlock(double&, int, ov_init::State_JPLQuatLocal&)’ 673 | problem.AddParameterBlock(var_ori, 4, ceres_jplquat); | ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/local/include/ceres/ceres.h:64, from /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/Factor_GenericPrior.h:25, from /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/dynamic/DynamicInitializer.cpp:24: /usr/local/include/ceres/problem.h:259:8: note: candidate: ‘void ceres::Problem::AddParameterBlock(double, int)’ 259 | void AddParameterBlock(double* values, int size); | ^~~~~~~~~~~~~~~~~ /usr/local/include/ceres/problem.h:259:8: note: candidate expects 2 arguments, 3 provided /usr/local/include/ceres/problem.h:271:8: note: candidate: ‘void ceres::Problem::AddParameterBlock(double*, int, ceres::Manifold*)’ 271 | void AddParameterBlock(double* values, int size, Manifold* manifold); | ^~~~~~~~~~~~~~~~~ /usr/local/include/ceres/problem.h:271:62: note: no known conversion for argument 3 from ‘ov_init::State_JPLQuatLocal*’ to ‘ceres::Manifold*’ 271 | void AddParameterBlock(double* values, int size, Manifold* manifold); | ~~~~~~~~~~^~~~~~~~ /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/dynamic/DynamicInitializer.cpp:766:32: error: no matching function for call to ‘ceres::Problem::AddParameterBlock(double*&, int, ov_init::State_JPLQuatLocal*&)’ 766 | problem.AddParameterBlock(var_calib_ori, 4, ceres_calib_jplquat); | ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/local/include/ceres/ceres.h:64, from /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/ceres/Factor_GenericPrior.h:25, from /home/genozen/Desktop/ros2_openvins/src/open_vins/ov_init/src/dynamic/DynamicInitializer.cpp:24: /usr/local/include/ceres/problem.h:259:8: note: candidate: ‘void ceres::Problem::AddParameterBlock(double*, int)’ 259 | void AddParameterBlock(double* values, int size); | ^~~~~~~~~~~~~~~~~ /usr/local/include/ceres/problem.h:259:8: note: candidate expects 2 arguments, 3 provided /usr/local/include/ceres/problem.h:271:8: note: candidate: ‘void ceres::Problem::AddParameterBlock(double*, int, ceres::Manifold*)’ 271 | void AddParameterBlock(double* values, int size, Manifold* manifold); | ^~~~~~~~~~~~~~~~~ /usr/local/include/ceres/problem.h:271:62: note: no known conversion for argument 3 from ‘ov_init::State_JPLQuatLocal*’ to ‘ceres::Manifold*’ 271 | void AddParameterBlock(double* values, int size, Manifold* manifold); | ~~~~~~~~~~^~~~~~~~ gmake[2]: *** [CMakeFiles/ov_init_lib.dir/build.make:160: CMakeFiles/ov_init_lib.dir/src/dynamic/DynamicInitializer.cpp.o] Error 1 gmake[1]: *** [CMakeFiles/Makefile2:143: CMakeFiles/ov_init_lib.dir/all] Error 2 gmake: *** [Makefile:146: all] Error 2

Failed <<< ov_init [17.5s, exited with code 2]

Summary: 1 package finished [17.8s] 1 package failed: ov_init 1 package had stderr output: ov_init 4 packages not processed

— Reply to this email directly, view it on GitHub https://github.com/rpng/open_vins/issues/385, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAQ6TYTRW4H7JS2VRCT74WLX4JE2JANCNFSM6AAAAAA5HA44AY . You are receiving this because you are subscribed to this thread.Message ID: @.***>

goldbattle avatar Sep 26 '23 04:09 goldbattle

This is due to a backwards incompatible change of ceres-solver.

LocalParameterization has been removed, use Manifold instead. http://ceres-solver.org/version_history.html#id1

You should install a version earlier than 2.2.0

goldbattle avatar Oct 28 '23 20:10 goldbattle

I will keep this open till I am able to address it. I think maybe a compatibility layer or something is needed to make this work with both versions.

goldbattle avatar Feb 12 '24 05:02 goldbattle

@goldbattle Are there any plans to update OpenVINS so that is is compatible with Ceres 2.2.0?

I am having issues installing older Ceres versions from source on Ubuntu 24.

bryangd34 avatar Jun 07 '24 09:06 bryangd34