-
Notifications
You must be signed in to change notification settings - Fork 404
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
estimate the external wrench given the actual feedback torque and joint pos, vel, acc? #304
Comments
Hi all, I think it would be useful to have such a component in KDL. An already implemented external-wrench estimator would make a good contribution to the robotics community. Some time ago, my colleagues and I have investigated state-of-the-art estimators to enable wrench feedback for our robot arms that are not equipped with a Force/Torque sensors. In the end, we opted for an approach that i) is relatively simple to implement; ii) provides accurate and DoF-decoupled results; and iii) requires (only) the typical feedback from the robot (joint position, velocity and torque), i.e. the momentum-observer presented in [1]. The publication in [1] is a survey that covers some other external-wrench estimation approaches as well and its results show that the momentum observer is the best candidate among all listed approaches. However, this momentum-based approach can also work with commanded instead of measured joint-torques, if a real joint-torque sensor does not exist in the robot's joint but, results, in that case, a bit noisier. [1] Haddadin, Sami, Alessandro De Luca, and Alin Albu-Schäffer. "Robot collisions: A survey on detection, isolation, and identification." IEEE Transactions on Robotics 33.6 (2017): 1292-1312. In our labs, we tested this approach on Kinova Gen3 7-DoF torque control arms. Both, i) experiment with loads for which we have ground-truth parameters and ii) experiment with contact-force estimation in a typical robotics use case showed good results from this estimator. For instance, in a polishing a surface use case that requires a force control (and thus, external-wrench feedback), this estimator enabled sufficiently well results: It should be noted that this estimator (similarly as all other approaches out there) requires a good dynamics model (mass-inertia parameters) of the robot to produce those results. If a robot is also equipped with real joint-torque sensors this improves estimation results because, usually in that case, the low-level torque-control loop in each joint tracks the torque-commands more accurately then the low-level loop that is only using joint-current information. In our case, we had a quite accurate dynamics model of our robot and the arms have real joint-torque sensors mounted on the output shaft of each joint. Here, I will share a C++ method that I implemented for estimating the external wrench on the robot's tool-tip. The computations are made using the solvers from the KDL library.
Here, for the last part that deals with propagating the estimated joint torques to the Cartesian wrench using a pseudo-inverse of a Jacobian, I used an SVD solver from the Eigen library. However, the code can be adjusted to use the stand-alone SVD solvers that are implemented in the KDL. For example, those that are used in: There might be a good reason why @smits, Prof. H. Bruyninckx and their colleagues decided to go with a separate SVD solver, rather than use the one from Eigen. I hope that this information and the code help! Cheers, |
BTW, a novel method that uses measured acceleration data - published in [2] - might provide even better results than the above outlined momentum-based approach. However, for this technique to work, every robot's link has to be equipped with at least [2] Birjandi, Seyed Ali Baradaran, Johannes Kühn, and Sami Haddadin. "Observer-Extended Direct Method for Collision Monitoring in Robot Manipulators Using Proprioception and IMU Sensing." IEEE Robotics and Automation Letters 5, no. 2 (2020): 954-961. |
Hi DjoleMNE, |
@DjoleMNE , the main reason why we used/implemented our own SVD back in the days (before Eigen was stable), was to have a solver that would not do allocations on the heap, which might potentially break realtime usage. |
@smits, thanks for the information! And do you think that this type of external wrench estimator would be a good fit for KDL? I.e. should we go with implementing a class for it and make a pull request? |
Regarding Eigen's SVD, you either need to test it or dive into the source code to check if at-runtime allocations of dynamically sized objects are happening. Regarding the estimator I see no reason why it would not be a good fit. |
I see. Then I would say that it would be better to implement the pseudo-inverse-jacobian part of this estimator using a KDL's SVD. Thanks for the feedback! |
Hi all,
Is there any code to estimate the external wrench given the actual feedback torque and joint pos, vel, acc in KDL?
Thanks!
The text was updated successfully, but these errors were encountered: