Code Monkey home page Code Monkey logo

okvis's Introduction

README {#mainpage}

Welcome to OKVIS: Open Keyframe-based Visual-Inertial SLAM.

This is the Author's implementation of the [1] and [3] with more results in [2].

[1] Stefan Leutenegger, Simon Lynen, Michael Bosse, Roland Siegwart and Paul Timothy Furgale. Keyframe-based visual–inertial odometry using nonlinear optimization. The International Journal of Robotics Research, 2015.

[2] Stefan Leutenegger. Unmanned Solar Airplanes: Design and Algorithms for Efficient and Robust Autonomous Operation. Doctoral dissertation, 2014.

[3] Stefan Leutenegger, Paul Timothy Furgale, Vincent Rabaud, Margarita Chli, Kurt Konolige, Roland Siegwart. Keyframe-Based Visual-Inertial SLAM using Nonlinear Optimization. In Proceedings of Robotics: Science and Systems, 2013.

Note that the codebase that you are provided here is free of charge and without any warranty. This is bleeding edge research software.

Also note that the quaternion standard has been adapted to match Eigen/ROS, thus some related mathematical description in [1,2,3] will not match the implementation here.

If you publish work that relates to this software, please cite at least [1].

License

The 3-clause BSD license (see file LICENSE) applies.

How do I get set up?

This is a pure cmake project.

You will need to install the following dependencies,

  • CMake,

      sudo apt-get install cmake
    
  • google-glog + gflags,

      sudo apt-get install libgoogle-glog-dev
    
  • BLAS & LAPACK,

      sudo apt-get install libatlas-base-dev
    
  • Eigen3,

      sudo apt-get install libeigen3-dev
    
  • SuiteSparse and CXSparse,

      sudo apt-get install libsuitesparse-dev
    
  • Boost,

      sudo apt-get install libboost-dev libboost-filesystem-dev
    
  • OpenCV 2.4-3.0: follow the instructions on http://opencv.org/ or install via

      sudo apt-get install libopencv-dev
    
  • Optional: use the the package with the Skybotix VI sensor. Note that this requires a system install, not just as ROS package. Also note that Skybotix OSX support is experimental (checkout the feature/osx branch).

      git clone https://github.com/ethz-asl/libvisensor.git
      cd libvisensor
      ./install_libvisensor.sh
    

then download and expand the archive:

wget https://www.doc.ic.ac.uk/~sleutene/software/okvis-1.1.3.zip
unzip okvis-1.1.3.zip && rm okvis-1.1.3.zip

Or, if you were given bitbucket access, clone the repository:

git clone [email protected]:ethz-asl/okvis.git

or

git clone https://github.com/ethz-asl/okvis.git

Building the project

To change the cmake build type for the whole project use:

mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j8

NOTE: if you want to use the library, install the project (default or somewhere else), so the dependencies can be resolved.

make install

Running the demo application

You will find a demo application in okvis_apps. It can process datasets in the ASL/ETH format.

In order to run a minimal working example, follow the steps below:

  1. Download a dataset of your choice from http://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets. Assuming you downloaded MH_01_easy/. You will find a corresponding calibration / estimator configuration in the config folder.

  2. Run the app as

     ./okvis_app_synchronous path/to/okvis/config/config_fpga_p2_euroc.yaml path/to/MH_01_easy/mav0/
    

Outputs and frames

In terms of coordinate frames and notation,

  • W denotes the OKVIS World frame (z up),
  • C_i denotes the i-th camera frame
  • S denotes the IMU sensor frame
  • B denotes a (user-specified) body frame.

The output of the okvis library is the pose T_WS as a position r_WS and quaternion q_WS, followed by the velocity in World frame v_W and gyro biases (b_g) as well as accelerometer biases (b_a). See the example application to get an idea on how to use the estimator and its outputs (callbacks returning states).

Configuration files

The config folder contains example configuration files. Please read the documentation of the individual parameters in the yaml file carefully. You have various options to trade-off accuracy and computational expense as well as to enable online calibration.

HEALTH WARNING: calibration

If you would like to run the software/library on your own hardware setup, be aware that good results (or results at all) may only be obtained with appropriate calibration of the

  • camera intrinsics,
  • camera extrinsics (poses relative to the IMU),
  • knowledge about the IMU noise parameters,
  • and ACCURATE TIME SYNCHRONISATION OF ALL SENSORS.

To perform a calibration yourself, we recommend the following:

Using the library

Here's a minimal example of your CMakeLists.txt to build a project using OKVIS.

cmake_minimum_required(VERSION 2.8)

set(OKVIS_INSTALLATION <path/to/install>) # point to installation

# require OpenCV
find_package( OpenCV COMPONENTS core highgui imgproc features2d REQUIRED )
include_directories(BEFORE ${OpenCV_INCLUDE_DIRS}) 

# require okvis
find_package( okvis 1.1 REQUIRED)
include_directories(${OKVIS_INCLUDE_DIRS})

# require brisk
find_package( brisk 2 REQUIRED)
include_directories(${BRISK_INCLUDE_DIRS})

# require ceres
list(APPEND CMAKE_PREFIX_PATH ${OKVIS_INSTALLATION})
find_package( Ceres REQUIRED )
include_directories(${CERES_INCLUDE_DIRS}) 

# require OpenGV
find_package(opengv REQUIRED)

# VISensor, if available
list(APPEND CMAKE_MODULE_PATH ${OKVIS_INSTALLATION}/lib/CMake)
find_package(VISensor)
if(VISENSORDRIVER_FOUND)
  message(STATUS "Found libvisensor.")
else()
  message(STATUS "libvisensor not found")
endif()

# now continue with your project-specific stuff...

Contribution guidelines

Support

The developpers will be happy to assist you or to consider bug reports / feature requests. But questions that can be answered reading this document will be ignored. Please contact [email protected].

okvis's People

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  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

okvis's Issues

hard to find out the imu noise parameters

I managed to compile the okvis code under visual studio 2013. And it worked with the example datasets!
But when I tried to run it with my own setup of stereo camera + imu, it just crash. And I thingk it is because of the imu nois parameters.

okvis crash inside "pthread_cond_wait" when adding imu data:
if (size >= max_queue_size) { pthread_cond_wait(&condition_full_, &mutex_); }

I dive into kalibr for a few days, I can now calibrate the stereo cameras with IMU. And I learned a little about Allan avairance .
It has puzzled me for a week , but I still cannot figure out the imu noise parameters for invensense mpu6050. The mpu6050 datasheet does not give me the noise infomation such as "gyro bias prior", "gyro drift noise density" 。

Can anyone tell me something about "gyro bias prior", "gyro drift noise density" of mpu6050? The mpu6050 datasheet can be found here.

Assumptions about gravity direction and initial pose?

I have gotten okvis to successfully run on the MAV datasets, and have started feeding my own data into the algorithm. In general it just drifts like crazy, which is not surprising considering the many things that could be wrong (calibration of IMU to camera, time synchronization, etc.). While I was looking through the configs and code I was wondering: how do you estimate the acceleration due to gravity? Is there any assumption about the starting direction of gravity w.r.t the IMU? Are you assuming that gravity is subtracted from the IMU measurements before they are fed into the algorithm, or are you estimating that value online?

Start fail using own sensor.

F0516 16:45:42.349895 5751 parameter_block.h:164] Check failed: new_parameterization->GlobalSize() == size_ Invalid parameterization for parameter block. The parameter block has size 7 while the parameterization has a global size of 6. Did you accidentally use the wrong parameter block or parameterization?

okvis_ceres_test and okvis_multi_sensor_processing unit test failure

Hello,
I'm getting unit-test error due to NaN in line 405 in MargilinazationError.cpp :
OKVIS_ASSERT_TRUE_DBG(Exception,H_.allFinite(),"WTF2 " <<jacobiansMinimalEigen.at(i).transpose().eval() * jacobiansMinimalEigen.at(i));).

Other than this failure everything works fine - the main application okvis_app_synchronous is building and executing fine and I can run it with no issues on the "Machine room" sequence (Euroc dataset).

Note: However I couldn't reproduce the results reported on "Vicon Room" ( IJRR 2014) by "Keyframe-based visual–inertial odometry using nonlinear optimization" ICRA 2015. (that what led me to check all the unit-tests)

Thank you,
Yonatan.


Debug unit-test output:

../okvis/build/Debug/okvis_ceres$ ./okvis_ceres_test
[==========] Running 6 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 6 tests from okvisTestSuite
[ RUN ] okvisTestSuite.Estimator
case 0, 0
Frame 0 successfully added.
Frame 1 successfully added.
Frame 2 successfully added.
Frame 3 successfully added.
Frame 4 successfully added.
Frame 5 successfully added.
Frame 6 successfully added.
== TRY MARGINALIZATION ==

unknown file: Failure

C++ exception with description "[Exception] ../okvis/okvis_ceres/src/MarginalizationError.cpp:406: addResidualBlock() debug assert(H_.allFinite()) failed: WTF2 -nan -nan -nan -nan -nan -nan -nan -nan -nan
-nan -nan -nan -nan -nan -nan -nan -nan -nan
-nan -nan -nan -nan -nan -nan -nan -nan -nan
-nan -nan -nan -nan -nan -nan -nan -nan -nan
-nan -nan -nan -nan -nan -nan -nan -nan -nan
-nan -nan -nan -nan -nan -nan -nan -nan -nan
-nan -nan -nan -nan -nan -nan -nan -nan -nan
-nan -nan -nan -nan -nan -nan -nan -nan -nan
-nan -nan -nan -nan -nan -nan -nan -nan -nan" thrown in the test body.
[ FAILED ] okvisTestSuite.Estimator (31486 ms) ####
[ RUN ] okvisTestSuite.HomogeneousPointError
run the solver...
[ OK ] okvisTestSuite.HomogeneousPointError (30 ms)
[ RUN ] okvisTestSuite.ReprojectionError
set up a random geometry... [ OK ]
set up a random camera geometry... [ OK ]
setting local parameterization for pose... [ OK ]
create N=100 visible points and add respective reprojection error terms... [ OK ]
run the solver...
initial T_WS : -0.921129 -0.329734 -0.206871 9.72266
-0.324387 0.944003 -0.0602677 0.255295
0.215159 0.0115921 -0.97651 -5.08655
0 0 0 1
optimized T_WS : -0.921631 -0.327145 -0.208737 9.57852
-0.32134 0.944923 -0.0621359 -0.533125
0.217568 0.00980934 -0.975996 -5.25324
0 0 0 1
correct T_WS : -0.921668 -0.327274 -0.208374 9.57751
-0.321491 0.944879 -0.0620309 -0.533782
0.217189 0.00981854 -0.97608 -5.24732
0 0 0 1
[ OK ] okvisTestSuite.ReprojectionError (63 ms)
[ RUN ] okvisTestSuite.ImuError
setting local parameterization for pose... [ OK ]
run the solver...
initial T_WS_1 : 0.893578 0.157643 0.420319 1.33777
-0.118954 0.985993 -0.116913 0.745465
-0.432862 0.0544722 0.899813 1.48603
0 0 0 1
optimized T_WS_1 : 0.894709 0.163335 0.415712 0.750127
-0.127574 0.985416 -0.112606 0.340934
-0.428042 0.0477157 0.902498 1.08165
0 0 0 1
correct T_WS_1 : 0.894659 0.163041 0.415937 0.755374
-0.127035 0.985437 -0.113031 0.338961
-0.428308 0.048286 0.902342 1.08361
0 0 0 1
[ OK ] okvisTestSuite.ImuError (342 ms)
[ RUN ] okvisTestSuite.Map
set up a random geometry... [ OK ]
set up a random camera geometry... [ OK ]
create N=1000 visible points and add respective reprojection error terms... [ OK ]
run the solver...
0: f: 2.821557e+03 d: 0.00e+00 g: 9.21e+02 h: 0.00e+00 rho: 0.00e+00 mu: 1.00e+04 li: 0 it: 6.48e-02 tt: 6.82e-02
1: f: 3.750040e+02 d: 2.45e+03 g: 5.24e+03 h: 1.04e+00 rho: 5.47e+00 mu: 3.00e+04 li: 1 it: 8.25e-02 tt: 1.51e-01
2: f: 2.151846e+02 d: 1.60e+02 g: 1.85e+03 h: 3.83e-02 rho: 1.54e+00 mu: 9.00e+04 li: 1 it: 8.28e-02 tt: 2.34e-01
3: f: 2.060867e+02 d: 9.10e+00 g: 5.91e+02 h: 6.85e-03 rho: 1.33e+00 mu: 2.70e+05 li: 1 it: 8.27e-02 tt: 3.16e-01
4: f: 2.052144e+02 d: 8.72e-01 g: 1.81e+02 h: 2.09e-03 rho: 1.31e+00 mu: 8.10e+05 li: 1 it: 8.27e-02 tt: 3.99e-01
5: f: 2.051307e+02 d: 8.37e-02 g: 5.50e+01 h: 6.49e-04 rho: 1.31e+00 mu: 2.43e+06 li: 1 it: 8.37e-02 tt: 4.83e-01
6: f: 2.051227e+02 d: 8.03e-03 g: 1.67e+01 h: 2.02e-04 rho: 1.31e+00 mu: 7.29e+06 li: 1 it: 8.29e-02 tt: 5.66e-01
7: f: 2.051219e+02 d: 7.76e-04 g: 5.06e+00 h: 6.29e-05 rho: 1.31e+00 mu: 2.19e+07 li: 1 it: 8.29e-02 tt: 6.49e-01
initial T_WS : 0.184127 0.962902 -0.197272 -1.66493
0.360614 0.120528 0.924895 0.0456472
0.91436 -0.241437 -0.325044 -10.3653
0 0 0 1
optimized T_WS : 0.179932 0.965323 -0.189147 -2.03859
0.36265 0.113643 0.92497 -0.195345
0.91439 -0.235026 -0.329626 -9.45202
0 0 0 1
correct T_WS : 0.180046 0.96529 -0.189206 -2.03937
0.362569 0.113682 0.924997 -0.196862
0.9144 -0.235143 -0.329516 -9.45329
0 0 0 1
0: f: 9.855764e+02 d: 0.00e+00 g: 7.12e-01 h: 0.00e+00 rho: 0.00e+00 mu: 1.00e+04 li: 0 it: 6.34e-02 tt: 6.72e-02
1: f: 2.161295e+02 d: 7.69e+02 g: 1.32e+00 h: 5.33e-03 rho: 2.29e+00 mu: 3.00e+04 li: 1 it: 8.22e-02 tt: 1.49e-01
2: f: 2.061190e+02 d: 1.00e+01 g: 1.18e+00 h: 2.95e-04 rho: 1.31e+00 mu: 9.00e+04 li: 1 it: 8.25e-02 tt: 2.32e-01
3: f: 2.052141e+02 d: 9.05e-01 g: 4.48e-01 h: 8.78e-05 rho: 1.30e+00 mu: 2.70e+05 li: 1 it: 8.27e-02 tt: 3.15e-01
4: f: 2.051304e+02 d: 8.36e-02 g: 1.33e+00 h: 2.66e-05 rho: 1.30e+00 mu: 8.10e+05 li: 1 it: 8.23e-02 tt: 3.97e-01
5: f: 2.051227e+02 d: 7.76e-03 g: 4.80e-01 h: 8.09e-06 rho: 1.30e+00 mu: 2.43e+06 li: 1 it: 8.17e-02 tt: 4.79e-01
6: f: 2.051220e+02 d: 7.22e-04 g: 1.13e+00 h: 2.46e-06 rho: 1.31e+00 mu: 7.29e+06 li: 1 it: 8.15e-02 tt: 5.60e-01
[ OK ] okvisTestSuite.Map (2839 ms)
[ RUN ] okvisTestSuite.Marginalization
set up a random geometry... [ OK ]
set up a random camera geometry... [ OK ]
create N=100 visible points and add respective reprojection error terms... [ OK ]
run the solver...
initial T_WS2 : -0.390865 -0.91501 0.0999065 5.44691
-0.686973 0.362238 0.629962 0.919158
-0.612612 0.177597 -0.770173 9.2853
0 0 0 1
optimized T_WS2 : -0.386668 -0.917122 0.0968258 4.28422
-0.684886 0.355883 0.635829 0.995449
-0.617592 0.17954 -0.765732 8.73809
0 0 0 1
correct T_WS : -0.38569 -0.917413 0.0979645 4.28803
-0.684458 0.355709 0.636386 0.991536
-0.618676 0.178396 -0.765124 8.72535
0 0 0 1
[ OK ] okvisTestSuite.Marginalization (158 ms)
[----------] 6 tests from okvisTestSuite (34918 ms total)

