Giter VIP home page Giter VIP logo

mrob's Introduction

prime-slam

SLAM system using various types of landmarks. README will be supplemented.

Building Docker Image

docker build -t prime-slam .

Running Docker Container

To run the container use the following command:

docker run --rm -v <DATA_PATH>:/data prime-slam [OPTIONAL_ARGS]

The following [OPTIONAL_ARGS] can be used:

optional arguments:
  -h, --help            show this help message and exit
  --data PATH, -d PATH  path to data (default: data/)
  --data-format STR, -D STR
                        data format: tum, icl, icl_tum (default: icl_tum)
  --save-cloud BOOL, -s BOOL
                        save resulting cloud (default: True)
  --cloud-save-path PATH, -S PATH
                        path to the saved cloud (default: resulting_cloud.pcd)
  --verbose BOOL, -v BOOL
                        print metrics (default: True)

Data formats

icl

/data
├── scene_0.depth — depth in ICL format
├── scene_0.png — image
├── scene_0.txt — camera parameters
├── scene_1.depth
├── scene_1.png
├── scene_1.txt
...
├── scene_N.depth
├── scene_N.png
└── scene_N.txt

File names may differ from those shown above. Additional information can be found here.

tum

/data
├── /rgb — depth in ICL format
    ├── image_0.png
    ...
    └── image_N.png
├── /depth
    ├── depth_0.png
    ...
    └── depth_M.png
└── groundtruth.txt — gt poses in TUM format

Additional information can be found here.

icl_tum

ICL data presented in tum format.

mrob's People

Contributors

achains avatar anastasiia-kornilova avatar g-ferrer avatar g-ferrer-sk avatar iakov avatar konstantinpakulev avatar miloserdova-l avatar nagonch avatar nosmokingsurfer avatar

Stargazers

 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

mrob's Issues

mrob::CreatePoints class fix seed to reproduce results

Add optional seed argument to CreatePoints::CreatePoints() constructor to fix randomness and gain reproducability in python scripts:

synthetic = mrob.registration.CreatePoints(N_points,N_planes,N_poses, 0.01, 0.0, T0) 

# now here every run result will be different
GTtraj = synthetic.get_trajectory()
target = np.array(synthetic.get_point_cloud(0)) 

May be can add overload for CreatePoints in C++ and add optional argument in python bindings:

#set seeds here if needed
torch.manual_seed(777)
np.random.seed(777)
...
synthetic = mrob.registration.CreatePoints(N_points,N_planes,N_poses, 0.01, 0.0, T0, seed = 777) 

# now results are the same every run
GTtraj = synthetic.get_trajectory()
target = np.array(synthetic.get_point_cloud(0))

Or do this in more global manner for all mrob modules in a single line:

mrob.seed(777)
...
synthetic = mrob.registration.CreatePoints(N_points,N_planes,N_poses, 0.01, 0.0, T0)
...

EF: efficient py interface

The current solution goes point by point. Either passing Q or a list of points (compatible with open3d?)

C++ units tests are not running when building the wheels

to run tests during build can simply build all targets with turned on tests. need execute the following commands in build directory:

cmake .. -DBUILD_TESTING=ON
make all
make test

The result should be somewhat like this:

Running tests...
Test project .../mrob/build
    Start 1: test_SE3
1/2 Test #1: test_SE3 .........................   Passed    0.01 sec
    Start 2: test_SE3cov
2/2 Test #2: test_SE3cov ......................   Passed    0.02 sec

100% tests passed, 0 tests failed out of 2

Total Test time (real) =   0.03 sec

i guess during cmake lists refactoring this part was lost.
pytests are running

FGraph solver LM method

by default the optimize_levenberg_marquardt prints messages at each Iter till Converged. there could be option to not print.

EF: centering planes

center planes for a distance always close to zero
This is for numerical stability of the unit plane vector

EF dense from centered

New method including hessian from 3x3 eigen decomposition. We look for numerically more stable solutions.

EF: Initialization

This is a weak initialization with centroids of planes and PC aligment.
It should be outside the regular solve, so a dedicated method should get this first solution to the problem, otherwise, convergence is not guaranteed if the IC is far from the optimum

Sim(3) and PC aligment

sim(3) and PC alignment should follow the same logic as in PCregistration. It requires:

  • Define a Sim3 class built from SE3
  • A new node from Sim3
  • A new factor point to point

factor base class

To remove some warning, removing the virtual on child classes, and override on destructor.
Param [[maybe_unused]] removed since this is a cpp'17 feature and generates some warnings

IMU - gyro factor

simple open loop integration of gyro data. This is for loosely coupled DF

SE3vel test and SE3velCov

it was early merged, but not fully finished, it needs tests (there is an example code in /test). Plus a review on the SE3covVel

weighted_point assumes 1:1 correspondence between X and Y

weighted_point assumes 1:1 correspondence between X and Y. This is true in the case of ( x, y ) are generated with the same number of points and known correspondence. since the algorithm runs for 20 iterations or convergence there is no chance to update correspondence.
Solution: add argument for number of iterations so you can set it to 1 and update the correspondence after.

EF: squared root form

Just for comparison. Then use the 4d plane for the new factor. All pieces are there

EF dense Hessian

It requires to adapt current factors to the new problem building.
It will maintain current implementation of EF-center, pi-factor and Bareg.

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.