hkust-aerial-robotics / gvins Goto Github PK
View Code? Open in Web Editor NEWTightly coupled GNSS-Visual-Inertial system for locally smooth and globally consistent state estimation in complex environment.
License: GNU General Public License v3.0
Tightly coupled GNSS-Visual-Inertial system for locally smooth and globally consistent state estimation in complex environment.
License: GNU General Public License v3.0
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!
Hi, thanks for the nice work. The demo sports_field really shows perfect performance.
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.
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]
I'm curious about how the GPS raw measurements are simulated in the simulation environment. I can't find relevant sensor data in Gazebo.
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.
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
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
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!
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?
@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.
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!
Thank you very much for your work. Can you provide the ROS code for recording Ublox GPS raw data?
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!
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
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)
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!
@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!
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
Hello
I want to know the gvins is running on VI-Sensor or computer
Thanks!
首先感谢您的开源。
我想使用我们自采的数据运行程序,但我们的GNSS原始数据是RINEX格式,我使用你们提供的gnss_comm实现了观测值和星历的转换,但其他的数据,例如配置文件中的time_pulse_info,哪些是必要的,又该如何转换?
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?
Could you give me some advice about this? Thanks a lot.
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.
When using your GVINS to test the urban driving dataset, I encountered a significant error on a section of the road. What is the problem and how to solve it.?The huge error occurred in the red box of the following figure
@shaojie @dvorak0 @WayneTimer @hlx1996
@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).
Then I run GVINS on NVIDIA Jetson TX2 and NVIDIA Jetson Xavier NX, but I got a problem:
As these pictures show (Jetson TX2 with CUDA in feature_tracker):
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)?
I wonder if your u-blox can connect with qianxun amount. If so, may I ask about the product type of you use u-blox GNSS module?
hello,Is the rtk trajectory in the paper the receiver_lla message in the bag?
@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
.
GVINS/estimator/src/estimator.cpp
Lines 566 to 570 in d2cf40b
GVINS/estimator/src/estimator.cpp
Lines 326 to 327 in d2cf40b
Thank you for sharing your great job.
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?
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?
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?
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
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?
Hi!
I am interested in testing the simulator that you mention in your paper, it it possible to get access to this?
GNSS_COMM Links seem broken, Hope you can provide a new link
Thanks for sharing! That's an awesome work
Dear Officer,
Thank you for sharing your great job. I wanna ask about the time-synchronized logic here.
GVINS/estimator/src/estimator_node.cpp
Line 274 in c388579
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
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.
hello @shaozu I have follow your steps, do the VI slam, The result is below, looks good.
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?
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.
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.
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
why is this? could you offer some advice? Thanks a lot.
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:
I also tried to fuse only /gvins/gnss_fused_lla to robot_localization's navsat_transform directly, but the result localization is drifting.
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
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:
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.
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
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!!
When using your GVINS to test the urban driving dataset, I encountered a significant error on a section of the road. What is the problem and how to solve it.?The huge error occurred in the red box of the following figure
@shaojie @dvorak0 @WayneTimer @hlx1996
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:
Thanks for your nice work. @shaozu
I've got a new question about GNSS receiver dt and ddt factor.
In your code, standard deviation of ddt is set to 0.1(unit: m/s ?) and the infomation matrix of dt is set to 50(unit: m ?).
Could you please tell me why set them to these values?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.