[Bug?] Unable to get pose attached to skeleton prim through Usd get_pose() calls?


Leaving a note wrt something that was very counter intuitive and took a while resolving for me in case it is helpful to others (couldn’t add it to an existing post since it was closed)

In my quest to get animated characters working within my Isaac sim extension, I finally came across the final hurdle - reparenting my multi-camera rig to a joint of the skeleton (e.g. the Left Eye) would cause me to be unable to access the pose of the rig, although switching to the camera would demonstrate the images being rendered correctly.

I tried all timecode variants of get_world_transform() as suggested in Synthetic data get pose is wrong - #13 by eliabntt94

And casting(?) as an XFormPrim to access the poses would mutate the pose I cared about every time I queried the pose - which is completely not what I expected or intended.

What finally worked for me was using the CameraParams annotator, and initialising the cameras in the setup() method of my extension

I agree with the conclusion in Synthetic data get pose is wrong - #13 by eliabntt94 - calling get_pose() should work for such use cases, and there should definitely be some gotchas called out for XFormPrim calls being able to mutate the state (I think I saw a comment in UsdPrimView? maybe that hinted at it not being thread-safe?)

Thanks for the update. The synthetic data helper extension has been deprecated in favor for replicator for accessing annotator data. So your approach of using annotators seems correct.

Oh yes, I understand that the synthetics data helper has been deprecated - I think what I wanted to call out was that all the other means of accessing the camera pose information by using XFormPrim, or get_world_pose even using e.g. camera inspector would either provide the same pose, or mutate the pose - which is totally not expected - and I guess is happening because the interfaces are not really designed to work with animated skeletons?