-
Notifications
You must be signed in to change notification settings - Fork 8
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
Bug with the (Eigen) svd.solve() #10
Comments
The issue I see with doing our own pseudo-inverse is that we would not get all the "niceties" of eigen regarding numerical robustness and so on ... So it might work better in some cases and worst in others. A summary of the situation:
We can also install eigen from source in the flat fish project. |
So, answering your points:
However, since the current version of Eigen has a bug with the solve function, this is not working for non full rank matrices. Currently I'm locally calculating the pseudo inverse using a piece of code similar to this one published in the Eigen FAQ. The Eigen library is very (very!) important for robotics purposes and in my opinion a newer stable version of it should be included as default inside rock's environment. |
The issue should be fixed since Eigen 3.2.3 (which apparently did not make it into all linux-distros, yet). The relevant commit is this https://bitbucket.org/eigen/eigen/commits/ce84611 (it had been fixed in the devel-branch long time ago). |
We're using 3.2.5 in our builds. Don't really want to go through the pain of pushing it to Rock mainline... |
Hey guys, I've found a bug concerning the AccelerationController's SVD solution. Sascha had told me about a strange behavior of the task when using the SVD solution (the output went to infinity). What I could note is that when the thruster matrix is not full rank, the svd.solution() breaks and the result goes to infinity.
I'm running an Ubuntu 14.04, where the Eigen's version is 3.2.1-1. I checked the problem for the version 3.2.5 and this was solved.
Long story short, the svd solution doesn't work properly for Eigen's version 3.2.1-1, but it works fine for the version 3.2.5.
Possible solutions:
Implement the pseudo-inverse calculation via SVD, instead of using the svd.solve(). The calculation is simple (I've made one version of my own) and it can be seen here.
Override the Eigen's version in Rock for a newer one (I don't know how to do this or even if it's possible for external packages).
Please let me know which solution sounds better for you guys.
The text was updated successfully, but these errors were encountered: