Object Falling During Manipulation

Hi, everyone,

I created a demonstration where a robot manipulates objects and carries them to a neighboring table. However, I am experiencing an issue where the grasped objects fall as shown in the following video.

When I parallelize the environment, only a specific environment seems to cause this problem. Could you please help me identify the possible causes?

While most environments allow for successful grasping and placing of objects onto the neighboring table, in certain environments, the object consistently falls even after resetting the environment. This leads me to believe that there might be some configuration issue. Or is there an incorrect friction or other setting on the gripper side of the robot?

The properties assigned to the objects are set as follows:

  prop:
    # -1 to use default values
    override_usd_defaults: False
    make_kinematic: False
    enable_self_collisions: False
    enable_gyroscopic_forces: True
    # Also in stage params
    # per-actor
    solver_position_iteration_count: 32
    solver_velocity_iteration_count: 1
    sleep_threshold: 0.005
    stabilization_threshold: 0.005
    # per-body
    density: -1
    max_depenetration_velocity: 5.0
    # per-shape
    contact_offset: 0.005
    rest_offset: 0.7e-5

And set PhysicsMaterial as follows:

    def create_prop_material(self):
        self._stage = get_current_stage()
        self.propPhysicsMaterialPath = "/World/Physics_Materials/PropMaterial"

        utils.addRigidBodyMaterial(
            self._stage,
            self.propPhysicsMaterialPath,
            density=100,
            staticFriction=0.4,
            dynamicFriction=0.4,
        )

    def add_prop(self):
        prop = DynamicCuboid(prim_path=self.default_zero_env_path + "/prop",
                             name="prop",
                             translation=self._prop_position,
                             orientation=self._prop_rotation,
                             size=0.04,
                             mass=0.01,
                             density=64e-8,
                             color=torch.tensor([0.2, 0.4, 0.6]))
        self._sim_config.apply_articulation_settings("prop", get_prim_at_path(prop.prim_path), self._sim_config.parse_actor_config("prop"))

        physicsUtils.add_physics_material_to_prim(
            self._stage,
            self._stage.GetPrimAtPath(self.default_zero_env_path + "/prop"),
            self.propPhysicsMaterialPath
        )

Thank you in advance for your help.

Best regards,
smakolon385

Have you tried simply increasing the friction in the material? I dont have too much of an intuition yet on what a good friction number should be but maybe you can find a suitable value fairly easily by just playing with it abit?

Thank you for your response!
Yes, I tried adjusting various settings.

Currently, it seems that having solver_velocity_iteration_count set to 1 is not ideal. Following your suggestion, I increased static_friction and dynamic_friction to 1.0, and set solver_position_iteration_count to 16 and solver_velocity_iteration_count to 16. With these changes, I was able to pick up the object without dropping it and place it on the adjacent table. However, when I set solver_position_iteration_count to 32 and solver_velocity_iteration_count to 16, it did not work as expected.
I’m not exactly sure why there is a difference, but for now, it is working correctly.

Thank you for your help!