Genesis
Genesis copied to clipboard
[Bug]: 'FEMEntity' object has no attribute 'get_vel'与'MPMEntity' object has no attribute 'get_vel'
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