-
Notifications
You must be signed in to change notification settings - Fork 126
20251015 ik cache #5380
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
20251015 ik cache #5380
Conversation
dgottlieb
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I verified this fixed the pirouette test[1]. Or at least in my aggressive repro, brings the number of iteration failures down from ~12 per run -> 0.8 per run. Presumably this patch works great when my worst-case nemesis isn't applied.
Definitely more stuff for me to look at right now compared to before. But I'm amenable to committing this now and touching up in a later PR.
My biggest clarification is (as per the code comment), what's the intended lifetime of this cache? Again, perfectly happy pushing this in for now and revising the lifetime for a later PR. Just wanted to make sure what's there right now is intentional.
Otherwise, I'll do a more thorough pass this evening.
[1] I force it to fail with this patch:
diff --git i/motionplan/armplanning/node.go w/motionplan/armplanning/node.go
index d63c6c87b..109d3e9ad 100644
--- i/motionplan/armplanning/node.go
+++ w/motionplan/armplanning/node.go
@@ -344,6 +344,8 @@ func (sss *solutionSolvingState) shouldStopEarly() bool {
// we're going to have to do cbirrt, so look a little less, but still look
multiple = 75
}
+ multiple = 0
+ minMillis = 10
if elapsed > max(sss.firstSolutionTime*time.Duration(multiple), time.Duration(minMillis)*time.Millisecond) {
sss.psc.pc.logger.Debugf("stopping early with bestScore %0.2f / %0.2f after: %v",
| } | ||
|
|
||
| func smartSeed(fs *referenceframe.FrameSystem, logger logging.Logger) (*smartSeedCache, error) { | ||
| c := &smartSeedCache{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The way I read everything fitting together right now -- every motion plan request creates its own cache. And then throws it away.
I expect this code can have a longer lifetime than a single motion plan. But there is a cache invalidation problem -- as frames change geometries, the cache needs to be recomputed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so i'm caching one layer down as the frame layer. that's where all the work is, and then if you change some obstacles or something most of the work is re-used.
and yes, it lives forever, which I think is ok...
Availability
Quality
Performance
The above data was generated by running scenes defined in the
|
No description provided.