ASR Model APIs¶
The Affine-Soft-Robot (ASR) Model includes the states for * Affine bodies * Soft bodies * Robots, with vision-based tactile sensors as soft bodies
- class warp_ipc.sim_model.ASRModel(num_envs: int = 1, viz_envs: list[int] = [], device='cuda:0')¶
Bases:
Model
ABD-IPC-Robots Model
- ABD_centers: <warp.types.array object at 0x7f4c9a1be2f0>¶
- class KinematicConstraintHelper(model: ASRModel, initial_stiffness: float = 10000.0)¶
Bases:
object
- increase_stiffness(factor: float = 2.0)¶
- init() None ¶
- initialize_stiffness()¶
- is_satisfied()¶
- project_system(sm, sys_grad)¶
- reset()¶
- reset_dof_satisfied()¶
- set_initial_stiffness(initial_stiffness: float = 10000.0)¶
- update_satisfied(x, y, dt: float, tol: float)¶
- class LinearConstraintHelper(model: ASRModel)¶
Bases:
object
- add_constraint(constraint_row: asarray)¶
- add_constraints(constraint_rows: asarray)¶
- finalize()¶
- init()¶
- project_system(hess: BsrMatrix, grad: array)¶
- X: <warp.types.array object at 0x7f4cac9233a0>¶
- a_y: <warp.types.array object at 0x7f4c9a1bdff0>¶
- add_affine_body(x, face, density, E, mu, mass_xi: None | float = None, env_id: int = 0, nu: float = 0.3) TriMeshBodyHandle ¶
- add_garment_stitch(stitches)¶
- add_plane(n, o, mu) None ¶
- add_robot(urdf_path: str, env_id: int = 0, start_coll_layer: int = 2, coll_layers: list[int] = [], disable_coll_layers: list[int] = [], mu: float = 0.3, self_collision: bool = False, **kwargs)¶
- add_soft_shell_body(mesh, edge_stretching_stiffness: float = 0, density: float = 1000, E: float = 0, nu: float = 0.3, compression_softening: float = 0, bending_stiffness: float = 0, mu: float = 0, xi: float = 0.001, mass_thickness: None | float = None, env_id: int = 0) TriMeshBodyHandle ¶
Constitutive model: Baraff-Witkin and dihedral angle bendings NOTE: Since this repository is only for POC, interfaces functionality will be limited. This function must be called after all affine bodies are added. add_soft_vol_body must be called after all soft shell bodies are added.
- add_soft_vol_body(mesh: UnstructuredGrid, density: float, E: float, nu: float, mu: float, env_id: int = 0, coll_layer: int = 0, self_coll: bool = True) TetMeshBodyHandle ¶
Constitutive model: Neo-Hookean/StVK for now; TODO: Corotated Linear NOTE: Since this repository is only for POC, interfaces functionality will be limited. This function must be called after all affine bodies are added.
- add_world_prismatic_joint(handle: TetMeshBodyHandle | TriMeshBodyHandle, axis: ndarray[Any, dtype[_ScalarType_co]]) WorldJointHandle ¶
- add_world_revolute_joint(handle: TetMeshBodyHandle | TriMeshBodyHandle, local_axis_position: ndarray[Any, dtype[_ScalarType_co]], axis_direction: ndarray[Any, dtype[_ScalarType_co]]) WorldJointHandle ¶
- property affine_body_num: int¶
- affine_density: <warp.types.array object at 0x7f4c9a1be650>¶
- affine_ext_force_field: <warp.types.array object at 0x7f4c9a1be290>¶
- affine_ext_y_force: <warp.types.array object at 0x7f4c9a1be2c0>¶
- affine_flipped: <warp.types.array object at 0x7f4c9a1be5f0>¶
- affine_is_closed: <warp.types.array object at 0x7f4c9a1be5c0>¶
- affine_mass_matrix: <warp.types.array object at 0x7f4c9a1be590>¶
- affine_mass_xi: <warp.types.array object at 0x7f4c9a1be620>¶
- allocate_sim_cache()¶
- append_sim_data(attr: str, values: asarray, type) None ¶
- apply_set_state(x=None, y=None) None ¶
call apply set state manually mainly for initial scene visualization purpose
- arap_compression_k: <warp.types.array object at 0x7f4c9a1ad7b0>¶
- arap_stretch_k: <warp.types.array object at 0x7f4c9a1ad780>¶
- bending: <warp.types.array object at 0x7f4c9a1ad810>¶
- bending_e: <warp.types.array object at 0x7f4c9a1bd930>¶
- bending_h: <warp.types.array object at 0x7f4c9a1bd960>¶
- bending_rest_angle: <warp.types.array object at 0x7f4c9a1bd900>¶
- bending_stiffness: <warp.types.array object at 0x7f4c9a1bd990>¶
- body_collision_layer: <warp.types.array object at 0x7f4c9a1be4d0>¶
- body_enable_self_collision: <warp.types.array object at 0x7f4c9a1be470>¶
- body_env_id: <warp.types.array object at 0x7f4c9a1be4a0>¶
- body_is_affine: <warp.types.array object at 0x7f4c9a1be440>¶
- body_q: <warp.types.array object at 0x7f4c9a1be770>¶
- body_qd: <warp.types.array object at 0x7f4c9a1be7a0>¶
- check_initial_state_valid(exclude_self_collision: bool = False) bool ¶
- clear_force()¶
- clear_grad() None ¶
- collision_layer_filter: <warp.types.array object at 0x7f4c9a1be500>¶
- property collision_map¶
- dhat¶
IPC barrier active distance (m)
- dim: int¶
Dimension of the space, defualt to be 3 for 3D
- disable_affine_kinematic_constraint(handle: TetMeshBodyHandle | TriMeshBodyHandle) None ¶
- property dx_div_dv_scale¶
- dx_div_dv_scale_list¶
for quasi-static, implicit Euler, BDF-2
- edge: <warp.types.array object at 0x7f4c9a1acd60>¶
- edge2body: <warp.types.array object at 0x7f4c9a1be410>¶
- edge2env: <warp.types.array object at 0x7f4c9a1be350>¶
- edge_area: <warp.types.array object at 0x7f4c9a1bdb70>¶
- edge_stretching_stiffness: <warp.types.array object at 0x7f4c9a1ad7e0>¶
- edge_xi: <warp.types.array object at 0x7f4c9a1bdbd0>¶
- enable_affine_kinematic_constraint(handle: TetMeshBodyHandle | TriMeshBodyHandle) None ¶
- env_origins: <warp.types.array object at 0x7f4c9a1be740>¶
- env_states: <warp.types.array object at 0x7f4c9a1be530>¶
- epsv¶
Friction (m/s)
- face: <warp.types.array object at 0x7f4c9a1ad5d0>¶
- face2body: <warp.types.array object at 0x7f4c9a1be3e0>¶
- face2env: <warp.types.array object at 0x7f4c9a1be380>¶
- face_xi: <warp.types.array object at 0x7f4c9a1bdc00>¶
- finalize() None ¶
- fn_x: <warp.types.array object at 0x7f4c9a1bdae0>¶
- ft_x: <warp.types.array object at 0x7f4c9a1bdb10>¶
- get_affine_body_mesh_from_handle(handle: TriMeshBodyHandle) Trimesh ¶
- get_affine_body_meshes_from_handle(handles: List[TriMeshBodyHandle], concat=True) list[Trimesh] | Trimesh ¶
- get_affine_body_state(body_handle: TetMeshBodyHandle | TriMeshBodyHandle, return_numpy: bool = True) Tuple[ndarray[Any, dtype[_ScalarType_co]], ndarray[Any, dtype[_ScalarType_co]]] ¶
- get_affine_body_state_matrix(body_handle: TetMeshBodyHandle | TriMeshBodyHandle, return_numpy: bool = True) ndarray[Any, dtype[_ScalarType_co]] ¶
- get_affine_body_velocity(body_handle: TetMeshBodyHandle | TriMeshBodyHandle, return_numpy: bool = True) Tuple[ndarray[Any, dtype[_ScalarType_co]], ndarray[Any, dtype[_ScalarType_co]]] ¶
- get_affine_body_velocity_matrix(body_handle: TetMeshBodyHandle | TriMeshBodyHandle, return_numpy: bool = True) ndarray[Any, dtype[_ScalarType_co]] ¶
- get_affine_body_wp_meshes_from_handle(handles: list[TriMeshBodyHandle]) list[Mesh] ¶
- get_body_env_id(handle: TetMeshBodyHandle | TriMeshBodyHandle) int ¶
- get_body_face(handle: TetMeshBodyHandle | TriMeshBodyHandle) Tensor ¶
- get_body_mesh(handle: TetMeshBodyHandle | TriMeshBodyHandle)¶
- get_body_nodal_collision_force(handle: TetMeshBodyHandle | TriMeshBodyHandle, dt: float) Tensor ¶
- get_body_nodal_contact_force(handle: TetMeshBodyHandle | TriMeshBodyHandle, dt: float) Tensor ¶
- get_body_nodal_friction_force(handle: TetMeshBodyHandle | TriMeshBodyHandle, dt: float) Tensor ¶
- get_body_resultant_contact_force(handle: TetMeshBodyHandle | TriMeshBodyHandle, dt: float) Tensor ¶
- get_body_target_mesh(handle: TetMeshBodyHandle | TriMeshBodyHandle)¶
- get_body_x(handle: TetMeshBodyHandle | TriMeshBodyHandle) Tensor ¶
- get_body_x_target(handle: TetMeshBodyHandle | TriMeshBodyHandle) Tensor ¶
- get_element_by_handle(handle: TetMeshBodyHandle, return_numpy=True) Tuple[ndarray[Any, dtype[_ScalarType_co]], ndarray[Any, dtype[_ScalarType_co]]] ¶
- static get_env_pos(num_envs: int, n_row: int, n_col: int, env_spacing: float, device: str = 'cuda:0') tensor ¶
- get_environment_states()¶
- get_joint_value(joint_handle: WorldJointHandle) float ¶
- get_scene_mesh() Trimesh ¶
- get_soft_body_from_handle(handle: TetMeshBodyHandle) UnstructuredGrid ¶
- get_soft_body_mesh_from_handle(handle: TetMeshBodyHandle) Trimesh ¶
- get_soft_body_meshes_from_handle(handles: List[TetMeshBodyHandle], concat=True) list[Trimesh] | Trimesh ¶
- get_soft_body_pos(body_handle: TetMeshBodyHandle | TriMeshBodyHandle, return_numpy: bool = True) ndarray[Any, dtype[_ScalarType_co]] ¶
- get_soft_body_velocity(body_handle: TetMeshBodyHandle | TriMeshBodyHandle, return_numpy: bool = True) ndarray[Any, dtype[_ScalarType_co]] ¶
- get_soft_nodes_from_idxs(idxs: list[tuple[int, int]]) ndarray[Any, dtype[_ScalarType_co]] ¶
- get_soft_surf_verts_from_handle(handle: TetMeshBodyHandle | TriMeshBodyHandle) ndarray[Any, dtype[_ScalarType_co]] ¶
- get_soft_verts_from_handle(handle: TetMeshBodyHandle | TriMeshBodyHandle) ndarray[Any, dtype[_ScalarType_co]] ¶
- gravity¶
Gravity vector (m/s^2)
- half_space_mu: <warp.types.array object at 0x7f4c9a1be710>¶
- half_space_n: <warp.types.array object at 0x7f4c9a1be6b0>¶
- half_space_o: <warp.types.array object at 0x7f4c9a1be6e0>¶
- handle_EE¶
Handling edge-edge interpenetration; disabling makes the simulation faster.
- hat_x: <warp.types.array object at 0x7f4c9a1bda50>¶
- hat_y: <warp.types.array object at 0x7f4c9a1bdcc0>¶
- hess_affine_diag: COOMatrix3x3¶
- hess_barrier: COOMatrix3x3¶
- hess_friction: COOMatrix3x3¶
- hess_soft_bending_elastic: COOMatrix3x3¶
- hess_soft_diag: COOMatrix3x3¶
- hess_soft_shell_elastic: COOMatrix3x3¶
- hess_soft_vol_elastic: COOMatrix3x3¶
- hess_stitch: COOMatrix3x3¶
- init() None ¶
- initialize_hat_x_y() None ¶
- initialize_tilde_x_y(dt: float) None ¶
- initialize_tilde_x_y_adjoint(dt: float) None ¶
- k_elasticity_damping¶
Elasticity damping coefficient (Pa.s/m)
- kappa¶
IPC barrier stiffness (Pa)
- mass_body: <warp.types.array object at 0x7f4c9a1bdc60>¶
- merge_sys_grad() None ¶
- property n_affine_dofs: int¶
- property n_dofs: int¶
- negate(gradient: array) None ¶
- negate_vec12d(gradient: array) None ¶
- negate_vec3d(gradient: array) None ¶
- node2body: <warp.types.array object at 0x7f4c9a1be3b0>¶
- node2env: <warp.types.array object at 0x7f4c9a1be320>¶
- node_area: <warp.types.array object at 0x7f4c9a1bdb40>¶
- node_xi: <warp.types.array object at 0x7f4c9a1bdba0>¶
- property num_HS¶
- property num_body¶
- property num_cloth_edges¶
- property num_edge¶
- property num_face¶
- property num_surf_verts¶
- property num_x¶
- particle_q: <warp.types.array object at 0x7f4cac9233d0>¶
Node positions
- particle_qd: <warp.types.array object at 0x7f4c9a1bda80>¶
Node velocities
- particle_qdd: <warp.types.array object at 0x7f4c9a1bdab0>¶
Node accelerations
- particle_radius¶
Ground plane parameters for warp.sim visualization
- requires_grad(flag=True) None ¶
- reset_environement(env_id)¶
- safeguard_direction_x(direction_x: array) None ¶
- save_sim_x_to_xt() None ¶
- set_affine_external_force_field(handle: TetMeshBodyHandle | TriMeshBodyHandle, target_force_acceleration: ndarray[Any, dtype[_ScalarType_co]] | Tensor) None ¶
- set_affine_external_torque(handle: TetMeshBodyHandle | TriMeshBodyHandle, torque: ndarray[Any, dtype[_ScalarType_co]] | Tensor = tensor([0., 0., 0.], dtype=torch.float64)) None ¶
- set_affine_external_wrench(handle: TetMeshBodyHandle | TriMeshBodyHandle, target_force_acceleration: ndarray[Any, dtype[_ScalarType_co]] | Tensor, torque: ndarray[Any, dtype[_ScalarType_co]] | Tensor = tensor([0., 0., 0.], dtype=torch.float64)) None ¶
- set_affine_kinematic_target(handle: TetMeshBodyHandle | TriMeshBodyHandle, target_rot_mat: ndarray[Any, dtype[_ScalarType_co]] | Tensor, target_translation: ndarray[Any, dtype[_ScalarType_co]] | Tensor) None ¶
- set_affine_state(handle: TetMeshBodyHandle | TriMeshBodyHandle, rotation: ndarray[Any, dtype[_ScalarType_co]] | Tensor, translation: ndarray[Any, dtype[_ScalarType_co]] | Tensor) None ¶
- set_body_collision_layer(handle: TetMeshBodyHandle | TriMeshBodyHandle, layer_index: int) None ¶
- set_body_env_id(handle: TetMeshBodyHandle | TriMeshBodyHandle, env_id: int) None ¶
- set_body_self_collision(handle: TetMeshBodyHandle | TriMeshBodyHandle, to_enable: bool) None ¶
- set_collision_layer_filter(layer_i: int, layer_j: int, to_enable_collision: bool) None ¶
- set_kinematic_stiffness(weight) None ¶
- set_robot_state(joint_params: dict[str, float], root_tf: ndarray[Any, dtype[_ScalarType_co]] = array([[1., 0., 0., 0.], [0., 1., 0., 0.], [0., 0., 1., 0.], [0., 0., 0., 1.]]), env_ids: list[int] = [])¶
- set_soft_kinematic_constraint(handle: TetMeshBodyHandle | TriMeshBodyHandle, verts_mask: ndarray[Any, dtype[_ScalarType_co]] | Tensor) None ¶
- set_soft_kinematic_target(handle: TetMeshBodyHandle | TriMeshBodyHandle, target_verts: ndarray[Any, dtype[_ScalarType_co]] | Tensor) None ¶
- set_soft_state(handle: TetMeshBodyHandle | TriMeshBodyHandle, positions: ndarray[Any, dtype[_ScalarType_co]] | Tensor) None ¶
- property shape_count_sim: int¶
- property soft_bending_connectivity_num: int¶
- property soft_kinematic_constraint: Tensor¶
- property soft_kinematic_target: Tensor¶
- soft_shell_E: <warp.types.array object at 0x7f4c9a1ad630>¶
- soft_shell_IB: <warp.types.array object at 0x7f4c9a1ad600>¶
- property soft_shell_elastic_connectivity_num: int¶
- property soft_shell_elastic_connectivity_offset: int¶
- soft_shell_elem_vol: <warp.types.array object at 0x7f4c9a1ad690>¶
- soft_shell_nu: <warp.types.array object at 0x7f4c9a1ad660>¶
- property soft_shell_tris_num¶
- soft_tet_E: <warp.types.array object at 0x7f4c9a1ad6c0>¶
- soft_tet_IB: <warp.types.array object at 0x7f4c9a1ad720>¶
- soft_tet_elem_vol: <warp.types.array object at 0x7f4c9a1ad750>¶
- soft_tet_nu: <warp.types.array object at 0x7f4c9a1ad6f0>¶
- soft_tilde_x: <warp.types.array object at 0x7f4c9a1bdc90>¶
- soft_verts_mass: <warp.types.array object at 0x7f4c9a1be680>¶
- property soft_verts_num¶
- property soft_vol_body_offset: int¶
- property soft_vol_elastic_connectivity_num: int¶
- property soft_vol_tets_num¶
- state(requires_grad=None) State ¶
Returns a state object for the model
The returned state will be initialized with the initial configuration given in the model description.
- Parameters:
requires_grad (bool) – Manual overwrite whether the state variables should have requires_grad enabled (defaults to None to use the model’s setting
requires_grad
)- Returns:
The state object
- Return type:
State
- step(dt)¶
- stitch: <warp.types.array object at 0x7f4c9a1bd9c0>¶
- stitch_map: <warp.types.array object at 0x7f4c9a1bd9f0>¶
- stitch_num_per_x: <warp.types.array object at 0x7f4c9a1bda20>¶
- surf_vi: <warp.types.array object at 0x7f4c9a1957e0>¶
- sys_to_x(sys_direction: array, direction_x: array) None ¶
- property tac_handles: list[list[TetMeshBodyHandle]]¶
- tet_envs: <warp.types.array object at 0x7f4c9a1be560>¶
- tets: <warp.types.array object at 0x7f4c9a1ad5a0>¶
- tilde_y: <warp.types.array object at 0x7f4c9a1be140>¶
- update_contact_force(dt: float) Tensor ¶
- v_y: <warp.types.array object at 0x7f4c9a1bdea0>¶
- vol_body: <warp.types.array object at 0x7f4c9a1bdc30>¶
- write_scene(filename: str, divide: bool = False, double_face: bool = False) None ¶
- write_target_scene(filename: str) None ¶
- property x_target: Tensor¶
update rigid targets
- Type:
TODO
- xt: <warp.types.array object at 0x7f4c9a1acd30>¶
- y: <warp.types.array object at 0x7f4c9a1bdcf0>¶
- y_to_x(direction: array, direction_x: array) None ¶