C++ Implementation of "An Equivariant Filter for Visual Inertial Odometry", ICRA 2021

Overview

EqF VIO (Equivariant Filter for Visual Inertial Odometry)

This repository contains an implementation of an Equivariant Filter (EqF) for Visual Inertial Odometry (VIO).

Dependencies

  • Eigen 3: sudo apt install libeigen3-dev
  • Yaml-cpp: sudo apt install libyaml-cpp-dev
  • GIFT (for feature tracking): https://github.com/pvangoor/GIFT
Comments
  • Compile Error

    Compile Error

    [email protected]:~/eqf_vio/eqf_vio/build$ make [ 12%] Built target eqf_violib_core [ 33%] Built target eqf_vio_lib [ 39%] Built target eqf_vio Scanning dependencies of target eqf_vio_gift [ 42%] Building CXX object CMakeFiles/eqf_vio_gift.dir/src/main_gift.cpp.o /home/yy/eqf_vio/eqf_vio/src/main_gift.cpp: In function ‘int main(int, const char**)’: /home/yy/eqf_vio/eqf_vio/src/main_gift.cpp:130:5: error: ‘cbSys’ was not declared in this scope cbSys.featureTracker.settings.configure(giftConfig["GIFT"]); ^~~~~ /home/yy/eqf_vio/eqf_vio/src/main_gift.cpp:130:45: error: ‘giftConfig’ was not declared in this scope cbSys.featureTracker.settings.configure(giftConfig["GIFT"]); ^~~~~~~~~~ /home/yy/eqf_vio/eqf_vio/src/main_gift.cpp:130:45: note: suggested alternative: ‘safeConfig’ cbSys.featureTracker.settings.configure(giftConfig["GIFT"]); ^~~~~~~~~~ safeConfig CMakeFiles/eqf_vio_gift.dir/build.make:65: recipe for target 'CMakeFiles/eqf_vio_gift.dir/src/main_gift.cpp.o' failed make[2]: *** [CMakeFiles/eqf_vio_gift.dir/src/main_gift.cpp.o] Error 1 CMakeFiles/Makefile2:270: recipe for target 'CMakeFiles/eqf_vio_gift.dir/all' failed make[1]: *** [CMakeFiles/eqf_vio_gift.dir/all] Error 2 Makefile:143: recipe for target 'all' failed make: *** [all] Error 2

    opened by woshicaijihahahaha 3
  • googletest

    googletest

    cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_WITH_ROS=OFF This is being included! /home/yy/eqf_vio/eqf_vio/libs/core/include Building the tests. -- Configuring done -- Generating done -- Build files have been written to: /home/yy/eqf_vio/eqf_vio/build/test/googletest-download [ 11%] Performing download step (git clone) for 'googletest' 正克隆到 'googletest-src'... fatal: 无效引用:master CMake Error at googletest-download/googletest-prefix/tmp/googletest-gitclone.cmake:40 (message): Failed to checkout tag: 'master'

    CMakeFiles/googletest.dir/build.make:94: recipe for target 'googletest-prefix/src/googletest-stamp/googletest-download' failed make[2]: *** [googletest-prefix/src/googletest-stamp/googletest-download] Error 1 CMakeFiles/Makefile2:78: recipe for target 'CMakeFiles/googletest.dir/all' failed make[1]: *** [CMakeFiles/googletest.dir/all] Error 2 Makefile:86: recipe for target 'all' failed make: *** [all] Error 2 CMake Error at test/PrepareGTest.cmake:13 (message): Build step for googletest failed: 2 Call Stack (most recent call first): test/CMakeLists.txt:3 (include)

    -- Configuring incomplete, errors occurred! See also "/home/yy/eqf_vio/eqf_vio/build/CMakeFiles/CMakeOutput.log".

    opened by woshicaijihahahaha 3
  • Ros Compile Error: use of deleted operator=

    Ros Compile Error: use of deleted operator=

    When running catkin_make, I was getting compilation error due to the use of deleted operator= at eqf_vio_ros/src/eqf_vio_ros_node.cpp, line 65 cbSys.featureTracker = GIFT::PointFeatureTracker(camera);

    The error comes from a new version of the GIFT library (pushed 4 days ago): commit 1338a08d8801ae22ed1d8ede6527a2f24c68b7db

    This commit modifies how settings are handled, and it adds an std::unique_ptr<Settings> settings; into the attributes of the class. Hence it can't be copied like it is done in the ROS code.

    Quick fix: git checkout to a previous commit.

    Hope it helps anyone, Best

    opened by arthurBricq 2
  • segfault in GIFT

    segfault in GIFT

    using eqf_vio 7f9626307df2a9b30bdf29483202e95123528e1d using GIFT 1ba649aaec975bbf2134e1d070f83206109eb827

    environment is ubuntu 20.04, x86-64, libeigen3-dev 3.3.7-2

    running on dataset from Shawn (original EqF flight at SV)

    command line is: gdb --args ../../eqf_vio/eqf_vio/build/eqf_vio_gift imu_data.csv cam.mkv cam.csv EQVIO_config.yaml

    Thread 1 "eqf_vio_gift" received signal SIGSEGV, Segmentation fault.
    GIFT::PinholeCamera::PinholeCamera (this=0x7fffffffca60, cameraConfigFile=...) at /usr/include/opencv4/opencv2/core/mat.inl.hpp:1139
    1139	_Tp& Mat::at(int i0, int i1)
    
    (gdb) bt full
    #0  GIFT::PinholeCamera::PinholeCamera(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (this=0x7fffffffca60, cameraConfigFile=...)
        at /usr/include/opencv4/opencv2/core/mat.inl.hpp:1139
            fs = <incomplete type>
            tempSize = std::vector of length 2, capacity 2 = {0, 0}
            K = 
                  {flags = 1124007936, dims = 0, rows = 0, cols = 0, data = 0x0, datastart = 0x0, dataend = 0x0, datalimit = 0x0, allocator = 0x0, u = 0x0, size = {p = 0x7fffffffc878}, step = {p = 0x7fffffffc8c0, buf = {0, 0}}}
    #1  0x0000555555a2f05a in main () at /usr/include/c++/9/ext/new_allocator.h:89
    
    opened by tridge 2
  • Some problem about the accuracy.

    Some problem about the accuracy.

    I use ROS and run using "roslaunch eqf_vio_ros eqf_vio_ros.launch". I test "V1_01_easy.bag" and "V2_01_easy.bag" and I use the default parameters of the program. The former data has high similarity with the trajectory of the true value only in a short time, but it is very different from the paper Figure 1, and the pose of the latter data is divergent. Should I change some parameters?I hope I can get a reply from the author. Thank you.

    opened by flysoaryun 1
  • Compilation problem on Linux Mint: <Eigen/Core> not found [fixed]

    Compilation problem on Linux Mint: not found [fixed]

    Trying to build the library eqf_vio (with either cmake or ROS), on Linux Mint with all dependencies up to date, I was constantly getting the following error

    /usr/include/eigen3/unsupported/Eigen/MatrixFunctions:17:10: fatal error: Eigen/Core: No such file or directory
       17 | #include <Eigen/Core>
          |          ^~~~~~~~~~~~
    compilation terminated.
    

    For some reason, the compiler would first find /unsupported/Eigen/MatrixFunctions, but then not find Eigen/Core, even though it is located at the same directory.

    The problem was resolved for me by adding this line to the CMakeLists.txt

    find_package(Eigen3 REQUIRED)
    find_package(yaml-cpp REQUIRED)
    # new line here
    include_directories(/usr/include/eigen3) 
    

    Hope it can help anyone !

    opened by arthurBricq 1
  • segfault on raspbian 32 bit

    segfault on raspbian 32 bit

    gdb) r
    Starting program: /home/pi/eqf_vio/eqf_vio/build/eqf_vio_gift imu_data.csv cam.mkv cam.csv EQVIO_config.yaml
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
    [New Thread 0xa7d82470 (LWP 8801)]
    
    Thread 1 "eqf_vio_gift" received signal SIGSEGV, Segmentation fault.
    0x004de22c in YAML::detail::node* YAML::detail::node_data::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std:
    :allocator<char> > const&, std::shared_ptr<YAML::detail::memory_holder>) const ()
    (gdb) bt
    #0  0x004de22c in YAML::detail::node* YAML::detail::node_data::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, 
    std::allocator<char> > const&, std::shared_ptr<YAML::detail::memory_holder>) const ()
    #1  0x004db350 in YAML::detail::node* YAML::detail::node_ref::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, s
    td::allocator<char> > const&, std::shared_ptr<YAML::detail::memory_holder>) const ()
    #2  0x004d7c7c in YAML::detail::node* YAML::detail::node::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::
    allocator<char> > const&, std::shared_ptr<YAML::detail::memory_holder>) const ()
    #3  0x004d5394 in YAML::Node const YAML::Node::operator[]<char [10]>(char const (&) [10]) const ()
    #4  0x004cbabc in main ()
    
    
    opened by tridge 2
  • installing on raspbian lite 32 bit

    installing on raspbian lite 32 bit

    this is to record the list of packages I needed to install in april 2021 to build eqf_vio and GIFT on a RPi4 running current raspbian lite (buster). This should go into a script or README in future.

    Building GIFT:

    sudo apt-get install cmake g++ libeigen3-dev libopencv-dev libyaml-cpp-dev libyaml-dev
    cd GIFT
    mkdir build
    cd build
    cmake ..
    make -j8
    

    Building eqf_vio

    cd eqf_vio/eqf_vio
    mkdir build
    cd build
    cmake .. -DBUILD_WITH_ROS=OFF
    make -j8
    
    opened by tridge 1
Owner
null
2021/3/30 ~ 2021/7/12 に行われる企画「競プロ典型 90 問」の問題・解説・ソースコードなどの資料をアップロードしています。

競プロ典型 90 問 日曜を除く毎朝 7:40 に競プロやアルゴリズムの教育的な問題を Twitter(@e869120)に投稿する企画です。 本企画は、2021 年 3 月 30 日から 7 月 12 日まで行われる予定です。 企画の目的 「競プロ典型 90 問」は、競プロ初級者から中上級者(レー

Masataka Yoneda 698 Nov 24, 2022
The official implementation of our CVPR 2021 paper - Hybrid Rotation Averaging: A Fast and Robust Rotation Averaging Approach

Graph Optimizer This repo contains the official implementation of our CVPR 2021 paper - Hybrid Rotation Averaging: A Fast and Robust Rotation Averagin

Chenyu 107 Nov 13, 2022
Python and C++ implementation of "MarkerPose: Robust real-time planar target tracking for accurate stereo pose estimation". Accepted at LXCV Workshop @ CVPR 2021.

MarkerPose: Robust Real-time Planar Target Tracking for Accurate Stereo Pose Estimation This is a PyTorch and LibTorch implementation of MarkerPose: a

Jhacson Meza 47 Nov 18, 2022
Root shell PoC for CVE-2021-3156

CVE-2021-3156 Root shell PoC for CVE-2021-3156 (no bruteforce) For educational purposes etc. Tested on Ubuntu 20.04 against sudo 1.8.31 All research c

CptGibbon 116 Nov 17, 2022
CVE-2021-3156非交互式执行命令

CVE-2021-3156 This is a warehouse modification based on @CptGibbon and supports arbitrary command execution. 相关阅读:CVE-2021-3156 - Exploit修改 Root shell

倾旋 188 Nov 15, 2022
PoC for CVE-2021-3156 (sudo heap overflow)

CVE-2021-3156 PoC for CVE-2021-3156 (sudo heap overflow). Exploit by @gf_256 aka cts. Thanks to r4j from super guesser for help. Credit to Braon Samed

Stephen Tong 431 Nov 9, 2022
Material for the UIBK Operating Systems Lab (2021)

UIBK Operating Systems Lab 2021 This repository contains material required to complete exercises for the OS lab in the 2021 summer semester, including

null 13 Nov 3, 2022
Investigating the bug behind CVE-2021-26708

vsock_poc Investigating the bug behind CVE-2021-26708 This repo contains a small writeup about CVE-2021-26708, and how this bug can be turned into a U

Jordan 25 Sep 19, 2022
Aulas de Sistemas Operativos da turma LI42D no semestre de verão de 2020/2021

ISEL - Sistemas Operativos LI42D - Verão de 2021 Aulas de Sistemas Operativos da turma LI42D no semestre de verão de 2020/2021 Aulas Remotas em Direct

null 12 May 6, 2022
Official PyTorch Code of GrooMeD-NMS: Grouped Mathematically Differentiable NMS for Monocular 3D Object Detection (CVPR 2021)

GrooMeD-NMS: Grouped Mathematically Differentiable NMS for Monocular 3D Object Detection GrooMeD-NMS: Grouped Mathematically Differentiable NMS for Mo

Abhinav Kumar 76 Nov 6, 2022
Code and Data for our CVPR 2021 paper "Structured Scene Memory for Vision-Language Navigation"

SSM-VLN Code and Data for our CVPR 2021 paper "Structured Scene Memory for Vision-Language Navigation". Environment Installation Download Room-to-Room

hanqing 34 Aug 24, 2022
Offical repo for "Moynihan, M., Ruano, S., Pagés, R. and Smolic, A., 2021. Autonomous Tracking For Volumetric Video Sequences"

MeshTracker A segmentation-based tracking algorithm for registering volumetric video meshes (ply/obj) in C++. This is the official implementation of t

V-Sense 22 Nov 7, 2022
Repository to keep track of progress; Started learning C on 2nd September 2021.

Repository to keep track of progress. I started learning C on 2nd September 2021. The future: I plan on turning this repository into a tutorial with c

aether 4 Dec 16, 2021
[CVPR 2021] NormalFusion: Real-Time Acquisition of Surface Normals for High-Resolution RGB-D Scanning

NormalFusion: Real-Time Acquisition of Surface Normals for High-Resolution RGB-D Scanning Project Page | Paper | Supplemental material #1 | Supplement

KAIST VCLAB 48 Jul 14, 2022
The code for C programming 2021, Department of Computer Science, National Taiwan University.

C2021 .c for sousce code, .in for input file, and .out for correct output. The numbers are the problem indices in the judge system. "make number" to m

Pangfeng Liu 6 Jan 10, 2022
Mixed reality VR laser tag using Oculus Quest 2 and OAK-D depth cameras. First prize winner for North America region in OpenCV AI Competition 2021.

Mixed Reality Laser Tag Copyright 2021 Bart Trzynadlowski Overview This is the source code to my Mixed Reality Laser Tag project, which won first priz

null 34 Jun 3, 2022
Real-time Skeletonization for Sketch-based Modeling (SMI:2021)

Real-time Skeletonization for Sketch-based Modeling (SMI:2021) Demo We provide an executable software under directory "demo_exe/". Tested Environment

null 243 Nov 27, 2022
Real-Time Neural 3D Hand Pose Estimation from an Event Stream [ICCV 2021]

EventHands: Real-Time Neural 3D Hand Pose Estimation from an Event Stream Project Page Index TRAIN.md -- how to train the model from scratch EVAL_REAL

null 23 Nov 7, 2022
2018-2021 mimuw by marcin abramowicz

MIM UW by Marcin Abramowicz bierzcie i kopiujcie z tego wszyscy; to sa bowiem kody moje; ktore za was zostaly napisane. [...] bierzcie i edukujcie sie

Marcin Abramowicz 19 Oct 10, 2022