ah, so it looks like you’re missing the Jacobian transpose multiplication, to change u_xyz from end-effector forces into joint torques.

Although you mention you’re looking to do this in joint space, I’m not sure that velocity limiting is exactly what you’re after though, as it’s intended purpose is limiting the end-effector forces so that joint torques that are too large aren’t specified. So if you’re starting out in joint space (i.e. your target is a set of joint angles rather than some end-effector position) then you’re going to want to use another method to limit your forces.

The simplest would just be to clip the joint torques whenever they get to large, but you could also scale them all down by the same amount whenever one goes over the max to keep their torques relative to each other the same. Could you describe your task / goal a bit more?

]]>Currently, I want to implement velocity limiting in joint-space. The issue I am facing is that the unit/magnitude of vmax correlates in some way to the resulting behavior, but the joint velocities that I get as feedback from the robot are always waaay smaller than vmax. What I would expect is that at least the “fastest” joint is very close to vmax. What I did was basically to calculate:

u_xyz = -kv * (dx + np.clip(sat / scale, 0, 1) * scale * lamb * x_tilde)

and then add the joint-space inertia and compensate for gravity and coriolis in joint-space:

u_tau = M * u_xyz + tau_gc

Perhaps I am thinking the wrong way, but since we limit dimension-wise I guessed that the algorithm could be applied to joint-space as well?

Any help would be really appreciated! 🙂

]]>‘..which then sets the singular values entries smaller than the threshold equal to zero, canceling out any forces that would be sent in that direction…”

Its written that the singular values are set to zero and not the inverse’s.

Thank you! Nice post!

]]>I mean the rotation matrix R is use to cause a rotation of 90 degrees about the axis (o-y) X y_dot. Since the (o-y) X y_dot is perpendicular to the plane spanned by y_dot and (o-y), isn’t the term R*y_dot just try to produce a movement perpendicular to current movement y_dot?

So the whole term is just try to produce a movement perpendicular to current movement y_dot and then use the phi_dot to weight the magnitude？

I don’t know if my understanding is correct, if it isn’t, please help me to correct it.

Thank you!

]]>