I would like to report two bugs in the ArticulationView class:
In the position and velocity setters, all of the joints’ targets are updated to match their current values, regardless of what’s in
joint_indices. For example, if an articulation has 3 joints and you want to set the position of the middle one, you call set_joint_positions with joint_indices=. The ArticulationView class then computes the full position vector by first getting all the joints’ existing position, then updating joint 1’s position, then saving the full position vector on physx. The bug happens at the end of the function when the full position vector is also used as the joint target vector, so joints 0 and 2 also end up with their targets updated instead of just 2. This can be fixed by calling set_joint_position_targets here with the same joint_indices parameter. Both position and velocity setters are affected.
On the other hand, in the effort setter, there are a couple TODOs indicating that this function is not fully implemented: whenever the effort for a particular joint is set, all of the other joints’ efforts are zeroed out. The TODOs can easily be resolved: the get_dof_actuation_forces function is the corresponding getter here (that is already used in get_joint_actuation_forces) that can be used to get the rest of the joints’ values.
You can find fixed versions of both functions here: Fix broken functions in ArticulationView · StanfordVL/OmniGibson@f1b23de · GitHub