Articulation force sensor can't get contact value?

Hello, I’m using articulation force sensor mentioned here. In my view, this sensor can read external force acted on itself by joint and gravity.

I change end effort of franka like this: franka(remove gripper)->fix joint->small box as force sensor->fix joint->cylinder(to be contacted). However, when I change franka joint angle to make cylinder contact, the reading of force sensor is strange.

The initial scene like this, the reading of free state is explainable. (almost, z is good, but y is positive, also strange)

Then I change a joint target position while playing, but the reading of force sensor doesn’t change much. Even change joint’s target position to make stronger contact (stronger force should be appear because pd controller is used)

It seems that articulation force sensor can’t get valid contact value? I use this sensor because it could easy read 6-axis force like ATI sensor, but maybe it still has some problems…

In second picture, because contact, this z force will be positive at least, but it change very small.

In addition, we use real experiment scene like this, get force 20~30N usually.

By the way, the mass of peg is 0.0739kg. So the force value of free state maybe strage… (should be 0.7N)

I made more test to reveal what does force sensor do, the result is confused.

I build this manipulator with upper mass is 1, corresponding gravity is 9.8N.
at the zero position, force sensor read -9.8N, good.

Then I change a joint position to 90 deg, like this:

The reading of force-sensor change to y force -2.7N, doesn’t correspond the mass of upper arm.

Dose force sensor really read the external force acted on the body?

Same question here.
I can not find detailed documentation for the force sensor.
Which forces are actually measured?

I don’t know until now…

We’ve been working with the physics team to understand this issue better and filed a bug, the physics team has committed to fixing this and providing better documentation for a future release.

HI why not use the rigid body net forces? This will tell you the forces on the gripper and you can get both forces by getting info from both the rigid bodies on either side of the gripper.

Here is an example of how to get the force tnsor for mutiple rl actors. The API documentation on this is not that clear

here is the gist…using the OmbiIsaacGymEnvs task framework e.g. anymal.py but no need anymore for the anymalview import which just serves to confuse and is nor helpful if you are using your own model

from omni.isaac.core.articulations import ArticulationView #if you need an articulation view (likely)
from omni.isaac.core.prims import RigidPrimView

def set_up_scene(self, scene) → None:
…self._robots = ArticulationView(prim_paths_expr=“/World/envs/./biped", name=“biped_view”)
…self._lfoot = RigidPrimView(prim_paths_expr="/World/envs/.
/biped/LeftFoot”, name=“lfoot_view”, reset_xform_properties=False, track_contact_forces=True, prepare_contact_sensors=False)
…scene.add(self._robots)
…scene.add(self._lfoot)

def update_buffers(self):
…self.contacts_left = (self._lfoot.get_net_contact_forces(clone=False)[:,2] > 0.00)
…print(self.contacts_left.shape)
… print(self.contacts_left)

so this example takes the left foot prim from my biped.usd file for my 512 robot instances during training and detects if there is any contact force in the z plain (>0.00) that gives you a bool tensor to see if it is on the floor or not… in your case you probably want to know the actual force so you dont break the object the gripper is holding.