@@ -153,7 +153,6 @@ class MultiObjectSceneCfg(InteractiveSceneCfg):
153153 }
154154 )
155155
156-
157156def reset_object_collections (scene : InteractiveScene , view_ids : torch .Tensor ):
158157 if len (view_ids ) == 0 :
159158 return
@@ -165,6 +164,7 @@ def reset_object_collections(scene: InteractiveScene, view_ids: torch.Tensor):
165164 ranges = torch .tensor (range_list , device = scene .device )
166165 samples = math_utils .sample_uniform (ranges [:, 0 ], ranges [:, 1 ], (len (view_ids ), 6 ), device = scene .device )
167166
167+ # poses
168168 positions = default_state_w_view [:, :3 ] + samples [..., 0 :3 ]
169169 orientations_delta = math_utils .quat_from_euler_xyz (samples [..., 3 ], samples [..., 4 ], samples [..., 5 ])
170170 orientations = math_utils .quat_mul (default_state_w_view [:, 3 :7 ], orientations_delta )
@@ -173,13 +173,24 @@ def reset_object_collections(scene: InteractiveScene, view_ids: torch.Tensor):
173173 ranges = torch .tensor (range_list , device = scene .device )
174174 samples = math_utils .sample_uniform (ranges [:, 0 ], ranges [:, 1 ], (len (view_ids ), 6 ), device = scene .device )
175175
176- velocities = default_state_w_view [:, 7 :13 ] + samples
176+ new_velocities = default_state_w_view [:, 7 :13 ] + samples
177177 new_poses = torch .concat ((positions , orientations ), dim = - 1 )
178178
179179 new_poses [..., 3 :] = math_utils .convert_quat (new_poses [..., 3 :], to = "xyzw" )
180- rigid_object_collection .root_physx_view .set_transforms (new_poses , indices = view_ids .view (- 1 , 1 ))
181- rigid_object_collection .root_physx_view .set_velocities (velocities , indices = view_ids .view (- 1 , 1 ))
182180
181+ num_objects = rigid_object_collection .num_instances * rigid_object_collection .num_objects
182+
183+ if len (view_ids ) != num_objects :
184+ poses = torch .zeros ((num_objects , 7 ), device = scene .device )
185+ poses [view_ids , :] = new_poses
186+ velocities = torch .zeros ((num_objects , 6 ), device = scene .device )
187+ velocities [view_ids , :] = new_velocities
188+ else :
189+ poses = new_poses
190+ velocities = new_velocities
191+
192+ rigid_object_collection .root_physx_view .set_transforms (poses , indices = view_ids .view (- 1 , 1 ))
193+ rigid_object_collection .root_physx_view .set_velocities (velocities , indices = view_ids .view (- 1 , 1 ))
183194
184195
185196##
@@ -207,8 +218,6 @@ def run_simulator(sim: SimulationContext, scene: InteractiveScene):
207218 # object
208219 root_state = rigid_object .data .default_root_state .clone ()
209220 root_state [:, :3 ] += scene .env_origins
210- rigid_object .write_root_pose_to_sim (root_state [:, :7 ])
211- rigid_object .write_root_velocity_to_sim (root_state [:, 7 :])
212221 # object collection
213222 reset_object_collections (scene , view_indices )
214223 scene .reset ()
@@ -220,8 +229,8 @@ def run_simulator(sim: SimulationContext, scene: InteractiveScene):
220229 sim .step ()
221230 object_pos_b = rigid_object_collection .data .object_pos_w - scene .env_origins .unsqueeze (1 )
222231 object_pos_b_view = rigid_object_collection .reshape_data_to_view (object_pos_b )
223- inbound_mask = (- 1.0 < object_pos_b_view [:, 0 ]) & (object_pos_b_view [:, 0 ] < 1.0 )
224- inbound_mask &= (- 1.0 < object_pos_b_view [:, 1 ]) & (object_pos_b_view [:, 1 ] < 1.0 )
232+ inbound_mask = (- 0.2 < object_pos_b_view [:, 0 ]) & (object_pos_b_view [:, 0 ] < 0.2 )
233+ inbound_mask &= (- 0.3 < object_pos_b_view [:, 1 ]) & (object_pos_b_view [:, 1 ] < 0.3 )
225234 reset_object_collections (scene , view_indices [~ inbound_mask ])
226235 # Increment counter
227236 count += 1
0 commit comments