What's the reference frame for get_measured_joint_forces?

Isaac Sim Version

4.2.0

Operating System

Ubuntu 20.04

Topic Description

Detailed Description

Given the fingertip of Shadow Hand, I want to measure forces/torques w.r.t the coordinate frame of the fingertip (local frame)?

Is the above what we get with get_measured_joint_forces()? If no, how do I get them?

Many Thanks!

Hi there, thank you for your question.
get_measured_joint_forces will get scalar values of the amount of torque/force applied by each joint. I think what you are looking for is something more like a force-torque sensor. For that please check out this demo script. Essentially you will want to get net_forces_w

Hi there, thanks for your reply!

As per the 4.2 documentation, to mimic force-torque sensors, get_measured_joint_forces API can be used to retrieve forces from a fixed joint.

That’s not the same as Contact Sensor right?

Unlike contact sensor, which specifies net_forces_w is in world frame, get_measured_joint_forces API doesn’t mention if the forces-torques are in the local frame or world frame?

Many Thanks!

Happy to help!
The elements of the vector you get from get_measured_joint_forces are scalar values, and each of those are obtained by getting the forces applied from one link to the next and projecting it in the direction of the joint motion (i.e. Let f_A_B_generalized be the forces applied on A by B, then the torque on the joint connecting A and B is t_A_B = f_A_B_generalized.dot(v) where v is pointing along the joint axis) and note that f_A_B_generalized can be refined in any frame of reference. In short, the forces you get are scalar values that do not depend on a frame of reference.

I am a bit confused here.

The documentation says the output of get_measured_joint_forces is a matrix of size number of joints times 6. And that the first 3 elements of this 6-D vector for all joints correspond to forces while the last 3 correspond to torques. Given this information,

  1. What do you mean when you say, “elements of the vector are scalar values”? I thought they represent incoming forces and torques to that joint.

  2. You said, “torque on the joint connecting A and B is t_A_B = f_A_B_generalized.dot(v) where v is pointing along the joint axis”. Isn’t torque the cross product of force and position vector from the axis of rotation? Are you referring to power as the scalar quantity?

I apologize, I was confused with get_measured_joint_efforts. You are correct, get_measured_joint_forces returns the forces and moments on the list of bodies specified. Those forces and moments are in the local body reference frame, and the moments are measured around the joint. This should be more clear in the documentation. I will request it to be added.

A request has been opened for more clear documentation on the reference frame of force/torques returned by get_measured_joint_forces. Thanks for your questions, and feel free to open new issues if any further questions arise.