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:
ModelABD-IPC-Robots Model
- ABD_centers: <warp.types.array object at 0x759da315a5f0>¶
- 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)¶
- 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 0x759e5ca9e8c0>¶
- a_y: <warp.types.array object at 0x759da315a2f0>¶
- 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 0x759da315a950>¶
- affine_ext_force_field: <warp.types.array object at 0x759da315a590>¶
- affine_ext_y_force: <warp.types.array object at 0x759da315a5c0>¶
- affine_flipped: <warp.types.array object at 0x759da315a8f0>¶
- affine_is_closed: <warp.types.array object at 0x759da315a8c0>¶
- affine_mass_matrix: <warp.types.array object at 0x759da315a890>¶
- affine_mass_xi: <warp.types.array object at 0x759da315a920>¶
- 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 0x759da314dab0>¶
- arap_stretch_k: <warp.types.array object at 0x759da314da80>¶
- bending: <warp.types.array object at 0x759da314db10>¶
- bending_e: <warp.types.array object at 0x759da314db70>¶
- bending_h: <warp.types.array object at 0x759da314dba0>¶
- bending_rest_angle: <warp.types.array object at 0x759da314db40>¶
- bending_stiffness: <warp.types.array object at 0x759da314dbd0>¶
- body_collision_layer: <warp.types.array object at 0x759da315a7d0>¶
- body_enable_self_collision: <warp.types.array object at 0x759da315a770>¶
- body_env_id: <warp.types.array object at 0x759da315a7a0>¶
- body_is_affine: <warp.types.array object at 0x759da315a740>¶
- body_q: <warp.types.array object at 0x759da315aa70>¶
- body_qd: <warp.types.array object at 0x759da315aaa0>¶
- check_initial_state_valid(exclude_self_collision: bool = False) bool¶
- clear_grad() None¶
- collision_layer_filter: <warp.types.array object at 0x759da315a800>¶
- property collision_map¶
- disable_affine_kinematic_constraint(handle: TetMeshBodyHandle | TriMeshBodyHandle) None¶
- property dx_div_dv_scale¶
- edge: <warp.types.array object at 0x759da314d060>¶
- edge2body: <warp.types.array object at 0x759da315a710>¶
- edge2env: <warp.types.array object at 0x759da315a650>¶
- edge_area: <warp.types.array object at 0x759da3159e70>¶
- edge_stretching_stiffness: <warp.types.array object at 0x759da314dae0>¶
- edge_xi: <warp.types.array object at 0x759da3159ed0>¶
- enable_affine_kinematic_constraint(handle: TetMeshBodyHandle | TriMeshBodyHandle) None¶
- env_origins: <warp.types.array object at 0x759da315aa40>¶
- env_states: <warp.types.array object at 0x759da315a830>¶
- face: <warp.types.array object at 0x759da314d8d0>¶
- face2body: <warp.types.array object at 0x759da315a6e0>¶
- face2env: <warp.types.array object at 0x759da315a680>¶
- face_xi: <warp.types.array object at 0x759da3159f00>¶
- finalize() None¶
- fn_x: <warp.types.array object at 0x759da3159de0>¶
- ft_x: <warp.types.array object at 0x759da3159e10>¶
- 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_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]]¶
- half_space_mu: <warp.types.array object at 0x759da315aa10>¶
- half_space_n: <warp.types.array object at 0x759da315a9b0>¶
- half_space_o: <warp.types.array object at 0x759da315a9e0>¶
- hat_x: <warp.types.array object at 0x759da3159d50>¶
- hat_y: <warp.types.array object at 0x759da3159fc0>¶
- 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(x: array, y: array) None¶
- initialize_tilde_x_y(x: array, y: array) None¶
- initialize_tilde_x_y_adjoint(x: array, y: array) None¶
- mass_body: <warp.types.array object at 0x759da3159f60>¶
- 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 0x759da315a6b0>¶
- node2env: <warp.types.array object at 0x759da315a620>¶
- node_area: <warp.types.array object at 0x759da3159e40>¶
- node_xi: <warp.types.array object at 0x759da3159ea0>¶
- 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 0x759e5ca9e8f0>¶
- particle_qd: <warp.types.array object at 0x759da3159d80>¶
- particle_qdd: <warp.types.array object at 0x759da3159db0>¶
- requires_grad(flag=True) None¶
- reset_environement(env_id)¶
- safeguard_direction_x(direction_x: array) None¶
- save_sim_x_to_xt(sim_x: array) None¶
- property scale¶
- 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 0x759da314d930>¶
- soft_shell_IB: <warp.types.array object at 0x759da314d900>¶
- property soft_shell_elastic_connectivity_num: int¶
- property soft_shell_elastic_connectivity_offset: int¶
- soft_shell_elem_vol: <warp.types.array object at 0x759da314d990>¶
- soft_shell_nu: <warp.types.array object at 0x759da314d960>¶
- property soft_shell_tris_num¶
- soft_tet_E: <warp.types.array object at 0x759da314d9c0>¶
- soft_tet_IB: <warp.types.array object at 0x759da314da20>¶
- soft_tet_elem_vol: <warp.types.array object at 0x759da314da50>¶
- soft_tet_nu: <warp.types.array object at 0x759da314d9f0>¶
- soft_tilde_x: <warp.types.array object at 0x759da3159f90>¶
- soft_verts_mass: <warp.types.array object at 0x759da315a980>¶
- 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 0x759da3159cc0>¶
- stitch_map: <warp.types.array object at 0x759da3159cf0>¶
- stitch_num_per_x: <warp.types.array object at 0x759da3159d20>¶
- surf_vi: <warp.types.array object at 0x759da312d990>¶
- sys_to_x(sys_direction: array, direction_x: array) None¶
- property tac_handles: list[list[TetMeshBodyHandle]]¶
- tet_envs: <warp.types.array object at 0x759da315a860>¶
- tets: <warp.types.array object at 0x759da314d8a0>¶
- tilde_y: <warp.types.array object at 0x759da315a440>¶
- v_y: <warp.types.array object at 0x759da315a1a0>¶
- vol_body: <warp.types.array object at 0x759da3159f30>¶
- 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 0x759da314d030>¶
- y: <warp.types.array object at 0x759da3159ff0>¶
- y_to_x(direction: array, direction_x: array) None¶