@@ -153,7 +153,6 @@ class MultiObjectSceneCfg(InteractiveSceneCfg):
153
153
}
154
154
)
155
155
156
-
157
156
def reset_object_collections (scene : InteractiveScene , view_ids : torch .Tensor ):
158
157
if len (view_ids ) == 0 :
159
158
return
@@ -165,6 +164,7 @@ def reset_object_collections(scene: InteractiveScene, view_ids: torch.Tensor):
165
164
ranges = torch .tensor (range_list , device = scene .device )
166
165
samples = math_utils .sample_uniform (ranges [:, 0 ], ranges [:, 1 ], (len (view_ids ), 6 ), device = scene .device )
167
166
167
+ # poses
168
168
positions = default_state_w_view [:, :3 ] + samples [..., 0 :3 ]
169
169
orientations_delta = math_utils .quat_from_euler_xyz (samples [..., 3 ], samples [..., 4 ], samples [..., 5 ])
170
170
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):
173
173
ranges = torch .tensor (range_list , device = scene .device )
174
174
samples = math_utils .sample_uniform (ranges [:, 0 ], ranges [:, 1 ], (len (view_ids ), 6 ), device = scene .device )
175
175
176
- velocities = default_state_w_view [:, 7 :13 ] + samples
176
+ new_velocities = default_state_w_view [:, 7 :13 ] + samples
177
177
new_poses = torch .concat ((positions , orientations ), dim = - 1 )
178
178
179
179
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 ))
182
180
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 ))
183
194
184
195
185
196
##
@@ -207,8 +218,6 @@ def run_simulator(sim: SimulationContext, scene: InteractiveScene):
207
218
# object
208
219
root_state = rigid_object .data .default_root_state .clone ()
209
220
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 :])
212
221
# object collection
213
222
reset_object_collections (scene , view_indices )
214
223
scene .reset ()
@@ -220,8 +229,8 @@ def run_simulator(sim: SimulationContext, scene: InteractiveScene):
220
229
sim .step ()
221
230
object_pos_b = rigid_object_collection .data .object_pos_w - scene .env_origins .unsqueeze (1 )
222
231
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 )
225
234
reset_object_collections (scene , view_indices [~ inbound_mask ])
226
235
# Increment counter
227
236
count += 1
0 commit comments