-
Notifications
You must be signed in to change notification settings - Fork 2
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
PPEs are sometimes not populated - solvable changed to 0 #96
Comments
I have seen this once before. @dehann if a solve crashed mid-way would it be possible solve was set to zero and never reverted? This is my first guess at the cause. |
if the solve crashed then all bets are off. We currently have no safety net for this. I think we should do two fixes for these cases:
(not for today) This will naturally lead to the need for the cloud system to compile a crash report with the session name and the call stack error message. |
Do we set solvable=0 inside the solver during solving though? If so, why do we do this? Was interesting, because I can't think of a reason we would do that |
I have no idea if we are. It was just a theory and likely a red herring, hence the question.
Solvers writing to the production db need to be transactional/atomic in the cloud. Let's do an engineering session on how to make that possible. But back to the actual issue at hand. Does the solver write solvable=0 at any point or is that a red herring? |
I checked and our theory in the discussion looks correct. If a variable is orphaned, ie with no connected factors, it is marked as solvable=0. So I think it is as we suspect that a solve is triggered with the factor pushed to the back of the queue. |
It is also possible to cause an error from the solver. I'll open an issue with IIF. |
Nice find Johan. So as long as we fail on waitForCompletion, we should be good for ICRA. I think handling this in Caesar would be the long term fix yes? Not sure the fix but something like ignore the node but leave it solvable... |
Luckily it wasn't too hard to test, IIF emits a warning:
I think so, yes.
I'll think about it more in the morning. We should also catch islands with no priors on them JuliaRobotics/IncrementalInference.jl#1512. |
If there is an issue on orphans I can move the conversation there, but I like the idea of solvable being, "the user wants this to be included" and maybe a new field called "orphaned" that is the solver engine saying, "I can't use this, sorry, maybe next time". As we think through this, we should consider how these fields might be used for "ghost" variables in the context of out of order factor injection. In the end maybe we end up with three fields? Solvable, Orphaned, and Ghost (ie placeholder). |
I'd avoid a dedicated orphan flag and rather use the field i previously developed (not in the new GQL versions yet) which back then was called The solve should only touch variables for which the intersect exists, BTW, being able to solve orphaned graph fragments is a requirement. The issue is if a graph has no priors to gauge/ground the solution. There is no problem with two disconnected graph fragments, each with their own priors. The CSM logic in the tree caters for that case.
Yes, that would be the best way to work for ICRA.
Strictly speaking, The idea here is the user should be able to peacefully modify the graph with variables and factors, while the solver is working hard on parts of the graph the user has deemed
Perhaps I should clarify, if there is a corner case where the solver did bump down a However, calling
|
I have a graph with one of the variables not producing a PPE and the result is skewed.
My theory is: solvable is changed to 0 and therefore it's not included in the solve, hence no ppe.
Reference sessions:
robotId = "SDKjl_f97d"
sessionId = "Tutorial2_b376"
and
robotId = SDKjl_cdfe
sessionId = Tutorial1_5bfa
The text was updated successfully, but these errors were encountered: