pamela-project / slambench

SLAM performance evaluation framework
https://apt.cs.manchester.ac.uk/projects/PAMELA/
Other
311 stars 84 forks source link

okvis stack smashing detected #32

Closed pengpeng1997 closed 5 years ago

pengpeng1997 commented 5 years ago

Hello there! I got an error when testing okvis. The following is the error information.

$ ./build/bin/benchmark_loader -i ./datasets/EuRoCMAV/machine_hall/MH_02_easy.slam -load ./build/lib/libokvis-original-library.so

Parameter input assigned value ./datasets/EuRoCMAV/machine_hall/MH_02_easy.slam
Parameter load-slam-library assigned value ./build/lib/libokvis-original-library.so
new library name: ./build/lib/libokvis-original-library.so
Configuration consumed 0 bytes
SLAM library loaded: ./build/lib/libokvis-original-library.so
Process every frame mode enabled
SLAMBench Report run started: 2019-07-21 12:29:57

Properties:
=================

frame-limit: 0
log-file:
input: ./datasets/EuRoCMAV/machine_hall/MH_02_easy.slam
load-slam-library: ./build/lib/libokvis-original-library.so
dse: false
help: false
realtime-mode: false
realtime-multiplier: 1
file-output:
cam1-intrinsics-parameters: 0.6084934,0.9502792,0.5053178,0.5317459
cam0-intrinsics-parameters: 0.6099122,0.9527,0.4883178,0.5174479
numKeyframes: 5
numImuframes: 3
detectionOctaves: 0
maxNoKeypoints: 400
detectionThreshold: 40
timeLimitForMatchingAndOptimization: 0.035
max-iterations: 10
min-iterations: 3
frameTimestampTolerance: 0.005
blockingEstimator: true
*** Start memory tracking
*** Test XU3 Monitoring.
*** XU3 Monitoring failed.
*** There is no available power monitoring techniques on this system.
Add cameras, may take a wee while...
Done !

Statistics:
=================

Frame Number Timestamp AbsoluteError MeanATE MaxATE RPE_RMSE Duration_Frame CPU_Memory GPU_Memory CUDA_Memory Z
W0721 12:29:58.509532 20937 Frontend.cpp:282] - Skipping propagation as only one IMU measurement has been given to frontend. Normal when starting up.
vizualizer failed
1 1403636858.6516664028 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0051870000 113008611 0 734265340.0010834897 -0.0000359825 -0.0014635958
vizualizer failed
2 1403636858.7016665936 0.0222567804 0.0111283902 0.0222567804 0.0322140381 0.0024150000 133885009 0 734265340.0140852369 -0.0006646162 -0.0195169412
vizualizer failed
*** stack smashing detected ***: ./build/bin/benchmark_loader terminated
Aborted (core dumped)
mihaibujanca commented 5 years ago

Can reproduce.

Log:

Parameter input assigned value ./datasets/EuRoCMAV/machine_hall/MH_02_easy/MH_02_easy.slam
Parameter load-library assigned value ./build/lib/libokvis-original-library.so
new library name: ./build/lib/libokvis-original-library.so
Configuration consumed 0 bytes
library loaded: ./build/lib/libokvis-original-library.so
Process every frame mode enabled
SLAMBench Report run started:   2019-07-27 05:31:46

Properties:
=================

frame-limit: 0
log-file: 
input: ./datasets/EuRoCMAV/machine_hall/MH_02_easy/MH_02_easy.slam
load-library: ./build/lib/libokvis-original-library.so
dse: false
help: false
realtime-mode: false
realtime-multiplier: 1
file-output: 
cam1-intrinsics-parameters: 0.6084934,0.9502792,0.5053178,0.5317459
cam0-intrinsics-parameters: 0.6099122,0.9527,0.4883178,0.5174479
numKeyframes: 5
numImuframes: 3
detectionOctaves: 0
maxNoKeypoints: 400
detectionThreshold: 40
timeLimitForMatchingAndOptimization: 0.035
max-iterations: 10
min-iterations: 3
frameTimestampTolerance: 0.005
blockingEstimator: true
*** Start memory tracking
*** Test XU3 Monitoring.
*** XU3 Monitoring failed.
*** There is no available power monitoring techniques on this system.
Add cameras, may take a wee while...
Done !

Statistics:
=================

Frame Number    Timestamp   AbsoluteError   MeanATE MaxATE  RPE_RMSE    Duration_Frame  CPU_Memory  GPU_Memory  CUDA_Memory X   Y   Z
W0727 17:31:47.269306 16188 Frontend.cpp:282] - Skipping propagation as only one IMU measurement has been given to frontend. Normal when starting up.
vizualizer failed
1   1403636858.6516664028   0.0000000000    0.0000000000    0.0000000000    -nan    0.0452590000112855830   0   630587392   0.0004847466    -0.0000175764   -0.0006509979
vizualizer failed
2   1403636858.7016665936   0.0190898590    0.0095449295    0.0190898590    0.0308980327    0.0030270000    131976966   0   630587392   0.0116413590    -0.0005319593   -0.0161326919
vizualizer failed
3   1403636858.7516665459   0.1053096652    0.0414665081    0.1053096652    0.0630749724    0.0066400000    132017562   0   630587392   0.0626059398    -0.0029404464   -0.0856364816
vizualizer failed
4   1403636858.8016664982   0.2181208581    0.0856300956    0.2181208581    0.0808065736    0.0045350000    132046998   0   630587392   0.1297184676    -0.0058600609   -0.1762675345
vizualizer failed
5   1403636858.8516664505   0.3717995882    0.1428639941    0.3717995882    0.1022053907    0.0205460000    129826278   0   630587392   0.2218379080    -0.0090574604   -0.2992410362
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)

I tried debugging it with gdb, here's the stack:

__GI_raise 0x00007fc5f11f0e97
__GI_abort 0x00007fc5f11f2801
__libc_message 0x00007fc5f123b897
__GI___fortify_fail_abort 0x00007fc5f12e6cd1
__stack_chk_fail 0x00007fc5f12e6c92
ceres::internal::MaybeReorderSchurComplementColumnsUsingSuiteSparse(ceres::OrderedGroups<double*> const&, ceres::internal::Program*) 0x00007fc5d5b465a0
<unknown> 0x0000000000000000

Interestingly enough, if I recompile OKVIS without optimisations (passing -O0), instead of the SIGABRT, I got a segmentation fault. It seems to occur when a new thread is spawned /home/mihai/Projects/slambench2/benchmarks/okvis/src/original/okvis_library.cpp:416

    okvis_estimator = new okvis::ThreadedKFVio(parameters);

Attached stack:

Eigen::internal::scalar_quotient1_op<double>::operator() Functors.h:544
Eigen::CwiseUnaryOpImpl<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const, Eigen::Dense>::coeff CwiseUnaryOp.h:114
Eigen::CwiseUnaryOpImpl<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const, Eigen::Dense>::coeff CwiseUnaryOp.h:114
Eigen::CwiseBinaryOpImpl<Eigen::internal::scalar_difference_op<double>, Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const, Eigen::Dense>::coeff CwiseBinaryOp.h:188
Eigen::CwiseUnaryOpImpl<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_difference_op<double>, Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const> const, Eigen::Dense>::coeff CwiseUnaryOp.h:114
Eigen::CwiseBinaryOpImpl<Eigen::internal::scalar_sum_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_difference_op<double>, Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const> const> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const, Eigen::Dense>::coeff CwiseBinaryOp.h:188
Eigen::DenseCoeffsBase<Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false>, 1>::copyCoeff<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_difference_op<double>, Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const> const> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const> > DenseCoeffsBase.h:495
Eigen::internal::assign_LinearTraversal_CompleteUnrolling<Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_difference_op<double>, Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const> const> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const>, 0, 3>::run Assign.h:180
Eigen::internal::assign_impl<Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_difference_op<double>, Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const> const> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const>, 1, 2, 0>::run Assign.h:314
Eigen::DenseBase<Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false> >::lazyAssign<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_difference_op<double>, Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const> const> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const> > Assign.h:507
Eigen::internal::assign_selector<Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_difference_op<double>, Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const> const> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const>, false, false>::run Assign.h:527
Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false> >::operator=<Eigen::CwiseBinaryOp<Eigen::internal::scalar_sum_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseBinaryOp<Eigen::internal::scalar_difference_op<double>, Eigen::Block<Eigen::Matrix<double, 4, 1, 0, 4, 1>, 3, 1, false> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const> const> const, Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op<double>, Eigen::CwiseUnaryOp<Eigen::internal::scalar_quotient1_op<double>, Eigen::Map<Eigen::Matrix<double, 3, 1, 0, 3, 1>, 0, Eigen::Stride<0, 0> > const> const> const> > Assign.h:571
okvis::triangulation::ProbabilisticStereoTriangulator<okvis::cameras::PinholeCamera<okvis::cameras::RadialTangentialDistortion> >::getUncertainty ProbabilisticStereoTriangulator.cpp:331
okvis::VioKeyframeWindowMatchingAlgorithm<okvis::cameras::PinholeCamera<okvis::cameras::RadialTangentialDistortion> >::setBestMatch VioKeyframeWindowMatchingAlgorithm.cpp:391
okvis::DenseMatcher::matchBody<okvis::VioKeyframeWindowMatchingAlgorithm<okvis::cameras::PinholeCamera<okvis::cameras::RadialTangentialDistortion> > > DenseMatcher.hpp:120
okvis::DenseMatcher::match<okvis::VioKeyframeWindowMatchingAlgorithm<okvis::cameras::PinholeCamera<okvis::cameras::RadialTangentialDistortion> > > DenseMatcher.hpp:134
okvis::Frontend::matchStereo<okvis::VioKeyframeWindowMatchingAlgorithm<okvis::cameras::PinholeCamera<okvis::cameras::RadialTangentialDistortion> > > Frontend.cpp:545
okvis::Frontend::dataAssociationAndInitialization Frontend.cpp:244
okvis::ThreadedKFVio::matchingLoop ThreadedKFVio.cpp:521
std::__invoke_impl<void, void (okvis::ThreadedKFVio::*)(), okvis::ThreadedKFVio*> invoke.h:73
std::__invoke<void (okvis::ThreadedKFVio::*)(), okvis::ThreadedKFVio*> invoke.h:95
std::thread::_Invoker<std::tuple<void (okvis::ThreadedKFVio::*)(), okvis::ThreadedKFVio*> >::_M_invoke<0ul, 1ul> thread:244
std::thread::_Invoker<std::tuple<void (okvis::ThreadedKFVio::*)(), okvis::ThreadedKFVio*> >::operator() thread:253
std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (okvis::ThreadedKFVio::*)(), okvis::ThreadedKFVio*> > >::_M_run thread:196
<unknown> 0x00007f131f51a1b0
start_thread 0x00007f131f2326db
clone 0x00007f131bd1a88f
mihaibujanca commented 5 years ago

It seems like this is a known issue @bbodin @pengpeng1997: https://github.com/ethz-asl/okvis/issues/75

The solution seems to be fixing SuiteSparse to version 4.4.6. Haven't tried it yet but once confirmed I can make a PR with a fix

pengpeng1997 commented 5 years ago

Fixing SuiteSparse to version 4.4.6 does work! First fix SuiteSparse to version 4.4.6 then make ceres again in deps.

messier202 commented 4 years ago

I have installed SuiteSparse version 4.4.6. When I use system installed ceres with cmake -DUSE_SYSTEM_CERES=ON .., same error occured, when I turn off the option, it fixed.

Yueting-Li commented 2 years ago

When I use system installed ceres with cmake -DUSE_SYSTEM_CERES=ON ..

Hey, I have fixed SuiteSparse to version 4.4.6, and then make ceres and okvis again.But the same error occured!
Could you tell me how to turn off the option?