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!

Hi @makoto.sato385,

The robot should really not lose the grasp; increasing the friction coefficient is good advice. I’m less sure about the impact of the velocity iterations, they should not matter if the simulation is setup properly. Are you using tensorized APIs to access robot state/control? If so, could you check if the contact forces between the gripper fingers and the cube are large enough to support the cube’s weight?

If you can share an OVD capture, that could help me diagnose this further: OmniPVD - PhysX Visual Debugger — Omniverse Extensions latest documentation

Thank you,
Philipp