Description:
I was using the maniskill3 framework today and tried to access the robot's root pose via env.agent.robot._objs[i].root_pose. I noticed that the returned values remained completely static throughout the simulation.
After digging into the SAPIEN source code, I realized this happens because the environment is running in GPU mode, and the native C++ handles lose synchronization with the GPU tensor buffers.
However, the core issue is that the std::runtime_error originally designed to prevent this exact scenario has been explicitly commented out in the source code:
https://github.com/haosulab/SAPIEN/blob/master/src/physx/articulation.cpp#L362-L364
The same applies to the velocity getters below it.
Suggestion:
Why was this exception-throwing code commented out? Is it really appropriate to provide no warnings or exceptions at all for an unsupported API call in GPU mode? (Even though few people might call these native single-fetch APIs in GPU mode, we should still ensure all features are robust.)
Description:
I was using the
maniskill3framework today and tried to access the robot's root pose viaenv.agent.robot._objs[i].root_pose. I noticed that the returned values remained completely static throughout the simulation.After digging into the SAPIEN source code, I realized this happens because the environment is running in GPU mode, and the native C++ handles lose synchronization with the GPU tensor buffers.
However, the core issue is that the
std::runtime_errororiginally designed to prevent this exact scenario has been explicitly commented out in the source code:https://github.com/haosulab/SAPIEN/blob/master/src/physx/articulation.cpp#L362-L364
The same applies to the velocity getters below it.
Suggestion:
Why was this exception-throwing code commented out? Is it really appropriate to provide no warnings or exceptions at all for an unsupported API call in GPU mode? (Even though few people might call these native single-fetch APIs in GPU mode, we should still ensure all features are robust.)