Isaac Sim Version
5.1.0 NOTE: We are currently in the process of recreating this behavior on 5.1.0
4.5.0
Operating System
Ubuntu 24.04x
GPU Information
- Model: Can provide if needed
- Driver Version: Can provide if needed
Topic Description
Detailed Description
We are using the running some calculations to determine a new-position and orientation of multiple vehicles outside of the IsaacSim loop. This is simply because the motion model of our vehicles is currently better represented this way. We are then trying to update the position and orientation of each prim in IsaacSim using the set_local_poses function of a GeometryPrimView wrapping the vehicles.
We are on the order of ~5000 vehicles, and the biggest bottleneck is the amount of time the set_local_poses step takes for all 5000 vehicles. Right now it is 70+% of the loop time. Is there a faster way to batch this update or speed up this implementation?
Thank you!!
Example Code Snippet
# Initialize GeometryPrimView of vehicles
for i in range(0, NUM_VEHICLES):
add_reference_to_stage(
usd_path=VEHICLE_USD_PATH, # Any USD may suffice here
prim_path=f"/World/Drone_{i}",
)
vehicles = GeometryPrimView(
prim_paths_expr="/World/Drone_*",
name="drone_prim_view",
collisions=[False] * vehicle_cnt,
)
pm = calculate_new_poses(pm)
vehicles.set_local_poses(
translations=torch.stack([pm.X.x, pm.X.y, -1 * pm.X.z]).T,
orientations=euler2quat(torch.stack([pm.X.phi, -1 * pm.X.theta, pm.X.psi]).T),
)
Screenshots
Below is an plot of what we’re seeing when timing the vehicles.set_local_poses() call above. While I can provide context for the other calls below, the significant piece is how much of the total loop time setting the poses using the set_local_poses function is costing us.