[----------] Global test environment tear-down
[==========] 6 tests from 1 test case ran. (34919 ms total)
[ PASSED ] 5 tests.
[ FAILED ] 1 test, listed below:
[ FAILED ] okvisTestSuite.Estimator

1 FAILED TEST


../okvis/build/Release/okvis_multisensor_processing$ ./okvis_multisensor_processing_test
[==========] Running 11 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 6 tests from FrameSynchronizerTest
[ RUN ] FrameSynchronizerTest.ConstructDestruct
[ OK ] FrameSynchronizerTest.ConstructDestruct (379 ms)
[ RUN ] FrameSynchronizerTest.CorrectOrder
[ OK ] FrameSynchronizerTest.CorrectOrder (372 ms)
[ RUN ] FrameSynchronizerTest.OneMissing
E1121 10:27:37.920555 21633 FrameSynchronizer.cpp:104] Dropping frame with id 14
[ OK ] FrameSynchronizerTest.OneMissing (376 ms)
[ RUN ] FrameSynchronizerTest.TwoMissing
E1121 10:27:38.296674 21633 FrameSynchronizer.cpp:104] Dropping frame with id 24
E1121 10:27:38.296736 21633 FrameSynchronizer.cpp:104] Dropping frame with id 26
[ OK ] FrameSynchronizerTest.TwoMissing (373 ms)
[ RUN ] FrameSynchronizerTest.OneDouble
E1121 10:27:38.669687 21633 FrameSynchronizer.cpp:104] Dropping frame with id 34
[ OK ] FrameSynchronizerTest.OneDouble (373 ms)
[ RUN ] FrameSynchronizerTest.OneOutOfOrder
[ OK ] FrameSynchronizerTest.OneOutOfOrder (394 ms)
[----------] 6 tests from FrameSynchronizerTest (2267 ms total)

[----------] 5 tests from OkvisVioInterfaces
[ RUN ] OkvisVioInterfaces.testConstructionDestruction

Floating point exception (core dumped)

Real-time running fail with 20hz camera and 200hz IMU

IMUT111: 1495193336.697047959
IMUT111: 1495193336.702781849
IMUT111: 1495193336.737182027
IMUT111: 1495193336.742905318
IMUT111: 1495193336.748630095
IMUT111: 1495193336.754410368
IMUT111: 1495193336.760116905
IMUT111: 1495193336.765844359
IMUT111: 1495193336.771567376
IMUT111: 1495193336.777280431
IMUT111: 1495193336.782997496
IMUT111: 1495193336.788709174
IMUT111: 1495193336.794426245
IMUT111: 1495193336.800146002
imageT1: 1495193336.829654109
imageT2: 1495193336.829654109
IMUT111: 1495193336.834542529
IMUT111: 1495193336.840250771
IMUT111: 1495193336.845981306
IMUT111: 1495193336.851702762
IMUT111: 1495193336.860260759
F0519 19:28:56.861635 11759 parameter_block.h:164] Check failed: new_parameterization->GlobalSize() == size_ Invalid parameterization for parameter block. The parameter block has size 7 while the parameterization has a global size of 6. Did you accidentally use the wrong parameter block or parameterization?
*** Check failure stack trace: ***
@ 0x5ba83a google::LogMessage::Fail()
@ 0x5bc70f google::LogMessage::SendToLog()
@ 0x5ba41f google::LogMessage::Flush()
@ 0x5bd04e google::LogMessageFatal::~LogMessageFatal()
@ 0x6dc5ed ceres::internal::ProblemImpl::AddParameterBlock()
@ 0x8ebf23 okvis::ceres::Map::addParameterBlock()
@ 0x8f7cb6 okvis::Estimator::addStates()
@ 0x5a613d okvis::ThreadedKFVio::matchingLoop()
@ 0x7f09faa11a60 (unknown)
@ 0x7f09fe155184 start_thread
@ 0x7f09fa179bed clone

How to convert kalibr calibration data(imu) to okvis config file?

I have assembled a camera-imu device. First i use kalibr calibration method to calibrate my own device.
The calibration yaml look like these:
imu0:
T_i_b:

  • [1.0, 0.0, 0.0, 0.0]
  • [0.0, 1.0, 0.0, 0.0]
  • [0.0, 0.0, 1.0, 0.0]
  • [0.0, 0.0, 0.0, 1.0]
    accelerometer_noise_density: 0.001409
    accelerometer_random_walk: 5.009e-05
    gyroscope_noise_density: 3.894e-05
    gyroscope_random_walk: 6.899e-08
    model: calibrated
    rostopic: /imu
    time_offset: 0.0
    update_rate: 60.0

I'm confuse to generate my own config file when compare my yaml to your config_fpga_p2_euroc.yaml.
Just like above, i get four params finally but the config yaml has eight params.
(a_max: 176.0 # acceleration saturation [m/s^2]
g_max: 7.8 # gyro saturation [rad/s]
sigma_g_c: 12.0e-4 # gyro noise density [rad/s/sqrt(Hz)]
sigma_a_c: 8.0e-3 # accelerometer noise density [m/s^2/sqrt(Hz)]
sigma_bg: 0.03 # gyro bias prior [rad/s]
sigma_ba: 0.1 # accelerometer bias prior [m/s^2]
sigma_gw_c: 4.0e-6 # gyro drift noise density [rad/s^s/sqrt(Hz)]
sigma_aw_c: 4.0e-5 # accelerometer drift noise density [m/s^2/sqrt(Hz)])
I study camera-imu for not a long time. Can you help me?

catkin_make error

when I use catkin_make, I encountered an error.
The imported target "vtkRenderingPythonTkWidgets" references the file
"/usr/lib/x86_64-linux-gnu/libvtkRenderingPythonTkWidgets.so"
but this file does not exist. Possible reasons include:

  • The file was deleted, renamed, or moved to another location.
  • An install or uninstall procedure did not complete successfully.
  • The installation package was faulty and contained
    "/usr/lib/cmake/vtk-6.2/VTKTargets.cmake"
    but not all the files it references.

-- The imported target "vtk" references the file
"/usr/bin/vtk"
but this file does not exist. Possible reasons include:

  • The file was deleted, renamed, or moved to another location.
  • An install or uninstall procedure did not complete successfully.
  • The installation package was faulty and contained
    "/usr/lib/cmake/vtk-6.2/VTKTargets.cmake"
    but not all the files it references.

-- looking for PCL_COMMON
-- looking for PCL_KDTREE
-- looking for PCL_OCTREE
-- looking for PCL_SEARCH
-- looking for PCL_IO
-- looking for PCL_SAMPLE_CONSENSUS
-- looking for PCL_FILTERS
-- looking for PCL_GEOMETRY
-- looking for PCL_FEATURES
-- looking for PCL_SEGMENTATION
-- looking for PCL_SURFACE
-- looking for PCL_REGISTRATION
-- looking for PCL_RECOGNITION
-- looking for PCL_KEYPOINTS
-- looking for PCL_VISUALIZATION
-- looking for PCL_PEOPLE
-- looking for PCL_OUTOFCORE
-- looking for PCL_TRACKING
-- looking for PCL_APPS
-- Could NOT find PCL_APPS (missing: PCL_APPS_LIBRARY)
-- looking for PCL_MODELER
-- looking for PCL_IN_HAND_SCANNER
-- looking for PCL_POINT_CLOUD_EDITOR
-- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
-- Configuring incomplete, errors occurred!
See also "/home/cc/catkin_ws/build/CMakeFiles/CMakeOutput.log".
See also "/home/cc/catkin_ws/build/CMakeFiles/CMakeError.log".
Makefile:1718: recipe for target 'cmake_check_build_system' failed
make: *** [cmake_check_build_system] Error 1
Invoking "make cmake_check_build_system" failed

Can't compile without Qt5

Thanks for this awesome bit of code. I have learned a lot from it.

I am having some trouble getting the code to compile without Qt5. I get the following error from the brisk_external library:

[  1%] Performing build step for 'brisk_external'
[ 43%] Built target agast
[ 95%] Built target brisk
Linking CXX executable bin/demo
/usr/bin/ld: cannot find -lQt5::Core
/usr/bin/ld: cannot find -lQt5::Gui
/usr/bin/ld: cannot find -lQt5::Widgets
/usr/bin/ld: cannot find -lQt5::Test
/usr/bin/ld: cannot find -lQt5::Concurrent
/usr/bin/ld: cannot find -lQt5::OpenGL
collect2: error: ld returned 1 exit status
make[5]: *** [bin/demo] Error 1
make[4]: *** [CMakeFiles/demo.dir/all] Error 2
make[3]: *** [all] Error 2
make[2]: *** [brisk/src/brisk_external-stamp/brisk_external-build] Error 2
make[1]: *** [CMakeFiles/brisk_external.dir/all] Error 2
make: *** [all] Error 2

I checked my Qt version by typing in:

qmake --version

And I see I have Qt version 4.8.6

Is it possible to make BRISK compile with lesser Qt version other than version 5? Or least mention in the documentation that Qt 5 is prerequisite.

Thank you!

Edit

I found a solution to this problem.

Firstly I downloaded the necessary libraries:

sudo apt-get install libqt5concurrent5
sudo apt-get install libqt5test5
sudo apt-get install libqt5core5a
sudo apt-get install libqt5opengl5
sudo apt-get install qtdeclarative5-dev

Then I added these lines to okvis/build/brisk/bris_external-build/CMakeLists.txt:

find_package(Qt5Gui)
find_package(Qt5Core)
find_package(Qt5Widgets)
find_package(Qt5Test)
find_package(Qt5Concurrent)
find_package(Qt5OpenGL)

The main problem I still have is that these changes are wiped out when I do make clean on the entire library. This make debugging inconvenient.

Stereo only?

Hi,

Just a short question: do I understand correctly that OKVIS currently only supports stereo setups? Any plans to extend to monocular?

Thanks,
Lex

windows build?

Hi, thank you for this code. Will it be possible to compile it for Windows? Or am I looking at a huge nightmare?

what does these noise parameters mean?

I have been learning allan variance for a while .
typically the loglog plot give me 2 parameters: "bias stability" and "angle(velocity) random walk". or even "rate random walk".
But I can't find correspondence between these parameters to okvis parameters such as : " noise density", "drift noise density".
Can any one tell me?

Tracking failure. Number of 3d2d-matches: 0

Hi, I use your data set to test the okvis_ros. I use ceres1.13 and eigen 3.3, the program will encounter Segmentation fault. If i use ceres 1.9 and eigen 3.2.1, the program will run for a while and then encounter segmentation fault. If i use ceres 1.9 and eigen 3.2.10, the program can run , but i get many output , as the following:

I1103 07:14:44.644121 44482 okvis_node_synchronous.cpp:151] No. IMU messages: 30400
I1103 07:14:44.645339 44482 okvis_node_synchronous.cpp:175] No. cam 0 messages: 3040
I1103 07:14:44.645854 44482 okvis_node_synchronous.cpp:175] No. cam 1 messages: 3040
W1103 07:14:44.646212 44584 Frontend.cpp:282] - Skipping propagation as only one IMU measurement has been given to frontend. Normal when starting up.
W1103 07:14:44.662530 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.667537 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.672633 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.677803 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.682888 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.688047 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.693446 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.698904 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.704661 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.710530 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.716156 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.721832 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.727435 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.733212 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.739078 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.745018 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
Progress: 0% W1103 07:14:44.751013 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.756906 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.762770 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.768586 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.774410 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.780310 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.786347 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:14:44.792445 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
..............
Progress: 99% W1103 07:15:01.062726 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.067163 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.072008 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.076216 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.081310 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.086670 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.092151 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.097836 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.103615 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.109148 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.114886 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.120573 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.126384 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.132091 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.137619 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.143508 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.149154 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.154821 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
W1103 07:15:01.160675 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0
Progress: 100%
Finished. Press any key to exit.
W1103 07:15:01.166384 44583 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0

I think the error is the version of Eigen , ceres and suitsparse. I would like to know what version of Eigen , ceres and suitsparse. Thanks you very much ~

Can okvis work on low-level IMU?

Hi,
Is okvis sensitive to IMU‘s accuracy and IMU-Cam synchronization? I test it using the data from my mobile phone with modified configure file. Result seems bad. Have I missed any important steps , or maybe okvis cannot work on low-level IMU?

avoid using imu?

Is it possible to use just stereo without IMU data?

Thanks a lot for the great software!!!

Online calibration

How can I enable online calibration in OKVIS? Paper has results related to online calibration and comparison graphs but I can't see related configuration for enabling online calibration in OKVIS.

Incorporating velocity measurements

I have started evaluating okvis for my platform, and have found that it works well. Now I would like to extend it to make it even better. In addition to an IMU and several cameras, I have an odometry source on my robot that gives me noisy measurements of the velocity (angular and linear) of the sensor at a very high rate. What would be the best way of incorporating these measurements into OKVIS?

Calibration problem?

in the Camera-IMU calibration,i get “T_cam_imu”, then put it in T_SC in the config file directly?

T_cam_imu and T_SC both mean transformation from Sensor to Camera?

Error while "make"

Hello,

Thanks for sharing the code, I tried to compile it but I'm getting this error:

/usr/include/c++/5/fenv.h:58:11: error: ‘::fenv_t’ has not been declared
using ::fenv_t;
^
/usr/include/c++/5/fenv.h:59:11: error: ‘::fexcept_t’ has not been declared
using ::fexcept_t;
^
/usr/include/c++/5/fenv.h:62:11: error: ‘::feclearexcept’ has not been declared
using ::feclearexcept;
^
/usr/include/c++/5/fenv.h:63:11: error: ‘::fegetexceptflag’ has not been declared
using ::fegetexceptflag;
^
/usr/include/c++/5/fenv.h:64:11: error: ‘::feraiseexcept’ has not been declared
using ::feraiseexcept;
^
/usr/include/c++/5/fenv.h:65:11: error: ‘::fesetexceptflag’ has not been declared
using ::fesetexceptflag;
^
/usr/include/c++/5/fenv.h:66:11: error: ‘::fetestexcept’ has not been declared
using ::fetestexcept;
^
/usr/include/c++/5/fenv.h:68:11: error: ‘::fegetround’ has not been declared
using ::fegetround;
^
/usr/include/c++/5/fenv.h:69:11: error: ‘::fesetround’ has not been declared
using ::fesetround;
^
/usr/include/c++/5/fenv.h:71:11: error: ‘::fegetenv’ has not been declared
using ::fegetenv;
^
/usr/include/c++/5/fenv.h:72:11: error: ‘::feholdexcept’ has not been declared
using ::feholdexcept;
^
/usr/include/c++/5/fenv.h:73:11: error: ‘::fesetenv’ has not been declared
using ::fesetenv;
^
/usr/include/c++/5/fenv.h:74:11: error: ‘::feupdateenv’ has not been declared
using ::feupdateenv;
^

Tolerable gap between IMU and camera

I'm running OKVIS with a monocular camera at 60Hz and an IMU at 400Hz. They are not synchronized, there are timestamp differences of up to 10 ms. I think this is why the trajectory I get drifts always and is not repeatable. What may be the maximum tolerable difference between camera and IMU?

T_SC

Is T_SC in config.yaml for a cam0 equivalent to the kalibr output for:

T_ci: (imu to cam0): [m]
[[ 0.0356961 -0.99798199 0.05251415 -0.01277718]
[ 0.0821689 -0.04943879 -0.99539142 0.01413488]
[ 0.99597895 0.03984663 0.08023831 0.01084148]
[ 0. 0. 0. 1. ]]

or

T_ic: (cam0 to imu): [m]
[[ 0.0356961 0.0821689 0.99597895 -0.01150323]
[-0.99798199 -0.04943879 0.03984663 -0.01248458]
[ 0.05251415 -0.99539142 0.08023831 0.01387081]
[ 0. 0. 0. 1. ]]

The imu is set to the identity matrix.

Thanks

Mike

Fully MIT version

Hi, thanks for sharing this exciting library with the community.

I have a question: is there any way the library can be compiled without BLAS/LAPACK and Suitesparse, using maybe Eigen and Ceres instead? That would make the library licensing simpler and fully MIT.

Thanks

inconsistent equation in ImuError::propagation compared with ijrr15 paper equation 15

hi @sleutenegger , seems the imu propagation model is not the same with the paper?
in function ImuError::propagation

      // Fd = I + Fc*dt
      Eigen::Matrix<double,15,15> F_delta = Eigen::Matrix<double,15,15>::Identity();
      // transform
      // delta pos / delta alpha
      F_delta.block<3,3>(0,3) = -okvis::kinematics::crossMx(acc_integral*dt + 0.25*(C + C_1)*acc_S_true*dt*dt);
      // delta pos / delta vel
      F_delta.block<3,3>(0,6) = Eigen::Matrix3d::Identity()*dt;
      // delta pos / delta bias gyr
      F_delta.block<3,3>(0,9) = dt*dv_db_g + 0.25*dt*dt*(C*acc_S_x*cross + C_1*acc_S_x*cross_1);
      // delta pos / delta bias acc
      F_delta.block<3,3>(0,12) = -C_integral*dt + 0.25*(C + C_1)*dt*dt;

you set the all the columns of the first three rows of F_delta, but in your ijrr15 paper, there are many zeros blocks in the first three rows in equation 15:

2017-07-14 at 11 58 pm

I also read your RSS2013 paper, but same thing here. So could you please explain this? thanks for your time very much!

Parameter "image delay" is not used in the program

Using the Kalibr toolkit, we can do time-calibration between the camera and imu and got a time shift T such that: imu time = cam time + T
However, I found the parameter "imageDelay" in the config file is not used in the entire program
Do I need to implement it by myself? Or do I have any misunderstanding?

Minor compilation issues on ubuntu 15.10

First thanks very much for the excellent library! I'm always looking for a SLAM library which provides non-ROS option.

The compilation goes pretty smooth except for two minor issues.
The system environment before compilation: Ubuntu 15.10, gcc 4.9.3, opencv 3.0, Eigen 3.2.7, gflags, glog, Ceres 1.11, Nvidia 352.63, cuda 7.5
Other dependencies are installed by following the guide.

  1. In build/brisk/src/brisk_external/src/image-down-sampling.cc, error: 'runtime_error' is not a member of 'std'. Solved this by simply add #include at the head of this file. This is pretty strange that this source file is located inside the build directory (not from any file in downloaded files).
  2. In okvis_cv/include/okvis/implementation/Frame.hpp. Problem occurs in line 120, 153 and 188, all with cv::FeatureDetector and cv::DescriptorExtractor. They are declared as shared_ptr, but their member function is called from a non-const function. Also, for the cv::DescritproExtractor, I guess the compute() member function is not marked as const, so there is an error when trying to call compute() method with shared_ptr.
    My current solution is to cast away the const qualifier, for example:

line 188: const_cast<cv::DescriptorExtractor*>(extractor_.get())->compute(image_, keypoints_, descriptors_);

line 120: const_cast<cv::FeatureDetector*>(detector_.get())->detect(image_, keypoints_);

This might not be the desired solution, but it works.

The above are just for compilation, actually I haven't run or use the library.

Tracking failure with mono visual-inertial data captured from low-cost sensors

Trying to run OKVIS on a dataset collected from a hand-held mobile device. Tracking fails and pose estimate drifts very rapidly.

The camera-IMU calibration has been done using Kalibr tookit (wherein the values of camera reprojection error, gyro and acceleration error squared have all converged to a value of less than 2.5). The IMU bias and random walk have been derived from analysis of Allan variance plots.

However, when we run OKVIS on such dataset, the tracking fails almost always. The error message reads:

W0531 15:28:03.059871 1646 Frontend.cpp:192] Tracking failure. Number of 3d2d-matches: 0.

The published state (pose) drifts off to a very large value. The camera runs at 30 fps and IMU at 100 Hz.

PFA, the config.yaml file.
config_fpga_p2_euroc_iPhone.yaml.txt

To our understanding, most of the mobile devices come with hideous IMUs. However, I would like to know if the tracking failure can be attributed to solely the poor quality of IMU? Or is there something else we are missing out here? (Lack of global shutter might not be much of a concern, the camera motion is quite slow and captured in well lit environment).

Slow on Debug mode, killed by system using my own ceres

I found this algorithm running extremely slow with DEBUG mode,but in my other application or slam algorithm, this won't happen, why ?

BTW, why i can't use my own ceres ? when i configure the program by using my own ceres, the algorithm is killed by system. i check the memory, it shows "General Protection Error". Why ?

Frame is newer than oldest IMU measurement?

Hi,

I'm getting an error when trying with my own data where the frames aren't processed. It looks like it's to do with the time stamps:

"Frame is newer than oldest IMU measurement. Dropping it."

Thanks,

Mike

make -j4 error

