Giter VIP home page Giter VIP logo

cpi's Introduction

Continuous Preintegration

This package contains the code implementation of the Closed-form PreIntegration (CPI) method for visual-inertial navigation that was first presented at WAFR 2016 and further extended in our recent IJRR paper:

  • Kevin Eckenhoff, Patrick Geneva, and Guoquan Huang, "Closed-form Preintegration Methods for Graph-based Visual-Inertial Navigation," International Journal of Robotics Research (IJRR), Jan 2019 (to appear).
  • Kevin Eckenhoff, Patrick Geneva, and Guoquan Huang, "High-Accuracy Preintegration for Visual-Inertial Navigation," International Workshop on the Algorithmic Foundations of Robotics (WAFR), December 18-20, 2016.
  • Kevin Eckenhoff, Patrick Geneva, and Guoquan Huang, "Continuous Preintegration Theory for Graph-based Visual-Inertial Navigation," arXiv:1805.02774, May 2018. arXiv
  • The companion technical report can also be found here.

Here we provide a complete system for visual-inertial navigation using synthetically generated vision and inertial measurements. This code was used for the comparision against the current state-of-the-art discrete method in GTSAM by Forster et al. [3]. All preintegration methods are implemented in the GTSAM optimization framework. For comparision, the methods are solved side-by-side using the GTSAM batch fix-lag smoother allowing for near constant memory requirements and easy marginalization.

We also include the MATLAB scripts for generating the Monte-Carlo simulation for comparision, and the trajectories collected from GAZEBO for evaluation and comparision. We use the GAZEBO simulator to get the groundtruth pose and IMU readings from a MAV trajectory, to which we add random noise when generating our Monte-Carlo scenarios (see the cpi_simulation directory for more details). We provide the scripts used to generate the results in the paper, and a step by step guide on how to generate these results yourself.

Demo Videos

Here are some youtube videos of continuous preintegration being used in a realworld system and achiving realtime performance. While they do not directly use this codebase, which is purely for simulation comparision, they use the files included in this repository to compute the preintegrated measurements.

IMAGE ALT TEXT IMAGE ALT TEXT IMAGE ALT TEXT

Building GTSAM

Ensure that you have Intel MKL and Intel TBB installed as this will allow for GTSAM multithreaded performance (link):

wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUB
sudo sh -c 'echo deb https://apt.repos.intel.com/mkl all main > /etc/apt/sources.list.d/intel-mkl.list'
sudo sh -c 'echo deb https://apt.repos.intel.com/tbb all main > /etc/apt/sources.list.d/intel-tbb.list'
sudo apt-get update
sudo apt-get install intel-mkl-2018.1-038
sudo apt-get install intel-tbb-2018.0-033

Make sure you build with the manifold version of the GTSAM preintegration, you will get errors otherwise. This version is the original Forster et al. [3] RSS version. GTSAM defaults to a tangent space preintegration method. Note that the GTSAM discrete method was tested using the master branch at commit c21186c6212798e665da6b5015296713ddfe8c1d.

git clone https://bitbucket.org/gtborg/gtsam/
cd gtsam
mkdir build
cd build
cmake -DGTSAM_TANGENT_PREINTEGRATION=OFF ..
sudo make -j6 install

Using CPI in your own project

Because we use a JPL quaternion navigation state, factors that are not included in this repository will need to be derived in respect of this state. Take a look at the cpi_compare directory for more detail on key files and their functions. Here are the recommended steps for using this in your own system:

  1. Copy the /cpi/,/gtsam/, and /utils/quat_ops.h folders/file into your own project
  2. Include all .cpp files in your CMakelists.txt
  3. Add any new factors into this GTSAM folder, ensuring they are functions of the JPLNavState
  4. Copy-paste the desired functions from GraphSolver_IMU.cpp file depending on which integration you want to use
  5. Construct your GTSAM graph as normal (use the GraphSolver.cpp as an example)

Citation

Find this useful? Cite us with:

@article{Eckenhoff2019IJRR,
  author    = {Kevin Eckenhoff and Patrick Geneva and Guoquan Huang},
  title     = {Closed-form preintegration methods for graph-based visual-inertial navigation},
  journal   = {International Journal of Robotics Research},
  volume    = {38},
  number    = {5},
  year      = {2019},
  doi       = {10.1177/0278364919835021},
  url       = {https://doi.org/10.1177/0278364919835021}
}

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

cpi's Issues

Error loading rviz config.

[ERROR] [1529551374.105377990]: PluginlibFactory: The plugin for class 'rviz/PoseWithCovariance' failed to load. Error: According to the loaded plugin descriptions the class rviz/PoseWithCovariance with base class type rviz::Display does not exist. Declared types are rviz/Axes rviz/Camera rviz/DepthCloud rviz/Effort rviz/FluidPressure rviz/Grid rviz/GridCells rviz/Illuminance rviz/Image rviz/InteractiveMarkers rviz/LaserScan rviz/Map rviz/Marker rviz/MarkerArray rviz/Odometry rviz/Path rviz/PointCloud rviz/PointCloud2 rviz/PointStamped rviz/Polygon rviz/Pose rviz/PoseArray rviz/Range rviz/RelativeHumidity rviz/RobotModel rviz/TF rviz/Temperature rviz/WrenchStamped rviz_imu_plugin/Imu rviz_plugin_covariance/OdometryWithCovariance rviz_plugin_covariance/PoseWithCovariance

My system is ubuntu14.04 and there is no such a rviz plugin.

When i compile cpi_compare,the error is shown:

error: ‘class gtsam::PreintegratedCombinedMeasurements’ has no member named ‘delRdelBiasOmega’
Eigen::Matrix<double,3,3> J_q = -preint_gtsam.delRdelBiasOmega();
^
anyone know what is the reason about this problem? thanks very much!

failure to launch

is there a workaround around this error? using ros Melodic trying to launch synthetic_record.launch

RLException: Invalid tag: tag has an empty 'ns' attribute.

Node xml is

or rosrun estimator.

[ERROR] [1630896516.193027462]: ERROR: Unable to open file...
[ERROR] [1630896516.193101981]: ERROR: pose_true.dat

also if i used rawdata_00
process[rawdata_00/cpi_compare-1]: started with pid [5679]
ERROR: cannot launch node of type [posemsg_to_file/posemsg_to_file_node]: posemsg_to_file
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/home/nassim/dev/catkin_ws/src
ROS path [2]=/home/nassim/catkin_ws/src
ROS path [3]=/opt/ros/melodic/share
ERROR: cannot launch node of type [posemsg_to_file/posemsg_to_file_node]: posemsg_to_file
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/home/nassim/dev/catkin_ws/src
ROS path [2]=/home/nassim/catkin_ws/src
ROS path [3]=/opt/ros/melodic/share
ERROR: cannot launch node of type [posemsg_to_file/posemsg_to_file_node]: posemsg_to_file
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/home/nassim/dev/catkin_ws/src
ROS path [2]=/home/nassim/catkin_ws/src
ROS path [3]=/opt/ros/melodic/share

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.