Genesis icon indicating copy to clipboard operation
Genesis copied to clipboard

[Bug]: FEM and Rigid Entity Collision Bug

Open bahadir14 opened this issue 7 months ago • 13 comments

Bug Description

Hello everyone, I tried to model collision in between FEM and Rigid Entity. But, there seems to be a bug, which I couldnt solve. Do you guys have any idea about problem?

Steps to Reproduce

import argparse

import numpy as np
import os
import torch

from dask.order import order
from mpmath import euler
from pygel3d.hmesh import minimize_dihedral_angle
from os import path
os.environ['PYOPENGL_PLATFORM'] = 'glx'
import genesis as gs


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-v", "--vis", action="store_true", default=False)
    args = parser.parse_args()

    ########################## init ##########################
    gs.init(seed=0, precision="32", logging_level="debug")

    ########################## create a scene ##########################

    scene = gs.Scene(
        sim_options=gs.options.SimOptions(
            dt=4e-3,
            substeps=10,
        ),
        coupler_options=gs.options.CouplerOptions(
            rigid_fem=True,
        ),
        rigid_options=gs.options.RigidOptions(
            dt=0.01,
            gravity=(0,0,-9.8),
            enable_collision=True,
            constraint_solver=gs.constraint_solver.Newton,
            iterations=200,
            tolerance=1e-7,
            integrator=gs.integrator.implicitfast,
            use_contact_island=True,
        ),
        fem_options=gs.options.FEMOptions(
            damping=0.1,
        ),
        viewer_options=gs.options.ViewerOptions(
            camera_pos=(9.6, 4.8, 14.0),
            camera_lookat=(0.0, 0.0, 0.0),
            camera_fov=35,
            max_FPS=30,
        ),
        show_viewer=args.vis,
        vis_options=gs.options.VisOptions(
            #visualize_mpm_boundary=True,
        ),
    )
    cam = scene.add_camera(
        res=(1280, 800),
        pos=(5.5, 6.5, 3.2),
        lookat=(0.5, 1.5, 1.5),
        fov=30,
        GUI=True,
    )

    plane = scene.add_entity(
        material=gs.materials.Rigid(),
        morph=gs.morphs.URDF(file="urdf/plane/plane.urdf", fixed=True),
    )
    E, nu = 1.e7,0.3
    rho = 100.0

    obj1 = scene.add_entity(
        material=gs.materials.Rigid(
            rho=rho,
            friction=1.0,
        ),
        morph=gs.morphs.Sphere(
            pos=(0.0, 2.0, 0.5),
            radius=0.2,
        ),
        surface=gs.surfaces.Iron(),
    )

    obj2 = scene.add_entity(
        material=gs.materials.FEM.Elastic(
            E=E,
            nu=nu,
            rho=rho,
            model="linear",
        ),
        morph=gs.morphs.Box(
            pos=(0.0, 0.0, 0.5),
            size=(0.5,0.5,0.5),
        ),
        surface=gs.surfaces.Metal(
            color=(0.6, 1.0, 0.8, 1.0),
            vis_mode="visual",
        ),
    )

    scene.build()
    cam.start_recording()

    horizon = 1000
    for i in range(horizon):
            if i < 400:
                obj1.set_dofs_velocity([0.0, -2.0, 0.0,0.0,0.0,0.0])

            scene.step()
            cam.render()
    cam.stop_recording(save_to_filename="fem_rigid_entity.mp4", fps=60)

if __name__ == "__main__":
    main()

Expected Behavior

I expect collision in between entities

Screenshots/Videos

https://github.com/user-attachments/assets/a8a60b66-b6ab-4209-8b72-1716ebb2e83e

Relevant log output


Environment

  • OS: [e.g. Ubuntu 24.04 24H2]
  • GPU/CPU [e.g. QUADRO RTX 4000, M3pr, Intel I9-9900k] (N/A if no GPU/CPU)
  • GPU-driver version (N/A if no GPU)
  • CUDA / CUDA-toolkit version

Release version or Commit ID

version 0.2.1

Additional Context

No response

bahadir14 avatar Apr 25 '25 07:04 bahadir14