eigen ,opengv installed, still error
[ 30%] Building CXX object CMakeFiles/opengv.dir/src/absolute_pose/modules/gpnp4/spolynomials.o
[ 31%] Building CXX object CMakeFiles/opengv.dir/src/absolute_pose/modules/gpnp5/code.o
[ 33%] Building CXX object CMakeFiles/opengv.dir/src/absolute_pose/modules/gpnp5/init.o
[ 34%] Building CXX object CMakeFiles/opengv.dir/src/absolute_pose/modules/gpnp5/reductors.o
[ 36%] Building CXX object CMakeFiles/opengv.dir/src/absolute_pose/modules/gpnp5/spolynomials.o
[ 37%] Building CXX object CMakeFiles/opengv.dir/src/absolute_pose/modules/upnp2.o
[ 38%] Building CXX object CMakeFiles/opengv.dir/src/absolute_pose/modules/upnp4.o
[ 40%] Building CXX object CMakeFiles/opengv.dir/src/relative_pose/modules/main.o
[ 41%] Building CXX object CMakeFiles/opengv.dir/src/relative_pose/modules/fivept_nister/modules.o
In file included from /usr/include/eigen3/Eigen/Core:392:0,
from /usr/include/eigen3/unsupported/Eigen/NonLinearOptimization:15,
from /home/rosfun/code/MYNT-EYE-OKVIS-Sample/build/opengv/src/opengv/src/relative_pose/modules/main.cpp:34:
/usr/include/eigen3/Eigen/src/Core/GeneralProduct.h: In instantiation of ‘struct Eigen::internal::product_type<Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op, const Eigen::Map<Eigen::Matrix<double, -1, 1, 0, 20, 1>, 0, Eigen::Stride<0, 0> > >, Eigen::Transpose<const Eigen::Matrix<double, 2, 1> > >’:
/usr/include/eigen3/Eigen/src/Core/Product.h:107:7: required from ‘class Eigen::Product<Eigen::CwiseUnaryOp<Eigen::internal::scalar_multiple_op, const Eigen::Map<Eigen::Matrix<double, -1, 1, 0, 20, 1>, 0, Eigen::Stride<0, 0> > >, Eigen::Transpose<const Eigen::Matrix<double, 2, 1> >, 0>’
/usr/include/eigen3/Eigen/src/Householder/Householder.h:166:34: required from ‘void Eigen::MatrixBase::applyHouseholderOnTheRight(const EssentialPart&, const Scalar&, Eigen::MatrixBase::Scalar*) [with EssentialPart = Eigen::Matrix<double, 2, 1>; Derived = Eigen::Block<Eigen::Matrix<double, 20, 20, 0, 20, 20>, -1, -1, false>; Eigen::MatrixBase::Scalar = double]’
/usr/include/eigen3/Eigen/src/Eigenvalues/RealSchur.h:497:7: required from ‘void Eigen::RealSchur<_MatrixType>::performFrancisQRStep(Eigen::RealSchur<_MatrixType>::Index, Eigen::RealSchur<_MatrixType>::Index, Eigen::RealSchur<_MatrixType>::Index, bool, const Vector3s&, Eigen::RealSchur<_MatrixType>::Scalar*) [with _MatrixType = Eigen::Matrix<double, 20, 20, 0, 20, 20>; Eigen::RealSchur<_MatrixType>::Index = long int; Eigen::RealSchur<_MatrixType>::Vector3s = Eigen::Matrix<double, 3, 1>; typename MatrixType::Scalar = double; Eigen::RealSchur<_MatrixType>::Scalar = double]’
/usr/include/eigen3/Eigen/src/Eigenvalues/RealSchur.h:319:29: required from ‘Eigen::RealSchur& Eigen::RealSchur<_MatrixType>::computeFromHessenberg(const HessMatrixType&, const OrthMatrixType&, bool) [with HessMatrixType = Eigen::internal::HessenbergDecompositionMatrixHReturnType<Eigen::Matrix<double, 20, 20, 0, 20, 20> >; OrthMatrixType = Eigen::HouseholderSequence<Eigen::Matrix<double, 20, 20, 0, 20, 20>, Eigen::Matrix<double, 19, 1, 0, 19, 1>, 1>; _MatrixType = Eigen::Matrix<double, 20, 20, 0, 20, 20>]’
/usr/include/eigen3/Eigen/src/Eigenvalues/RealSchur.h:260:24: required from ‘Eigen::RealSchur& Eigen::RealSchur<_MatrixType>::compute(const Eigen::EigenBase&, bool) [with InputType = Eigen::Matrix<double, 20, 20, 0, 20, 20>; _MatrixType = Eigen::Matrix<double, 20, 20, 0, 20, 20>]’
/usr/include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h:387:3: required from ‘Eigen::EigenSolver& Eigen::EigenSolver<_MatrixType>::compute(const Eigen::EigenBase&, bool) [with InputType = Eigen::Matrix<double, 20, 20, 0, 20, 20>; _MatrixType = Eigen::Matrix<double, 20, 20, 0, 20, 20>]’
/usr/include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h:156:14: required from ‘Eigen::EigenSolver<_MatrixType>::EigenSolver(const Eigen::EigenBase&, bool) [with InputType = Eigen::Matrix<double, 20, 20, 0, 20, 20>; _MatrixType = Eigen::Matrix<double, 20, 20, 0, 20, 20>]’
/home/rosfun/code/MYNT-EYE-OKVIS-Sample/build/opengv/src/opengv/src/relative_pose/modules/main.cpp:337:63: required from here
/usr/include/eigen3/Eigen/src/Core/GeneralProduct.h:53:8: internal compiler error: Segmentation fault
enum {
^
Please submit a full bug report,
with preprocessed source if appropriate.
See file:///usr/share/doc/gcc-5/README.Bugs for instructions.
CMakeFiles/opengv.dir/build.make:734: recipe for target 'CMakeFiles/opengv.dir/src/relative_pose/modules/main.o' failed
make[5]: *** [CMakeFiles/opengv.dir/src/relative_pose/modules/main.o] Error 1
make[5]: *** Waiting for unfinished jobs....
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/opengv.dir/all' failed
make[4]: *** [CMakeFiles/opengv.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make[3]: *** [all] Error 2
CMakeFiles/opengv_external.dir/build.make:112: recipe for target 'opengv/src/opengv_external-stamp/opengv_external-build' failed
make[2]: *** [opengv/src/opengv_external-stamp/opengv_external-build] Error 2
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/opengv_external.dir/all' failed
make[1]: *** [CMakeFiles/opengv_external.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

Crashed with Ubuntu 16.04

I tried the code with 16.04 but it just crashed with the following info:

SUMMARY

PARAMETERS

  • /okvis_node/config_filename: /home/00/cat...
  • /okvis_node/mesh_file: firefly.dae
  • /rosdistro: kinetic
  • /rosversion: 1.12.7

NODES
/
okvis_node (okvis_ros/okvis_node)

ROS_MASTER_URI=http://localhost:11311

core service [/rosout] found
process[okvis_node-1]: started with pid [6795]
I0510 16:46:19.477212 6795 VioParametersReader.cpp:85] Opened configuration file: /home/00/catkin_ws/src/okvis_ros/okvis/config/config_fpga_p2_euroc.yaml
I0510 16:46:19.477421 6795 VioParametersReader.cpp:173] imageDelay=0
I0510 16:46:19.477526 6795 VioParametersReader.cpp:275] Custom World frame provided T_Wc_W=
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
I0510 16:46:19.477552 6795 VioParametersReader.cpp:554] Found calibration in configuration file for camera 0
I0510 16:46:19.477562 6795 VioParametersReader.cpp:554] Found calibration in configuration file for camera 1
I0510 16:46:19.485872 6795 VioParametersReader.cpp:363] Radial tangential pinhole camera 0 with T_SC=
0.0148655 -0.999881 0.0041403 -0.0216401
0.999557 0.0149672 0.0257155 -0.064677
-0.0257744 0.00375619 0.999661 0.00981073
0 0 0 1
I0510 16:46:19.809892 6795 VioParametersReader.cpp:363] Radial tangential pinhole camera 1 with T_SC=
0.0125553 -0.999755 0.0182238 -0.0198436
0.999599 0.0130119 0.0251588 0.0453689
-0.0253898 0.0179006 0.999517 0.00786212
0 0 0 1
I0510 16:46:19.809929 6795 VioParametersReader.cpp:412] IMU with transformation T_BS=
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
init done
W0510 16:47:33.659103 6827 Frontend.cpp:282] - Skipping propagation as only one IMU measurement has been given to frontend. Normal when starting up.
*** stack smashing detected **: /home/00/catkin_ws/devel/lib/okvis_ros/okvis_node terminated
[okvis_node-1] process has died [pid 6795, exit code -6, cmd /home/00/catkin_ws/devel/lib/okvis_ros/okvis_node /camera0:=/cam0/image_raw /camera1:=/cam1/image_raw /calibration0:=/cam0/calibration /calibration1:=/cam1/calibration /imu:=/imu0 __name:=okvis_node __log:=/home/00/.ros/log/0a279138-3555-11e7-ba23-9c5c8ec1f302/okvis_node-1.log].
log file: /home/00/.ros/log/0a279138-3555-11e7-ba23-9c5c8ec1f302/okvis_node-1
.log
all processes on machine have died, roslaunch will exit
shutting down processing monitor...
... shutting down processing monitor complete
done

Any suggestions?

Compile Error

Hi, I have one problem during compiling, thanks in advance:

[100%] Linking CXX executable okvis_app_synchronous lib/libceres.a(loss_function.cc.o): In function std::__cxx11::basic_string<char, std::char_traits, std::allocator >* google::MakeCheckOpString<double, double>(double const&, double const&, char const*)':
loss_function.cc:(.text._ZN6google17MakeCheckOpStringIddEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc[_ZN6google17MakeCheckOpStringIddEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc]+0x54): undefined reference to google::base::CheckOpMessageBuilder::NewString[abi:cxx11]()' lib/libceres.a(problem_impl.cc.o): In function std::__cxx11::basic_string<char, std::char_traits, std::allocator >* google::MakeCheckOpString<int, int>(int const&, int const&, char const*)':
problem_impl.cc:(.text._ZN6google17MakeCheckOpStringIiiEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc[_ZN6google17MakeCheckOpStringIiiEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc]+0x50): undefined reference to google::base::CheckOpMessageBuilder::NewString[abi:cxx11]()' lib/libceres.a(problem_impl.cc.o): In function std::__cxx11::basic_string<char, std::char_traits, std::allocator >* google::MakeCheckOpString<unsigned long, unsigned long>(unsigned long const&, unsigned long const&, char const*)':
problem_impl.cc:(.text._ZN6google17MakeCheckOpStringImmEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc[_ZN6google17MakeCheckOpStringImmEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc]+0x51): undefined reference to google::base::CheckOpMessageBuilder::NewString[abi:cxx11]()' lib/libceres.a(problem_impl.cc.o): In function std::__cxx11::basic_string<char, std::char_traits, std::allocator >* google::MakeCheckOpString<ceres::internal::ParameterBlock*, ceres::internal::ParameterBlock*>(ceres::internal::ParameterBlock* const&, ceres::internal::ParameterBlock* const&, char const*)':
problem_impl.cc:(.text._ZN6google17MakeCheckOpStringIPN5ceres8internal14ParameterBlockES4_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc[_ZN6google17MakeCheckOpStringIPN5ceres8internal14ParameterBlockES4_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc]+0x51): undefined reference to google::base::CheckOpMessageBuilder::NewString[abi:cxx11]()' lib/libceres.a(solver_impl.cc.o): In function std::__cxx11::basic_string<char, std::char_traits, std::allocator >* google::MakeCheckOpString<int, unsigned long>(int const&, unsigned long const&, char const*)':
solver_impl.cc:(.text._ZN6google17MakeCheckOpStringIimEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc[_ZN6google17MakeCheckOpStringIimEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc]+0x51): undefined reference to google::base::CheckOpMessageBuilder::NewString[abi:cxx11]()' lib/libceres.a(solver_impl.cc.o):solver_impl.cc:(.text._ZN6google17MakeCheckOpStringImiEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc[_ZN6google17MakeCheckOpStringImiEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc]+0x50): more undefined references to google::base::CheckOpMessageBuilder::NewStringabi:cxx11' follow
collect2: error: ld returned 1 exit status
CMakeFiles/okvis_app_synchronous.dir/build.make:142: recipe for target 'okvis_app_synchronous' failed
make[2]: *** [okvis_app_synchronous] Error 1
CMakeFiles/Makefile2:116: recipe for target 'CMakeFiles/okvis_app_synchronous.dir/all' failed
make[1]: *** [CMakeFiles/okvis_app_synchronous.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2`

I am new to SLAM and not very sure what is the problem.
The following is my gcc
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

Segmentation fault on Ubuntu 16.04

Hi,
I'm now trying the okvis on ubuntu 16.04. The compilation went smoothly, but I can not make it run even on the example data.

Here is my environment (everything is pretty much up-to-date):
Ubuntu 16.04, OpenCV 3.2, Nvidia-driver 367, Cuda 8.0, Eigen 3.3~beta1-2, Ceres 1.12

Here is my problem: when I tried to run okvis_app_synchronous on example data (MH_01_easy, MH_04_difficulty), there will be a segmentation fault error immediately after the viewer windows show up. When I tried to run it in debugging mode, the program breaks at the following line inside Eigen source:

template<int StoreMode, int LoadMode, typename PacketType>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignPacket(Index row, Index col)
{
    m_functor.template assignPacket<StoreMode>(&m_dst.coeffRef(row,col), m_src.template packet<LoadMode,PacketType>(row,col));
}

Although this might not be useful...

I also tried some 'printf' debugging (print some text before and after a line to see where the program actually breaks). It seems that if (matchedFrames_.PopBlocking(&frame_pairs) == false) at line 729 inside ThreadedKFVio.cpp is suspicious. Maybe the pthread is not compatible with the memory of newer Eigen? I'm not confidence about this.

Does someone has the same issue? The problem seems to be related with Eigen. Which version of Eigen3 should I use?

Thanks!

Does this library have loop closure?

Hi,

I was able to run this library without any problem. I was wondering if this library has implemented any loop closure or re-localization algorithm?

Thank You

debug compiling

I got a problem when i compiling OKVIS using qt at debug pattern.It shows that virtual memory exhausted cannot allocate memory when compiling half the time,but that is OK when it is Release pattern. My terminal shows that swap space have about 3.8G free space when i using command "free -h". Could you please give some advice?

Ending position result not repeatable

For the same input (i.e. config file and dataset) to okvis_app_synchronous, I discover that the resulting position (i.e. the body frame position when progress=100%) have quite a large different for each single run.
Why is it so and how to fix it?
Thanks!

Failed to get ceres-solver

HI,
When I make -j8 to build the whole project, it failed in cloning ceres-solver repository. But I can download ceres-solver-1.11.0 via its website. Is there any alternative so that I can build the project without using git clone "https://ceres-solver.googlesource.com/ceres-solver"?

Here is my CMake Error:
CMake Error at /home/richard/okvis/okvis-master/build/ceres/tmp/ceres_external-gitclone.cmake:40 (message):
Failed to clone repository:
'https://ceres-solver.googlesource.com/ceres-solver'

How to compare With EuRoc groundtruth?

Now I am running Okvis using EuRoc MAV Dataset and trying to compare the pose with the ground truth given in the dataset. I add some code in the publishFullStateAsCallback to save position data and velocity data which are the same with the data displayed on the poseViewer. However, when i compare the result with the ground truth, I found the pose is different. How can I make a comparison ?

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.