Skip to content
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

Create an API for tuning ERP and CFM of the contact constraints in the underlying ODE LCP Solver #1068

Open
eastskykang opened this issue May 9, 2018 · 2 comments
Labels
help wanted Indicates wanting help on an issue or pull request tag: feature request Indicates new feature requests

Comments

@eastskykang
Copy link

eastskykang commented May 9, 2018

When I simulate the stack of the blocks as the image below, I got the warning message "ODE Message 3: LCP internal error, s <= 0" from Dantzig solver. As far as I know, this error is from ODE Dantzig solver (standard solver of Open Dynamics Engine) and it slows down the simulation step.

image

In ODE, I could tune some parameters such as ERP or CFM. For Dart, how can I set parameters to attenuate this problem?

@mxgrey
Copy link
Member

mxgrey commented May 9, 2018

We keep a copy of the ODE LCP solver in the DART codebase, so the error will be coming from here.

I don't think we currently provide any interfaces for tuning the ERP or CFM, but that would be a great feature to add.

@mxgrey mxgrey added tag: feature request Indicates new feature requests comp: dynamics help wanted Indicates wanting help on an issue or pull request labels May 10, 2018
@mxgrey mxgrey changed the title LCP internal error, s <= 0 from Dantzig solver Create an API for tuning ERP and CFM of the underlying ODE LCP Solver May 10, 2018
@mxgrey mxgrey changed the title Create an API for tuning ERP and CFM of the underlying ODE LCP Solver Create an API for tuning ERP and CFM of the contact constraints in the underlying ODE LCP Solver May 10, 2018
@mxgrey
Copy link
Member

mxgrey commented May 10, 2018

One option to consider in the meantime (if you haven't tried it already) is switching to the PGSLCPSolver. The PGS method tends to provide more stable results.

You should be able to change the solver by calling

world->getConstraintSolver()->setLCPSolver(dart::common::make_unique<dart::constraint::PGSLCPSolver>(world->getTimeStep()))

(Disclaimer: That line of code is untested, so it may need some corrections)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Indicates wanting help on an issue or pull request tag: feature request Indicates new feature requests
Projects
None yet
Development

No branches or pull requests

3 participants