Comments (15)
I meet this problem too. But you may avoid it. In my experience, it happens when the point clouds have little overlap or wrong initial guess. Anyway I think it means failed to get a proper solution. So when this happens, means track failed.
from fast_gicp.
Normalizing the rotation part of your initial guess before running registration would fix that error.
Eigen::Matrix4f guess = ...;
guess.block<3, 3>(0, 0) = Eigen::Quaternionf(guess.block<3, 3>(0, 0)).normalized().toRotationMatrix();
from fast_gicp.
guess.block<3, 3>(0, 0) = Eigen::Quaternionf(guess.block<3, 3>(0, 0)).normalized().toRotationMatrix();
Hi, I use identity as init guess; it still happens occasionally.
Eigen::Matrix4f initial_guess = Eigen::Matrix4f::Identity();
reg.align(*tmpCloud, initial_guess);
optimize fail? maybe.
from fast_gicp.
Can you check if putting normalization code just below the following line would help?
// normalize x1_
x1_.linear() = Eigen::Quaternionf(x1_.linear()).normalized().toRotationMatrix();
from fast_gicp.
Normalizing the rotation part of your initial guess before running registration would fix that error.
Eigen::Matrix4f guess = ...; guess.block<3, 3>(0, 0) = Eigen::Quaternionf(guess.block<3, 3>(0, 0)).normalized().toRotationMatrix();
Actually, I didn't really understand where I should add this code. If you could write it like above, it would be great.
from fast_gicp.
Thanks. Please try to put the following code here
Eigen::Isometry3f x1_ = delta_.inverse() * x0_;
x1_.linear() = Eigen::Quaternionf(x1_.linear()).normalized().toRotationMatrix();
from fast_gicp.
It still gives the same error.
from fast_gicp.
Thanks for your coorperation. The cause is probably the unstable optimization as you said. In the current implementation, it uses a naive GN optimizer that can be unreliable when the initial guess is far from the true solution. I'll implement a more robust LM optimizer in next weeks.
from fast_gicp.
Thank you for you effort and help. I’ll wait.
from fast_gicp.
thanks. I'll try and share the results.
from fast_gicp.
I tried it and now it gives another error which is
[pcl::KdTreeFLANN::setInputCloud] Cannot create a KDTree with an empty input cloud!
Applying surface meshing...Using surface method: gp3 ...
[pcl::KdTreeFLANN::setInputCloud] Cannot create a KDTree with an empty input cloud!
from fast_gicp.
@gulfemakpinar
I pushed updated implementation of FastGICP to devel
branch. The updated code uses a more robust LM optimizer and avoids SO3::log()
to prevent the non-orthogonal R error. I would be glad if you could check if it works well in your environment at your convenience.
from fast_gicp.
@gulfemakpinar
I pushed updated implementation of FastGICP todevel
branch. The updated code uses a more robust LM optimizer and avoidsSO3::log()
to prevent the non-orthogonal R error. I would be glad if you could check if it works well in your environment at your convenience.
Hi, I find it works perfectly on cpu version. No more SO3 errors again.but cuda version still meet this problem. I think cuda version still use gauss newton .Any schedule to fix the cuda version?
from fast_gicp.
@cdb0y511 Thanks for testing it. I gonna improve the optimization of the cuda version as well in next week.
from fast_gicp.
Sorry for the late response. It works perfectly on my environment. Thank you.
from fast_gicp.
Related Issues (20)
- Crash while using VGICP
- how to take fast_gicp in my own code? HOT 3
- About NeighborSearchMethod HOT 1
- got "for_each: failed to synchronize" in every position using "thrust::for_each" HOT 2
- doc request: aligned output point cloud must be different from source and target HOT 1
- Registration score gradually diverges. HOT 3
- cudaErrorIllegalAddress: an illegal memory access was encountered HOT 1
- I want getTransformationProbability() function in ndt_cuda HOT 1
- Unexpected Performance: Single-Threaded Faster than Multi-Threaded in Point Cloud Alignment HOT 2
- Why is the **weight** the square root of the number of points? HOT 4
- the calculation of **rho** in step_lm() seems wrong HOT 2
- set step size on ndt_cuda
- Optimization Problem for Fast GICP (OpenMP)
- any bug in ndt_cuda? HOT 1
- core dumped HOT 1
- How to implement the pcl version of GICP?
- can't build fast_gicp.lib HOT 2
- fast_gicp iteration HOT 1
- Fast-gicp DO HOT 1
- Fast-gicp DO NOT HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fast_gicp.