Giter Club home page Giter Club logo

gvins's People

Contributors

shaozu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gvins's Issues

Can GPS message format: gps_common/GPSFix or sensor_msgs/NavSatFix be used in this code?

Hi,
Really appreciate the work from you guys. I'm currently finding the orientation of my map between the gps pose and is interested in the intiailization step in this project proposed. I'm wondering if I have gps message like gps_common/GPSFix and sensor_msgs/NavSatFix with longitude, latitude and altitude available already, how can we use this in the initialization step? Can you guys give me some idea or suggestions? Thank you in advance!

Issues when enabling gnss

Hi, thanks for the nice work. The demo sports_field really shows perfect performance.

1. What's the necessary condition to generate the global path?

The local gvins/path can be generated with RealSense D435i without gnss. But after piping the gnss topics correctly (also using ublox_driver from your repo), the altitude and longitude information do not show up and gvins/enu_path is not generated. The yaml setup for gnss part is the same as provided file.

2. The following parameters do not show up in the code. What's the function of it?

gnss_iono_default_parameters: !!opencv-matrix   # unused parameters
   rows: 1
   cols: 8
   dt: d
   data: [0.1118E-07,  0.2235E-07, -0.4172E-06,  0.6557E-06,
          0.1249E+06, -0.4424E+06,  0.1507E+07, -0.2621E+06]

Hardware Set-Up

Hey authors,

Good work on the paper.
I was wondering if you could provide details or a rough sketch of your experimental set-up so I may recreate and run it on my end.
Thanks.

Compilation issues due to Ceres version 2.0.0

Hello everyone,

I am getting compiler errors when Ceres functions are getting called. I suppose this is due to a version conflict. The README states that version 1.12.0 is used. However, the official instructions on http://ceres-solver.org/installation.html will install version 2.0.0. Is this the cause of my issue? In that case I would like to contribute by updating the README with clear instructions on how to install this specific version of Ceres.

Here is my terminal output which documents the compilation error:

[...]
Scanning dependencies of target gvins
[ 44%] Building CXX object GVINS/estimator/CMakeFiles/gvins.dir/src/estimator_node.cpp.o
In file included from /usr/local/include/ceres/internal/parameter_dims.h:37,
                 from /usr/local/include/ceres/internal/autodiff.h:151,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:21: error: ‘integer_sequence’ is not a member of ‘std’
   64 | struct SumImpl<std::integer_sequence<T, N, Ns...>> {
      |                     ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:21: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:46: error: wrong number of template arguments (3, should be 1)
   64 | struct SumImpl<std::integer_sequence<T, N, Ns...>> {
      |                                              ^~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:60:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
   60 | struct SumImpl;
      |        ^~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:64:49: error: expected unqualified-id before ‘>’ token
   64 | struct SumImpl<std::integer_sequence<T, N, Ns...>> {
      |                                                 ^~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:71:21: error: ‘integer_sequence’ is not a member of ‘std’
   71 | struct SumImpl<std::integer_sequence<T, N1, N2, Ns...>> {
      |                     ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:71:21: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:71:51: error: wrong number of template arguments (4, should be 1)
   71 | struct SumImpl<std::integer_sequence<T, N1, N2, Ns...>> {
      |                                                   ^~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:60:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
   60 | struct SumImpl;
      |        ^~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:71:54: error: expected unqualified-id before ‘>’ token
   71 | struct SumImpl<std::integer_sequence<T, N1, N2, Ns...>> {
      |                                                      ^~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:78:21: error: ‘integer_sequence’ is not a member of ‘std’
   78 | struct SumImpl<std::integer_sequence<T, N1, N2, N3, N4, Ns...>> {
      |                     ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:78:21: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:78:59: error: wrong number of template arguments (6, should be 1)
   78 | struct SumImpl<std::integer_sequence<T, N1, N2, N3, N4, Ns...>> {
      |                                                           ^~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:60:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
   60 | struct SumImpl;
      |        ^~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:78:62: error: expected unqualified-id before ‘>’ token
   78 | struct SumImpl<std::integer_sequence<T, N1, N2, N3, N4, Ns...>> {
      |                                                              ^~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:85:21: error: ‘integer_sequence’ is not a member of ‘std’
   85 | struct SumImpl<std::integer_sequence<T, N>> {
      |                     ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:85:21: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:85:41: error: wrong number of template arguments (2, should be 1)
   85 | struct SumImpl<std::integer_sequence<T, N>> {
      |                                         ^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:60:8: note: provided for ‘template<class Seq> struct ceres::internal::SumImpl’
   60 | struct SumImpl;
      |        ^~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:85:42: error: expected unqualified-id before ‘>’ token
   85 | struct SumImpl<std::integer_sequence<T, N>> {
      |                                          ^~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:91:21: error: ‘integer_sequence’ is not a member of ‘std’
   91 | struct SumImpl<std::integer_sequence<T>> {
      |                     ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:91:21: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:91:38: error: template argument 1 is invalid
   91 | struct SumImpl<std::integer_sequence<T>> {
      |                                      ^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:91:39: error: expected unqualified-id before ‘>’ token
   91 | struct SumImpl<std::integer_sequence<T>> {
      |                                       ^~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:135:31: error: ‘integer_sequence’ is not a member of ‘std’
  135 |                          std::integer_sequence<T, N, Ns...>,
      |                               ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:135:31: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:135:59: error: template argument 3 is invalid
  135 |                          std::integer_sequence<T, N, Ns...>,
      |                                                           ^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:135:59: error: type/value mismatch at argument 4 in template parameter list for ‘template<class T, T Sum, class SeqIn, class SeqOut> struct ceres::internal::ExclusiveScanImpl’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:135:59: note:   expected a type, got ‘N’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:146:39: error: ‘integer_sequence’ is not a member of ‘std’
  146 | struct ExclusiveScanImpl<T, Sum, std::integer_sequence<T>, SeqOut> {
      |                                       ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:146:39: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:146:57: error: wrong number of template arguments (3, should be 4)
  146 | struct ExclusiveScanImpl<T, Sum, std::integer_sequence<T>, SeqOut> {
      |                                                         ^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:130:8: note: provided for ‘template<class T, T Sum, class SeqIn, class SeqOut> struct ceres::internal::ExclusiveScanImpl’
  130 | struct ExclusiveScanImpl;
      |        ^~~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:160:53: error: ‘integer_sequence’ is not a member of ‘std’
  160 |       typename ExclusiveScanImpl<T, T(0), Seq, std::integer_sequence<T>>::Type;
      |                                                     ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:160:53: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:160:70: error: template argument 4 is invalid
  160 |       typename ExclusiveScanImpl<T, T(0), Seq, std::integer_sequence<T>>::Type;
      |                                                                      ^
/usr/local/include/ceres/internal/integer_sequence_algorithm.h:160:16: error: expected nested-name-specifier
  160 |       typename ExclusiveScanImpl<T, T(0), Seq, std::integer_sequence<T>>::Type;
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:151,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/parameter_dims.h:44:55: error: ‘integer_sequence’ is not a member of ‘std’
   44 | constexpr bool IsValidParameterDimensionSequence(std::integer_sequence<int>) {
      |                                                       ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:44:72: error: expected primary-expression before ‘int’
   44 | constexpr bool IsValidParameterDimensionSequence(std::integer_sequence<int>) {
      |                                                                        ^~~
/usr/local/include/ceres/internal/parameter_dims.h:50:10: error: ‘template<int N, int ...Ts> constexpr const bool ceres::internal::IsValidParameterDimensionSequence’ redeclared as different kind of entity
   50 |     std::integer_sequence<int, N, Ts...>) {
      |          ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:44:16: note: previous declaration ‘constexpr const bool ceres::internal::IsValidParameterDimensionSequence’
   44 | constexpr bool IsValidParameterDimensionSequence(std::integer_sequence<int>) {
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:50:10: error: ‘integer_sequence’ is not a member of ‘std’
   50 |     std::integer_sequence<int, N, Ts...>) {
      |          ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:50:27: error: expected primary-expression before ‘int’
   50 |     std::integer_sequence<int, N, Ts...>) {
      |                           ^~~
/usr/local/include/ceres/internal/parameter_dims.h:50:40: error: expected ‘)’ before ‘>’ token
   50 |     std::integer_sequence<int, N, Ts...>) {
      |                                        ^
      |                                        )
/usr/local/include/ceres/internal/parameter_dims.h:49:49: note: to match this ‘(’
   49 | constexpr bool IsValidParameterDimensionSequence(
      |                                                 ^
/usr/local/include/ceres/internal/parameter_dims.h:69:27: error: ‘integer_sequence’ in namespace ‘std’ does not name a template type
   69 |   using Parameters = std::integer_sequence<int, Ns...>;
      |                           ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:74:41: error: there are no arguments to ‘Parameters’ that depend on a template parameter, so a declaration of ‘Parameters’ must be available [-fpermissive]
   74 |       IsValidParameterDimensionSequence(Parameters());
      |                                         ^~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:74:41: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/usr/local/include/ceres/internal/parameter_dims.h:85:16: error: ‘integer_sequence’ is not a member of ‘std’
   85 |       Sum<std::integer_sequence<int, Ns...>>::Value;
      |                ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:85:16: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/parameter_dims.h:85:43: error: template argument 1 is invalid
   85 |       Sum<std::integer_sequence<int, Ns...>>::Value;
      |                                           ^~
/usr/local/include/ceres/internal/parameter_dims.h:101:20: error: ‘std::integer_sequence’ has not been declared
  101 |       T* ptr, std::integer_sequence<int, Indices...>) {
      |                    ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h:101:36: error: expected ‘,’ or ‘...’ before ‘<’ token
  101 |       T* ptr, std::integer_sequence<int, Indices...>) {
      |                                    ^
/usr/local/include/ceres/internal/parameter_dims.h: In static member function ‘static std::array<T*, ceres::internal::ParameterDims<IsDynamic, Ns>::kNumParameterBlocks> ceres::internal::ParameterDims<IsDynamic, Ns>::GetUnpackedParameters(T*)’:
/usr/local/include/ceres/internal/parameter_dims.h:94:35: error: ‘Parameters’ was not declared in this scope; did you mean ‘ParameterDims’?
   94 |     using Offsets = ExclusiveScan<Parameters>;
      |                                   ^~~~~~~~~~
      |                                   ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:94:45: error: template argument 1 is invalid
   94 |     using Offsets = ExclusiveScan<Parameters>;
      |                                             ^
/usr/local/include/ceres/internal/parameter_dims.h:95:39: error: there are no arguments to ‘Offsets’ that depend on a template parameter, so a declaration of ‘Offsets’ must be available [-fpermissive]
   95 |     return GetUnpackedParameters(ptr, Offsets());
      |                                       ^~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:152,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/variadic_evaluate.h: At global scope:
/usr/local/include/ceres/internal/variadic_evaluate.h:53:39: error: ‘std::integer_sequence’ has not been declared
   53 |                                  std::integer_sequence<int, Indices...>) {
      |                                       ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/variadic_evaluate.h:53:55: error: expected ‘,’ or ‘...’ before ‘<’ token
   53 |                                  std::integer_sequence<int, Indices...>) {
      |                                                       ^
/usr/local/include/ceres/internal/variadic_evaluate.h:66:39: error: ‘std::integer_sequence’ has not been declared
   66 |                                  std::integer_sequence<int>) {
      |                                       ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/variadic_evaluate.h:66:55: error: expected ‘,’ or ‘...’ before ‘<’ token
   66 |                                  std::integer_sequence<int>) {
      |                                                       ^
/usr/local/include/ceres/internal/variadic_evaluate.h: In function ‘bool ceres::internal::VariadicEvaluateImpl(const Functor&, const T* const*, T*, const void*)’:
/usr/local/include/ceres/internal/variadic_evaluate.h:77:12: error: ‘make_integer_sequence’ in namespace ‘std’ does not name a template type
   77 |       std::make_integer_sequence<int, ParameterDims::kNumParameterBlocks>;
      |            ^~~~~~~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/variadic_evaluate.h:80:44: error: there are no arguments to ‘ParameterBlockIndices’ that depend on a template parameter, so a declaration of ‘ParameterBlockIndices’ must be available [-fpermissive]
   80 |       functor, input, output, IsDynamic(), ParameterBlockIndices());
      |                                            ^~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/autodiff.h: At global scope:
/usr/local/include/ceres/internal/autodiff.h:217:39: error: ‘integer_sequence’ is not a member of ‘std’
  217 | struct Make1stOrderPerturbations<std::integer_sequence<int, N, Ns...>,
      |                                       ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/autodiff.h:217:39: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/autodiff.h:217:69: error: template argument 1 is invalid
  217 | struct Make1stOrderPerturbations<std::integer_sequence<int, N, Ns...>,
      |                                                                     ^
/usr/local/include/ceres/internal/autodiff.h:232:39: error: ‘integer_sequence’ is not a member of ‘std’
  232 | struct Make1stOrderPerturbations<std::integer_sequence<int>,
      |                                       ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/autodiff.h:232:39: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/autodiff.h:232:59: error: template argument 1 is invalid
  232 | struct Make1stOrderPerturbations<std::integer_sequence<int>,
      |                                                           ^
/usr/local/include/ceres/internal/autodiff.h:282:31: error: ‘integer_sequence’ is not a member of ‘std’
  282 | struct Take1stOrderParts<std::integer_sequence<int, N, Ns...>,
      |                               ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/autodiff.h:282:31: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/autodiff.h:282:61: error: template argument 1 is invalid
  282 | struct Take1stOrderParts<std::integer_sequence<int, N, Ns...>,
      |                                                             ^
/usr/local/include/ceres/internal/autodiff.h:298:31: error: ‘integer_sequence’ is not a member of ‘std’
  298 | struct Take1stOrderParts<std::integer_sequence<int>, ParameterIdx, Offset> {
      |                               ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/autodiff.h:298:31: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/autodiff.h:298:51: error: template argument 1 is invalid
  298 | struct Take1stOrderParts<std::integer_sequence<int>, ParameterIdx, Offset> {
      |                                                   ^
In file included from /usr/local/include/ceres/ceres.h:42,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/cost_function_to_functor.h:161:29: error: ‘std::integer_sequence’ has not been declared
  161 |                        std::integer_sequence<int, Indices...>) {
      |                             ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/cost_function_to_functor.h:161:45: error: expected ‘,’ or ‘...’ before ‘<’ token
  161 |                        std::integer_sequence<int, Indices...>) {
      |                                             ^
/usr/local/include/ceres/cost_function_to_functor.h: In member function ‘bool ceres::CostFunctionToFunctor<kNumResiduals, Ns>::operator()(const T*, Ts* ...) const’:
/usr/local/include/ceres/cost_function_to_functor.h:148:14: error: ‘make_integer_sequence’ in namespace ‘std’ does not name a template type
  148 |         std::make_integer_sequence<int, ParameterDims::kNumParameterBlocks>;
      |              ^~~~~~~~~~~~~~~~~~~~~
/usr/local/include/ceres/cost_function_to_functor.h:150:41: error: there are no arguments to ‘Indices’ that depend on a template parameter, so a declaration of ‘Indices’ must be available [-fpermissive]
  150 |         GetParameterPointers<T>(params, Indices());
      |                                         ^~~~~~~
In file included from /usr/local/include/ceres/dynamic_numeric_diff_cost_function.h:44,
                 from /usr/local/include/ceres/ceres.h:48,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/numeric_diff.h: At global scope:
/usr/local/include/ceres/internal/numeric_diff.h:445:48: error: ‘integer_sequence’ is not a member of ‘std’
  445 |                                           std::integer_sequence<int, N, Ns...>,
      |                                                ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/numeric_diff.h:445:48: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/numeric_diff.h:445:78: error: template argument 2 is invalid
  445 |                           std::integer_sequence<int, N, Ns...>,
      |                                                              ^

/usr/local/include/ceres/internal/numeric_diff.h:490:48: error: ‘integer_sequence’ is not a member of ‘std’
  490 |                                           std::integer_sequence<int>,
      |                                                ^~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/numeric_diff.h:490:48: error: ‘integer_sequence’ is not a member of ‘std’
/usr/local/include/ceres/internal/numeric_diff.h:490:68: error: template argument 2 is invalid
  490 |                                           std::integer_sequence<int>,
      |                                                                    ^
In file included from /usr/local/include/ceres/internal/autodiff.h:151,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘constexpr const bool ceres::internal::ParameterDims<false, 4, 3, 3>::kIsValid’:
/usr/local/include/ceres/internal/parameter_dims.h:75:17:   required from ‘class ceres::internal::ParameterDims<false, 4, 3, 3>’
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<2, 4, 3, 3>’
/usr/local/include/ceres/autodiff_cost_function.h:154:7:   required from ‘class ceres::AutoDiffCostFunction<ReprojectionError3D, 2, 4, 3, 3>’
/home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:49:59:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:74:51: error: ‘Parameters’ was not declared in this scope; did you mean ‘ParameterDims’?
   74 |       IsValidParameterDimensionSequence(Parameters());
      |                                         ~~~~~~~~~~^~
      |                                         ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:74:40: error: ‘ceres::internal::IsValidParameterDimensionSequence’ cannot be used as a function
   74 |       IsValidParameterDimensionSequence(Parameters());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘class ceres::internal::ParameterDims<false, 4, 3, 3>’:
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<2, 4, 3, 3>’
/usr/local/include/ceres/autodiff_cost_function.h:154:7:   required from ‘class ceres::AutoDiffCostFunction<ReprojectionError3D, 2, 4, 3, 3>’
/home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:49:59:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:75:17: error: non-constant condition for static assertion
   75 |   static_assert(kIsValid,
      |                 ^~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:131,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/sized_cost_function.h: In instantiation of ‘class ceres::SizedCostFunction<2, 4, 3, 3>’:
/usr/local/include/ceres/autodiff_cost_function.h:154:7:   required from ‘class ceres::AutoDiffCostFunction<ReprojectionError3D, 2, 4, 3, 3>’
/home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:49:59:   required from here
/usr/local/include/ceres/sized_cost_function.h:53:55: error: non-constant condition for static assertion
   53 |   static_assert(internal::StaticParameterDims<Ns...>::kIsValid,
      |                                                       ^~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:151,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘constexpr const bool ceres::internal::ParameterDims<false, 7, 9, 7, 9>::kIsValid’:
/usr/local/include/ceres/internal/parameter_dims.h:75:17:   required from ‘class ceres::internal::ParameterDims<false, 7, 9, 7, 9>’
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<15, 7, 9, 7, 9>’
/home/akp/catkin_ws/src/GVINS/estimator/src/initial/../factor/imu_factor.h:12:33:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:74:51: error: ‘Parameters’ was not declared in this scope; did you mean ‘ParameterDims’?
   74 |       IsValidParameterDimensionSequence(Parameters());
      |                                         ~~~~~~~~~~^~
      |                                         ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:74:40: error: ‘ceres::internal::IsValidParameterDimensionSequence’ cannot be used as a function
   74 |       IsValidParameterDimensionSequence(Parameters());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘class ceres::internal::ParameterDims<false, 7, 9, 7, 9>’:
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<15, 7, 9, 7, 9>’
/home/akp/catkin_ws/src/GVINS/estimator/src/initial/../factor/imu_factor.h:12:33:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:75:17: error: non-constant condition for static assertion
   75 |   static_assert(kIsValid,
      |                 ^~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:131,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/sized_cost_function.h: In instantiation of ‘class ceres::SizedCostFunction<15, 7, 9, 7, 9>’:
/home/akp/catkin_ws/src/GVINS/estimator/src/initial/../factor/imu_factor.h:12:33:   required from here
/usr/local/include/ceres/sized_cost_function.h:53:55: error: non-constant condition for static assertion
   53 |   static_assert(internal::StaticParameterDims<Ns...>::kIsValid,
      |                                                       ^~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:151,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘constexpr const bool ceres::internal::ParameterDims<false, 7, 7, 7, 1>::kIsValid’:
/usr/local/include/ceres/internal/parameter_dims.h:75:17:   required from ‘class ceres::internal::ParameterDims<false, 7, 7, 7, 1>’
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<2, 7, 7, 7, 1>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/projection_factor.h:10:40:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:74:51: error: ‘Parameters’ was not declared in this scope; did you mean ‘ParameterDims’?
   74 |       IsValidParameterDimensionSequence(Parameters());
      |                                         ~~~~~~~~~~^~
      |                                         ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:74:40: error: ‘ceres::internal::IsValidParameterDimensionSequence’ cannot be used as a function
   74 |       IsValidParameterDimensionSequence(Parameters());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘class ceres::internal::ParameterDims<false, 7, 7, 7, 1>’:
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<2, 7, 7, 7, 1>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/projection_factor.h:10:40:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:75:17: error: non-constant condition for static assertion
   75 |   static_assert(kIsValid,
      |                 ^~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:131,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/sized_cost_function.h: In instantiation of ‘class ceres::SizedCostFunction<2, 7, 7, 7, 1>’:
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/projection_factor.h:10:40:   required from here
/usr/local/include/ceres/sized_cost_function.h:53:55: error: non-constant condition for static assertion
   53 |   static_assert(internal::StaticParameterDims<Ns...>::kIsValid,
      |                                                       ^~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:151,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘constexpr const bool ceres::internal::ParameterDims<false, 7, 7, 7, 1, 1>::kIsValid’:
/usr/local/include/ceres/internal/parameter_dims.h:75:17:   required from ‘class ceres::internal::ParameterDims<false, 7, 7, 7, 1, 1>’
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<2, 7, 7, 7, 1, 1>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/projection_td_factor.h:10:42:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:74:51: error: ‘Parameters’ was not declared in this scope; did you mean ‘ParameterDims’?
   74 |       IsValidParameterDimensionSequence(Parameters());
      |                                         ~~~~~~~~~~^~
      |                                         ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:74:40: error: ‘ceres::internal::IsValidParameterDimensionSequence’ cannot be used as a function
   74 |       IsValidParameterDimensionSequence(Parameters());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘class ceres::internal::ParameterDims<false, 7, 7, 7, 1, 1>’:
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<2, 7, 7, 7, 1, 1>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/projection_td_factor.h:10:42:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:75:17: error: non-constant condition for static assertion
   75 |   static_assert(kIsValid,
      |                 ^~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:131,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/sized_cost_function.h: In instantiation of ‘class ceres::SizedCostFunction<2, 7, 7, 7, 1, 1>’:
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/projection_td_factor.h:10:42:   required from here
/usr/local/include/ceres/sized_cost_function.h:53:55: error: non-constant condition for static assertion
   53 |   static_assert(internal::StaticParameterDims<Ns...>::kIsValid,
      |                                                       ^~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:151,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘constexpr const bool ceres::internal::ParameterDims<false, 7, 9, 7, 9, 1, 1, 1, 3>::kIsValid’:
/usr/local/include/ceres/internal/parameter_dims.h:75:17:   required from ‘class ceres::internal::ParameterDims<false, 7, 9, 7, 9, 1, 1, 1, 3>’
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<2, 7, 9, 7, 9, 1, 1, 1, 3>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/gnss_psr_dopp_factor.hpp:26:41:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:74:51: error: ‘Parameters’ was not declared in this scope; did you mean ‘ParameterDims’?
   74 |       IsValidParameterDimensionSequence(Parameters());
      |                                         ~~~~~~~~~~^~
      |                                         ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:74:40: error: ‘ceres::internal::IsValidParameterDimensionSequence’ cannot be used as a function
   74 |       IsValidParameterDimensionSequence(Parameters());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘class ceres::internal::ParameterDims<false, 7, 9, 7, 9, 1, 1, 1, 3>’:
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<2, 7, 9, 7, 9, 1, 1, 1, 3>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/gnss_psr_dopp_factor.hpp:26:41:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:75:17: error: non-constant condition for static assertion
   75 |   static_assert(kIsValid,
      |                 ^~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:131,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/sized_cost_function.h: In instantiation of ‘class ceres::SizedCostFunction<2, 7, 9, 7, 9, 1, 1, 1, 3>’:
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/gnss_psr_dopp_factor.hpp:26:41:   required from here
/usr/local/include/ceres/sized_cost_function.h:53:55: error: non-constant condition for static assertion
   53 |   static_assert(internal::StaticParameterDims<Ns...>::kIsValid,
      |                                                       ^~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:151,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘constexpr const bool ceres::internal::ParameterDims<false, 1, 1, 1, 1>::kIsValid’:
/usr/local/include/ceres/internal/parameter_dims.h:75:17:   required from ‘class ceres::internal::ParameterDims<false, 1, 1, 1, 1>’
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<1, 1, 1, 1, 1>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/gnss_dt_ddt_factor.hpp:15:35:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:74:51: error: ‘Parameters’ was not declared in this scope; did you mean ‘ParameterDims’?
   74 |       IsValidParameterDimensionSequence(Parameters());
      |                                         ~~~~~~~~~~^~
      |                                         ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:74:40: error: ‘ceres::internal::IsValidParameterDimensionSequence’ cannot be used as a function
   74 |       IsValidParameterDimensionSequence(Parameters());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘class ceres::internal::ParameterDims<false, 1, 1, 1, 1>’:
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<1, 1, 1, 1, 1>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/gnss_dt_ddt_factor.hpp:15:35:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:75:17: error: non-constant condition for static assertion
   75 |   static_assert(kIsValid,
      |                 ^~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:131,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/sized_cost_function.h: In instantiation of ‘class ceres::SizedCostFunction<1, 1, 1, 1, 1>’:
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/gnss_dt_ddt_factor.hpp:15:35:   required from here
/usr/local/include/ceres/sized_cost_function.h:53:55: error: non-constant condition for static assertion
   53 |   static_assert(internal::StaticParameterDims<Ns...>::kIsValid,
      |                                                       ^~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:151,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘constexpr const bool ceres::internal::ParameterDims<false, 1>::kIsValid’:
/usr/local/include/ceres/internal/parameter_dims.h:75:17:   required from ‘class ceres::internal::ParameterDims<false, 1>’
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<1, 1>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/gnss_dt_anchor_factor.hpp:9:38:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:74:51: error: ‘Parameters’ was not declared in this scope; did you mean ‘ParameterDims’?
   74 |       IsValidParameterDimensionSequence(Parameters());
      |                                         ~~~~~~~~~~^~
      |                                         ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:74:40: error: ‘ceres::internal::IsValidParameterDimensionSequence’ cannot be used as a function
   74 |       IsValidParameterDimensionSequence(Parameters());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘class ceres::internal::ParameterDims<false, 1>’:
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<1, 1>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/gnss_dt_anchor_factor.hpp:9:38:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:75:17: error: non-constant condition for static assertion
   75 |   static_assert(kIsValid,
      |                 ^~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:131,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/sized_cost_function.h: In instantiation of ‘class ceres::SizedCostFunction<1, 1>’:
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/gnss_dt_anchor_factor.hpp:9:38:   required from here
/usr/local/include/ceres/sized_cost_function.h:53:55: error: non-constant condition for static assertion
   53 |   static_assert(internal::StaticParameterDims<Ns...>::kIsValid,
      |                                                       ^~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:151,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘constexpr const bool ceres::internal::ParameterDims<false, 1, 1>::kIsValid’:
/usr/local/include/ceres/internal/parameter_dims.h:75:17:   required from ‘class ceres::internal::ParameterDims<false, 1, 1>’
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<1, 1, 1>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/gnss_ddt_smooth_factor.hpp:11:39:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:74:51: error: ‘Parameters’ was not declared in this scope; did you mean ‘ParameterDims’?
   74 |       IsValidParameterDimensionSequence(Parameters());
      |                                         ~~~~~~~~~~^~
      |                                         ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:74:40: error: ‘ceres::internal::IsValidParameterDimensionSequence’ cannot be used as a function
   74 |       IsValidParameterDimensionSequence(Parameters());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘class ceres::internal::ParameterDims<false, 1, 1>’:
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<1, 1, 1>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/gnss_ddt_smooth_factor.hpp:11:39:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:75:17: error: non-constant condition for static assertion
   75 |   static_assert(kIsValid,
      |                 ^~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:131,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/sized_cost_function.h: In instantiation of ‘class ceres::SizedCostFunction<1, 1, 1>’:
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/gnss_ddt_smooth_factor.hpp:11:39:   required from here
/usr/local/include/ceres/sized_cost_function.h:53:55: error: non-constant condition for static assertion
   53 |   static_assert(internal::StaticParameterDims<Ns...>::kIsValid,
      |                                                       ^~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:151,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘constexpr const bool ceres::internal::ParameterDims<false, 7, 7, 9, 9>::kIsValid’:
/usr/local/include/ceres/internal/parameter_dims.h:75:17:   required from ‘class ceres::internal::ParameterDims<false, 7, 7, 9, 9>’
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<3, 7, 7, 9, 9>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/pos_vel_factor.hpp:14:36:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:74:51: error: ‘Parameters’ was not declared in this scope; did you mean ‘ParameterDims’?
   74 |       IsValidParameterDimensionSequence(Parameters());
      |                                         ~~~~~~~~~~^~
      |                                         ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:74:40: error: ‘ceres::internal::IsValidParameterDimensionSequence’ cannot be used as a function
   74 |       IsValidParameterDimensionSequence(Parameters());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘class ceres::internal::ParameterDims<false, 7, 7, 9, 9>’:
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<3, 7, 7, 9, 9>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/pos_vel_factor.hpp:14:36:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:75:17: error: non-constant condition for static assertion
   75 |   static_assert(kIsValid,
      |                 ^~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:131,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/sized_cost_function.h: In instantiation of ‘class ceres::SizedCostFunction<3, 7, 7, 9, 9>’:
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/pos_vel_factor.hpp:14:36:   required from here
/usr/local/include/ceres/sized_cost_function.h:53:55: error: non-constant condition for static assertion
   53 |   static_assert(internal::StaticParameterDims<Ns...>::kIsValid,
      |                                                       ^~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:151,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘constexpr const bool ceres::internal::ParameterDims<false, 7>::kIsValid’:
/usr/local/include/ceres/internal/parameter_dims.h:75:17:   required from ‘class ceres::internal::ParameterDims<false, 7>’
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<6, 7>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/pose_anchor_factor.h:10:40:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:74:51: error: ‘Parameters’ was not declared in this scope; did you mean ‘ParameterDims’?
   74 |       IsValidParameterDimensionSequence(Parameters());
      |                                         ~~~~~~~~~~^~
      |                                         ParameterDims
/usr/local/include/ceres/internal/parameter_dims.h:74:40: error: ‘ceres::internal::IsValidParameterDimensionSequence’ cannot be used as a function
   74 |       IsValidParameterDimensionSequence(Parameters());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/usr/local/include/ceres/internal/parameter_dims.h: In instantiation of ‘class ceres::internal::ParameterDims<false, 7>’:
/usr/local/include/ceres/sized_cost_function.h:49:47:   required from ‘class ceres::SizedCostFunction<6, 7>’
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/pose_anchor_factor.h:10:40:   required from here
/usr/local/include/ceres/internal/parameter_dims.h:75:17: error: non-constant condition for static assertion
   75 |   static_assert(kIsValid,
      |                 ^~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:131,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/sized_cost_function.h: In instantiation of ‘class ceres::SizedCostFunction<6, 7>’:
/home/akp/catkin_ws/src/GVINS/estimator/src/factor/pose_anchor_factor.h:10:40:   required from here
/usr/local/include/ceres/sized_cost_function.h:53:55: error: non-constant condition for static assertion
   53 |   static_assert(internal::StaticParameterDims<Ns...>::kIsValid,
      |                                                       ^~~~~~~~
In file included from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/autodiff.h: In instantiation of ‘bool ceres::internal::AutoDifferentiate(const Functor&, const T* const*, int, T*, T**) [with int kNumResiduals = 2; ParameterDims = ceres::internal::ParameterDims<false, 4, 3, 3>; Functor = ReprojectionError3D; T = double]’:
/usr/local/include/ceres/autodiff_cost_function.h:210:69:   required from ‘bool ceres::AutoDiffCostFunction<CostFunctor, kNumResiduals, Ns>::Evaluate(const double* const*, double*, double**) const [with CostFunctor = ReprojectionError3D; int kNumResiduals = 2; int ...Ns = {4, 3, 3}]’
/usr/local/include/ceres/autodiff_cost_function.h:200:8:   required from here
/usr/local/include/ceres/internal/autodiff.h:315:9: error: no type named ‘Parameters’ in ‘class ceres::internal::ParameterDims<false, 4, 3, 3>’
  315 |   using Parameters = typename ParameterDims::Parameters;
      |         ^~~~~~~~~~
/usr/local/include/ceres/internal/autodiff.h:348:47: error: no type named ‘Parameters’ in ‘class ceres::internal::ParameterDims<false, 4, 3, 3>’
  348 |   Make1stOrderPerturbations<Parameters>::Apply(parameters,
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
  349 |                                                parameters_as_jets.data());
      |                                                ~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/local/include/ceres/internal/autodiff.h:357:39: error: no type named ‘Parameters’ in ‘class ceres::internal::ParameterDims<false, 4, 3, 3>’
  357 |   Take1stOrderParts<Parameters>::Apply(
      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
  358 |       num_outputs, residuals_as_jets.data(), jacobians);
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/local/include/ceres/internal/autodiff.h:152,
                 from /usr/local/include/ceres/autodiff_cost_function.h:130,
                 from /usr/local/include/ceres/ceres.h:37,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/initial/initial_sfm.h:2,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator.h:9,
                 from /home/akp/catkin_ws/src/GVINS/estimator/src/estimator_node.cpp:15:
/usr/local/include/ceres/internal/variadic_evaluate.h: In instantiation of ‘bool ceres::internal::VariadicEvaluateImpl(const Functor&, const T* const*, T*, const void*) [with ParameterDims = ceres::internal::ParameterDims<false, 4, 3, 3>; Functor = ReprojectionError3D; T = double]’:
/usr/local/include/ceres/internal/variadic_evaluate.h:108:45:   required from ‘bool ceres::internal::VariadicEvaluate(const Functor&, const T* const*, T*) [with ParameterDims = ceres::internal::ParameterDims<false, 4, 3, 3>; Functor = ReprojectionError3D; T = double]’
/usr/local/include/ceres/autodiff_cost_function.h:207:55:   required from ‘bool ceres::AutoDiffCostFunction<CostFunctor, kNumResiduals, Ns>::Evaluate(const double* const*, double*, double**) const [with CostFunctor = ReprojectionError3D; int kNumResiduals = 2; int ...Ns = {4, 3, 3}]’
/usr/local/include/ceres/autodiff_cost_function.h:200:8:   required from here
/usr/local/include/ceres/internal/variadic_evaluate.h:80:65: error: ‘ParameterBlockIndices’ was not declared in this scope
   80 |       functor, input, output, IsDynamic(), ParameterBlockIndices());
      |                                            ~~~~~~~~~~~~~~~~~~~~~^~
make[2]: *** [GVINS/estimator/CMakeFiles/gvins.dir/build.make:63: GVINS/estimator/CMakeFiles/gvins.dir/src/estimator_node.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:3720: GVINS/estimator/CMakeFiles/gvins.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
Invoking "make -j1 -l1" failed

Thank you for your time

Stereo Compatibility

Hello and thank you for a great piece of work! From what I gather, there is nothing stopping this method working with a pair of stereo cameras (such as the RS D455); I was just wondering what the changes needed to be done in the codebase would be and if you are looking forward to doing it

how to buy the vi-sensor nowadays

hi~thank you for your great work! i want to know how to buy the vi-sensor nowadays? Or could you recommend a reliable synchronized visual-inertial Sensor? Thanks!

Gnss does not initialize

Hi, I have collected a dataset where the "/ublox_driver/range_meas" publish at 1 Hz, from your published dataset I see that the same topic publishes at 10 Hz. The visual-inertial system initializes well for mye dataset, but the GNSS estimate does not. Is there a minimum requirement for the frequency of the "/ublox_driver/range_meas" topic for the gnss estimate to initialize? The GNSSVIAlign() function seems to be stopped by the following line:

for (uint32_t i = 0; i < (WINDOW_SIZE+1); ++i)
{
if (gnss_meas_buf[i].empty() || gnss_meas_buf[i].size() < 10){
return false;
}
}
So I guess my question is if this seems to be a data-set issue or something that can be fixed by changing some thresholds in the code?

How to dispaly the maps

@shaozu Hello, I am very like this project. it is my needed. I have run it in my pc. all works good. Thank you very much for you nice work.

I have a simple question:
I want know how to display this path trajectory/path in the maps as yours.what tools should i use. how to configure it? I am very appreciate that you can give some reference. thank you very much again. I can display the path in rviz without any map backgrounds.
Screenshot from 2021-12-14 15-34-57

About the Earth's rotation

The GVINS paper and code are very clear and helpful. I have a small question about the code.

When reading 'gnss_psr_dopp_factor.cpp', I cannot find code segment that corresponds to the Earth's rotation term of formulas (16) and (20) of the GVINS paper. Is this part of the processing omitted from the code? And have you tested how much the Earth's rotation affects accuracy?

Looking forward to your reply!

Issuses on the Jacobian of the GnssPsrDoppFactor.

Dear authors:
Could you please tell me how to calculate the doppler factor Jacobian with respect to the position state? I do not understand the codes that are marked by a red cycle in the following figure. I refer to the arxiv version of your article and do not find the details about this Jacobian. Could you give me a guide or reference? Thank you!
多普勒因子对位置的雅克比

IMU noise unit

I am confused to the units of IMU parameters when I want to run GVINS with my own dataset. Would you mind if you could describe them thoroughly.

#imu parameters       The more accurate parameters you provide, the better performance
acc_n: 0.08          # accelerometer measurement noise standard deviation. #0.2   0.04
gyr_n: 0.004         # gyroscope measurement noise standard deviation.     #0.05  0.004
acc_w: 0.00004         # accelerometer bias random work noise standard deviation.  #0.02
gyr_w: 2.0e-6       # gyroscope bias random work noise standard deviation.     #4.0e-5

IMU correction

Great work, code and paper!

When looking at the datasheet of the ADIS16448 and your paper, your dataset should have X to the right of the helmet, Z axis to the front and Y axis down. This can be confirmed with the bag values (please correct me if I'm wrong)
20221024_gvins

Similar, the camera matrix rotation need to be corrected to fit the IMU as this is the body frame (as indicated in the paper).

Question: Where do you correct the IMU to real world coordinates system? I have not been able to found it. My coordinate system is not the same (X to the front, Y to the left and Z to the top), what make the algorithm fail

Thanks!

How to record data for GVINs with phone?

@shaojie
Hello, Your work is pretty impressed, it works perfect on pc.
Next step I'd like to run your algorithm on android, however, it seems hard to get same data as you provided for GVINS.
The Gnss Measurement offerd by Google is subset of what GVINs need.
Have you teams tried to run GVINS on phone? Do you have tools for collect GNSS data needed by GVINs with phone?
Thanks in advance!

Some questions of the research

Hello,

Thank you for your great research! I would like to ask that are you considering of conducting a ultra-tightly coupled GNSS-Visual-Inertial system? From my point of view, the ultra-tightly couple GNSS-Inertial system is quite mature. What do you think are the difficulties of the conducting a ultra-tight couple in GNSS-Visual system?

Best,

Shaoqian

running platform

Hello
I want to know the gvins is running on VI-Sensor or computer

Thanks!

自采数据集的转换

首先感谢您的开源。
我想使用我们自采的数据运行程序,但我们的GNSS原始数据是RINEX格式,我使用你们提供的gnss_comm实现了观测值和星历的转换,但其他的数据,例如配置文件中的time_pulse_info,哪些是必要的,又该如何转换?

Questions about running GVINS with my own device.

Hi~bro. I ran the GVINS with my own device (including a realsense D455 as the VIS and a H-RTK-F9P as the GNSS module ). I set all the device right. And the GPS runs fine. But it shows "length error" in the Ublox-driver terminal windiow.But when I run the GVINS project with the estimate_extrinsic 2. But After I roslaunched the GVINS , the terminal windows shows only "init begins". And I opened the rviz , it had the original image and the feature point image but no pose. I echoed the enu_pose and other messages outputed by GVINS, they are all none. So why is this?

image

image

Could you give me some advice about this? Thanks a lot.

Rank deficiency in GVINS

Hi, thanks for your great work and sorry for disturbing you several times. I just try to understand details in code.
In the optimization function, all the observations are put together with initial guesses and then optimize all the parameters. However, no prior informations(covariance) are provided like MSCKF or constant point in the ORBSLAM. So, maybe the whole optimization step is rank deficiet? But all parameters are estimated correctly. Are there any detials that I missed during code reading?
I am looking forward to your reply. Thanks in advance.

Running GVINS on ARM device

@shaozu
Hi,thanks for your nice work.

I just started working on GVINS and I'm trying to use this project for real-time drone navigation.
That means, I need to run the program on ARM embedded computer.

Firstly I run GVINS on my PC and laptop and get nice result(sports_field.bag).
IMG_7646(20211215-171818)

Then I run GVINS on NVIDIA Jetson TX2 and NVIDIA Jetson Xavier NX, but I got a problem:

  1. The gnss_enu_path seems to converge slowly and the results don't look as good as those on my PC/laptop;
  2. The path seems to start at a wrong start point and yaw angle.

As these pictures show (Jetson TX2 with CUDA in feature_tracker):
IMG_7635
IMG_7637
IMG_7638
IMG_7641

And then I use CUDA in feature_tracker to speed up calculations to reduce CPU load, but it didn't seem to help.

So is this result due to the lack of computing power on embedded computer??
But the CPU load is not too heavy......
Or is it processor architecture (ARM and x86)?

RTK

hello,Is the rtk trajectory in the paper the receiver_lla message in the bag?

gnss_enable is enabled, can not get global path

@shaozu Hello, disturb to again.
I have a question about how to enable gnss_enable.

as you can see #25. If I set gnss_enable:0, it can get the nice local position.
however, when I set gnss_enable:1, it can not get the gloabl position. So i start to debug and get some questions. hope your reply.
question:
1: I found that I have no topic /external_trigger is published. how does it work? or is it must?
2: what 's the function of the parameter gnss_local_time_diff ?
3: Is there some reference for explanation gnss_iono_default_parameters. sorry, I have not found any reference. Can it be changed? what it depends on?
4: In GNSSVIAlign() function, I found it always return false as the reason of gnss_meas_buf[i].empty() -> false && gnss_meas_buf[i].size() = 0.

for (uint32_t i = 0; i < (WINDOW_SIZE+1); ++i)
{
if (gnss_meas_buf[i].empty() || gnss_meas_buf[i].size() < 10)
return false;
}

But I can confirm that it has push the data in the buffer here
valid_meas.push_back(obs);
valid_ephems.push_back(best_ephem);
.
Very confused me.

Thank you for sharing your great job.

How can i run it in ubuntu20.04?

I try to build GVINS in ubuntu20.04.
In feature_tracker/CMakeLists.txt, estimator/CMakeLists.txt and camera_model/CMakeLists.txt, i use set(CMAKE_CXX_STANDARD 14)" instead of set(CMAKE_CXX_FLAGS "-std=c++11"), before find_package(OpenCV REQUIRED) i add set(OpenCV_DIR "~/opencv-3.4.16/build/") because i have various OpenCV.
After build GVINS successfully. I try to run and then it happens.

yui@yuis-toybox:~/catkin_ws$ source ~/catkin_ws/devel/setup.bash 
yui@yuis-toybox:~/catkin_ws$ roslaunch gvins visensor_f9p.launch
... logging to /home/yui/.ros/log/d6311978-399d-11ed-99ef-053fd084f518/roslaunch-yuis-toybox-39673.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://yuis-toybox:37879/

SUMMARY
========

PARAMETERS
 * /gvins/config_file: /home/yui/catkin_...
 * /gvins/gvins_folder: /home/yui/catkin_...
 * /gvins_feature_tracker/config_file: /home/yui/catkin_...
 * /gvins_feature_tracker/gvins_folder: /home/yui/catkin_...
 * /rosdistro: noetic
 * /rosversion: 1.15.14

NODES
  /
    gvins (gvins/gvins)
    gvins_feature_tracker (gvins_feature_tracker/gvins_feature_tracker)

auto-starting new master
process[master]: started with pid [39682]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to d6311978-399d-11ed-99ef-053fd084f518
process[rosout-1]: started with pid [39692]
started core service [/rosout]
process[gvins_feature_tracker-2]: started with pid [39695]
process[gvins-3]: started with pid [39696]
[ INFO] [1663758564.439617294]: Loaded config_file: /home/yui/catkin_ws/src/GVINS/estimator/../config/visensor_f9p/visensor_left_f9p_config.yaml
result path /home/yui/output/vins_result_no_loop.csv
[ INFO] [1663758564.476904727]: ROW: 480.000000 COL: 752.000000 
[ WARN] [1663758564.477026670]:  fix extrinsic param 
[ INFO] [1663758564.642657624]: Extrinsic_R : 
   0.999989 -0.00432278  0.00179891
 0.00432766    0.999987 -0.00271802
-0.00178714  0.00272578    0.999995
[ INFO] [1663758564.642783195]: Extrinsic_T : 
 -0.0759473 -0.00393205  -0.0016395
[ INFO] [1663758564.642882208]: Synchronized sensors, fix time offset: 0
[ INFO] [1663758564.676009167]: GNSS enabled
[ INFO] [1663758564.676076825]: init begins
[gvins_feature_tracker-2] process has died [pid 39695, exit code -11, cmd /home/yui/catkin_ws/devel/lib/gvins_feature_tracker/gvins_feature_tracker __name:=gvins_feature_tracker __log:=/home/yui/.ros/log/d6311978-399d-11ed-99ef-053fd084f518/gvins_feature_tracker-2.log].
log file: /home/yui/.ros/log/d6311978-399d-11ed-99ef-053fd084f518/gvins_feature_tracker-2*.log

How can i solve this problem?

Stability of system operation when GPS signal is disturbed

hello, I am attempting to deploy the algorithm on a drone. However, GPS signals may not be found on Viaduct or indoor when UAVs fly , or the positioning deviation is large. If traveling through such areas for a long time, is the system still stable in estimating its own position?

The program stuck at init

Great works, thanks!
I notice that my own dataset do not have an /extermal_trigger topic? Can you please tell me how should I get one?

run visensor_f9p failed

Hello, after doing all the necessary steps and building the GVINS package, I couldn't run the visensor_f9p.launch
Here is the error that appears after typing the command roslaunch gvins visensor_f9p.launch
Can you help me resolving this issue please ?

auto-starting new master
process[master]: started with pid [8057]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 15004520-c541-11eb-88d2-1867b0884fc9
process[rosout-1]: started with pid [8073]
started core service [/rosout]
process[gvins_feature_tracker-2]: started with pid [8079]
process[gvins-3]: started with pid [8081]
[ INFO] [1622816889.314049540]: Loaded config_file: /home/elloumi/catkin_ws/src/GVINS/estimator/../config/visensor_f9p/visensor_left_f9p_config.yaml
result path /home/elloumi/output/vins_result_no_loop.csv
[ INFO] [1622816889.317172267]: ROW: 480.000000 COL: 752.000000
[ WARN] [1622816889.317230606]: fix extrinsic param
[ INFO] [1622816889.317727824]: Extrinsic_R :
0.999989 -0.00432278 0.00179891
0.00432766 0.999987 -0.00271802
-0.00178714 0.00272578 0.999995
[ INFO] [1622816889.317806542]: Extrinsic_T :
-0.0759473 -0.00393205 -0.0016395
[ INFO] [1622816889.317862017]: Synchronized sensors, fix time offset: 0
[ INFO] [1622816889.317960120]: GNSS enabled
[ INFO] [1622816889.318039380]: init begins
[ERROR] [1622816889.425234220]: Failed to load vins_folder

Could not find the required component 'gnss_comm'.

system:Ubuntu 18.04.4
eigen:3.3.4
ceres:1.14
(but there is no error in build gnss_comm)

I have build the gnss_comm package as instruction

mkdir - p gnss_comm_ws/src
cd gnss_comm_ws/src 
git clone https://github.com/HKUST-Aerial-Robotics/gnss_comm.git
cd ..
catkin_make
source ./devel/setup.bash

there is no error
then I build GVINS in another workspace as follows

mkdir -p GVINS_ws/src
cd GVINS_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/GVINS.git
cd ..
catkin_make

the error is:

Could not find the required component 'gnss_comm'. The following CMake error indicates that you either need to install the package with the same name or change your environment so that it can be found.
CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
  Could not find a package configuration file provided by "gnss_comm" with
  any of the following names:

    gnss_commConfig.cmake
    gnss_comm-config.cmake

  Add the installation prefix of "gnss_comm" to CMAKE_PREFIX_PATH or set
  "gnss_comm_DIR" to a directory containing one of the above files.  If
  "gnss_comm" provides a separate development package or SDK, be sure it has
  been installed.
Call Stack (most recent call first):
  GVINS/estimator/CMakeLists.txt:8 (find_package)

so if I have to give path in right path? or other method?

about the dopp_std data

Hello
i wonder how can you get the dopp_std data based on the VI-SENSOR
I have read the Novatel protocols file and find it don't contain the dopp_std data.
1642659735(1)

time-synchronized logic with UTC

Dear Officer,

Thank you for sharing your great job. I wanna ask about the time-synchronized logic here.

time_diff_gnss_visensor = next_pulse_time - trigger_msg->header.stamp.toSec() + LEAP_SECONDS;

Here:
time_diff_gnss_visensor = next_pulse_time - trigger_msg->header.stamp.toSec() + LEAP_SECONDS;

next_pulse_time: pps GPS time in UTC format, remove the leap seconds in epoch2time() already? Correct me if I am wrong
trigger_msg->header.stamp.toSec(): VI device's UTC time
LEAP_SECONDS : 18seconds

As the system is time_sync and gps_time = utc_time + LEAP_SECONDS according to here.http://leapsecond.com/java/gpsclock.htm
Why do you need to add the LEAP_SECONDS to calculate the time_diff?

Print the time difference of time_diff_gnss_visensor is quite large. I am running with data2, complex_environment.bag
image

How can I get time of world frame?

Hi, thanks for your great work.
I want to evaluate accuracy of GVINS(without GNSS) which means I need time of reference frame (or world frame). How can I get this?
Thanks in advance.

Question about UBLOX Config

hello @shaozu I have follow your steps, do the VI slam, The result is below, looks good.
Screenshot from 2021-12-17 16-26-39

I have two question, hopes your suggestions:
question 1: I have a f9p module, but I have not rtcm data, so it will never get rtk fix. Can this data fuse with the image&imu data?
question 2: I use my f9p module, run the command, roslaunch ublox_driver ublox_driver.launch, I can see the topic show as below:

/ublox_driver/ephem
/ublox_driver/glo_ephem
/ublox_driver/iono_params
/ublox_driver/range_meas
/ublox_driver/receiver_lla
/ublox_driver/receiver_pvt
/ublox_driver/time_pulse_info

How ever, when I rostopic echo /ublox_driver/receiver_lla, no topic is published/display. Do I need some special config through u-center or some other tools?

Migrate to VINS-Fusion framework

Hi @shaozu

Thanks for your awesome work.

Right now, I was trying to migrate from VINS-Mono to VINS-Fusion framework in order to get stereo VIO support, and I encountered a weird problem that the ECEF anchor point didn't converge.

image

As the above figure shown, the green path is the RTK groundtruth, and the purple one is the VIO odometry path, while the red path is the fused path. We can see that the fused position jittered a lot because of the unstable ECEF anchor position.

If I set the ECEF anchor point as constant, the fused path will be smooth, but the accuracy is almost the same as VIO.

So I was wondering if you ever encounter this issue before.

Looking forward to your response.

Thanks.

Questions about running with my device

Hi~ I used realsense D455 as the VIsensor and an H-RTK-F9P as the GNSS module. I set the estimate_extrinsic 2 and modified all the topic name But when I run the launch file. It showed this: "init begins" and
image

why is this? could you offer some advice? Thanks a lot.

Global orientation and enu coordinate

Hi,
I'm working on a gps navigation project and trying to use GVINS to realize localization. The issue I have is the transformation of the global orientation and the origin of the enu frame. Following are the more detailed questions:

  1. By using 6-axis imu, gps and camera, how is the global orientation obtained?
  2. How is enu origin defined? Is it the anchor mentioned in the paper? Is there any parameter like datum in the navsat_transform?

I also tried to fuse only /gvins/gnss_fused_lla to robot_localization's navsat_transform directly, but the result localization is drifting.

How to do Simulation

Hello,

Thank you for great research. If I want to get same simulation results, how shall I generate data?
please share test generation package and if any procedure.

Regards,
Kranthi

Why only choose the observations on L1 band?

Hi, @shaozu
I have a new question about GNSS observation selection.

Acording to the the code (in function filter_L1 and L1_freq ), if I understand this correctly, I guess you just choose observations on these bands:

  1. GPS L1;
  2. BDS B1;
  3. GLONASS G1 and G2;
  4. GALILEO E1.

Could you tell me why not choose observations on other bands, for example GPS L2, L5 and BDS B2?
BDS B2, for example, seems to have better performance from what I read online.

unit2rcv_pos in code

Hello
I find you use dopp to constrain the position in code as follow
Eigen::Matrix3d unit2rcv_pos;
for (size_t i = 0; i < 3; ++i)
{
for (size_t j = 0; j < 3; ++j)
{
if (i == j)
unit2rcv_pos(i, j) = (norm2-rcv2sat_ecef(i)*rcv2sat_ecef(i))/norm3;
else
unit2rcv_pos(i, j) = (-rcv2sat_ecef(i)*rcv2sat_ecef(j))/norm3;
}
}
but this method don't mention in your paper, so can you give me some papers about this method

Not enough features or parallax; Move device around [VINS-Fusion works but not GVINS]

Hey all!
I have been trying out GVINS on my handheld devices (ZED2i stereo - rolling shutter, OAK-D - global shutter).

I keep getting the following error:
[ INFO] [1670628907.037916833]: Not enough features or parallax; Move device around

I have tried with both devices and i get the following error when running in pure VI mode.
I initially thought it could be an issue with the camera+IMU calibration. But with the same parameters, I did the calibration using the kalibr package and was able to run ORB SLAM3 and VINS-Fusion (stereo + IMU) for both cameras. So, I am unsure about what could be the issue.

The config files have been set properly. I am running GVINS using just one of the cameras in both ZED and OAK-D (since it's mono mode).

The only difference I see in the config file is the declaration of extrinsic parameters.
In VINS-Fusion - for my ZED camera

# Extrinsic parameter between IMU and Camera.
estimate_extrinsic: 0   # 0  Have an accurate extrinsic parameters. We will trust the following imu^R_cam, imu^T_cam, don't change it.
                        # 1  Have an initial guess about extrinsic parameters. We will optimize around your initial guess.

body_T_cam0: !!opencv-matrix
   rows: 4
   cols: 4
   dt: d
   data:  [ 0.0051989,  -0.00475195,  0.99997519,  0.01782353,
           -0.99998009, -0.00360067,  0.00518181,  0.02405353,
            0.00357595, -0.99998223, -0.00477058,  0.00652621,
            0.,          0.,          0.,          1.        ]

body_T_cam1: !!opencv-matrix
   rows: 4
   cols: 4
   dt: d
   data: [0.01907386, -0.00099337, 0.99981758, 0.01775441,
           -0.9998151, -0.00245767, 0.01907137, -0.097972 ,
          0.00243827, -0.99999649, -0.00104007, 0.00694309,
          0, 0, 0, 1]

#Multiple thread support
multiple_thread: 1

#feature traker paprameters
max_cnt: 150            # max feature number in feature tracking
min_dist: 30            # min distance between two features 
freq: 0              # frequence (Hz) of publish tracking result. At least 10Hz for good estimation. If set 0, the frequence will be same as raw image 
F_threshold: 1.0        # ransac threshold (pixel)
show_track: 1           # publish tracking image as topic
flow_back: 1            # perform forward and backward optical flow to improve feature tracking accuracy

#optimization parameters
max_solver_time: 0.04  # max solver itration time (ms), to guarantee real time
max_num_iterations: 8   # max solver itrations, to guarantee real time
keyframe_parallax: 10.0 # keyframe selection threshold (pixel)

#imu parameters       The more accurate parameters you provide, the better performance
acc_n: 0.0015999999595806003       # accelerometer measurement noise standard deviation. 
gyr_n: 0.007000000216066837         # gyroscope measurement noise standard deviation.     
acc_w: 0.0002508999896235764      # accelerometer bias random work noise standard deviation.  
gyr_w: 0.0019474000437185168       # gyroscope bias random work noise standard deviation.     
g_norm: 9.81007     # gravity magnitude

#unsynchronization parameters
estimate_td: 0                      # online estimate time offset between camera and imu
td: 0.0         

while in GVINS it is

# Extrinsic parameter between IMU and Camera.
estimate_extrinsic: 1   # 0  Have an accurate extrinsic parameters. We will trust the following imu^R_cam, imu^T_cam, don't change it.
                        # 1  Have an initial guess about extrinsic parameters. We will optimize around your initial guess.
                        # 2  Don't know anything about extrinsic parameters. You don't need to give R,T. We will try to calibrate it. Do some rotation movement at beginning.                        
#If you choose 0 or 1, you should write down the following matrix.
#Rotation from camera frame to imu frame, imu^R_cam
extrinsicRotation: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data:   [0.0051989,  -0.00475195,  0.99997519,
         -0.99998009, -0.00360067,  0.00518181, 
         0.00357595, -0.99998223, -0.00477058]
   
#Translation from camera frame to imu frame, imu^T_cam
extrinsicTranslation: !!opencv-matrix
   rows: 3
   cols: 1
   dt: d
   data: [0.01782353, 0.02405353, 0.00652621]

#feature traker paprameters
max_cnt: 150           # max feature number in feature tracking
min_dist: 30           # min distance between two features 
freq: 10                # frequence (Hz) of publish tracking result. At least 10Hz for good estimation. If set 0, the frequence will be same as raw image 
F_threshold: 1.0        # ransac threshold (pixel)
show_track: 1           # publish tracking image as topic
equalize: 1             # if image is too dark or light, trun on equalize to find enough features
fisheye: 0              # if using fisheye, trun on it. A circle mask will be loaded to remove edge noisy points

#optimization parameters
max_solver_time: 0.04  # max solver itration time (ms), to guarantee real time
max_num_iterations: 8   # max solver itrations, to guarantee real time
keyframe_parallax: 10.0 # keyframe selection threshold (pixel)

#imu parameters       The more accurate parameters you provide, the better performance
acc_n: 0.0015999999595806003       # accelerometer measurement noise standard deviation. 
gyr_n: 0.007000000216066837         # gyroscope measurement noise standard deviation.     
acc_w: 0.0002508999896235764      # accelerometer bias random work noise standard deviation.  
gyr_w: 0.0019474000437185168       # gyroscope bias random work noise standard deviation.     
g_norm: 9.81007     # gravity magnitude

#unsynchronization parameters
estimate_td: 0                      # online estimate time offset between camera and imu
td: 0.0                             # initial value of time offset. unit: s. readed image clock + td = real image clock (IMU clock)`

Could you help figure out what could be going wrong? I am using the distortion parameters of camera 0 in GVINS.

Any ideas? @shaojie @dvorak0 @WayneTimer @groundmelon @hlx1996

Thanks!!

The algorithm has an altitude deviation when running on my device.

Hello, everyone. I tried running GVINS on my device, however, there is a huge deviation in the height value of the positioning trajectory. The hardware I use is RealSense D455 and Ublox f9p. The camera frequency is 30Hz, and has been reduced to 10Hz in the algorithm, and the GNSS receiver frequency is 10Hz, and there is no hardware synchronization between them. The real trajectory is provided by RTK. After the initialization process is complete, the anchor position first has a slip and then stabilizes around a deviation value. This will result in a constant deviation for the entire trajectory. I wonder if it's a hardware or an algorithm problem. Can anyone help me with this? @shaozu The results are shown below:
rviz
outdoor_02

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.