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#
__init__(up_vector=(0.0, 1.0, 0.0), gravity=-9.80665)[source]#
property shape_count[source]#
property body_count[source]#
property joint_count[source]#
property joint_axis_count[source]#
property particle_count[source]#
property tri_count[source]#
property tet_count[source]#
property edge_count[source]#
property spring_count[source]#
property muscle_count[source]#
property articulation_count[source]#
add_articulation()[source]#
add_builder(
builder,
xform=None,
update_num_env_count=True,
separate_collision_group=True,
)[source]#

复制数据从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,
)[source]#

向模型添加刚体。

参数:
  • origin (Tuple[List[float], List[float]] | None) – 物体在世界坐标系中的位置

  • armature (float) – 添加到物体的额外惯性

  • com (List[float] | None) – 物体相对于其原点的质心

  • I_m (List[float] | None) – 物体的 3x3 惯性张量(相对于质心指定)

  • m (float) – 物体的质量

  • name (str) – 物体的名称(可选)

返回值:

模型中物体的索引

返回类型:

int

注意

如果质量 (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,
)[source]#

向 ModelBuilder 添加任何类型关节的通用方法。

参数:
  • joint_type (constant) – 要添加的关节的类型(参见关节类型

  • parent (int) – 父物体的索引(-1 表示世界坐标系)

  • child (int) – 子物体的索引

  • linear_axes (list(JointAxis)) – 关节的线性轴(参见JointAxis

  • angular_axes (list(JointAxis)) – 关节的角轴(参见JointAxis

  • name (str) – 关节的名称(可选)

  • parent_xform (transform) – 关节在父物体局部坐标系中的变换

  • child_xform (transform) – 关节在子物体局部坐标系中的变换

  • linear_compliance (float) – 关节的线性柔度

  • angular_compliance (float) – 关节的角柔度

  • armature (float) – 围绕关节轴添加的人工惯性(仅由FeatherstoneIntegrator考虑)

  • collision_filter_parent (bool) – 是否过滤父物体和子物体的形状之间的碰撞

  • enabled (bool) – 关节是否启用(不被FeatherstoneIntegrator考虑)

返回值:

添加的关节的索引

返回类型:

int

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,
)[source]#

向模型添加旋转(铰链)关节。 它有一个自由度。

参数:
  • 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)

返回值:

添加的关节的索引

返回类型:

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,
)[source]#

向模型添加一个棱柱(滑动)关节。它具有一个自由度。

参数:
  • 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)

返回值:

添加的关节的索引

返回类型:

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,
)[source]#

向模型添加一个球形关节。它的位置由一个 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) – 是否启用关节

返回值:

添加的关节的索引

返回类型:

int

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,
)[source]#

向模型添加一个固定(静态)关节。它没有自由度。 有关删除这些固定关节并合并连接物体的帮助函数,请参见 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) – 是否启用关节

返回值:

添加的关节的索引

返回类型:

int

add_joint_free(
child,
parent_xform=None,
child_xform=None,
armature=0.0,
parent=-1,
name=None,
collision_filter_parent=True,
enabled=True,
)[source]#

向模型添加一个自由关节。它具有 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) – 是否启用关节

返回值:

添加的关节的索引

返回类型:

int

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,
)[source]#

向模型添加一个距离关节。距离关节约束了两个物体上关节锚点之间的距离(请参见 正向/逆向运动学)它连接到区间 [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) – 是否启用关节

返回值:

添加的关节的索引

返回类型:

int

注意

目前,距离关节仅在 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,
)[source]#

向模型添加一个万向节。万向节有两个自由度,每个轴一个。

参数:
  • 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) – 是否启用关节

返回值:

添加的关节的索引

返回类型:

int

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,
)[source]#

向模型添加一个复合关节,该关节具有 3 个自由度,每个轴一个。 与球形关节(请参见 add_ball_joint())类似,复合关节允许物体相对于彼此进行 3D 旋转,不同之处在于旋转由 3 个轴而不是四元数定义。 根据轴的选择,可以通过欧拉角(例如 z-x-zx-y-x)或通过 Tait-Bryan 角序列(例如 z-y-xx-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) – 是否启用关节

返回值:

添加的关节的索引

返回类型:

int

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,
)[source]#

添加具有自定义线性和角度轴的通用关节。轴的数量决定了关节的自由度数。

参数:
  • parent (int) – 父物体的索引

  • child (int) – 子物体的索引

  • linear_axes (List[JointAxis] | None) – 线性轴的列表

  • angular_axes (List[JointAxis] | None) – 角度轴的列表

  • 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,
)[source]#

使用 matplotlib 和 networkx 可视化模型的铰接图。使用 networkx 中的 spring 布局算法来排列节点。 物体显示为橙色正方形,形状显示为蓝色圆圈。

参数:
  • show_body_names (bool) – 是否显示物体名称或索引

  • show_joint_names (bool) – 是否显示关节名称或索引

  • show_joint_types (bool) – 是否显示关节类型

  • plot_shapes (bool) – 是否渲染连接到刚体的形状

  • show_shape_types (bool) – 是否显示形状几何类型

  • show_legend (bool) – 是否显示图例

collapse_fixed_joints(verbose=wp.config.verbose)[source]#

从模型中移除固定关节,并合并它们连接的物体。这对于简化模型以实现更快更稳定的仿真非常有用。

add_muscle(bodies, positions, f0, lm, lt, lmax, pen)[source]#

添加肌肉-肌腱激活单元。

参数:
  • bodies (List[int]) – 每个航路点的物体索引列表

  • positions (List[List[float]]) – 每个航路点在物体局部坐标系中的位置列表

  • f0 (float) – 力缩放

  • lm (float) – 肌肉长度

  • lt (float) – 肌腱长度

  • lmax (float) – 最高效的肌肉长度

  • pen (float)

返回值:

模型中肌肉的索引

返回类型:

float

注意

对肌肉的仿真支持正在进行中,尚未完全实现。

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,
)[source]#

添加平面碰撞形状。如果定义了 pos 和 rot,则假定平面的法线为 (0, 1, 0)。否则,使用通过 plane 参数定义的平面方程。

参数:
  • plane (List[float]) – 形式为 a*x + b*y + c*z + d = 0 的平面方程

  • pos (List[float]) – 平面在世界坐标系中的位置

  • rot (List[float]) – 平面在世界坐标系中的旋转

  • 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,
)[source]#

将球体碰撞形状添加到物体。

参数:
  • 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,
)[source]#

向刚体添加一个长方体碰撞形状。

参数:
  • 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,
)[source]#

向刚体添加一个胶囊体碰撞形状。

参数:
  • 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,
)[source]#

向刚体添加一个圆柱体碰撞形状。

参数:
  • 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,
)[source]#

向刚体添加一个圆锥体碰撞形状。

参数:
  • 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 对象

  • scale (List[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) – 如果为 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,
)[源代码]#

向模型添加单个粒子

参数:
  • pos (List[float]) – 粒子的初始位置

  • vel (List[float]) – 粒子的初始速度

  • mass (float) – 粒子的质量

  • radius (float) – 用于碰撞处理的粒子半径。 如果为 None,则半径设置为默认值 (default_particle_radius)。

  • flags (uint32) – 控制粒子动力学行为的标志,请参阅 PARTICLE_FLAG_* 常量

返回类型:

int

注意

将质量设置为零以创建一个不受动力学影响的“运动”粒子。

返回值:

系统中粒子的索引

参数:
  • pos (List[float])

  • vel (List[float])

  • mass (float)

  • radius (float)

  • flags (uint32)

返回类型:

int

add_spring(i, j, ke, kd, control)[源代码]#

在系统中的两个粒子之间添加弹簧

参数:
  • i (int) – 第一个粒子的索引

  • j – 第二个粒子的索引

  • ke (float) – 弹簧的弹性刚度

  • kd (float) – 弹簧的阻尼刚度

  • control (float) – 弹簧的驱动水平

注意

弹簧的创建基于粒子在其初始配置中的距离,并具有静止长度。

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。

参数:
  • i (int) – 第一个粒子的索引

  • j (int) – 第二个粒子的索引

  • k (int) – 第三个粒子的索引

  • tri_ke (float)

  • tri_ka (float)

  • tri_kd (float)

  • tri_drag (float)

  • tri_lift (float)

返回值:

三角形的面积

返回类型:

float

注意

三角形的创建基于粒子在其初始配置中的距离,并具有静止长度。

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。

参数:
返回值:

三角形的面积

返回类型:

List[float]

注意

三角形的创建基于粒子在其初始配置中的距离,并具有一个静止长度。

add_tetrahedron(
i,
j,
k,
l,
k_mu=1.0e3,
k_lambda=1.0e3,
k_damp=0.0,
)[source]#

在系统的四个粒子之间添加一个四面体有限元。

四面体被建模为粘弹性元素,其能量密度基于 [Smith et al. 2018] 中的 NeoHookean 模型。

参数:
  • i (int) – 第一个粒子的索引

  • j (int) – 第二个粒子的索引

  • k (int) – 第三个粒子的索引

  • l (int) – 第四个粒子的索引

  • k_mu (float) – 第一个弹性拉梅参数

  • k_lambda (float) – 第二个弹性拉梅参数

  • k_damp (float) – 元素的阻尼刚度

返回值:

四面体的体积

返回类型:

float

注意

四面体的创建基于粒子的初始配置,并具有一个静止姿势

add_edge(
i,
j,
k,
l,
rest=None,
edge_ke=None,
edge_kd=None,
)[source]#

在系统的四个粒子之间添加一个弯曲边元素。

弯曲元素设计用于连接两个三角形。弯曲能量基于 [Bridson et al. 2002]。弯曲刚度由 model.tri_kb 参数控制。

参数:
  • i (int) – 第一个粒子的索引,即,顶点 0 的对顶点

  • j (int) – 第二个粒子的索引,即,顶点 1 的对顶点

  • k (int) – 第三个粒子的索引,即,顶点 0

  • l (int) – 第四个粒子的索引,即,顶点 1

  • rest (float) – 边的静止角(弧度),如果未指定,则会计算

  • edge_ke (float)

  • edge_kd (float)

注意

该边位于由 ‘k’ 和 ‘l’ 参数索引的粒子之间,对顶点由 ‘i’ 和 ‘j’ 索引。这定义了两个具有逆时针绕组的连接三角形:(i, k, l), (j, l, k)。

add_edges(
i,
j,
k,
l,
rest=None,
edge_ke=None,
edge_kd=None,
)[source]#

在系统的四组粒子之间添加弯曲边元素。

弯曲元素设计用于连接两个三角形。弯曲能量基于 [Bridson et al. 2002]。弯曲刚度由 model.tri_kb 参数控制。

参数:
  • i – 第一个粒子的索引,即,顶点 0 的对顶点

  • j – 第二个粒子的索引,即,顶点 1 的对顶点

  • k – 第三个粒子的索引,即,顶点 0

  • l – 第四个粒子的索引,即,顶点 1

  • rest (List[float] | None) – 边的静止角(弧度),如果未指定,则会计算

  • edge_ke (List[float] | None)

  • edge_kd (List[float] | None)

注意

该边位于由 ‘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,
)[source]#

辅助函数,用于创建规则的平面布料网格

创建一个具有有限元三角形和弯曲元素的规则矩形粒子网格。

参数:
  • pos (List[float]) – 布料在世界空间中的位置

  • rot (List[float]) – 布料在世界空间中的方向

  • vel (List[float]) – 布料在世界空间中的速度

  • 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,
)[source]#

用于从规则三角形网格创建布料模型的辅助函数

为输入三角形网格中的每个面和边创建一个 FEM 三角形单元和一个弯曲单元

参数:
  • pos (List[float]) – 布料在世界空间中的位置

  • rot (List[float]) – 布料在世界空间中的方向

  • vel (List[float]) – 布料在世界空间中的速度

  • vertices (List[List[float]]) – 顶点位置列表

  • indices (List[int]) – 三角形索引列表,每个面 3 个条目

  • 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,
)[source]#
参数:
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,
)[source]#

用于创建矩形四面体 FEM 网格的辅助函数

创建 FEM 四面体和表面三角形的规则网格。 例如,可用于创建梁和板。每个六面体单元被分解为 5 个四面体单元。

参数:
  • pos (List[float]) – 实体在世界空间中的位置

  • rot (List[float]) – 实体在世界空间中的方向

  • vel (List[float]) – 实体在世界空间中的速度

  • 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,
)[source]#

用于从输入四面体网格创建四面体模型的辅助函数

参数:
  • pos (List[float]) – 实体在世界空间中的位置

  • rot (List[float]) – 实体在世界空间中的方向

  • vel (List[float]) – 实体在世界空间中的速度

  • vertices (List[List[float]]) – 顶点位置列表,3D 点数组

  • indices (List[int]) – 四面体索引列表,每个元素 4 个条目,扁平化数组

  • density (float) – 网格的单位面积密度

  • k_mu (float) – 第一个弹性拉梅参数

  • k_lambda (float) – 第二个弹性拉梅参数

  • k_damp (float) – 阻尼刚度

  • scale (float)

  • tri_ke (float)

  • tri_ka (float)

  • tri_kd (float)

  • tri_drag (float)

  • tri_lift (float)

set_ground_plane(
normal=None,
offset=0.0,
ke=None,
kd=None,
kf=None,
mu=None,
restitution=None,
)[source]#

为世界创建一个地面。如果未指定法线,则使用 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,
)[source]#

运行着色算法以生成着色信息。

参数:
  • 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.

finalize(device=None, requires_grad=False)[source]#

将此构建器对象转换为用于仿真的具体模型。

在构建仿真元素后,应调用此方法以将所有数据传输到设备内存,以便进行仿真。

参数:
  • device – 要使用的仿真设备,例如:“cpu”、“cuda”

  • requires_grad – 是否为模型启用梯度计算

返回值:

模型对象。

返回类型:

Model

class warp.sim.Model(device=None)[source]#

保存仿真模型的定义

此类保存系统非时变描述,即:用于描述仿真的所有几何形状、约束和参数。

requires_grad#

指示模型是否已完成(参见 ModelBuilder.finalize()),并启用了梯度计算

类型:

float

num_envs#

通过 add_builder 添加到 ModelBuilder 的关节环境数量

类型:

int

particle_q#

粒子位置,形状 [particle_count, 3], float

类型:

数组

particle_qd#

粒子速度,形状 [particle_count, 3], float

类型:

数组

particle_mass#

粒子质量,形状 [particle_count], float

类型:

数组

particle_inv_mass#

粒子逆质量,形状 [particle_count], float

类型:

数组

particle_radius#

粒子半径,形状 [particle_count], float

类型:

数组

particle_max_radius#

最大粒子半径(用于 HashGrid 构建)

类型:

float

particle_ke#

粒子法向接触刚度(由 SemiImplicitIntegrator 使用),形状 [particle_count], float

类型:

数组

particle_kd#

粒子法向接触阻尼(由 SemiImplicitIntegrator 使用),形状 [particle_count], float

类型:

数组

particle_kf#

粒子摩擦力刚度(由 SemiImplicitIntegrator 使用),形状 [particle_count], float

类型:

数组

particle_mu#

粒子摩擦系数,形状 [particle_count], float

类型:

数组

particle_cohesion#

粒子内聚强度,形状 [particle_count], float

类型:

数组

particle_adhesion#

粒子粘附强度,形状 [particle_count], float

类型:

数组

particle_grid#

用于加速粒子相互作用模拟的 HashGrid 实例

类型:

HashGrid

particle_flags#

粒子启用状态,形状 [particle_count], bool

类型:

数组

particle_max_velocity#

最大粒子速度(以防止不稳定)

类型:

float

shape_transform#

刚性形状变换,形状 [shape_count, 7], float

类型:

数组

shape_visible#

刚性形状可见性,形状 [shape_count], bool

类型:

数组

shape_body#

刚性形状刚体索引,形状 [shape_count], int

类型:

数组

body_shapes#

从刚体索引到附加的形状索引列表的映射

类型:

字典

shape_materials#

刚性形状接触材料,形状 [shape_count], float

类型:

ModelShapeMaterials

shape_shape_geo#

形状几何属性(几何类型、比例、厚度等),形状 [shape_count, 3], float

类型:

ModelShapeGeometry

shape_geo_src#

用于网格几何体渲染的 wp.Mesh 实例列表

类型:

列表

shape_collision_group#

每个形状的碰撞组,形状 [shape_count], int

类型:

列表

shape_collision_group_map#

从碰撞组到形状索引列表的映射

类型:

字典

shape_collision_filter_pairs#

不应碰撞的形状索引对

类型:

集合

shape_collision_radius#

每个形状的碰撞半径,用于边界球体广相碰撞检测,形状 [shape_count], float

类型:

数组

shape_ground_collision#

指示每个形状是否应与地面碰撞,形状 [shape_count], bool

类型:

列表

shape_shape_collision#

指示每个形状是否应与任何其他形状碰撞,形状 [shape_count], bool

类型:

列表

shape_contact_pairs#

可能碰撞的形状索引对,形状 [contact_pair_count, 2], int

类型:

数组

shape_ground_contact_pairs#

可能碰撞的形状、地面索引对,形状 [ground_contact_pair_count, 2], int

类型:

数组

spring_indices#

粒子弹簧索引,形状 [spring_count*2], int

类型:

数组

spring_rest_length#

粒子弹簧静止长度,形状 [spring_count], float

类型:

数组

spring_stiffness#

粒子弹簧刚度,形状 [spring_count], float

类型:

数组

spring_damping#

粒子弹簧阻尼,形状 [spring_count], float

类型:

数组

spring_control#

粒子弹簧激活,形状 [spring_count], float

类型:

数组

tri_indices#

三角形单元索引,形状 [tri_count*3], int

类型:

数组

tri_poses#

三角形单元静止姿势,形状 [tri_count, 2, 2], float

类型:

数组

tri_activations#

三角形单元激活,形状 [tri_count], float

类型:

数组

tri_materials#

三角形单元材料,形状 [tri_count, 5], float

类型:

数组

tri_areas#

三角形单元静止面积,形状 [tri_count], float

类型:

数组

edge_indices#

弯曲边缘索引,形状 [edge_count*4], int, 每行是 [o0, o1, v1, v2], 其中 v1, v2 在边缘上

类型:

数组

edge_rest_angle#

弯曲边缘静止角度,形状 [edge_count], float

类型:

数组

edge_rest_length#

弯曲边缘静止长度,形状 [edge_count], float

类型:

数组

edge_bending_properties#

弯曲边缘刚度和阻尼参数,形状 [edge_count, 2], float

类型:

数组

tet_indices#

四面体单元索引,形状 [tet_count*4], int

类型:

数组

tet_poses#

四面体静止姿势,形状 [tet_count, 3, 3], float

类型:

数组

tet_activations#

四面体体积激活,形状 [tet_count], float

类型:

数组

tet_materials#

四面体弹性参数,形式为 \(k_{mu}, k_{lambda}, k_{damp}\),形状 [tet_count, 3]

类型:

数组

muscle_start#

每个肌肉第一个肌肉点的起始索引,形状 [muscle_count], int

类型:

数组

muscle_params#

肌肉参数,形状 [muscle_count, 5], float

类型:

数组

muscle_bodies#

肌肉路标点的刚体索引,int

类型:

数组

muscle_points#

肌肉路标点的局部刚体偏移量,float

类型:

数组

muscle_activations#

肌肉激活,形状 [muscle_count], float

类型:

数组

body_q#

用于状态初始化的刚体姿势,形状 [body_count, 7], float

类型:

数组

body_qd#

用于状态初始化的刚体速度,形状 [body_count, 6], float

类型:

数组

body_com#

刚体重心(在局部坐标系中),形状 [body_count, 7], float

类型:

数组

body_inertia#

刚体惯性张量(相对于重心),形状 [body_count, 3, 3], float

类型:

数组

body_inv_inertia#

刚体逆惯性张量(相对于 COM),形状 [body_count, 3, 3],浮点型

类型:

数组

body_mass#

刚体质量,形状 [body_count],浮点型

类型:

数组

body_inv_mass#

刚体逆质量,形状 [body_count],浮点型

类型:

数组

body_name#

刚体名称,形状 [body_count],字符串

类型:

列表

joint_q#

用于状态初始化的广义关节位置,形状 [joint_coord_count],浮点型

类型:

数组

joint_qd#

用于状态初始化的广义关节速度,形状 [joint_dof_count],浮点型

类型:

数组

joint_act#

广义关节控制输入,形状 [joint_axis_count],浮点型

类型:

数组

joint_type#

关节类型,形状 [joint_count],整型

类型:

数组

joint_parent#

关节父物体索引,形状 [joint_count],整型

类型:

数组

joint_child#

关节子物体索引,形状 [joint_count],整型

类型:

数组

joint_ancestor#

从关节索引到具有当前关节父物体作为子物体的关节索引的映射(如果不存在此类关节祖先,则为 -1),形状 [joint_count],整型

类型:

数组

joint_X_p#

关节在父物体坐标系中的变换,形状 [joint_count, 7],浮点型

类型:

数组

joint_X_c#

关节质量坐标系在子物体坐标系中的变换,形状 [joint_count, 7],浮点型

类型:

数组

joint_axis#

关节轴在子物体坐标系中,形状 [joint_axis_count, 3],浮点型

类型:

数组

joint_armature#

每个关节轴的骨架(仅由 FeatherstoneIntegrator 使用),形状 [joint_dof_count],浮点型

类型:

数组

joint_target_ke#

关节刚度,形状 [joint_axis_count],浮点型

类型:

数组

joint_target_kd#

关节阻尼,形状 [joint_axis_count],浮点型

类型:

数组

joint_axis_start#

每个关节的第一个轴的起始索引,形状 [joint_count],整型

类型:

数组

joint_axis_dim#

每个关节的线性和角度轴的数量,形状 [joint_count, 2],整型

类型:

数组

joint_axis_mode#

关节轴模式,形状 [joint_axis_count],整型。参见 关节模式

类型:

数组

joint_linear_compliance#

关节线性柔度,形状 [joint_count],浮点型

类型:

数组

joint_angular_compliance#

关节线性柔度,形状 [joint_count],浮点型

类型:

数组

joint_enabled#

控制模拟哪个关节(如果为 False,物体将断开连接),形状 [joint_count],整型

注意

此设置不受 FeatherstoneIntegrator 支持。

类型:

数组

joint_limit_lower#

关节位置下限,形状 [joint_axis_count],浮点型

类型:

数组

joint_limit_upper#

关节位置上限,形状 [joint_axis_count],浮点型

类型:

数组

joint_limit_ke#

关节位置限制刚度(由 Euler 积分器使用),形状 [joint_axis_count],浮点型

类型:

数组

joint_limit_kd#

关节位置限制阻尼(由 Euler 积分器使用),形状 [joint_axis_count],浮点型

类型:

数组

joint_twist_lower#

关节下扭转极限,形状 [joint_count],浮点型

类型:

数组

joint_twist_upper#

关节上扭转极限,形状 [joint_count],浮点型

类型:

数组

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],整型

类型:

数组

articulation_start#

铰接开始索引,形状 [articulation_count],整型

类型:

数组

joint_name#

关节名称,形状 [joint_count],字符串

类型:

列表

joint_attach_ke#

关节连接力刚度(由 SemiImplicitIntegrator 使用)

类型:

float

joint_attach_kd#

关节连接力阻尼(由 SemiImplicitIntegrator 使用)

类型:

float

soft_contact_radius#

VBD 积分器中用于自碰撞的接触半径。

类型:

float

soft_contact_margin#

用于生成软接触的接触边距

类型:

float

soft_contact_ke#

软接触的刚度(由 Euler 积分器使用)

类型:

float

soft_contact_kd#

软接触的阻尼(由 Euler 积分器使用)

类型:

float

soft_contact_kf#

软接触中摩擦力的刚度(由 Euler 积分器使用)

类型:

float

soft_contact_mu#

软接触的摩擦系数

类型:

float

soft_contact_restitution#

软接触的恢复系数(由 XPBDIntegrator 使用)

类型:

float

soft_contact_count#

活动粒子-形状接触的数量,形状 [1],整型

类型:

数组

soft_contact_particle#
类型:

数组

soft_contact_shape#
类型:

数组

soft_contact_body_pos#
类型:

数组

soft_contact_body_vel#
类型:

数组

soft_contact_normal#
类型:

数组

soft_contact_tids#
类型:

数组

rigid_contact_max#

忽略 rigid_mesh_contact_max 限制的情况下,要生成的潜在刚体接触点的最大数量。

类型:

int

rigid_contact_max_limited#

在遵守rigid_mesh_contact_max限制的情况下,要生成的潜在刚体接触点的最大数量。

类型:

int

rigid_mesh_contact_max#

每个网格要生成的刚体接触点的最大数量(0 = 无限制,默认值)

类型:

int

rigid_contact_margin#

用于生成刚体接触的接触边距

类型:

float

rigid_contact_torsional_friction#

刚体接触的扭转摩擦系数(由XPBDIntegrator使用)

类型:

float

rigid_contact_rolling_friction#

刚体接触的滚动摩擦系数(由XPBDIntegrator使用)

类型:

float

rigid_contact_count#

活动形状-形状接触的数量,形状 [1],int

类型:

数组

rigid_contact_point0#

相对于物体0的框架的接触点,形状 [rigid_contact_max],vec3

类型:

数组

rigid_contact_point1#

相对于物体1的框架的接触点,形状 [rigid_contact_max],vec3

类型:

数组

rigid_contact_offset0#

由于相对于物体0的接触厚度造成的接触偏移,形状 [rigid_contact_max],vec3

类型:

数组

rigid_contact_offset1#

由于相对于物体1的接触厚度造成的接触偏移,形状 [rigid_contact_max],vec3

类型:

数组

rigid_contact_normal#

世界空间中的接触法线,形状 [rigid_contact_max],vec3

类型:

数组

rigid_contact_thickness#

总接触厚度,形状 [rigid_contact_max],float

类型:

数组

rigid_contact_shape0#

每个接触的形状0的索引,形状 [rigid_contact_max],int

类型:

数组

rigid_contact_shape1#

每个接触的形状1的索引,形状 [rigid_contact_max],int

类型:

数组

rigid_contact_tids#

接触点的三角形索引,形状 [rigid_contact_max],int

类型:

数组

rigid_contact_pairwise_counter#

用于接触生成的成对计数器,形状 [rigid_contact_max],int

类型:

数组

rigid_contact_broad_shape0#

每个接触的形状0的Broadphase形状索引,形状 [rigid_contact_max],int

类型:

数组

rigid_contact_broad_shape1#

每个接触的形状1的Broadphase形状索引,形状 [rigid_contact_max],int

类型:

数组

rigid_contact_point_id#

接触点ID,形状 [rigid_contact_max],int

类型:

数组

rigid_contact_point_limit#

接触点限制,形状 [rigid_contact_max],int

类型:

数组

ground#

是否启用地平面和地面接触

类型:

bool

ground_plane#

地平面3D法线和偏移量,形状 [4],float

类型:

数组

up_vector#

世界的向上向量,形状 [3],float

类型:

np.ndarray

up_axis#

向上轴,0代表x,1代表y,2代表z

类型:

int

gravity#

重力向量,形状 [3],float

类型:

np.ndarray

particle_count#

系统中粒子的总数

类型:

int

body_count#

系统中物体的总数

类型:

int

shape_count#

系统中形状的总数

类型:

int

joint_count#

系统中关节的总数

类型:

int

tri_count#

系统中三角形的总数

类型:

int

tet_count#

系统中四面体的总数

类型:

int

edge_count#

系统中边的总数

类型:

int

spring_count#

系统中弹簧的总数

类型:

int

contact_count#

系统中接触的总数

类型:

int

muscle_count#

系统中肌肉的总数

类型:

int

articulation_count#

系统中铰接的总数

类型:

int

joint_dof_count#

系统中所有关节的速度自由度的总数

类型:

int

joint_coord_count#

系统中所有关节的位置自由度的总数

类型:

int

particle_coloring#

所有粒子的着色,用于 VBD 的 Gauss-Seidel 迭代。

类型:

list of array

device#

Model 被分配到的设备

类型:

wp.Device

注意

强烈建议使用 ModelBuilder 来构建模拟,而不是直接创建自己的 Model 对象,但如果需要,也可以这样做。

__init__(device=None)[source]#
state(requires_grad=None)[source]#

返回模型的状态对象

返回的状态将使用模型描述中给出的初始配置进行初始化。

参数:

requires_grad (bool) – 手动覆盖状态变量是否应启用requires_grad(默认为None以使用模型的设置requires_grad

返回值:

状态对象

返回类型:

State

control(requires_grad=None, clone_variables=True)[source]#

返回模型的控制对象。

返回的控制对象将使用模型描述中给出的控制输入进行初始化。

参数:
  • requires_grad (bool) – 手动覆盖控制变量是否应启用requires_grad(默认为None以使用模型的设置requires_grad

  • clone_variables (bool) – 是否克隆控制输入或使用原始数据

返回值:

控制对象

返回类型:

Control

allocate_soft_contacts(count, requires_grad=False)[source]#
find_shape_contact_pairs()[源代码]#
count_contact_points()[源代码]#

计算需要分配的最大刚体接触点数量。此函数返回两个值,分别对应于不包括来自 Model.rigid_mesh_contact_max 的限制的潜在最大接触点数量,以及考虑 Model.rigid_mesh_contact_max 限制时可能生成的最大接触点数量。

返回值:

  • potential_count (int):潜在的接触点数量

  • actual_count (int):实际的接触点数量

allocate_rigid_contacts(
target=None,
count=None,
limited_contact_count=None,
requires_grad=False,
)[源代码]#
property soft_contact_max[源代码]#

可以注册的最大软接触数量

class warp.sim.ModelShapeMaterials#
cls[源代码]#

别名:ModelShapeMaterials

ctype[源代码]#

别名:StructType

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#
cls[源代码]#

别名:ModelShapeGeometry

ctype[源代码]#

别名:StructType

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,
)[源代码]#

描述一个关节轴,该关节轴可以具有限制并被驱动到目标。

axis#

此 JointAxis 对象描述的 3D 轴,或者是要从中复制的另一个 JointAxis 对象

类型:

3D 向量或 JointAxis

limit_lower#

关节轴的下限位

类型:

float

limit_upper#

关节轴的上限位置限制

类型:

float

limit_ke#

关节轴限制的弹性刚度,仅被 SemiImplicitIntegratorFeatherstoneIntegrator 认可

类型:

float

limit_kd#

关节轴限制的阻尼刚度,仅被 SemiImplicitIntegratorFeatherstoneIntegrator 认可

类型:

float

action#

默认应用于此关节轴的力,或是关节轴的目标位置或速度(取决于模式,请参阅 关节模式

类型:

float

target_ke#

关节轴目标驱动 PD 控制器的比例增益

类型:

float

target_kd#

关节轴目标驱动 PD 控制器的微分增益

类型:

float

mode#

关节轴的模式,请参阅 关节模式

类型:

int

__init__(
,
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,
)[源代码]#
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]

indices#

网格索引作为顶点索引的扁平化列表,描述三角形

类型:

List[int]

I#

假设密度为 1.0 的网格的 3x3 惯性矩阵(围绕质心)

类型:

Mat33

mass#

假设密度为 1.0 的物体的总质量

类型:

float

com#

物体的质心

类型:

Vec3

__init__(vertices, indices, compute_inertia=True, is_solid=True)[源代码]#

从三角形网格构造 Mesh 对象

将自动使用密度 1.0 计算网格质心和惯性张量。 仅当网格闭合(双流形)时,此计算才有效。

参数:
  • vertices (List[List[float]]) – 网格中的顶点列表

  • indices (List[int]) – 三角形索引的列表,每个元素 3 个

  • compute_inertia – 如果为 True,则将计算质量、惯性张量和质心,假设密度为 1.0

  • is_solid – 如果为 True,则在惯性计算期间假定网格是实心的,否则假定网格是空心表面

finalize(device=None)[源代码]#

从网格数据构造一个可用于仿真的 Mesh 对象,并返回其 ID。

参数:

device – 用于分配网格缓冲区的设备

返回值:

可用于仿真的 Mesh 的 ID

参数:
  • vertices (List[Vec3])

  • indices (List[int])

class warp.sim.SDF(volume=None, I=None, mass=1.0, com=None)[源代码]#

描述用于仿真的有符号距离场

volume#

定义 SDF 的体

类型:

Volume

I#

SDF 的 3x3 惯性矩阵

类型:

Mat33

mass#

SDF 的总质量

类型:

float

com#

SDF 的质心

类型:

Vec3

__init__(volume=None, I=None, mass=1.0, com=None)[源代码]#
finalize(device=None)[源代码]#

关节类型#

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_keModel.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() 函数创建。

__init__()[source]#
particle_q: array | None#

形状为 (particle_count,) 且类型为 vec3 的 3D 粒子位置数组。

particle_qd: array | None#

形状为 (particle_count,) 且类型为 vec3 的 3D 粒子速度数组。

particle_f: array | None#

形状为 (particle_count,) 且类型为 vec3 的 3D 粒子力数组。

body_q: array | None#

形状为 (body_count,) 且类型为 transform 的最大坐标系中的物体坐标(7 自由度变换)数组。

body_qd: array | None#

形状为 (body_count,) 且类型为 spatial_vector 的最大坐标系中的物体速度数组(前三个条目表示角速度,后三个条目表示线速度)。

body_f: array | None#

形状为 (body_count,) 且类型为 spatial_vector 的最大坐标系中的物体力数组(前三个条目表示扭矩,后三个条目表示线性力)。

注意

body_f 表示世界坐标系中的外部扳手,并表示针对所有积分器(除了 FeatherstoneIntegrator)相对于物体质心测量的扳手,后者假定扳手是相对于世界原点测量的。

joint_q: array | None#

形状为 (joint_coord_count,) 且类型为 float 的广义关节坐标数组。

joint_qd: array | None#

形状为 (joint_dof_count,) 且类型为 float 的广义关节速度数组。

clear_forces()[source]#

清除状态对象中的所有力(对于粒子和物体)。

返回类型:

property requires_grad: bool[source]#

指示状态数组是否启用梯度计算。

property body_count: int[source]#

状态中表示的刚体数量。

property particle_count: int[source]#

状态中表示的粒子数量。

property joint_coord_count: int[source]#

状态中表示的广义关节位置坐标数量。

property joint_dof_count: int[source]#

状态中表示的广义关节速度坐标数量。

控制#

class warp.sim.Control(model=None)[source]#

用于 Model 的时变控制数据。

时变控制数据包括关节控制输入、肌肉激活以及三角形和四面体元素的激活力。

确切的属性取决于模型的内容。控制对象通常应使用 Model.control() 函数创建。

参数:

model (Model)

__init__(model=None)[source]#
参数:

model (Model)

joint_act: array | None#

关节控制输入数组,形状为 (joint_axis_count,),类型为 float

tri_activations: array | None#

三角形元素激活数组,形状为 (tri_count,),类型为 float

tet_activations: array | None#

四面体元素激活数组,形状为 (tet_count,) and type ``float

muscle_activations: array | None#

肌肉激活数组,形状为 (muscle_count,),类型为 float

clear()[source]#

将控制输入重置为零。

返回类型:

reset()[source]#

将控制输入重置为零。

返回类型:

正向/逆向运动学#

铰接刚体机构通过连接刚体的关节以及父刚体和子刚体到父刚体和子刚体中相应锚固框架的相对变换进行运动学描述

../_images/joint_transforms.png
来自 articulation.py 的内核中的变量名#

符号

描述

x_wp

父刚体的世界变换(存储在 State.body_q 中)

x_wc

子刚体的世界变换(存储在 State.body_q 中)

x_pj

从父刚体到关节父锚固框架的变换(由 Model.joint_X_p 定义)

x_cj

从子刚体到关节子锚固框架的变换(由 Model.joint_X_c 定义)

x_j

从关节父锚固框架到关节子锚固框架的关节变换

在正向运动学中,关节变换由关节坐标(广义关节位置 State.joint_q 和速度 State.joint_qd)确定。给定父刚体的世界变换 \(x_{wp}\) 和关节变换 \(x_{j}\),子刚体的世界变换 \(x_{wc}\) 计算为

\[x_{wc} = x_{wp} \cdot x_{pj} \cdot x_{j} \cdot x_{cj}^{-1}.\]
warp.sim.eval_fk(model, joint_q, joint_qd, mask, state)[source]#

根据关节坐标评估模型的正向运动学,并更新状态的刚体信息(State.body_qState.body_qd)。

参数:
  • model (Model) – 要评估的模型。

  • joint_q (array) – 广义关节位置坐标,形状 [joint_coord_count],浮点型

  • joint_qd (array) – 广义关节速度坐标,形状 [joint_dof_count],浮点型

  • mask (array) – 用于启用/禁用关节的 FK 的掩码。如果为 None,则将所有关节都视为已启用,形状 [articulation_count],整型/布尔型

  • state (State) – 要更新的状态。

warp.sim.eval_ik(model, state, joint_q, joint_qd)[source]#

根据状态的身体信息(State.body_qState.body_qd)评估模型的逆运动学,并更新广义关节坐标 joint_qjoint_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]#

