warp.sim#
Warp 包含一个模拟模块 warp.sim
,它包含许多常见的物理模拟模型和积分器,用于显式和隐式时间步进。
模型#
- class warp.sim.ModelBuilder(up_vector=(0.0, 1.0, 0.0), gravity=-9.80665)[source]#
一个用于在运行时构建模拟模型的辅助类。
使用 ModelBuilder 来构建模拟场景。ModelBuilder 使用标准的 Python 数据结构(列表)构建场景表示,这意味着它是不可微的。一旦
finalize()
被调用,ModelBuilder 将所有数据传输到 Warp 张量并返回一个可用于模拟的对象。示例
import warp as wp import warp.sim builder = wp.sim.ModelBuilder() # anchor point (zero mass) builder.add_particle((0, 1.0, 0.0), (0.0, 0.0, 0.0), 0.0) # build chain for i in range(1, 10): builder.add_particle((i, 1.0, 0.0), (0.0, 0.0, 0.0), 1.0) builder.add_spring(i - 1, i, 1.0e3, 0.0, 0) # create model model = builder.finalize("cuda") state = model.state() control = model.control() # optional, to support time-varying control inputs integrator = wp.sim.SemiImplicitIntegrator() for i in range(100): state.clear_forces() integrator.simulate(model, state, state, dt=1.0 / 60.0, control=control)
注意
强烈建议使用 ModelBuilder 来构建模拟,而不是直接创建自己的 Model 对象,但如果需要,也可以这样做。
- default_particle_radius = 0.1#
- default_tri_ke = 100.0#
- default_tri_ka = 100.0#
- default_tri_kd = 10.0#
- default_tri_drag = 0.0#
- default_tri_lift = 0.0#
- default_spring_ke = 100.0#
- default_spring_kd = 0.0#
- default_edge_ke = 100.0#
- default_edge_kd = 0.0#
- default_shape_ke = 100000.0#
- default_shape_kd = 1000.0#
- default_shape_kf = 1000.0#
- default_shape_ka = 0.0#
- default_shape_mu = 0.5#
- default_shape_restitution = 0.0#
- default_shape_density = 1000.0#
- default_shape_thickness = 1e-05#
- default_joint_limit_ke = 100.0#
- default_joint_limit_kd = 1.0#
- add_builder(
- builder,
- xform=None,
- update_num_env_count=True,
- separate_collision_group=True,
复制数据从builder,另一个ModelBuilder到此ModelBuilder。
- 参数:
builder (ModelBuilder) – 从中添加模型数据的模型构建器。
xform (transform) – 应用于根物体的偏移变换。
update_num_env_count (bool) – 如果为 True,则环境数量递增 1。
separate_collision_group (bool) – 如果为 True,则来自builder中铰链的所有形状都将放入一个全新的碰撞组中;否则,只有碰撞组 > -1 中的形状会被移动到新的组。
- add_body(
- origin=None,
- armature=0.0,
- com=None,
- I_m=None,
- m=0.0,
- name=None,
向模型添加刚体。
- 参数:
- 返回值:
模型中物体的索引
- 返回类型:
注意
如果质量 (m) 为零,则该物体被视为运动学物体,没有动力学效果
- add_joint(
- joint_type,
- parent,
- child,
- linear_axes=None,
- angular_axes=None,
- name=None,
- parent_xform=None,
- child_xform=None,
- linear_compliance=0.0,
- angular_compliance=0.0,
- armature=1e-2,
- collision_filter_parent=True,
- enabled=True,
向 ModelBuilder 添加任何类型关节的通用方法。
- 参数:
joint_type (constant) – 要添加的关节的类型(参见关节类型)
parent (int) – 父物体的索引(-1 表示世界坐标系)
child (int) – 子物体的索引
name (str) – 关节的名称(可选)
parent_xform (transform) – 关节在父物体局部坐标系中的变换
child_xform (transform) – 关节在子物体局部坐标系中的变换
linear_compliance (float) – 关节的线性柔度
angular_compliance (float) – 关节的角柔度
armature (float) – 围绕关节轴添加的人工惯性(仅由
FeatherstoneIntegrator
考虑)collision_filter_parent (bool) – 是否过滤父物体和子物体的形状之间的碰撞
enabled (bool) – 关节是否启用(不被
FeatherstoneIntegrator
考虑)
- 返回值:
添加的关节的索引
- 返回类型:
- add_joint_revolute(
- parent,
- child,
- parent_xform=None,
- child_xform=None,
- axis=(1.0, 0.0, 0.0),
- target=None,
- target_ke=0.0,
- target_kd=0.0,
- mode=JOINT_MODE_FORCE,
- limit_lower=-2 * math.pi,
- limit_upper=2 * math.pi,
- limit_ke=None,
- limit_kd=None,
- linear_compliance=0.0,
- angular_compliance=0.0,
- armature=1e-2,
- name=None,
- collision_filter_parent=True,
- enabled=True,
向模型添加旋转(铰链)关节。 它有一个自由度。
- 参数:
parent (int) – 父物体的索引
child (int) – 子物体的索引
parent_xform (transform) – 关节在父物体局部坐标系中的变换
child_xform (transform) – 关节在子物体局部坐标系中的变换
axis (3D vector or JointAxis) – 父物体局部坐标系中的旋转轴,可以是一个 JointAxis 对象,其设置将被使用,而不是其他参数
target (float) – 关节的目标角度(以弧度为单位)或目标速度(如果为 None,则认为关节处于力控制模式)
target_ke (float) – 关节目标的刚度
target_kd (float) – 关节目标的阻尼
limit_lower (float) – 关节的下限
limit_upper (float) – 关节的上限
limit_ke (float) – 关节限制的刚度(如果为 None,则使用默认值
default_joint_limit_ke
)limit_kd (float) – 关节限制的阻尼(如果为 None,则使用默认值
default_joint_limit_kd
)linear_compliance (float) – 关节的线性柔度
angular_compliance (float) – 关节的角柔度
armature (float) – 围绕关节轴添加的人工惯性
name (str) – 关节的名称
collision_filter_parent (bool) – 是否过滤父物体和子物体的形状之间的碰撞
enabled (bool) – 是否启用关节
mode (int)
- 返回值:
添加的关节的索引
- 返回类型:
- add_joint_prismatic(
- parent,
- child,
- parent_xform=None,
- child_xform=None,
- axis=(1.0, 0.0, 0.0),
- target=None,
- target_ke=0.0,
- target_kd=0.0,
- mode=JOINT_MODE_FORCE,
- limit_lower=-1e4,
- limit_upper=1e4,
- limit_ke=None,
- limit_kd=None,
- linear_compliance=0.0,
- angular_compliance=0.0,
- armature=1e-2,
- name=None,
- collision_filter_parent=True,
- enabled=True,
向模型添加一个棱柱(滑动)关节。它具有一个自由度。
- 参数:
parent (int) – 父物体的索引
child (int) – 子物体的索引
parent_xform (transform) – 关节在父物体局部坐标系中的变换
child_xform (transform) – 关节在子物体局部坐标系中的变换
axis (3D vector or JointAxis) – 父物体局部坐标系中的旋转轴,可以是一个 JointAxis 对象,其设置将被使用,而不是其他参数
target (float) – 关节的目标位置或速度(如果为 None,则认为关节处于力控制模式)
target_ke (float) – 关节目标的刚度
target_kd (float) – 关节目标的阻尼
limit_lower (float) – 关节的下限
limit_upper (float) – 关节的上限
limit_ke (float) – 关节限制的刚度(如果为 None,则使用默认值
default_joint_limit_ke
)limit_kd (float) – 关节限制的阻尼(如果为 None,则使用默认值
default_joint_limit_ke
)linear_compliance (float) – 关节的线性柔度
angular_compliance (float) – 关节的角柔度
armature (float) – 围绕关节轴添加的人工惯性
name (str) – 关节的名称
collision_filter_parent (bool) – 是否过滤父物体和子物体的形状之间的碰撞
enabled (bool) – 是否启用关节
mode (int)
- 返回值:
添加的关节的索引
- 返回类型:
- add_joint_ball(
- parent,
- child,
- parent_xform=None,
- child_xform=None,
- linear_compliance=0.0,
- angular_compliance=0.0,
- armature=1e-2,
- name=None,
- collision_filter_parent=True,
- enabled=True,
向模型添加一个球形关节。它的位置由一个 4D 四元数 (xyzw) 定义,其速度是一个 3D 向量。
- 参数:
parent (int) – 父物体的索引
child (int) – 子物体的索引
parent_xform (transform) – 关节在父物体局部坐标系中的变换
child_xform (transform) – 关节在子物体局部坐标系中的变换
linear_compliance (float) – 关节的线性柔度
angular_compliance (float) – 关节的角柔度
armature (float) – 围绕关节轴添加的人工惯性(仅由 FeatherstoneIntegrator 考虑)
name (str) – 关节的名称
collision_filter_parent (bool) – 是否过滤父物体和子物体的形状之间的碰撞
enabled (bool) – 是否启用关节
- 返回值:
添加的关节的索引
- 返回类型:
- add_joint_fixed(
- parent,
- child,
- parent_xform=None,
- child_xform=None,
- linear_compliance=0.0,
- angular_compliance=0.0,
- armature=1e-2,
- name=None,
- collision_filter_parent=True,
- enabled=True,
向模型添加一个固定(静态)关节。它没有自由度。 有关删除这些固定关节并合并连接物体的帮助函数,请参见
collapse_fixed_joints()
,以简化模型并提高稳定性。- 参数:
parent (int) – 父物体的索引
child (int) – 子物体的索引
parent_xform (transform) – 关节在父物体局部坐标系中的变换
child_xform (transform) – 关节在子物体局部坐标系中的变换
linear_compliance (float) – 关节的线性柔度
angular_compliance (float) – 关节的角柔度
armature (float) – 围绕关节轴添加的人工惯性(仅由 FeatherstoneIntegrator 考虑)
name (str) – 关节的名称
collision_filter_parent (bool) – 是否过滤父物体和子物体的形状之间的碰撞
enabled (bool) – 是否启用关节
- 返回值:
添加的关节的索引
- 返回类型:
- add_joint_free(
- child,
- parent_xform=None,
- child_xform=None,
- armature=0.0,
- parent=-1,
- name=None,
- collision_filter_parent=True,
- enabled=True,
向模型添加一个自由关节。它具有 7 个位置自由度(前 3 个是线性,然后 4 个是角维度,表示 xyzw 符号的方向四元数)和 6 个速度自由度(前 3 个是角速度,然后 3 个是线速度维度)。
- 参数:
child (int) – 子物体的索引
parent_xform (transform) – 关节在父物体局部坐标系中的变换
child_xform (transform) – 关节在子物体局部坐标系中的变换
armature (float) – 围绕关节轴添加的人工惯性(仅由 FeatherstoneIntegrator 考虑)
parent (int) – 父物体的索引(默认为 -1,使用世界坐标系,例如,使子物体及其子物体成为浮动基座机构)
name (str) – 关节的名称
collision_filter_parent (bool) – 是否过滤父物体和子物体的形状之间的碰撞
enabled (bool) – 是否启用关节
- 返回值:
添加的关节的索引
- 返回类型:
- add_joint_distance(
- parent,
- child,
- parent_xform=None,
- child_xform=None,
- min_distance=-1.0,
- max_distance=1.0,
- compliance=0.0,
- collision_filter_parent=True,
- enabled=True,
向模型添加一个距离关节。距离关节约束了两个物体上关节锚点之间的距离(请参见 正向/逆向运动学)它连接到区间 [min_distance, max_distance]。它具有 7 个位置自由度(前 3 个是线性,然后 4 个是角维度,表示 xyzw 符号的方向四元数)和 6 个速度自由度(前 3 个是角速度,然后 3 个是线速度维度)。
- 参数:
parent (int) – 父物体的索引
child (int) – 子物体的索引
parent_xform (transform) – 关节在父物体局部坐标系中的变换
child_xform (transform) – 关节在子物体局部坐标系中的变换
min_distance (float) – 物体之间的最小距离(如果为负,则没有限制)
max_distance (float) – 物体之间的最大距离(如果为负,则没有限制)
compliance (float) – 关节的柔度
collision_filter_parent (bool) – 是否过滤父物体和子物体的形状之间的碰撞
enabled (bool) – 是否启用关节
- 返回值:
添加的关节的索引
- 返回类型:
注意
目前,距离关节仅在
XPBDIntegrator
中受支持。
- add_joint_universal(
- parent,
- child,
- axis_0,
- axis_1,
- parent_xform=None,
- child_xform=None,
- linear_compliance=0.0,
- angular_compliance=0.0,
- armature=1e-2,
- name=None,
- collision_filter_parent=True,
- enabled=True,
向模型添加一个万向节。万向节有两个自由度,每个轴一个。
- 参数:
parent (int) – 父物体的索引
child (int) – 子物体的索引
axis_0 (3D 向量 或 JointAxis) – 关节的第一个轴,可以是 JointAxis 对象,其设置将代替其他参数使用
axis_1 (3D 向量 或 JointAxis) – 关节的第二个轴,可以是 JointAxis 对象,其设置将代替其他参数使用
parent_xform (transform) – 关节在父物体局部坐标系中的变换
child_xform (transform) – 关节在子物体局部坐标系中的变换
linear_compliance (float) – 关节的线性柔度
angular_compliance (float) – 关节的角柔度
armature (float) – 围绕关节轴添加的人工惯性
name (str) – 关节的名称
collision_filter_parent (bool) – 是否过滤父物体和子物体的形状之间的碰撞
enabled (bool) – 是否启用关节
- 返回值:
添加的关节的索引
- 返回类型:
- add_joint_compound(
- parent,
- child,
- axis_0,
- axis_1,
- axis_2,
- parent_xform=None,
- child_xform=None,
- linear_compliance=0.0,
- angular_compliance=0.0,
- armature=1e-2,
- name=None,
- collision_filter_parent=True,
- enabled=True,
向模型添加一个复合关节,该关节具有 3 个自由度,每个轴一个。 与球形关节(请参见
add_ball_joint()
)类似,复合关节允许物体相对于彼此进行 3D 旋转,不同之处在于旋转由 3 个轴而不是四元数定义。 根据轴的选择,可以通过欧拉角(例如 z-x-z 或 x-y-x)或通过 Tait-Bryan 角序列(例如 z-y-x 或 x-y-z)指定方向。- 参数:
parent (int) – 父物体的索引
child (int) – 子物体的索引
axis_0 (3D 向量 或 JointAxis) – 关节的第一个轴,可以是 JointAxis 对象,其设置将代替其他参数使用
axis_1 (3D 向量 或 JointAxis) – 关节的第二个轴,可以是 JointAxis 对象,其设置将代替其他参数使用
axis_2 (3D 向量 或 JointAxis) – 关节的第三个轴,可以是 JointAxis 对象,其设置将代替其他参数使用
parent_xform (transform) – 关节在父物体局部坐标系中的变换
child_xform (transform) – 关节在子物体局部坐标系中的变换
linear_compliance (float) – 关节的线性柔度
angular_compliance (float) – 关节的角柔度
armature (float) – 围绕关节轴添加的人工惯性
name (str) – 关节的名称
collision_filter_parent (bool) – 是否过滤父物体和子物体的形状之间的碰撞
enabled (bool) – 是否启用关节
- 返回值:
添加的关节的索引
- 返回类型:
- add_joint_d6(
- parent,
- child,
- linear_axes=None,
- angular_axes=None,
- name=None,
- parent_xform=None,
- child_xform=None,
- linear_compliance=0.0,
- angular_compliance=0.0,
- armature=1e-2,
- collision_filter_parent=True,
- enabled=True,
添加具有自定义线性和角度轴的通用关节。轴的数量决定了关节的自由度数。
- 参数:
parent (int) – 父物体的索引
child (int) – 子物体的索引
name (str) – 关节的名称
parent_xform (transform) – 关节在父物体局部坐标系中的变换
child_xform (transform) – 关节在子物体局部坐标系中的变换
linear_compliance (float) – 关节的线性柔度
angular_compliance (float) – 关节的角柔度
armature (float) – 围绕关节轴添加的人工惯性
collision_filter_parent (bool) – 是否过滤父物体和子物体的形状之间的碰撞
enabled (bool) – 是否启用关节
- 返回值:
添加的关节的索引
- plot_articulation(
- show_body_names=True,
- show_joint_names=True,
- show_joint_types=True,
- plot_shapes=True,
- show_shape_types=True,
- show_legend=True,
使用 matplotlib 和 networkx 可视化模型的铰接图。使用 networkx 中的 spring 布局算法来排列节点。 物体显示为橙色正方形,形状显示为蓝色圆圈。
- collapse_fixed_joints(verbose=wp.config.verbose)[source]#
从模型中移除固定关节,并合并它们连接的物体。这对于简化模型以实现更快更稳定的仿真非常有用。
- add_muscle(bodies, positions, f0, lm, lt, lmax, pen)[source]#
添加肌肉-肌腱激活单元。
- 参数:
- 返回值:
模型中肌肉的索引
- 返回类型:
注意
对肌肉的仿真支持正在进行中,尚未完全实现。
- add_shape_plane(
- plane=(0.0, 1.0, 0.0, 0.0),
- pos=None,
- rot=None,
- width=10.0,
- length=10.0,
- body=-1,
- ke=None,
- kd=None,
- kf=None,
- ka=None,
- mu=None,
- restitution=None,
- thickness=None,
- has_ground_collision=False,
- has_shape_collision=True,
- is_visible=True,
- collision_group=-1,
添加平面碰撞形状。如果定义了 pos 和 rot,则假定平面的法线为 (0, 1, 0)。否则,使用通过 plane 参数定义的平面方程。
- 参数:
width (float) – 平面沿 x 的延伸范围(如果为 0,则无限)
length (float) – 平面沿 z 的延伸范围(如果为 0,则无限)
body (int) – 将形状附加到的物体索引(默认值为 -1,以保持平面静态)
ke (float) – 接触弹性刚度(如果为 None,则使用默认值
default_shape_ke
)kd (float) – 接触阻尼刚度(如果为 None,则使用默认值
default_shape_kd
)kf (float) – 接触摩擦刚度(如果为 None,则使用默认值
default_shape_kf
)ka (float) – 接触附着距离(如果为 None,则使用默认值
default_shape_ka
)mu (float) – 摩擦系数(如果为 None,则使用默认值
default_shape_mu
)restitution (float) – 恢复系数(如果为 None,则使用默认值
default_shape_restitution
)thickness (float) – 平面的厚度(默认为 0),用于碰撞处理(如果为 None,则使用默认值
default_shape_thickness
)has_ground_collision (bool) – 如果为 True,则如果 Model.ground 为 True,该形状将与地面碰撞
has_shape_collision (bool) – 如果为 True,则该形状将与其他形状碰撞
is_visible (bool) – 平面是否可见
collision_group (int) – 形状的碰撞组
- 返回值:
添加的形状的索引
- add_shape_sphere(
- body,
- pos=(0.0, 0.0, 0.0),
- rot=(0.0, 0.0, 0.0, 1.0),
- radius=1.0,
- density=None,
- ke=None,
- kd=None,
- kf=None,
- ka=None,
- mu=None,
- restitution=None,
- is_solid=True,
- thickness=None,
- has_ground_collision=True,
- has_shape_collision=True,
- collision_group=-1,
- is_visible=True,
将球体碰撞形状添加到物体。
- 参数:
body – 此形状所属的父物体的索引(静态形状使用 -1)
pos (List[float]) – 形状相对于父坐标系的位置
rot (List[float]) – 形状相对于父坐标系的旋转
radius (float) – 球体的半径
density (float) – 形状的密度(如果为 None,则使用默认值
default_shape_density
)ke (float) – 接触弹性刚度(如果为 None,则使用默认值
default_shape_ke
)kd (float) – 接触阻尼刚度(如果为 None,则使用默认值
default_shape_kd
)kf (float) – 接触摩擦刚度(如果为 None,则使用默认值
default_shape_kf
)ka (float) – 接触附着距离(如果为 None,则使用默认值
default_shape_ka
)mu (float) – 摩擦系数(如果为 None,则使用默认值
default_shape_mu
)restitution (float) – 恢复系数(如果为 None,则使用默认值
default_shape_restitution
)is_solid (bool) – 球体是实心的还是空心的
thickness (float) – 用于计算空心球体的惯性以及处理碰撞的厚度(如果为 None,则使用默认值
default_shape_thickness
)has_ground_collision (bool) – 如果为 True,则如果 Model.ground 为 True,该形状将与地面碰撞
has_shape_collision (bool) – 如果为 True,则该形状将与其他形状碰撞
collision_group (int) – 形状的碰撞组
is_visible (bool) – 球体是否可见
- 返回值:
添加的形状的索引
- add_shape_box(
- body,
- pos=(0.0, 0.0, 0.0),
- rot=(0.0, 0.0, 0.0, 1.0),
- hx=0.5,
- hy=0.5,
- hz=0.5,
- density=None,
- ke=None,
- kd=None,
- kf=None,
- ka=None,
- mu=None,
- restitution=None,
- is_solid=True,
- thickness=None,
- has_ground_collision=True,
- has_shape_collision=True,
- collision_group=-1,
- is_visible=True,
向刚体添加一个长方体碰撞形状。
- 参数:
body (int) – 此形状所属的父刚体的索引(静态形状使用 -1)
pos (List[float]) – 形状相对于父坐标系的位置
rot (List[float]) – 形状相对于父坐标系的旋转
hx (float) – 沿 x 轴的半范围
hy (float) – 沿 y 轴的半范围
hz (float) – 沿 z 轴的半范围
density (float) – 形状的密度(如果为 None,则使用默认值
default_shape_density
)ke (float) – 接触弹性刚度(如果为 None,则使用默认值
default_shape_ke
)kd (float) – 接触阻尼刚度(如果为 None,则使用默认值
default_shape_kd
)kf (float) – 接触摩擦刚度(如果为 None,则使用默认值
default_shape_kf
)ka (float) – 接触附着距离(如果为 None,则使用默认值
default_shape_ka
)mu (float) – 摩擦系数(如果为 None,则使用默认值
default_shape_mu
)restitution (float) – 恢复系数(如果为 None,则使用默认值
default_shape_restitution
)is_solid (bool) – 长方体是实心的还是空心的
thickness (float) – 用于计算空心长方体的惯性以及处理碰撞的厚度(如果为 None,则使用默认值
default_shape_thickness
)has_ground_collision (bool) – 如果为 True,则如果 Model.ground 为 True,该形状将与地面碰撞
has_shape_collision (bool) – 如果为 True,则该形状将与其他形状碰撞
collision_group (int) – 形状的碰撞组
is_visible (bool) – 长方体是否可见
- 返回值:
添加的形状的索引
- add_shape_capsule(
- body,
- pos=(0.0, 0.0, 0.0),
- rot=(0.0, 0.0, 0.0, 1.0),
- radius=1.0,
- half_height=0.5,
- up_axis=1,
- density=None,
- ke=None,
- kd=None,
- kf=None,
- ka=None,
- mu=None,
- restitution=None,
- is_solid=True,
- thickness=None,
- has_ground_collision=True,
- has_shape_collision=True,
- collision_group=-1,
- is_visible=True,
向刚体添加一个胶囊体碰撞形状。
- 参数:
body (int) – 此形状所属的父刚体的索引(静态形状使用 -1)
pos (List[float]) – 形状相对于父坐标系的位置
rot (List[float]) – 形状相对于父坐标系的旋转
radius (float) – 胶囊体的半径
half_height (float) – 中心圆柱体沿向上轴的半长
up_axis (int) – 胶囊体对齐的轴 (0=x, 1=y, 2=z)
density (float) – 形状的密度(如果为 None,则使用默认值
default_shape_density
)ke (float) – 接触弹性刚度(如果为 None,则使用默认值
default_shape_ke
)kd (float) – 接触阻尼刚度(如果为 None,则使用默认值
default_shape_kd
)kf (float) – 接触摩擦刚度(如果为 None,则使用默认值
default_shape_kf
)ka (float) – 接触附着距离(如果为 None,则使用默认值
default_shape_ka
)mu (float) – 摩擦系数(如果为 None,则使用默认值
default_shape_mu
)restitution (float) – 恢复系数(如果为 None,则使用默认值
default_shape_restitution
)is_solid (bool) – 胶囊体是实心的还是空心的
thickness (float) – 用于计算空心胶囊体的惯性以及处理碰撞的厚度(如果为 None,则使用默认值
default_shape_thickness
)has_ground_collision (bool) – 如果为 True,则如果 Model.ground 为 True,该形状将与地面碰撞
has_shape_collision (bool) – 如果为 True,则该形状将与其他形状碰撞
collision_group (int) – 形状的碰撞组
is_visible (bool) – 胶囊体是否可见
- 返回值:
添加的形状的索引
- add_shape_cylinder(
- body,
- pos=(0.0, 0.0, 0.0),
- rot=(0.0, 0.0, 0.0, 1.0),
- radius=1.0,
- half_height=0.5,
- up_axis=1,
- density=None,
- ke=None,
- kd=None,
- kf=None,
- ka=None,
- mu=None,
- restitution=None,
- is_solid=True,
- thickness=None,
- has_ground_collision=True,
- has_shape_collision=True,
- collision_group=-1,
- is_visible=True,
向刚体添加一个圆柱体碰撞形状。
- 参数:
body (int) – 此形状所属的父刚体的索引(静态形状使用 -1)
pos (List[float]) – 形状相对于父坐标系的位置
rot (List[float]) – 形状相对于父坐标系的旋转
radius (float) – 圆柱体的半径
half_height (float) – 圆柱体沿向上轴的半长
up_axis (int) – 圆柱体对齐的轴 (0=x, 1=y, 2=z)
density (float) – 形状的密度(如果为 None,则使用默认值
default_shape_density
)ke (float) – 接触弹性刚度(如果为 None,则使用默认值
default_shape_ke
)kd (float) – 接触阻尼刚度(如果为 None,则使用默认值
default_shape_kd
)kf (float) – 接触摩擦刚度(如果为 None,则使用默认值
default_shape_kf
)ka (float) – 接触附着距离(如果为 None,则使用默认值
default_shape_ka
)mu (float) – 摩擦系数(如果为 None,则使用默认值
default_shape_mu
)restitution (float) – 恢复系数(如果为 None,则使用默认值
default_shape_restitution
)is_solid (bool) – 圆柱体是实心的还是空心的
thickness (float) – 用于计算空心圆柱体的惯性以及处理碰撞的厚度(如果为 None,则使用默认值
default_shape_thickness
)has_ground_collision (bool) – 如果为 True,则如果 Model.ground 为 True,该形状将与地面碰撞
has_shape_collision (bool) – 如果为 True,则该形状将与其他形状碰撞
collision_group (int) – 形状的碰撞组
is_visible (bool) – 圆柱体是否可见
注意
目前刚体碰撞处理不支持圆柱体。
- 返回值:
添加的形状的索引
- 参数:
body (int)
pos (List[float])
rot (List[float])
radius (float)
half_height (float)
up_axis (int)
density (float)
ke (float)
kd (float)
kf (float)
ka (float)
mu (float)
restitution (float)
is_solid (bool)
thickness (float)
has_ground_collision (bool)
has_shape_collision (bool)
collision_group (int)
is_visible (bool)
- add_shape_cone(
- body,
- pos=(0.0, 0.0, 0.0),
- rot=(0.0, 0.0, 0.0, 1.0),
- radius=1.0,
- half_height=0.5,
- up_axis=1,
- density=None,
- ke=None,
- kd=None,
- kf=None,
- ka=None,
- mu=None,
- restitution=None,
- is_solid=True,
- thickness=None,
- has_ground_collision=True,
- has_shape_collision=True,
- collision_group=-1,
- is_visible=True,
向刚体添加一个圆锥体碰撞形状。
- 参数:
body (int) – 此形状所属的父刚体的索引(静态形状使用 -1)
pos (List[float]) – 形状相对于父坐标系的位置
rot (List[float]) – 形状相对于父坐标系的旋转
radius (float) – 圆锥体的半径
half_height (float) – 圆锥体沿向上轴的半长
up_axis (int) – 圆锥体对齐的轴 (0=x, 1=y, 2=z)
density (float) – 形状的密度(如果为 None,则使用默认值
default_shape_density
)ke (float) – 接触弹性刚度(如果为 None,则使用默认值
default_shape_ke
)kd (float) – 接触阻尼刚度(如果为 None,则使用默认值
default_shape_kd
)kf (float) – 接触摩擦刚度(如果为 None,则使用默认值
default_shape_kf
)ka (float) – 接触附着距离(如果为 None,则使用默认值
default_shape_ka
)mu (float) – 摩擦系数(如果为 None,则使用默认值
default_shape_mu
)restitution (float) – 恢复系数(如果为 None,则使用默认值
default_shape_restitution
)is_solid (bool) – 圆锥体是实心的还是空心的
thickness (float) – 用于计算空心圆锥体的惯性以及处理碰撞的厚度(如果为 None,则使用默认值
default_shape_thickness
)has_ground_collision (bool) – 如果为 True,则如果 Model.ground 为 True,该形状将与地面碰撞
has_shape_collision (bool) – 如果为 True,则该形状将与其他形状碰撞
collision_group (int) – 形状的碰撞组
is_visible (bool) – 圆锥体是否可见
注意
目前刚体碰撞处理不支持圆锥体。
- 返回值:
添加的形状的索引
- 参数:
body (int)
pos (List[float])
rot (List[float])
radius (float)
half_height (float)
up_axis (int)
density (float)
ke (float)
kd (float)
kf (float)
ka (float)
mu (float)
restitution (float)
is_solid (bool)
thickness (float)
has_ground_collision (bool)
has_shape_collision (bool)
collision_group (int)
is_visible (bool)
- add_shape_mesh(
- body,
- pos=None,
- rot=None,
- mesh=None,
- scale=None,
- density=None,
- ke=None,
- kd=None,
- kf=None,
- ka=None,
- mu=None,
- restitution=None,
- is_solid=True,
- thickness=None,
- has_ground_collision=True,
- has_shape_collision=True,
- collision_group=-1,
- is_visible=True,
向实体添加三角形网格碰撞形状。
- 参数:
body (int) – 此形状所属的父刚体的索引(静态形状使用 -1)
pos (List[float] | None) – 形状相对于父坐标系的位置(如果为 None,则使用默认值
wp.vec3(0.0, 0.0, 0.0)
)rot (List[float] | None) – 形状相对于父坐标系的旋转(如果为 None,则使用默认值
wp.quat(0.0, 0.0, 0.0, 1.0)
)mesh (Mesh | None) – 网格对象
scale (List[float] | None) – 碰撞器的缩放比例。(如果为 None,则使用默认值
wp.vec3(1.0, 1.0, 1.0)
)density (float) – 形状的密度(如果为 None,则使用默认值
default_shape_density
)ke (float) – 接触弹性刚度(如果为 None,则使用默认值
default_shape_ke
)kd (float) – 接触阻尼刚度(如果为 None,则使用默认值
default_shape_kd
)kf (float) – 接触摩擦刚度(如果为 None,则使用默认值
default_shape_kf
)ka (float) – 接触附着距离(如果为 None,则使用默认值
default_shape_ka
)mu (float) – 摩擦系数(如果为 None,则使用默认值
default_shape_mu
)restitution (float) – 恢复系数(如果为 None,则使用默认值
default_shape_restitution
)is_solid (bool) – 如果为 True,则网格为实心,否则为具有给定壁厚的空心表面
thickness (float) – 用于计算空心网格惯性以及进行碰撞处理的厚度(如果为 None,则使用默认值
default_shape_thickness
)has_ground_collision (bool) – 如果为 True,则如果 Model.ground 为 True,该形状将与地面碰撞
has_shape_collision (bool) – 如果为 True,则该形状将与其他形状碰撞
collision_group (int) – 形状的碰撞组
is_visible (bool) – 网格是否可见
- 返回值:
添加的形状的索引
- add_shape_sdf(
- body,
- pos=(0.0, 0.0, 0.0),
- rot=(0.0, 0.0, 0.0, 1.0),
- sdf=None,
- scale=(1.0, 1.0, 1.0),
- density=None,
- ke=None,
- kd=None,
- kf=None,
- ka=None,
- mu=None,
- restitution=None,
- is_solid=True,
- thickness=None,
- has_ground_collision=True,
- has_shape_collision=True,
- collision_group=-1,
- is_visible=True,
向实体添加 SDF 碰撞形状。
- 参数:
body (int) – 此形状所属的父刚体的索引(静态形状使用 -1)
pos (List[float]) – 形状相对于父坐标系的位置
rot (List[float]) – 形状相对于父坐标系的旋转
sdf (SDF) – sdf 对象
density (float) – 形状的密度(如果为 None,则使用默认值
default_shape_density
)ke (float) – 接触弹性刚度(如果为 None,则使用默认值
default_shape_ke
)kd (float) – 接触阻尼刚度(如果为 None,则使用默认值
default_shape_kd
)kf (float) – 接触摩擦刚度(如果为 None,则使用默认值
default_shape_kf
)ka (float) – 接触附着距离(如果为 None,则使用默认值
default_shape_ka
)mu (float) – 摩擦系数(如果为 None,则使用默认值
default_shape_mu
)restitution (float) – 恢复系数(如果为 None,则使用默认值
default_shape_restitution
)is_solid (bool) – 如果为 True,则 SDF 为实心,否则为具有给定壁厚的空心表面
thickness (float) – 用于碰撞处理的厚度(如果为 None,则使用默认值
default_shape_thickness
)has_ground_collision (bool) – 如果为 True,则如果 Model.ground 为 True,该形状将与地面碰撞
has_shape_collision (bool) – 如果为 True,则该形状将与其他形状碰撞
collision_group (int) – 形状的碰撞组
is_visible (bool) – 形状是否可见
- 返回值:
添加的形状的索引
- add_particle(
- pos,
- vel,
- mass,
- radius=None,
- flags=PARTICLE_FLAG_ACTIVE,
向模型添加单个粒子
- 参数:
- 返回类型:
注意
将质量设置为零以创建一个不受动力学影响的“运动”粒子。
- add_triangle(
- i,
- j,
- k,
- tri_ke=None,
- tri_ka=None,
- tri_kd=None,
- tri_drag=None,
- tri_lift=None,
在系统中的三个粒子之间添加三角形有限元元素。
三角形被建模为粘弹性元素,其弹性刚度和阻尼参数在模型上指定。 请参阅 model.tri_ke, model.tri_kd。
- 参数:
- 返回值:
三角形的面积
- 返回类型:
注意
三角形的创建基于粒子在其初始配置中的距离,并具有静止长度。
- add_triangles(
- i,
- j,
- k,
- tri_ke=None,
- tri_ka=None,
- tri_kd=None,
- tri_drag=None,
- tri_lift=None,
在系统中的三组粒子之间添加三角形有限元元素。
三角形被建模为粘弹性元素,其弹性刚度和阻尼参数在模型上指定。 请参阅 model.tri_ke, model.tri_kd。
- 参数:
- 返回值:
三角形的面积
- 返回类型:
注意
三角形的创建基于粒子在其初始配置中的距离,并具有一个静止长度。
- add_tetrahedron(
- i,
- j,
- k,
- l,
- k_mu=1.0e3,
- k_lambda=1.0e3,
- k_damp=0.0,
在系统的四个粒子之间添加一个四面体有限元。
四面体被建模为粘弹性元素,其能量密度基于 [Smith et al. 2018] 中的 NeoHookean 模型。
- 参数:
- 返回值:
四面体的体积
- 返回类型:
注意
四面体的创建基于粒子的初始配置,并具有一个静止姿势
- add_edge(
- i,
- j,
- k,
- l,
- rest=None,
- edge_ke=None,
- edge_kd=None,
在系统的四个粒子之间添加一个弯曲边元素。
弯曲元素设计用于连接两个三角形。弯曲能量基于 [Bridson et al. 2002]。弯曲刚度由 model.tri_kb 参数控制。
- 参数:
注意
该边位于由 ‘k’ 和 ‘l’ 参数索引的粒子之间,对顶点由 ‘i’ 和 ‘j’ 索引。这定义了两个具有逆时针绕组的连接三角形:(i, k, l), (j, l, k)。
- add_edges(
- i,
- j,
- k,
- l,
- rest=None,
- edge_ke=None,
- edge_kd=None,
在系统的四组粒子之间添加弯曲边元素。
弯曲元素设计用于连接两个三角形。弯曲能量基于 [Bridson et al. 2002]。弯曲刚度由 model.tri_kb 参数控制。
- 参数:
注意
该边位于由 ‘k’ 和 ‘l’ 参数索引的粒子之间,对顶点由 ‘i’ 和 ‘j’ 索引。这定义了两个具有逆时针绕组的连接三角形:(i, k, l), (j, l, k)。
- add_cloth_grid(
- pos,
- rot,
- vel,
- dim_x,
- dim_y,
- cell_x,
- cell_y,
- mass,
- reverse_winding=False,
- fix_left=False,
- fix_right=False,
- fix_top=False,
- fix_bottom=False,
- tri_ke=None,
- tri_ka=None,
- tri_kd=None,
- tri_drag=None,
- tri_lift=None,
- edge_ke=None,
- edge_kd=None,
- add_springs=False,
- spring_ke=None,
- spring_kd=None,
- particle_radius=None,
辅助函数,用于创建规则的平面布料网格
创建一个具有有限元三角形和弯曲元素的规则矩形粒子网格。
- 参数:
dim_x (int) – 沿 x 轴的矩形单元格的数量
dim_y (int) – 沿 y 轴的矩形单元格的数量
cell_x (float) – 每个单元格在 x 方向上的宽度
cell_y (float) – 每个单元格在 y 方向上的宽度
mass (float) – 每个粒子的质量
reverse_winding (bool) – 翻转网格的绕组
fix_left (bool) – 将最左边的粒子边缘设置为运动学(固定在位)
fix_right (bool) – 将最右边的粒子边缘设置为运动学
fix_top (bool) – 将最顶部的粒子边缘设置为运动学
fix_bottom (bool) – 将最底部的粒子边缘设置为运动学
tri_ke (float)
tri_ka (float)
tri_kd (float)
tri_drag (float)
tri_lift (float)
edge_ke (float)
edge_kd (float)
add_springs (bool)
spring_ke (float)
spring_kd (float)
particle_radius (float)
- add_cloth_mesh(
- pos,
- rot,
- scale,
- vel,
- vertices,
- indices,
- density,
- edge_callback=None,
- face_callback=None,
- tri_ke=None,
- tri_ka=None,
- tri_kd=None,
- tri_drag=None,
- tri_lift=None,
- edge_ke=None,
- edge_kd=None,
- add_springs=False,
- spring_ke=None,
- spring_kd=None,
- particle_radius=None,
用于从规则三角形网格创建布料模型的辅助函数
为输入三角形网格中的每个面和边创建一个 FEM 三角形单元和一个弯曲单元
- 参数:
density (float) – 网格的单位面积密度
edge_callback – 创建边时的用户回调函数
face_callback – 创建面时的用户回调函数
particle_radius (float) – 控制基于粒子的碰撞的 particle_radius。
scale (float)
tri_ke (float)
tri_ka (float)
tri_kd (float)
tri_drag (float)
tri_lift (float)
edge_ke (float)
edge_kd (float)
add_springs (bool)
spring_ke (float)
spring_kd (float)
注意
网格应该是二维流形。
- add_particle_grid(
- pos,
- rot,
- vel,
- dim_x,
- dim_y,
- dim_z,
- cell_x,
- cell_y,
- cell_z,
- mass,
- jitter,
- radius_mean=None,
- radius_std=0.0,
- add_soft_grid(
- pos,
- rot,
- vel,
- dim_x,
- dim_y,
- dim_z,
- cell_x,
- cell_y,
- cell_z,
- density,
- k_mu,
- k_lambda,
- k_damp,
- fix_left=False,
- fix_right=False,
- fix_top=False,
- fix_bottom=False,
- tri_ke=None,
- tri_ka=None,
- tri_kd=None,
- tri_drag=None,
- tri_lift=None,
用于创建矩形四面体 FEM 网格的辅助函数
创建 FEM 四面体和表面三角形的规则网格。 例如,可用于创建梁和板。每个六面体单元被分解为 5 个四面体单元。
- 参数:
dim_x (int) – 沿 x 轴的矩形单元格的数量
dim_y (int) – 沿 y 轴的矩形单元格的数量
dim_z (int) – 沿 z 轴的矩形单元的数量
cell_x (float) – 每个单元格在 x 方向上的宽度
cell_y (float) – 每个单元格在 y 方向上的宽度
cell_z (float) – 每个单元在 z 方向上的宽度
density (float) – 每个粒子的密度
k_mu (float) – 第一个弹性拉梅参数
k_lambda (float) – 第二个弹性拉梅参数
k_damp (float) – 阻尼刚度
fix_left (bool) – 将最左边的粒子边缘设置为运动学(固定在位)
fix_right (bool) – 将最右边的粒子边缘设置为运动学
fix_top (bool) – 将最顶部的粒子边缘设置为运动学
fix_bottom (bool) – 将最底部的粒子边缘设置为运动学
tri_ke (float)
tri_ka (float)
tri_kd (float)
tri_drag (float)
tri_lift (float)
- add_soft_mesh(
- pos,
- rot,
- scale,
- vel,
- vertices,
- indices,
- density,
- k_mu,
- k_lambda,
- k_damp,
- tri_ke=None,
- tri_ka=None,
- tri_kd=None,
- tri_drag=None,
- tri_lift=None,
用于从输入四面体网格创建四面体模型的辅助函数
- set_ground_plane(
- normal=None,
- offset=0.0,
- ke=None,
- kd=None,
- kf=None,
- mu=None,
- restitution=None,
为世界创建一个地面。如果未指定法线,则使用 ModelBuilder 的 up_vector。
- 参数:
ke (float)
kd (float)
kf (float)
mu (float)
restitution (float)
- set_coloring(particle_coloring)[source]#
使用用户提供的着色信息设置着色。
- 参数:
particle_coloring – 一个列表或 np.array,其中 dtype`=`int。列表的长度是颜色的数量,每个列表或 np.array 包含具有此颜色的顶点的索引。
- color(
- include_bending=False,
- balance_colors=True,
- target_max_min_color_ratio=1.1,
- coloring_algorithm=ColoringAlgorithm.MCS,
运行着色算法以生成着色信息。
- 参数:
include_bending_energy – 是否在着色过程中考虑三维网格的弯曲能量。如果设置为 True,则生成的图将包含连接 o1 和 o2 的所有边;否则,该图将等效于三维网格。
balance_colors – 是否应用颜色平衡算法来平衡每种颜色的大小
target_max_min_color_ratio – 当最大颜色和最小颜色之间的比率达到此值时,颜色平衡算法将停止
algorithm – 该值应该是 ColoringAlgorithm 的枚举类型,否则会引发错误。ColoringAlgorithm.mcs 表示使用 MCS 着色算法,而 ColoringAlgorithm.ordered_greedy 表示使用度排序的贪婪算法。与有序贪婪算法相比,MCS 算法通常生成的颜色减少 30% 到 50%,同时保持相同的线性复杂性。虽然 MCS 具有恒定的开销,使其比贪婪算法慢大约两倍,但它产生了明显更好的着色结果。我们建议使用 MCS,尤其是在着色只是预处理的一部分时。
注意
对着色算法的引用
MCS:Pereira, F. M. Q., & Palsberg, J. (2005, November). Register allocation via coloring of chordal graphs. In Asian Symposium on Programming Languages and Systems (pp. 315-329). Berlin, Heidelberg: Springer Berlin Heidelberg.
Ordered Greedy:Ton-That, Q. M., Kry, P. G., & Andrews, S. (2023). Parallel block Neo-Hookean XPBD using graph clustering. Computers & Graphics, 110, 1-10.
- class warp.sim.Model(device=None)[source]#
保存仿真模型的定义
此类保存系统非时变描述,即:用于描述仿真的所有几何形状、约束和参数。
- requires_grad#
指示模型是否已完成(参见
ModelBuilder.finalize()
),并启用了梯度计算- 类型:
- particle_ke#
粒子法向接触刚度(由
SemiImplicitIntegrator
使用),形状 [particle_count], float- 类型:
- particle_kd#
粒子法向接触阻尼(由
SemiImplicitIntegrator
使用),形状 [particle_count], float- 类型:
- particle_kf#
粒子摩擦力刚度(由
SemiImplicitIntegrator
使用),形状 [particle_count], float- 类型:
- shape_materials#
刚性形状接触材料,形状 [shape_count], float
- shape_shape_geo#
形状几何属性(几何类型、比例、厚度等),形状 [shape_count, 3], float
- joint_armature#
每个关节轴的骨架(仅由
FeatherstoneIntegrator
使用),形状 [joint_dof_count],浮点型- 类型:
- joint_enabled#
控制模拟哪个关节(如果为 False,物体将断开连接),形状 [joint_count],整型
注意
此设置不受
FeatherstoneIntegrator
支持。- 类型:
- joint_q_start#
每个关节的第一个位置坐标的起始索引(请注意,最后一个值是一个额外的哨兵条目,允许通过
joint_q_start[i+1] - joint_q_start[i]
查询关节 i 的 q 维数),形状 [joint_count + 1],整型- 类型:
- joint_qd_start#
每个关节的第一个速度坐标的起始索引(请注意,最后一个值是一个额外的哨兵条目,允许通过
joint_qd_start[i+1] - joint_qd_start[i]
查询关节 i 的 qd 维数),形状 [joint_count + 1],整型- 类型:
- joint_attach_ke#
关节连接力刚度(由
SemiImplicitIntegrator
使用)- 类型:
- joint_attach_kd#
关节连接力阻尼(由
SemiImplicitIntegrator
使用)- 类型:
- soft_contact_restitution#
软接触的恢复系数(由
XPBDIntegrator
使用)- 类型:
- rigid_contact_torsional_friction#
刚体接触的扭转摩擦系数(由
XPBDIntegrator
使用)- 类型:
- rigid_contact_rolling_friction#
刚体接触的滚动摩擦系数(由
XPBDIntegrator
使用)- 类型:
- up_vector#
世界的向上向量,形状 [3],float
- 类型:
np.ndarray
- gravity#
重力向量,形状 [3],float
- 类型:
np.ndarray
- device#
Model 被分配到的设备
- 类型:
wp.Device
注意
强烈建议使用 ModelBuilder 来构建模拟,而不是直接创建自己的 Model 对象,但如果需要,也可以这样做。
- state(requires_grad=None)[source]#
返回模型的状态对象
返回的状态将使用模型描述中给出的初始配置进行初始化。
- 参数:
requires_grad (bool) – 手动覆盖状态变量是否应启用requires_grad(默认为None以使用模型的设置
requires_grad
)- 返回值:
状态对象
- 返回类型:
- control(requires_grad=None, clone_variables=True)[source]#
返回模型的控制对象。
返回的控制对象将使用模型描述中给出的控制输入进行初始化。
- 参数:
requires_grad (bool) – 手动覆盖控制变量是否应启用requires_grad(默认为None以使用模型的设置
requires_grad
)clone_variables (bool) – 是否克隆控制输入或使用原始数据
- 返回值:
控制对象
- 返回类型:
- count_contact_points()[源代码]#
计算需要分配的最大刚体接触点数量。此函数返回两个值,分别对应于不包括来自 Model.rigid_mesh_contact_max 的限制的潜在最大接触点数量,以及考虑 Model.rigid_mesh_contact_max 限制时可能生成的最大接触点数量。
- 返回值:
potential_count (int):潜在的接触点数量
actual_count (int):实际的接触点数量
- class warp.sim.ModelShapeMaterials#
-
- default_constructor = <Function ModelShapeMaterials_bcc267f8()>#
- hash = b'\xbc\xc2g\xf8l\x04\xd9\x0e\xa6\xcb\x1e\xf3\xd6\x98\xd4\x9dr\xb5\xd5\xc3WX\x14XRRW\x93\xc7]\x0c\xed'#
- key = 'ModelShapeMaterials'#
- module = <warp.context.Module object>#
- native_name = 'ModelShapeMaterials_bcc267f8'#
- value_constructor = <Function ModelShapeMaterials_bcc267f8(ke: array(ndim=1, dtype=float32), kd: array(ndim=1, dtype=float32), kf: array(ndim=1, dtype=float32), ka: array(ndim=1, dtype=float32), mu: array(ndim=1, dtype=float32), restitution: array(ndim=1, dtype=float32))>#
- vars = {'ka': <warp.codegen.Var object>, 'kd': <warp.codegen.Var object>, 'ke': <warp.codegen.Var object>, 'kf': <warp.codegen.Var object>, 'mu': <warp.codegen.Var object>, 'restitution': <warp.codegen.Var object>}#
- class warp.sim.ModelShapeGeometry#
-
- default_constructor = <Function ModelShapeGeometry_a9b47f7f()>#
- hash = b'\xa9\xb4\x7f\x7f\xfb8\x10.\xb28\xd7\x0b-\x01\xd9<\x98\xe0\x81\x08\xef\x13\xc0\xa0=%B\xf5\xff\xbb\xf4a'#
- key = 'ModelShapeGeometry'#
- module = <warp.context.Module object>#
- native_name = 'ModelShapeGeometry_a9b47f7f'#
- value_constructor = <Function ModelShapeGeometry_a9b47f7f(type: array(ndim=1, dtype=int32), is_solid: array(ndim=1, dtype=uint8), thickness: array(ndim=1, dtype=float32), source: array(ndim=1, dtype=uint64), scale: array(ndim=1, dtype=vec3f))>#
- vars = {'is_solid': <warp.codegen.Var object>, 'scale': <warp.codegen.Var object>, 'source': <warp.codegen.Var object>, 'thickness': <warp.codegen.Var object>, 'type': <warp.codegen.Var object>}#
- class warp.sim.JointAxis(
- 轴,
- limit_lower=-math.inf,
- limit_upper=math.inf,
- limit_ke=100.0,
- limit_kd=10.0,
- action=None,
- target_ke=0.0,
- target_kd=0.0,
- mode=JOINT_MODE_FORCE,
描述一个关节轴,该关节轴可以具有限制并被驱动到目标。
- limit_ke#
关节轴限制的弹性刚度,仅被
SemiImplicitIntegrator
和FeatherstoneIntegrator
认可- 类型:
- limit_kd#
关节轴限制的阻尼刚度,仅被
SemiImplicitIntegrator
和FeatherstoneIntegrator
认可- 类型:
- class warp.sim.Mesh(vertices, indices, compute_inertia=True, is_solid=True)[源代码]#
描述用于仿真的三角形碰撞网格
从三角形 OBJ 网格文件创建网格的示例:#
请参阅
load_mesh()
,它作为实用函数提供。import numpy as np import warp as wp import warp.sim import openmesh m = openmesh.read_trimesh("mesh.obj") mesh_points = np.array(m.points()) mesh_indices = np.array(m.face_vertex_indices(), dtype=np.int32).flatten() mesh = wp.sim.Mesh(mesh_points, mesh_indices)
- vertices#
网格 3D 顶点
- 类型:
List[Vec3]
- I#
假设密度为 1.0 的网格的 3x3 惯性矩阵(围绕质心)
- 类型:
Mat33
- com#
物体的质心
- 类型:
Vec3
- 参数:
vertices (List[Vec3])
indices (List[int])
- class warp.sim.SDF(volume=None, I=None, mass=1.0, com=None)[源代码]#
描述用于仿真的有符号距离场
- I#
SDF 的 3x3 惯性矩阵
- 类型:
Mat33
- com#
SDF 的质心
- 类型:
Vec3
关节类型#
- warp.sim.JOINT_PRISMATIC#
棱柱(滑块)关节
- warp.sim.JOINT_REVOLUTE#
旋转(铰链)关节
- warp.sim.JOINT_BALL#
球(球面)关节,带有四元数状态表示
- warp.sim.JOINT_FIXED#
固定(静态)关节
- warp.sim.JOINT_FREE#
自由(浮动)关节
- warp.sim.JOINT_COMPOUND#
具有 3 个旋转自由度的复合关节
- warp.sim.JOINT_UNIVERSAL#
具有 2 个旋转自由度的万向节
- warp.sim.JOINT_DISTANCE#
距离关节,使两个物体之间的距离保持在其关节限制范围内(目前仅在
XPBDIntegrator
中支持)
- warp.sim.JOINT_D6#
通用 D6 关节,最多具有 3 个平移和 3 个旋转自由度
关节控制模式#
关节模式控制关节控制输入 Control.joint_act
如何影响在给定关节轴上施加的扭矩的行为。 默认情况下,它表现为通过 JOINT_MODE_FORCE
直接施加力。 其他模式可用于实现关节位置或速度驱动
- warp.sim.JOINT_MODE_FORCE#
这是默认控制模式,其中控制输入是在关节轴上施加的扭矩 \(\tau\)。
- warp.sim.JOINT_MODE_TARGET_POSITION#
控制输入是目标位置 \(\mathbf{q}_{\text{target}}\),它是通过扭矩 \(\tau\) 的 PD 控制实现的,其中比例增益和导数增益由
Model.joint_target_ke
和Model.joint_target_kd
设置\[\tau = k_e (\mathbf{q}_{\text{target}} - \mathbf{q}) - k_d \mathbf{\dot{q}}\]
- warp.sim.JOINT_MODE_TARGET_VELOCITY#
控制输入是目标速度 \(\mathbf{\dot{q}}_{\text{target}}\),它是通过扭矩 \(\tau\) 的控制器实现的,该控制器通过比例增益
Model.joint_target_ke
将关节轴上的速度带到目标\[\tau = k_e (\mathbf{\dot{q}}_{\text{target}} - \mathbf{\dot{q}})\]
状态#
- class warp.sim.State[source]#
用于
Model
的时变状态数据。时变状态数据包括粒子位置、速度、刚体状态以及作为导出数据从积分器输出的任何内容,例如:力。
确切的属性取决于模型的内容。状态对象通常应使用
Model.state()
函数创建。- body_f: array | None#
形状为
(body_count,)
且类型为spatial_vector
的最大坐标系中的物体力数组(前三个条目表示扭矩,后三个条目表示线性力)。注意
body_f
表示世界坐标系中的外部扳手,并表示针对所有积分器(除了FeatherstoneIntegrator
)相对于物体质心测量的扳手,后者假定扳手是相对于世界原点测量的。
控制#
- class warp.sim.Control(model=None)[source]#
用于
Model
的时变控制数据。时变控制数据包括关节控制输入、肌肉激活以及三角形和四面体元素的激活力。
确切的属性取决于模型的内容。控制对象通常应使用
Model.control()
函数创建。- 参数:
model (Model)
正向/逆向运动学#
铰接刚体机构通过连接刚体的关节以及父刚体和子刚体到父刚体和子刚体中相应锚固框架的相对变换进行运动学描述

符号 |
描述 |
---|---|
x_wp |
父刚体的世界变换(存储在 |
x_wc |
子刚体的世界变换(存储在 |
x_pj |
从父刚体到关节父锚固框架的变换(由 |
x_cj |
从子刚体到关节子锚固框架的变换(由 |
x_j |
从关节父锚固框架到关节子锚固框架的关节变换 |
在正向运动学中,关节变换由关节坐标(广义关节位置 State.joint_q
和速度 State.joint_qd
)确定。给定父刚体的世界变换 \(x_{wp}\) 和关节变换 \(x_{j}\),子刚体的世界变换 \(x_{wc}\) 计算为
- warp.sim.eval_fk(model, joint_q, joint_qd, mask, state)[source]#
根据关节坐标评估模型的正向运动学,并更新状态的刚体信息(
State.body_q
和State.body_qd
)。
- warp.sim.eval_ik(model, state, joint_q, joint_qd)[source]#
根据状态的身体信息(
State.body_q
和State.body_qd
)评估模型的逆运动学,并更新广义关节坐标 joint_q 和 joint_qd。- 参数:
model (Model) – 要评估的模型。
state (State) – 具有身体最大坐标(位置
State.body_q
和速度State.body_qd
)的状态,供使用。joint_q (array) – 广义关节位置坐标,形状 [joint_coord_count],浮点型
joint_qd (array) – 广义关节速度坐标,形状 [joint_dof_count],浮点型
积分器#
- class warp.sim.Integrator[source]#
积分器的通用基类。提供积分刚体和粒子的方法。
- class warp.sim.SemiImplicitIntegrator(angular_damping=0.05, friction_smoothing=1.0)[source]#
使用辛 Euler 的半隐式积分器
构建 Model 和 State 对象后,可以使用此时间积分器来推动模拟状态随时间前进。
半隐式时间积分是一种保留能量的变分积分器,但它并非无条件稳定,需要足够小的时间步长来支持所需的刚度和阻尼力。
参见: https://en.wikipedia.org/wiki/Semi-implicit_Euler_method
示例
integrator = wp.SemiImplicitIntegrator() # simulation loop for i in range(100): state = integrator.simulate(model, state_in, state_out, dt)
- __init__(
- angular_damping=0.05,
- friction_smoothing=1.0,
- 参数:
angular_damping (float, 可选) – 角度阻尼系数。默认为 0.05。
friction_smoothing (float, 可选) – Huber 范数的 delta 值(参见
warp.math.norm_huber()
),用于摩擦速度归一化。默认为 1.0。
- class warp.sim.XPBDIntegrator(
- iterations=2,
- soft_body_relaxation=0.9,
- soft_contact_relaxation=0.9,
- joint_linear_relaxation=0.7,
- joint_angular_relaxation=0.4,
- rigid_contact_relaxation=0.8,
- rigid_contact_con_weighting=True,
- angular_damping=0.0,
- enable_restitution=False,
一个隐式积分器,使用 eXtended Position-Based Dynamics (XPBD) 进行刚体和柔体模拟。
参考文献
Miles Macklin、Matthias Müller 和 Nuttapong Chentanez。2016。XPBD:基于位置的顺应约束动力学模拟。在第 9 届运动游戏国际会议论文集(MIG ‘16)中。美国纽约州纽约:计算机协会,49-54。 https://doi.org/10.1145/2994258.2994272
Matthias Müller、Miles Macklin、Nuttapong Chentanez、Stefan Jeschke 和 Tae-Yong Kim。2020。使用扩展位置动力学的详细刚体模拟。在 ACM SIGGRAPH/Eurographics 计算机动画研讨会论文集(SCA ‘20)中。德国戈斯拉尔:欧洲图形协会,文章 10,1-12。 https://doi.org/10.1111/cgf.14105
构建
Model
、State
和Control
(可选)对象后,可以使用此时间积分器来推动模拟状态随时间前进。示例
integrator = wp.XPBDIntegrator() # simulation loop for i in range(100): state = integrator.simulate(model, state_in, state_out, dt, control)
- __init__(
- iterations=2,
- soft_body_relaxation=0.9,
- soft_contact_relaxation=0.9,
- joint_linear_relaxation=0.7,
- joint_angular_relaxation=0.4,
- rigid_contact_relaxation=0.8,
- rigid_contact_con_weighting=True,
- angular_damping=0.0,
- enable_restitution=False,
- class warp.sim.FeatherstoneIntegrator(
- model,
- angular_damping=0.05,
- update_mass_matrix_every=1,
- friction_smoothing=1.0,
- use_tile_gemm=False,
- fuse_cholesky=True,
一个半隐式积分器,使用辛欧拉算法在简化(也称为广义)坐标上运行,以基于 Featherstone 的复合刚体算法 (CRBA) 模拟铰接刚体动力学。
参见:Featherstone, Roy. Rigid Body Dynamics Algorithms. Springer US, 2014.
与
SemiImplicitIntegrator
的情况不同,State.body_q
(刚体位置)和State.body_qd
(刚体速度)是最大坐标。FeatherstoneIntegrator
使用State.joint_q
和State.joint_qd
来表示关节的位置和速度,而不允许任何冗余的自由度。构造
Model
和State
对象后,可以使用此时间积分器将模拟状态在时间上向前推进。注意
与
SemiImplicitIntegrator
和XPBDIntegrator
不同,如果刚体没有通过任何关节连接,FeatherstoneIntegrator
不会模拟具有非零质量的刚体作为浮动体。浮动基系统需要一个显式的自由关节,刚体通过该关节与世界连接,请参阅ModelBuilder.add_joint_free()
。半隐式时间积分是一种保留能量的变分积分器,但它并非无条件稳定,需要足够小的时间步长来支持所需的刚度和阻尼力。
参见: https://en.wikipedia.org/wiki/Semi-implicit_Euler_method
示例
integrator = wp.FeatherstoneIntegrator(model) # simulation loop for i in range(100): state = integrator.simulate(model, state_in, state_out, dt)
注意
FeatherstoneIntegrator
需要将Model
作为构造函数参数传入。- __init__(
- model,
- angular_damping=0.05,
- update_mass_matrix_every=1,
- friction_smoothing=1.0,
- use_tile_gemm=False,
- fuse_cholesky=True,
- 参数:
model (Model) – 要模拟的模型。
angular_damping (float, 可选) – 角度阻尼系数。默认为 0.05。
update_mass_matrix_every (int, 可选) – 更新质量矩阵的频率(每次调用
simulate()
函数的第 n 次)。默认为 1。friction_smoothing (float, 可选) – Huber 范数的 delta 值(参见
warp.math.norm_huber()
),用于摩擦速度归一化。默认为 1.0。
- class warp.sim.VBDIntegrator(
- model,
- iterations=10,
- handle_self_contact=False,
- penetration_free_conservative_bound_relaxation=0.42,
- friction_epsilon=1e-2,
- body_particle_contact_buffer_pre_alloc=4,
- vertex_collision_buffer_pre_alloc=32,
- edge_collision_buffer_pre_alloc=64,
- triangle_collision_buffer_pre_alloc=32,
- edge_edge_parallel_epsilon=1e-5,
一个使用顶点块下降 (VBD) 进行布料模拟的隐式积分器。
参考文献
Anka He Chen, Ziheng Liu, Yin Yang, 和 Cem Yuksel. 2024. Vertex Block Descent. ACM Trans. Graph. 43, 4, Article 116 (July 2024), 16 pages. https://doi.org/10.1145/3658179
请注意,VBDIntegrator 的构造函数需要一个
Model
对象作为输入,以便它可以进行一些预计算并预分配空间。构造完成后,您必须提供与构造期间使用的相同的Model
对象。目前,您必须手动提供粒子着色并将其分配给 model.particle_coloring 才能使 VBD 工作。VBDIntegrator.simulate 接受三个参数:class:Model,
State
, 和Control
(可选)对象,可以使用此时间积分器在时间上向前推进模拟状态。示例
model.particle_coloring = # load or generate particle coloring integrator = wp.VBDIntegrator(model) # simulation loop for i in range(100): state = integrator.simulate(model, state_in, state_out, dt, control)
- 参数:
model (Model)
- __init__(
- model,
- iterations=10,
- handle_self_contact=False,
- penetration_free_conservative_bound_relaxation=0.42,
- friction_epsilon=1e-2,
- body_particle_contact_buffer_pre_alloc=4,
- vertex_collision_buffer_pre_alloc=32,
- edge_collision_buffer_pre_alloc=64,
- triangle_collision_buffer_pre_alloc=32,
- edge_edge_parallel_epsilon=1e-5,
- 参数:
model (Model)
- simulate_one_step_with_collisions_penetration_free(
- model,
- state_in,
- state_out,
- dt,
- control=None,
- count_num_adjacent_edges = <warp.context.Kernel object>#
- fill_adjacent_edges = <warp.context.Kernel object>#
- count_num_adjacent_faces = <warp.context.Kernel object>#
碰撞#
形状用于定义模拟中刚体的几何体。没有父物体的形状被认为是静态形状。使用 add_shape_*
方法在 ModelBuilder
中向模型添加形状,例如 ModelBuilder.add_shape_sphere()
, ModelBuilder.add_shape_box()
, ModelBuilder.add_shape_capsule()
, ModelBuilder.add_shape_cylinder()
, ModelBuilder.add_shape_cone()
, ModelBuilder.add_shape_mesh()
, ModelBuilder.add_shape_sdf()
, 以及 ModelBuilder.add_shape_plane()
. 支持以下形状类型
- warp.sim.GEO_SPHERE#
球体形状
- warp.sim.GEO_BOX#
立方体形状
- warp.sim.GEO_CAPSULE#
胶囊体形状
- warp.sim.GEO_CYLINDER#
圆柱体形状
- warp.sim.GEO_CONE#
锥体形状
- warp.sim.GEO_PLANE#
矩形平面形状(如果宽度或长度设置为 0,则无限)
除了粒子与这些形状的碰撞之外,还支持以下刚体形状碰撞
粒子 |
球体 |
立方体 |
胶囊体 |
圆柱体 |
锥体 |
网格 |
SDF |
平面 |
|
---|---|---|---|---|---|---|---|---|---|
粒子 |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
球体 |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
|||
立方体 |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
|||
胶囊体 |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
|||
圆柱体 |
✅ |
||||||||
锥体 |
✅ |
||||||||
网格 |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
|||
SDF |
✅ |
||||||||
平面 |
✅ |
✅ |
✅ |
✅ |
✅ |
导入器#
Warp sim 支持从 URDF、MuJoCo (MJCF) 和 USD Physics 文件加载模拟模型。
- warp.sim.parse_urdf(
- urdf_filename,
- builder,
- xform=None,
- floating=False,
- base_joint=None,
- density=1000.0,
- stiffness=100.0,
- damping=10.0,
- armature=0.0,
- contact_ke=1.0e4,
- contact_kd=1.0e3,
- contact_kf=1.0e2,
- contact_ka=0.0,
- contact_mu=0.25,
- contact_restitution=0.5,
- contact_thickness=0.0,
- limit_ke=100.0,
- limit_kd=10.0,
- joint_limit_lower=-1e6,
- joint_limit_upper=1e6,
- scale=1.0,
- hide_visuals=False,
- parse_visuals_as_colliders=False,
- force_show_colliders=False,
- enable_self_collisions=True,
- ignore_inertial_definitions=True,
- ensure_nonstatic_links=True,
- static_link_mass=1e-2,
- collapse_fixed_joints=False,
解析 URDF 文件,并将刚体和关节添加到给定的 ModelBuilder。
- 参数:
urdf_filename (str) – 要解析的 URDF 文件的文件名。
builder (ModelBuilder) – 将要添加刚体和关节的
ModelBuilder
。xform (transform) – 应用于根刚体的变换。
floating (bool) – 如果为 True,则根刚体是一个自由关节。 如果为 False,则根刚体通过固定关节连接到世界,除非定义了 base_joint。
base_joint (Union[str, dict]) – 根刚体连接到世界的关节。 这可以是一个字符串,用于定义 D6 关节的关节轴,其中包含以逗号分隔的位置和角度轴名称(例如,“px,py,rz”表示在 x、y 中具有线性轴,在 z 中具有角度轴的 D6 关节),或者是一个包含关节参数的字典(参见
ModelBuilder.add_joint()
)。density (float) – 形状的密度,单位为 kg/m^3,它将用于计算刚体质量和惯性。
stiffness (float) – 关节的刚度。
damping (float) – 关节的阻尼。
armature (float) – 关节的电枢(添加到惯性对角线的偏差,可以稳定模拟)。
contact_ke (float) – 形状接触的刚度(由 Euler 积分器使用)。
contact_kd (float) – 形状接触的阻尼(由 Euler 积分器使用)。
contact_kf (float) – 形状接触的摩擦刚度(由 Euler 积分器使用)。
contact_ka (float) – 形状接触的粘附距离(由 Euler 积分器使用)。
contact_mu (float) – 形状接触的摩擦系数。
contact_restitution (float) – 形状接触的恢复系数。
contact_thickness (float) – 添加到形状几何体的厚度。
limit_ke (float) – 关节限制的刚度(由 Euler 积分器使用)。
limit_kd (float) – 关节限制的阻尼(由 Euler 积分器使用)。
joint_limit_lower (float) – 如果 URDF 中未指定,则为默认的下关节限制。
joint_limit_upper (float) – 如果 URDF 中未指定,则为默认的上关节限制。
scale (float) – 应用于导入机制的缩放因子。
hide_visuals (bool) – 如果为 True,则隐藏视觉形状。
parse_visuals_as_colliders (bool) – 如果为 True,则 <visual> 标签下定义的几何体用于碰撞处理,而不是 <collision> 几何体。
force_show_colliders (bool) – 如果为 True,则始终显示碰撞形状,即使存在视觉形状也是如此。
enable_self_collisions (bool) – 如果为 True,则启用自碰撞。
ignore_inertial_definitions (bool) – 如果为 True,则忽略 URDF 中定义的惯性参数,并根据形状几何体计算惯性。
ensure_nonstatic_links (bool) – 如果为 True,则质量为零的连杆将获得一个较小的质量(参见 static_link_mass),以确保它们是动态的。
static_link_mass (float) – 要分配给质量为零的连杆的质量(如果 ensure_nonstatic_links 设置为 True)。
collapse_fixed_joints (bool) – 如果为 True,则删除固定关节,并合并相应的刚体。
- warp.sim.parse_mjcf(
- mjcf_filename,
- builder,
- xform=None,
- floating=False,
- base_joint=None,
- density=1000.0,
- stiffness=100.0,
- damping=10.0,
- armature=0.0,
- armature_scale=1.0,
- contact_ke=1.0e4,
- contact_kd=1.0e3,
- contact_kf=1.0e2,
- contact_ka=0.0,
- contact_mu=0.25,
- contact_restitution=0.5,
- contact_thickness=0.0,
- limit_ke=100.0,
- limit_kd=10.0,
- joint_limit_lower=-1e6,
- joint_limit_upper=1e6,
- scale=1.0,
- hide_visuals=False,
- parse_visuals_as_colliders=False,
- parse_meshes=True,
- up_axis='Z',
- ignore_names=(),
- ignore_classes=None,
- visual_classes=('visual',),
- collider_classes=('collision',),
- no_class_as_colliders=True,
- force_show_colliders=False,
- enable_self_collisions=False,
- ignore_inertial_definitions=True,
- ensure_nonstatic_links=True,
- static_link_mass=1e-2,
- collapse_fixed_joints=False,
- verbose=False,
解析 MuJoCo XML (MJCF) 文件,并将刚体和关节添加到给定的 ModelBuilder。
- 参数:
mjcf_filename (str) – 要解析的 MuJoCo 文件的文件名。
builder (ModelBuilder) – 将要添加刚体和关节的
ModelBuilder
。xform (transform) – 应用于导入机制的变换。
floating (bool) – 如果为 True,则根刚体是一个自由关节。 如果为 False,则根刚体通过固定关节连接到世界,除非定义了 base_joint。
base_joint (Union[str, dict]) – 根刚体连接到世界的关节。 这可以是一个字符串,用于定义 D6 关节的关节轴,其中包含以逗号分隔的位置和角度轴名称(例如,“px,py,rz”表示在 x、y 中具有线性轴,在 z 中具有角度轴的 D6 关节),或者是一个包含关节参数的字典(参见
ModelBuilder.add_joint()
)。density (float) – 形状的密度,单位为 kg/m^3,它将用于计算刚体质量和惯性。
stiffness (float) – 关节的刚度。
damping (float) – 关节的阻尼。
armature (float) – 如果在 MJCF 中没有为关节定义 armature,则使用的默认关节电枢。
armature_scale (float) – 应用于 MJCF 定义的关节电枢值的缩放因子。
contact_ke (float) – 形状接触的刚度。
contact_kd (float) – 形状接触的阻尼。
contact_kf (float) – 形状接触的摩擦刚度。
contact_ka (float) – 形状接触的粘附距离。
contact_mu (float) – 形状接触的摩擦系数。
contact_restitution (float) – 形状接触的恢复系数。
contact_thickness (float) – 添加到形状几何体的厚度。
limit_ke (float) – 关节限制的刚度。
limit_kd (float) – 关节限制的阻尼。
joint_limit_lower (float) – 如果 MJCF 中未指定,则为默认的下关节限制。
joint_limit_upper (float) – 如果 MJCF 中未指定,则为默认的关节上限。
scale (float) – 应用于导入机制的缩放因子。
hide_visuals (bool) – 如果为 True,则隐藏视觉形状。
parse_visuals_as_colliders (bool) – 如果为 True,则 visual_classes 标签下定义的几何体将用于碰撞处理,而不是 collider_classes 几何体。
parse_meshes (bool) – 是否应解析 “mesh” 类型的几何体。如果为 False,则忽略 “mesh” 类型的几何体。
up_axis (str) – 机构的向上轴。可以是 “X”、“Y” 或 “Z”。默认为 “Z”。
ignore_names (List[str]) – 正则表达式列表。名称与其中一个正则表达式匹配的物体和关节将被忽略。
ignore_classes (List[str]) – 正则表达式列表。类与其中一个正则表达式匹配的物体和关节将被忽略。
visual_classes (List[str]) – 正则表达式列表。类与其中一个正则表达式匹配的可视几何体将被解析。
collider_classes (List[str]) – 正则表达式列表。类与其中一个正则表达式匹配的碰撞几何体将被解析。
no_class_as_colliders – 如果为 True,则没有类的几何体将被解析为碰撞几何体。如果为 False,则没有类的几何体将被解析为可视几何体。
force_show_colliders (bool) – 如果为 True,则始终显示碰撞形状,即使存在视觉形状也是如此。
enable_self_collisions (bool) – 如果为 True,则启用自碰撞。
ignore_inertial_definitions (bool) – 如果为 True,则忽略 MJCF 中定义的惯性参数,并从形状几何体计算惯性。
ensure_nonstatic_links (bool) – 如果为 True,则质量为零的连杆将获得一个较小的质量(参见 static_link_mass),以确保它们是动态的。
static_link_mass (float) – 要分配给质量为零的连杆的质量(如果 ensure_nonstatic_links 设置为 True)。
collapse_fixed_joints (bool) – 如果为 True,则删除固定关节,并合并相应的刚体。
verbose (bool) – 如果为 True,则打印有关解析 MJCF 的其他信息。
- warp.sim.parse_usd(
- source,
- builder,
- default_density=1.0e3,
- only_load_enabled_rigid_bodies=False,
- only_load_enabled_joints=True,
- contact_ke=1e5,
- contact_kd=250.0,
- contact_kf=500.0,
- contact_ka=0.0,
- contact_mu=0.6,
- contact_restitution=0.0,
- contact_thickness=0.0,
- joint_limit_ke=100.0,
- joint_limit_kd=10.0,
- armature=0.0,
- invert_rotations=False,
- verbose=False,
- ignore_paths=None,
解析包含用于刚体连接的 UsdPhysics 模式定义的通用场景描述 (USD) 阶段,并将物体、形状和关节添加到给定的 ModelBuilder。
USD 描述必须是路径(文件名或 URL)或实现 UsdStage 接口的现有 USD 阶段实例。
- 参数:
source (str | pxr.UsdStage) – USD 文件的文件路径或现有的 USD 阶段实例。
builder (ModelBuilder) – 将要添加刚体和关节的
ModelBuilder
。default_density (float) – 用于没有密度属性的物体的默认密度。
only_load_enabled_rigid_bodies (bool) – 如果为 True,则仅加载没有将 physics:rigidBodyEnabled 设置为 False 的刚体。
only_load_enabled_joints (bool) – 如果为 True,则仅加载没有将 physics:jointEnabled 设置为 False 的关节。
contact_ke (float) – 要使用的默认接触刚度,仅由 Euler 积分器考虑。
contact_kd (float) – 要使用的默认接触阻尼,仅由 Euler 积分器考虑。
contact_kf (float) – 要使用的默认摩擦刚度,仅由 Euler 积分器考虑。
contact_ka (float) – 要使用的默认粘附距离,仅由 Euler 积分器考虑。
contact_mu (float) – 如果形状没有定义摩擦系数,则使用的默认摩擦系数。
contact_restitution (float) – 如果形状没有定义恢复系数,则使用的默认恢复系数。
contact_thickness (float) – 添加到形状几何体的厚度。
joint_limit_ke (float) – 用于关节限制的默认刚度,仅由 Euler 积分器考虑。
joint_limit_kd (float) – 用于关节限制的默认阻尼,仅由 Euler 积分器考虑。
armature (float) – 用于物体的电枢。
invert_rotations (bool) – 如果为 True,则反转形状变换中定义的任何旋转。
verbose (bool) – 如果为 True,则打印有关已解析 USD 文件的其他信息。
ignore_paths (List[str]) – 与要忽略的 prim 路径匹配的正则表达式列表。
- 返回值:
包含以下条目的字典
”fps”
USD 阶段每秒帧数
”duration”
USD 阶段的结束时间码和开始时间码之间的差值
”up_axis”
阶段的向上轴的大写字符串(“X”、“Y”或“Z”)
”path_shape_map”
从 UsdGeom 的 prim 路径(str)到
ModelBuilder
中相应形状索引的映射”path_body_map”
从刚体 prim(例如,实现 PhysicsRigidBodyAPI 的 prim)的 prim 路径(str)到
ModelBuilder
中相应物体索引的映射”path_shape_scale”
从 UsdGeom 的 prim 路径(str)到其相应 3D 世界比例的映射
”mass_unit”
阶段的每单位千克数 (KGPU) 定义(默认为 1.0)
”linear_unit”
阶段的每单位米数 (MPU) 定义(默认为 1.0)
- 返回类型:
注意
此导入器是实验性的,仅支持 USD Physics 模式的子集。请报告您遇到的任何问题。
实用程序函数#
模拟器中使用的通用实用程序函数。
- warp.sim.velocity_at_point(qd, r)#
返回相对于具有给定空间速度的坐标系的点速度。
- 参数:
qd (spatial_vector) – 坐标系的空间速度。
r (vec3) – 点相对于坐标系的位置。
- 返回值:
点的速度。
- 返回类型:
vec3
- warp.sim.quat_to_euler(q, i, j, k)#
将四元数转换为欧拉角。
\(i, j, k\) 是使用的轴的索引,取值范围为 \([0, 1, 2]\) (\(i \neq j, j \neq k\))。
参考: https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0276302
- warp.sim.quat_from_euler(e, i, j, k)#
将欧拉角转换为四元数。
\(i, j, k\) 是欧拉角提供的轴的索引,取值范围为 \([0, 1, 2]\) (\(i \neq j, j \neq k\)),例如,(0, 1, 2) 表示欧拉序列 XYZ。