-
Notifications
You must be signed in to change notification settings - Fork 14
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
BasicCartesianControl::movv should follow a velocity-driven trajectory #166
Comments
Ongoing work on trajectory generation: #134. |
So far I have improved our KDL wrapper for trajectory generation, now accepting rectangular velocity profiles, and movv is mostly equivalent to movl (using velocity- instead of position-based inputs): 518e269...7035634. Sadly, we learned that TEO does not compensate its weight neither with movl nor movv, on the long run. The forearm tends to bend down while executing the trajectory. Things get worse if the start position is a partly extended arm: initially, the arm drops a few centimeters down, tries to get back on track and hits an angular velocity limit on some joint while doing that. @jgvictores has proposed three solutions:
|
TODO:
|
I'm probably going to put my efforts on solving #119 in the following days. Further progress on real TEO is blocked by the lack of a truly working cartesian controller. |
As stated above, we know that TEO is unable to perform a linear trajectory. See roboticslab-uc3m/teo-bimanipulation#3 (comment) for an in-depth explanation. AMOR, on the other hand, performs nicely thanks to its built-in controller (vendor amor-api + our AmorCartesianController YARP wrapper device), which takes care of closing a control loop under the hood. On the other hand, I've observed that BasicCartesianControl's MOVV command performs far better than TEO did, with a barely noticeable deviation of 0.5~1 cm when AMOR extends its arm while holding a 0.5 kg payload. Even though this is a good result, the new implementation of MOVV as proposed here clearly outperforms the old one, managing to keep the TCP at the expected height (z coordinate) along the whole path. |
Slightly related: "Create a generator-enabled trajectory #168" |
This implementation of
ICartesianControl::movv
is not keeping track of a reference during its execution, i.e. no control loop is closed as it is the case inmovl
:kinematics-dynamics/libraries/YarpPlugins/BasicCartesianControl/RateThreadImpl.cpp
Lines 199 to 249 in 24c0699
There was an advise concerning its experimental status which had been prematurely removed (my fault) from this function, we just learned that real TEO is not capable of maintaining a linear path when control is performed through this RPC command. In contrast to what we see on the simulator, an arm of the real-life TEO tends to bend down due to its own weight. This was somehow expected, but I wasn't aware of such big differences between reality and simulation. Also, everything is fine on AMOR, but in this case the vendor API takes care of everything under the hood.
Ideally, this implementation should build a new trajectory with simple velocity interpolation (just keep it steady per user's input). Thinking of splines (see KDL's built-in velocity profiles), a first-degree path interpolation should do; I recall such a solution in ASIBOT's former cartesian controller.
The text was updated successfully, but these errors were encountered: