Genesis icon indicating copy to clipboard operation
Genesis copied to clipboard

[Bug]: 'FEMEntity' object has no attribute 'get_vel'与'MPMEntity' object has no attribute 'get_vel'

Open lishilei-cmd opened this issue 7 months ago • 0 comments
trafficstars

Bug Description

我在FEM中,仿照elastic的设置方法,创建了混凝土的材料,将混凝土看作线弹性进行一些研究,通过box创建立方体定义为混凝土材料,通过碰撞的方式想得到立方体的速度与位移变化数据,但遇到了一些问题。 然后我又按照MPM中的ElastoPlastic的设置方法,进行同样操作,想完成混凝土的一些研究,但均遇到了无法提取数据的问题。

Steps to Reproduce

import argparse
import genesis as gs
import os
import numpy as np
import torch  # 导入 PyTorch,用于处理 CUDA 张量

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-v", "--vis", action="store_true", default=False)
    parser.add_argument("-c", "--cpu", action="store_true", default=False)
    args = parser.parse_args()
    gs.init(backend=gs.cuda)
    
    #场景创建
    scene = gs.Scene( 
        sim_options=gs.options.SimOptions(
            dt=2e-2,
            substeps=10,
            ),
        viewer_options=gs.options.ViewerOptions(
            camera_pos=(3.5, 0.0, 2.5),  # 摄像机位置
            camera_lookat=(0.0, 0.0, 0.5),  # 摄像机焦点
            camera_fov=100,  # 摄像机视野
            max_FPS=120,
        ),
        show_viewer=True,  # 是否显示可视化窗口
        vis_options=gs.options.VisOptions(
            visualize_mpm_boundary=True,
        ),
        # mpm_options=gs.options.MPMOptions(
        #     dt=0.00001,
        #     lower_bound=(-1, -0.5, -0.2),
        #     upper_bound=(1.5, 0.5, 1.2),
        #     grid_density=256,
        #     particle_size=0.01,
        # ),
        fem_options=gs.options.FEMOptions(
            dt=0.000000001,
            # gravity=9.8
        )
    )

    plane = scene.add_entity(
        gs.morphs.Plane(),
    )

    ball = scene.add_entity(
        gs.morphs.Sphere(
            radius=0.08,
            pos=(0.0, 0.0, 1),
            # fixed=True,
        ),
        # material=gs.materials.FEM.Elastic()
        # vis_mode="collision",
    )

    concrete_1 = scene.add_entity(
        gs.morphs.Box(
            size=(1, 0.4, 0.05),  # XYZ方向尺寸
            pos=(0, 0, 0.1),   # 中心位置(左端在x=0)
            euler=(0, 0, 0),    # 初始旋转角度
            fixed=False,
        ),
        material=gs.materials.FEM.Concrete(),
        # vis_mode="collision",
    )

    scene.build()  # 构建场景
    if not os.path.exists("shujutiqu"):
        os.makedirs("shujutiqu")
    with open("shujutiqu/ball_velocity_data.txt", "w") as f:
        f.write("Time, Velocity\n")
        for i in range(1000):
            scene.step()  # 执行一步仿真

            ball_vel = concrete_1.get_vel()  # 获取球体的速度向量 (vx, vy, vz)
            
            if torch.is_tensor(ball_vel):  # 检查是否是 PyTorch 张量
                ball_vel = ball_vel.cpu().numpy()  # 复制到 CPU 并转换为 numpy 数组

            velocity_magnitude = np.linalg.norm(ball_vel)  # 使用 numpy 计算速度大小

            f.write(f"{i * scene.mpm_options.dt}, {velocity_magnitude}\n")  # 时间 = 步数 * 时间步长

if __name__ == "__main__":
    main()

Expected Behavior

我想得到立方体的速度与位移变化数据,我是做桥梁方面研究的,希望通过genesis来模拟桥梁,想得到桥梁中的一些特征点的数据与位移变化数据,完成我的研究。我的思路是,通过FEM定义混凝土为线弹性材料,然后创建一个桥梁的.obj文件,赋予它混凝土材料,提取其中特征点的数据。

Screenshots/Videos

No response

Relevant log output

AttributeError: 'FEMEntity' object has no attribute 'get_vel'. Did you mean: 'set_vel'?

Environment

  • OS: [ Windows 11 24H2]
  • GPU/CPU [RTX 4090, Intel I9-14900kf,

Release version or Commit ID

version: 0.2.1

Additional Context

No response

lishilei-cmd avatar Apr 08 '25 07:04 lishilei-cmd