borglab/gtsam

# include<gtsam/navigation/ImuFactor.h> cannot comiled successfully

WZG3661 opened this issue · 1 comments

Description

my include files like this:

#include <gtsam/geometry/Pose3.h>
#include <gtsam/navigation/ImuFactor.h>

#include <gtsam/nonlinear/ISAM2.h>
#include <gtsam/nonlinear/ISAM2Params.h>
#include <gtsam/nonlinear/Marginals.h>
#include <gtsam/nonlinear/Values.h>

#include <gtsam/slam/BetweenFactor.h>
#include <gtsam/slam/PriorFactor.h>

#include <gtsam/inference/Symbol.h>

and the complie errors:

In file included from /usr/local/include/gtsam/nonlinear/Values.h:28,
                 from /usr/local/include/gtsam/nonlinear/NonlinearFactor.h:24,
                 from /usr/local/include/gtsam/navigation/ImuFactor.h:25,
                 from /home/Work/open_vins/src/open_vins/ov_fusion/src/loose_fusion.cpp:19:
/usr/local/include/gtsam/base/GenericValue.h: In instantiation of ‘bool gtsam::GenericValue<T>::equals_(const gtsam::Value&, double) const [with T = Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1> >]’:
/usr/local/include/gtsam/base/GenericValue.h:81:8:   required from here
/usr/local/include/gtsam/base/GenericValue.h:85:29: error: incomplete type ‘gtsam::traits<Eigen::CwiseNullaryOp<Eigen::internal::scalar_constant_op<double>, Eigen::Matrix<double, 3, 1> > >’ used in nested name specifier
   85 |     return traits<T>::Equals(this->value_, genericValue2.value_, tol);
      |            ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated due to -Wfatal-errors.
make[2]: *** [CMakeFiles/loose_fusion.dir/build.make:63: CMakeFiles/loose_fusion.dir/src/loose_fusion.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:205: CMakeFiles/loose_fusion.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

Environment

the gtsam version is 4.2a9

I found writing like this would report error:

Values new_values;      
new_values.insert(X(curr_key), results.at<Vector3>(curr_key)); // error
Vector3 temp=results.at<Vector3>(curr_key);
new_values.insert(X(curr_key), temp); // OK