-
Notifications
You must be signed in to change notification settings - Fork 392
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
Computation of Time-Derivative of Jacobian (Jd) #901
Comments
Nicolas Mansard's response by email is as follows: please post your question on github, as a new issue. Don't compute the Jdot for computing the coriolis acceleration of the hand. Rather use the method to compute the acceleration of the bodies with qddot = 0. I also suggest that you follow the spirit of Featherstone and Murray (which drives the implementation of Pinocchio) and work in 6D with either spatial velocity in the local frame (i.e. linear velocity of the local frame expressed using the basis of the local frame) or in the world frame (i.e. linear velocity of the virtual point attached to the body but passing through the origin of the world, expressed in the world basis)." |
Dear Nicolas and Pinocchio Authors, Do you mean something like this:
? I realized that the above computations are spatial velocities, i.e. if the end effector pose is expressed by rotation R and translation p, the end effector linear velocity p_dot, and the end effector angular velocity omega, then (according to Murray et al.'s "A Mathematical Intro. to Robotic Manipulation" book, equation (2.53)): So, if the above is correct, I may get away of computing end-effector (spatial) velocities and accelerations, without computing the time-derivative of Jacobian (Jd). But what if I need Jd for something else, e.g. for implementing Gauss' (Force-based) Operational Space Controller like in the equation (56) of the paper "Operational Space Control: A Theoretical and Empirical Comparison" by Nakanishi et al.? How to compute Jd properly for this? Can you provide a code snippet/example/demo for this, similar to the inverse kinematics demo that you provided? Thanks in advance! P.S.: Also, I assume [p_dot; omega] == [R, zeros(3,3); zeros(3,3), R] * local_J * qd , if qd is joint velocity, and local_J is obtained from pinocchio.jointJacobian(), correct? Best Regards, Giovanni |
Dear @gsutanto, In Pinocchio, you have two functions called Is this reply provides some helpfull directions? |
Hi @gsutanto,
It is not. In Pinocchio, we tend to use Featherstone's spatial notation for velocities. With In other words, see this test:
Yes, where |
@gsutanto Do you have any feedback on our replies? |
Dear @jcarpent and @gabrielebndn , Thanks for your response. Sorry I have been busy the past two days. I will have one more test tomorrow (Monday) on my side. If I have further questions, I will post it here. Otherwise I will close this case. Thanks so much! Best Regards, Giovanni Sutanto |
Dear @jcarpent , Sorry for the delay, I tried the following:
I checked that the relationship: I guess this makes sense, because for the computation of local_walign_Jd should be equal to matmul(l2lwa, local_Jd) + (an additional term that depends on local_J and the time derivative of l2lwa (which includes time derivative of R)). Am I right? Also, I guess to compute the end-effector acceleration w.r.t. the robot base (this lays outside of Featherstone's spatial notation, as @gabrielebndn says), I can compute: Please clarify. Thanks so much! Best Regards, Giovanni Sutanto |
@gsutanto Did you update the code to the current devel branch? By the way, how do you install pinocchio on your computer? |
Following discussions in #906, I will provide an new release in the next few hours. It will solve your issue. |
I follow the instruction in https://stack-of-tasks.github.io/pinocchio/download.html , the Linux version, with: With the new release, are you saying that the relationship: |
The release is not yet available. The code you need is currently on the devel branch of the project. Unfortunately, you will have to way for the robotpkg version. |
Hi @jcarpent , I see. Yeah, conda is fine (is there already installation instruction with conda?). Right now it's not critical for me, it can wait for a 2-3 days or so, and it's still fine for me. But on the theoretical side, I have a few questions: |
Dear @jcarpent , Is there an update on this case? |
@gsutanto, sorry for my late reply, but those days are very full from my side. |
OK |
Dear @gsutanto, Sorry for the delay, but the last two weeks were very busy for me. I provided a code snippet to help you in the understanding below.
|
@gsutanto I will close this issue as it seems to be solved. Feel free to reopen. |
Dear Pinocchio Authors,
I have a question:
suppose if R is the orientation of the end-effector w.r.t. robot base frame as rotation matrix, and if local_J is the result of pinocchio.jointJacobian(), then the end-effector Jacobian w.r.t. base frame is (similar to the example/demo https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/master/doxygen-html/md_doc_b-examples_i-inverse-kinematics.html ):
J = [R, zeros(3,3); zeros(3,3), R] * local_J
How do we compute the time derivative of the end-effector Jacobian w.r.t. base frame Jd?
I was thinking to do Jd = [R, zeros(3,3); zeros(3,3), R] * local_Jd (local_Jd obtained from pinocchio.getJointJacobianTimeVariation() ) , but I realized that R is also varying with time (not a constant), so there shall be an additional term that depends on the time derivative of R...
So, how do we compute Jd properly?
I need Jd for computing end-effector acceleration xdd = Jd * qd + J * qdd.
P.S.:
(1) I also noticed that pinocchio.getFrameJacobian(self.pinoc_model, self.pinoc_data, self.pinoc_model.getFrameId('iiwa_link_ee'), pinocchio.ReferenceFrame.WORLD) is not the same as J = [R, zeros(3,3); zeros(3,3), R] * local_J computed above.
(2) I have asked Nicolas Mansard via email about this, please see his response below. (I put the question here, as per his request.)
Best Regards,
Giovanni
The text was updated successfully, but these errors were encountered: