GithubHelp home page GithubHelp logo

airlab-polimi / roamfree Goto Github PK

View Code? Open in Web Editor NEW
30.0 30.0 11.0 16.67 MB

The ROAMFREE sensor fusion library

Python 0.10% Mathematica 36.75% MATLAB 0.40% M 0.01% CMake 2.00% C 1.28% C++ 48.20% Shell 0.13% Fortran 10.92% CSS 0.13% Yacc 0.05% Lex 0.03%

roamfree's Introduction

ROAMFREE

The ROAMFREE sensor fusion library allows to formulate and solve complex localization and sensor self-calibraion problems. It is based on a state-of-the-art pose-graph formulation and it relies on the popular g2o solver.

ROAMFREE is released under the LGPLv3 licence.

Bibliography

For more information on the mathematical and algorithmic details you can refer to the ICRA and JOSER papers. In the context of photogrammetry, please refer to the ISPRS journal paper.

@article{cucci2017bundle,
  title={Bundle adjustment with raw inertial observations in UAV applications},
  author={Cucci, Davide Antonio and Rehak, Martin and Skaloud, Jan},
  journal={ISPRS Journal of photogrammetry and remote sensing},
  volume={130},
  pages={1--12},
  year={2017},
  publisher={Elsevier}
}

@inproceedings{cucci2014position,
  title={Position tracking and sensors self-calibration in autonomous mobile robots by Gauss-Newton optimization},
  author={Cucci, Davide Antonio and Matteucci, Matteo},
  booktitle={Robotics and Automation (ICRA), 2014 IEEE International Conference on},
  pages={1269--1275},
  year={2014},
  organization={IEEE}
}

@article{cucci2014development,
  title={On the Development of a Generic Multi-Sensor Fusion Framework for Robust Odometry Estimation},
  author={Cucci, Davide Antonio and Matteucci, Matteo},
  journal={Journal of Software Engineering for Robotics},
  volume={5},
  number={1},
  pages={48--62},
  year={2014}
}

Dependencies

ROAMFREE relies on Eigen3, and on a modified version of g2o, which in turn relies on suitesparse. Few functions from opencv are also used. It requires a compiler which supports C++11.

On Ubuntu you can provided the required dependencies with

sudo apt-get install libsuitesparse-dev libeigen3-dev libboost-all-dev libopencv-dev

Build

ROAMFREE has been tested on Ubuntu 16.04, 18.04 and 20.04. Windows and Max OS X builds are most likely possible but untested.

Standalone build (non-ROS)

The code base can be cloned and ROAMFREE can be built as follows:

git clone https://github.com/AIRLab-POLIMI/ROAMFREE.git
mkdir build
cd build
cmake ../roamfree/ -DCMAKE_BUILD_TYPE=<build type>
make

where <build type> has to be replaced with one of the two available options: Debug and Release. The Debug build has a number of integrity checks and screen output, and it is dramatically slower than the Release one. End user should always go for the latter.

Once ROAMFREE has been built, it is possible to install it as follows:

sudo make install

In case you want to change the instal path you can change the cmake command as

cmake ../roamfree/ -DCMAKE_INSTALL_PREFIX=<your_install_path>

Catkin build (ROS)

In the following

  • <src_path> is the local copy of the ROAMFREE repository,
  • <catkin_workspace> is the catkin workspace you want to use,
  • <build_path> is the location where you want to build the sources,
  • <install_path> is the location where you want to install ROAMFREE,
  • <build_type> is either Debug or Release.

ROAMFREE is composed of three ros packages, roamfree, roamros and roamros_msgs.

As these folders contain ros packages, they have to live (or to be linked into) your catkin workspace. If you do not have one, you can create it following this tutorial.

The recommended way is to link single package folders into the workspace, e.g.:

ln -s <src_path>/roamfree <catkin_workspace>/src/roamfree

then build with

cd <catkin_workspace>
catkin_make [--pkg roamfree] -DCMAKE_BUILD_TYPE=<build_type>
catkin_make [--pkg roamros] -DCMAKE_BUILD_TYPE=<build_type>

Installing with catkin (optional)

cd <catkin_workspace>
catkin_make_isolated --install [--install-space <install_path>]  -DCMAKE_BUILD_TYPE=<build_type>

Build the documentation (Doxygen)

Documentation for ROAMFREE can be automatically generated with doxygen. Please note that the documentation is produced only for the public API of ROAMFREE. However, comments are present in the code to understand the internal details.

cd <src_path>
doxygen Doxyfile

browse the documentation starting from the just generated

<src_path>/doc/html/index.html

Run the examples

Some examples are included in the ROAMtest library to illustrate the basic usage of the library.

You may for instance run the IMUGPSFusionTest, which performs GPS+Inertial real time estimation from synthetic data.

Here we assume that you have built ROAMFREE as a ROS package.

rosrun roamfree IMUGPSFusionTest

By default, low level logs are generated in the folder /tmp/roamfree. Tese logs can be plot in real-time with the provided Matlab viewer. To do so first load the provided viewer configuration, specific for the test you are going to run. In this case in Matlab run

cd <src_dir>/_development/Matlab/PluginViewer/configs/ROAMtest
configIMUGPSFusionTest

In case you have only one monitor you might get the following error,

Attempted to access ss(2,1); index out of bounds because size(ss)=[1,4].

Error in configIMUGPSFusionTest (line 10)
config.global.figureOuterPosition = [ss(2,1) ss(2,2) ss(2,3) ss(2,4)]; % monitor 2

just comment out line 9 and comment line 10, there run again the config script.

Then launch the viewer, again in Matlab, write

cd ../..
runViewer

you should see something like this:

![IMUGPSFusionTest] (doc/images/IMUGPSFusionTestViewer.png)

roamfree's People

Contributors

alecianfe avatar boris-il-forte avatar davideacucci avatar jbmag avatar kenneth-j-paul avatar matteucci avatar

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

roamfree's Issues

unsupported topic type type for sensor GPS

Hi,

What are the GPS message types supported?
Is it possible to add:
sensor_msgs/NavSatFix
nav_msgs/Odometry

In the GPS config:
'GPS':
type: AbsolutePosition
is_master: False
frame_id: /gps_link
topic: /enu
topic_type: geometry_msgs/PoseWithCovarianceStamped
use_header_stamp: True
static_covariance: True
covariance: [0.7, 0.0, 0.0,
0.0, 0.7, 0.0,
0.0, 0.0, 1.0 ]

Thanks,

Matt

imu handler compilation error

I get the following compilation errors:

error: ‘IMUHandler’ is not a member of ‘ROAMestimation’
type_ = ROAMestimation::IMUHandler;

error: ‘IMUHandler’ is not a member of ‘ROAMestimation’
case ROAMestimation::IMUHandler:

catkin_make fail... make: *** No rule to make target '[--pkg'. Stop.

Hi,

I tried the catkin_make install using:
catkin_make [--pkg roamfree] -DCMAKE_BUILD_TYPE=Release

The roamfree directory is inside of my catkin workspace. catkin_ws/src/roamfree
When I try to build the release I get the following error:
make: *** No rule to make target '[--pkg'. Stop.

Ubuntu 16.04
Kinetic

Running $ catkin_make -DCMAKE_BUILD_TYPE=Release

/home/matt/roamfree_ws/src/roamfree/ROAMvision/src/EuclideanFeatureHandler.cpp: In member function ‘bool ROAMvision::EuclideanFeatureHandler::initialize(const ROAMvision::EuclideanTrackDescriptor&, const VectorXd&, Eigen::VectorXd&)’:
/home/matt/roamfree_ws/src/roamfree/ROAMvision/src/EuclideanFeatureHandler.cpp:274:3: error: ‘vector’ is not a member of ‘cv’
cv::vectorcv::Point2f firstObsVec, lastObsVec;
^
/home/matt/roamfree_ws/src/roamfree/ROAMvision/src/EuclideanFeatureHandler.cpp:274:3: note: suggested alternatives:
In file included from /usr/include/c++/5/vector:64:0,
from /usr/include/c++/5/bits/random.h:34,
from /usr/include/c++/5/random:49,
from /usr/include/c++/5/bits/stl_algo.h:66,
from /usr/include/c++/5/algorithm:62,
from /usr/include/eigen3/Eigen/Core:232,
from /usr/include/eigen3/Eigen/Dense:1,
from /home/matt/roamfree_ws/src/roamfree/ROAMvision/src/EuclideanFeatureHandler.cpp:21:
/usr/include/c++/5/bits/stl_vector.h:214:11: note: ‘std::vector’
class vector : protected _Vector_base<_Tp, _Alloc>
^
/usr/include/c++/5/bits/stl_vector.h:214:11: note: ‘std::vector’
/home/matt/roamfree_ws/src/roamfree/ROAMvision/src/EuclideanFeatureHandler.cpp:274:25: error: expected primary-expression before ‘>’ token
cv::vectorcv::Point2f firstObsVec, lastObsVec;
^
/home/matt/roamfree_ws/src/roamfree/ROAMvision/src/EuclideanFeatureHandler.cpp:274:27: error: ‘firstObsVec’ was not declared in this scope
cv::vectorcv::Point2f firstObsVec, lastObsVec;
^
/home/matt/roamfree_ws/src/roamfree/ROAMvision/src/EuclideanFeatureHandler.cpp:274:40: error: ‘lastObsVec’ was not declared in this scope
cv::vectorcv::Point2f firstObsVec, lastObsVec;
^
/home/matt/roamfree_ws/src/roamfree/ROAMvision/src/EuclideanFeatureHandler.cpp:282:3: error: ‘triangulatePoints’ is not a member of ‘cv’
cv::triangulatePoints(curCams.front(), curCams.back(), firstObsVec,
^
roamfree/ROAMvision/CMakeFiles/ROAMvision.dir/build.make:182: recipe for target 'roamfree/ROAMvision/CMakeFiles/ROAMvision.dir/src/EuclideanFeatureHandler.cpp.o' failed
make[2]: *** [roamfree/ROAMvision/CMakeFiles/ROAMvision.dir/src/EuclideanFeatureHandler.cpp.o] Error 1
CMakeFiles/Makefile2:1462: recipe for target 'roamfree/ROAMvision/CMakeFiles/ROAMvision.dir/all' failed
make[1]: *** [roamfree/ROAMvision/CMakeFiles/ROAMvision.dir/all] Error 2
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed

Matt

IMUGPSFusionTest error

when i run "rosrun roamfree IMUGPSFusionTest " with your data, it output error "[FactorGraphFilter] Error: Not enough vertices provided for 'Accelerometer', which is of order 2",why? how to fix it?
thank you.

Adding sensor fusion to existing SLAM

Hi,. and thank you for making this code available. i have an existing SLAM application that I am looking to add IMU data to, both to improve stability of the pose, and to predict transforms if the tracking is lost temporarily.

Would ROAMFREE be suitable here? I see there is an example that uses a camera and IMU, what are the inputs exactly?

I have access to:

3d map points
2d feature points
computed camera pose
IMU data (gyro / accel)

Is the example here a better place to start, or perhaps this:

https://github.com/DavideACucci/roamvo/blob/master/src/VisualOdometryNode.cpp

(I am not using ROS however)

Thank you!

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.