积分器的通用基类。提供积分刚体和粒子的方法。

integrate_bodies(
model,
state_in,
state_out,
dt,
angular_damping=0.0,
)[source]#

积分模型的刚体。

参数:
  • model (Model) – 要积分的模型。

  • state_in (State) – 输入状态。

  • state_out (State) – 输出状态。

  • dt (float) – 时间步长(通常以秒为单位)。

  • angular_damping (float, 可选) – 角度阻尼系数。默认为 0.0。

integrate_particles(model, state_in, state_out, dt)[source]#

积分模型的粒子。

参数:
  • model (Model) – 要积分的模型。

  • state_in (State) – 输入状态。

  • state_out (State) – 输出状态。

  • dt (float) – 时间步长(通常以秒为单位)。

simulate(model, state_in, state_out, dt, control=None)[source]#

使用给定的控制输入,在给定的时间步长内模拟模型。

参数:
  • model (Model) – 要模拟的模型。

  • state_in (State) – 输入状态。

  • state_out (State) – 输出状态。

  • dt (float) – 时间步长(通常以秒为单位)。

  • control (Control) – 控制输入。默认为 None,这意味着使用来自 Model 的控制值。

class warp.sim.SemiImplicitIntegrator(angular_damping=0.05, friction_smoothing=1.0)[source]#

使用辛 Euler 的半隐式积分器

构建 ModelState 对象后,可以使用此时间积分器来推动模拟状态随时间前进。

半隐式时间积分是一种保留能量的变分积分器,但它并非无条件稳定,需要足够小的时间步长来支持所需的刚度和阻尼力。

参见: 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)
参数:
  • angular_damping (float)

  • friction_smoothing (float)

__init__(
angular_damping=0.05,
friction_smoothing=1.0,
)[source]#
参数:
  • angular_damping (float, 可选) – 角度阻尼系数。默认为 0.05。

  • friction_smoothing (float, 可选) – Huber 范数的 delta 值(参见 warp.math.norm_huber()),用于摩擦速度归一化。默认为 1.0。

simulate(
model,
state_in,
state_out,
dt,
control=None,
)[source]#

使用给定的控制输入,在给定的时间步长内模拟模型。

参数:
  • model (Model) – 要模拟的模型。

  • state_in (State) – 输入状态。

  • state_out (State) – 输出状态。

  • dt (float) – 时间步长(通常以秒为单位)。

  • control (Control) – 控制输入。默认为 None,这意味着使用来自 Model 的控制值。

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,
)[source]#

一个隐式积分器,使用 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

构建 ModelStateControl(可选)对象后,可以使用此时间积分器来推动模拟状态随时间前进。

示例

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,
)[source]#
apply_particle_deltas(
model,
state_in,
state_out,
particle_deltas,
dt,
)[source]#
参数:
apply_body_deltas(
model,
state_in,
state_out,
body_deltas,
dt,
rigid_contact_inv_weight=None,
)[source]#
参数:
simulate(model, state_in, state_out, dt, control=None)[source]#

使用给定的控制输入,在给定的时间步长内模拟模型。

参数:
  • model (Model) – 要模拟的模型。

  • state_in (State) – 输入状态。

  • state_out (State) – 输出状态。

  • dt (float) – 时间步长(通常以秒为单位)。

  • control (Control) – 控制输入。默认为 None,这意味着使用来自 Model 的控制值。

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,
)[source]#

一个半隐式积分器,使用辛欧拉算法在简化(也称为广义)坐标上运行,以基于 Featherstone 的复合刚体算法 (CRBA) 模拟铰接刚体动力学。

参见:Featherstone, Roy. Rigid Body Dynamics Algorithms. Springer US, 2014.

SemiImplicitIntegrator 的情况不同,State.body_q (刚体位置)和 State.body_qd (刚体速度)是最大坐标。 FeatherstoneIntegrator 使用 State.joint_qState.joint_qd 来表示关节的位置和速度,而不允许任何冗余的自由度。

构造 ModelState 对象后,可以使用此时间积分器将模拟状态在时间上向前推进。

注意

SemiImplicitIntegratorXPBDIntegrator 不同,如果刚体没有通过任何关节连接,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,
)[source]#
参数:
  • 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。

