-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Error using multiple VertexSBAPointXYZ #597
Comments
Which solver do you use? |
The solver I used is OptimizationAlgorithmLevenberg. |
It would depend on the type of the BlockSolver. If you allow variable size matrices in there.
Please consider posting a minimal working example in case of follow up problems.
… Am 28.08.2022 um 11:14 schrieb Junesuk Lee ***@***.***>:
The solver I used is OptimizationAlgorithmLevenberg.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.
|
Thank you for answer. I didn't know until now that blocksolver had an effect. I am currently using the blocksolver like below. g2o::SparseOptimizer optimizer; What's the problem? |
You here say - rather implicitly - that you want to use the Schur complement. That one is hardcoded for binary edges where the first vertex has dimension 6 and the second one dimension 3. |
Thank you for your answer. Thanks to your answer, I understand why the old method doesn't work. But I want to use two customEdges at the same time like below. (1) BaseBinaryEdge<2, Vector2d, VertexSBAPointXYZ, VertexSE3Expmap> (2) BaseBinaryEdge<2, Vector2d, VertexSBAPointXYZ, VertexSBAPointXYZ> If only edgeClass(2) is used, BlockSolverX seems to be able to solve it. Is BlockSolverX a good choice if I need to use (1)+(2) at the same time? I'd like to know if there are any performance issues with speed and accuracy. |
There might be a small runtime impact as the size of matrices is not known at compile time. But typically, the time needed to solve the system dominates. |
thank you Is there a way to use Schur complement while using BlockSolverX? |
I forgot one point in the runtime answer. If you before did not include any edge between VertexSBAPointXYZ and another VertexSBAPointXYZ you had parts of the matrix which is block-diagonal. This is the part exploited in the Schur complement. If you add edges between two points, this part of the matrix no longer is a block diagonal. Hence, inverting it is in general a costly operation. See https://en.wikipedia.org/wiki/Schur_complement where D is the block where your points would be. If you have a huge number of poses you might implement Schur for them. But typically, the points are the dominant quantity. |
This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 14 days. |
I want to use multiple VertexSBAPointXYZ for the Edge function (BaseBinaryEdge, BaseMultiEdge).
However, if I use multiple VertexSBAPointXYZs, a segmentation fault error occurs.
For example, using BaseBinaryEdge<2, Vector2d, VertexSBAPointXYZ, VertexSBAPointXYZ> will result in an error.
For BaseBinaryEdge<2, Vector2d, VertexSBAPointXYZ, VertexSE3Expmap> it works fine.
Also, when using BaseMultiEdge, an error occurs when using more than one VertexSBAPointXYZ.
Is VertexSBAPointXYZ only meant to be used once?
This problem occurs when optimize() is executed after a function call.
The text was updated successfully, but these errors were encountered: