Please provide all relevant details below before submitting your post. This will help the community provide more accurate and timely assistance. After submitting, you can check the appropriate boxes. Remember, you can always edit your post later to include additional information if needed.
Isaac Sim Version
4.2.0
4.1.0
[0] 4.0.0
2023.1.1
2023.1.0-hotfix.1
Other (please specify):
Isaac Lab Version (if applicable)
1.2
[0] 1.1
1.0
Other (please specify):
Operating System
Ubuntu 22.04
[0] Ubuntu 20.04
Windows 11
Windows 10
Other (please specify):
GPU Information
- Model:
- Driver Version:
Topic Description
Detailed Description
(Describe the issue in detail, including what you were trying to do, what you expected to happen, and what actually happened)
I am currently working on a bin picking task where I want to spawn multiple cubes inside a rectangular bin. However, when I spawn the cubes, they collide with each other and some of them end up outside the bin. I would like to remove the cubes that fall outside the bin during the simulation, I tried but I haven’t been able to find a way to do this yet. Is there a method for removing these cubes during simulation?
CODE
class BinPickingSceneCfg(InteractiveSceneCfg):
def __init__(self,args,*other_args, **kwargs):
super().__init__(*other_args, **kwargs)
# ground plane
self.ground = AssetBaseCfg(
prim_path = "/World/defaultGroundPlane",
spawn=sim_utils.GroundPlaneCfg(),
init_state = AssetBaseCfg.InitialStateCfg(pos=(0.0,0.0,0.0)),
)
# lights
self.dome_light = AssetBaseCfg(
prim_path = "/World/Light", spawn=sim_utils.DomeLightCfg(intensity=3000.0, color=(0.75,0.75,0.75))
)
self.table = RigidObjectCfg(
prim_path="{ENV_REGEX_NS}/Table",
spawn=sim_utils.CuboidCfg(
size=(1.0, 1.0, 0.4),
rigid_props=sim_utils.RigidBodyPropertiesCfg(max_depenetration_velocity=1.0, disable_gravity=True,
kinematic_enabled=True),
mass_props=sim_utils.MassPropertiesCfg(mass=1.0),
collision_props=sim_utils.CollisionPropertiesCfg(collision_enabled=True),
physics_material=sim_utils.RigidBodyMaterialCfg(),
visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.3, 0.3, 0.3)),
# visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.5, 0.0, 0.0),opacity=0.8),
),
init_state=RigidObjectCfg.InitialStateCfg(pos=(0.5, 0.0, 0.5 * 0.4)),
)
self.plate1 = RigidObjectCfg(
prim_path="/World/plate1",
spawn=sim_utils.CuboidCfg(
size=(1.0, 0.35, 0.0000001),
rigid_props=sim_utils.RigidBodyPropertiesCfg(max_depenetration_velocity=1.0, disable_gravity=True,
kinematic_enabled=True),
mass_props=sim_utils.MassPropertiesCfg(mass=1.0),
collision_props=sim_utils.CollisionPropertiesCfg(collision_enabled=True),
physics_material=sim_utils.RigidBodyMaterialCfg(),
visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.6, 0.35, 0.05)),
# visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.5, 0.0, 0.0),opacity=0.8),
),
init_state=RigidObjectCfg.InitialStateCfg(pos=(0.5, -0.025, 0.4000001)),
)
self.plate2 = RigidObjectCfg(
prim_path="/World/plate2",
spawn=sim_utils.CuboidCfg(
size=(1.0, 0.35, 0.0000001),
rigid_props=sim_utils.RigidBodyPropertiesCfg(max_depenetration_velocity=1.0, disable_gravity=True,
kinematic_enabled=True),
mass_props=sim_utils.MassPropertiesCfg(mass=1.0),
collision_props=sim_utils.CollisionPropertiesCfg(collision_enabled=True),
physics_material=sim_utils.RigidBodyMaterialCfg(),
visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.1, 0.3, 0.8)),
# visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.5, 0.0, 0.0),opacity=0.8),
),
init_state=RigidObjectCfg.InitialStateCfg(pos=(0.5, 0.325, 0.4000001)),
)
self.camera = CameraCfg(
# prim_path="/World/Objects/Camera",
prim_path="/World/Camera",
# update_period=0,
height=args.camera_resolution_height,
width=args.camera_resolution_width,
data_types=["rgb", "distance_to_image_plane", "semantic_segmentation", "instance_id_segmentation_fast",
"instance_segmentation_fast"],
spawn=sim_utils.PinholeCameraCfg(
focal_length=15.0, focus_distance=400.0, horizontal_aperture=20.63, clipping_range=(0.1, 1.0e5),
visible=True
),
# w, x, y, z
offset=CameraCfg.OffsetCfg(pos=(1.5, 0.0, 0.55), rot=(-0.5, 0.5, 0.5, -0.5), convention="ros")
)
self.bin = RigidObjectCfg(
prim_path = "/World/Bin",
spawn = sim_utils.UsdFileCfg(usd_path=f"./assets/bin.usd",
semantic_tags=[("class", "bin")],
visual_material_path=None),
init_state=RigidObjectCfg.InitialStateCfg(pos=(0.55, -0.3, 0.4)),
)
self.create_cubes(num_cubes=50)
# articulation
if args.robot == "franka_panda":
self.robot = FRANKA_PANDA_HIGH_PD_CFG.replace(prim_path="{ENV_REGEX_NS}/Robot")
elif args.robot == "ur10":
self.robot = UR10_CFG.replace(prim_path="{ENV_REGEX_NS}/Robot")
elif args.robot == "kionva_gen3lite":
self.robot = KINOVA_GEN3LITE_CFG.replace(prim_path="{ENV_REGEX_NS}/Robot")
else:
raise ValueError(f"Robot {args.robot} is not supported. Valid: franka_panda, ur10")
def create_cubes(self, num_cubes):
base_position = np.array([0.5, -0.3, 0.62])
for i in range(num_cubes):
position = base_position + np.array([np.random.uniform(-0.05, 0.05), np.random.uniform(-0.03, 0.03), (i//5)*np.random.uniform(0, 0.1)])
cube_name = f"cube{i}"
setattr(self, cube_name, RigidObjectCfg(
prim_path=f"/World/Objects/Cube{i}",
spawn=sim_utils.CuboidCfg(
size=(0.045, 0.045, 0.045),
rigid_props=sim_utils.RigidBodyPropertiesCfg(max_depenetration_velocity=1.0, disable_gravity=False),
mass_props=sim_utils.MassPropertiesCfg(mass=0.01),
collision_props=sim_utils.CollisionPropertiesCfg(
collision_enabled=True,
# contact_offset=0.000001,
# rest_offset=0.0,
),
# physics_material=sim_utils.RigidBodyMaterialCfg(),
physics_material=sim_utils.RigidBodyMaterialCfg(
# static_friction=0.8,
# dynamic_friction=0.6,
restitution=0.000001
),
visual_material=sim_utils.PreviewSurfaceCfg(diffuse_color=(0.8, 0.3, 0.0)),
),
# init_state=RigidObjectCfg.InitialStateCfg(pos=tuple(position)),
init_state=RigidObjectCfg.InitialStateCfg(
pos=tuple(position),
rot=(1.0, 0.0, 0.0, 0.0)
),
))
def run_simulator(sim: sim_utils.SimulationContext, scene: InteractiveScene):
camera_target_position = [0.5,-0.35,0.4]
camera_pos = [0.5,-0.15,0.6]
camera_target_position= torch.tensor(camera_target_position,dtype=torch.float,device=sim.device).repeat((args.num_envs,1))
camera_pos = torch.tensor(camera_pos,dtype=torch.float, device=sim.device).repeat((args.num_envs,1))
camera.set_world_poses_from_view(camera_pos,camera_target_position)
camera.reset()
sim_dt = sim.get_physics_dt()
bin_center = np.array([0.55,-0.3,0.4])
bin_size = np.array([0.4,0.2,0.1])
stability_counter = 0
check_stability_after = 200
print(dir(scene))
while simulation_app.is_running():
count += 1
if count > check_stability_after:
cubes_to_remove = []
for i in range(50):
cube_name = f"cube{i}"
cube = scene[cube_name]
if cube is not None:
cube_pos = cube.data.body_state_w[0, 0, 0:3].cpu().numpy()
outside_bin = (
abs(cube_pos[0] - bin_center[0]) > bin_size[0] or
abs(cube_pos[1] - bin_center[1]) > bin_size[1]
)
if outside_bin:
cubes_to_remove.append(cube_name)
print(len(cubes_to_remove))
for cube_name in cubes_to_remove:
prim_path = f"/World/Objects/Cube{cube_name[4:]}"
# prim_utils.delete_prim(prim_path)
stage = stage_utils.get_current_stage()
cube_prim = stage.GetPrimAtPath(prim_path)
if cube_prim:
try:
stage.RemovePrim(prim_path)
scene.update(sim_dt)
except Exception as e:
print(f"Error removing prim {prim_path}: {e}")
del scene[cube_name]
Error Messages
(If applicable, copy and paste any error messages you received)
Traceback (most recent call last):
File “/home/airlab/Robot_team/IsaacLab1.1/source/catkin_binpicking/src/binpicking/src/bin_picking_class.py”, line 764, in
main()
File “/home/airlab/Robot_team/IsaacLab1.1/source/catkin_binpicking/src/binpicking/src/bin_picking_class.py”, line 760, in main
run_simulator(sim, scene)
File “/home/airlab/Robot_team/IsaacLab1.1/source/catkin_binpicking/src/binpicking/src/bin_picking_class.py”, line 437, in run_simulator
del scene[cube_name]
TypeError: ‘InteractiveScene’ object does not support item deletion
Screenshots or Videos
(If applicable, add screenshots or links to videos that demonstrate the issue)