compute_articulation_indices(model)[source]#
allocate_model_aux_vars(model)[source]#
allocate_state_aux_vars(
model,
目标,
需要梯度,
)[source]#
simulate(
model,
state_in,
state_out,
dt,
control=None,
)[source]#

使用给定的控制输入,在给定的时间步长内模拟模型。

参数:
  • model (Model) – 要模拟的模型。

  • state_in (State) – 输入状态。

  • state_out (State) – 输出状态。

  • dt (float) – 时间步长(通常以秒为单位)。

  • control (Control) – 控制输入。默认为 None,这意味着使用来自 Model 的控制值。

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,
)[source]#

一个使用顶点块下降 (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,
)[source]#
参数:

model (Model)

compute_force_element_adjacency(model)[source]#
simulate(model, state_in, state_out, dt, control=None)[source]#

使用给定的控制输入,在给定的时间步长内模拟模型。

参数:
  • model (Model) – 要模拟的模型。

  • state_in (State) – 输入状态。

  • state_out (State) – 输出状态。

  • dt (float) – 时间步长(通常以秒为单位)。

  • control (Control) – 控制输入。默认为 None,这意味着使用来自 Model 的控制值。

simulate_one_step_no_self_contact(
model,
state_in,
state_out,
dt,
control=None,
)[source]#
参数:
simulate_one_step_with_collisions_penetration_free(
model,
state_in,
state_out,
dt,
control=None,
)[source]#
参数:
collision_detection_penetration_free(current_state, dt)[source]#
convert_body_particle_contact_data()[source]#
count_num_adjacent_edges = <warp.context.Kernel object>#
参数:
  • edges_array (array(ndim=2, dtype=int32))

  • num_vertex_adjacent_edges (array(ndim=1, dtype=int32))

fill_adjacent_edges = <warp.context.Kernel object>#
参数:
  • edges_array (array(ndim=2, dtype=int32))

  • vertex_adjacent_edges_offsets (array(ndim=1, dtype=int32))

  • vertex_adjacent_edges_fill_count (array(ndim=1, dtype=int32))

  • vertex_adjacent_edges (array(ndim=1, dtype=int32))

count_num_adjacent_faces = <warp.context.Kernel object>#
参数:
  • face_indices (array(ndim=2, dtype=int32))

  • num_vertex_adjacent_faces (array(ndim=1, dtype=int32))

fill_adjacent_faces = <warp.context.Kernel object>#
参数:
  • face_indices (array(ndim=2, dtype=int32))

  • vertex_adjacent_faces_offsets (array(ndim=1, dtype=int32))

  • vertex_adjacent_faces_fill_count (array(ndim=1, dtype=int32))

  • vertex_adjacent_faces (array(ndim=1, dtype=int32))

碰撞#

形状用于定义模拟中刚体的几何体。没有父物体的形状被认为是静态形状。使用 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_MESH#

三角网格形状,参见 Mesh

warp.sim.GEO_SDF#

有符号距离场(体积)形状,参见 SDF

warp.sim.GEO_PLANE#

矩形平面形状(如果宽度或长度设置为 0,则无限)

除了粒子与这些形状的碰撞之外,还支持以下刚体形状碰撞

粒子

球体

立方体

胶囊体

圆柱体

锥体

网格

SDF

平面

粒子

球体

立方体

胶囊体

圆柱体

锥体

网格

SDF

平面

warp.sim.collide(
model,
state,
edge_sdf_iter=10,
iterate_mesh_vertices=True,
requires_grad=None,
)[source]#

为模型中的粒子和刚体生成接触点,以用于接触动力学内核。

参数:
  • model (Model) – 要模拟的模型。

  • state (State) – 模型的状态。

  • edge_sdf_iter (int) – 寻找边和 SDF 之间最近接触点的搜索迭代次数。

  • iterate_mesh_vertices (bool) – 是否迭代网格的所有顶点以进行接触生成(用于胶囊体/立方体 <> 网格碰撞)。

  • requires_grad (bool | None) – 是否复制接触数组以进行梯度计算(如果 None, 使用 model.requires_grad)。

返回类型:

导入器#

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,
)[source]#

解析 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,
)[source]#

解析 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,
)[source]#

解析包含用于刚体连接的 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.resolve_usd_from_url(url, target_folder_name=None, export_usda=False)[source]#

从 URL 下载 USD 文件,并将对其他 USD 文件的所有引用解析为要下载到给定目标文件夹的文件。

参数:
  • url (str) – USD 文件的 URL。

  • target_folder_name (str) – 目标文件夹名称。如果为 None,则将在当前目录中创建一个带时间戳的文件夹。

  • export_usda (bool) – 如果为 True,则将每个下载的 USD 文件转换为 USDA,并将额外的 USDA 文件以与原始 USD 文件相同的基本名称保存在目标文件夹中。

返回值:

下载的 USD 文件的文件路径。

返回类型:

str

实用程序函数#

模拟器中使用的通用实用程序函数。

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

参数:
  • q (quat) – 要转换的四元数

  • i (int) – 第一个轴的索引

  • j (int) – 第二个轴的索引

  • k (int) – 第三个轴的索引

返回值:

欧拉角(弧度制)

返回类型:

vec3

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。

参数:
  • e (vec3) – 欧拉角(弧度制)

  • i (int) – 第一个轴的索引

  • j (int) – 第二个轴的索引

  • k (int) – 第三个轴的索引

返回值:

四元数

返回类型:

quat

warp.sim.load_mesh(filename, method=None)[源代码]#

从文件加载 3D 三角形表面网格。

参数:
  • filename (str) – 要加载的 3D 模型文件(obj 和不同方法支持的其他格式)的路径。

  • method (str) – 用于加载网格的方法(默认为 None)。可以是 “trimesh”“meshio”“pcu”“openmesh”。 如果为 None,则会尝试每种方法,并返回第一个成功导入且顶点数大于 0 的网格。

返回值:

(mesh_points, mesh_indices) 的元组,其中 mesh_points 是一个 Nx3 numpy 数组,包含顶点位置(float32),mesh_indices 是一个 Mx3 numpy 数组,包含三角形面的顶点索引(int32)。