curobo.geom.sdf.world_mesh module

class WarpMeshData(
name: str,
m_id: int,
vertices: warp.types.array,
faces: warp.types.array,
mesh: warp.types.Mesh,
)

Bases: object

name: str
m_id: int
vertices: array
faces: array
mesh: Mesh
class WorldMeshCollision(
config: WorldCollisionConfig,
)

Bases: WorldPrimitiveCollision

World Mesh Collision using Nvidia’s warp library

This currently requires passing int64 array from torch to warp which is only available when compiled from source.

tensor_args: TensorDeviceType
_init_cache()
load_collision_model(
world_model: WorldConfig,
env_idx: int = 0,
load_obb_obs: bool = True,
fix_cache_reference: bool = False,
)
load_batch_collision_model(
world_config_list: List[WorldConfig],
)

Load a batch of collision environments from a list of world configs.

Parameters:

world_config_list – list of world configs to load from.

_load_mesh_to_warp(
mesh: Mesh,
)
_load_mesh_into_cache(
mesh: Mesh,
) WarpMeshData
_load_batch_mesh_to_warp(
mesh_list: List[Mesh],
)
add_mesh(
new_mesh: Mesh,
env_idx: int = 0,
)
get_mesh_idx(
name: str,
env_idx: int = 0,
) int
create_collision_cache(
mesh_cache=None,
obb_cache=None,
n_envs=None,
)
_create_mesh_cache(
mesh_cache,
)
update_mesh_pose(
w_obj_pose: Pose | None = None,
obj_w_pose: Pose | None = None,
name: str | None = None,
env_obj_idx: Tensor | None = None,
env_idx: int = 0,
)
update_all_mesh_pose(
w_obj_pose: Pose | None = None,
obj_w_pose: Pose | None = None,
name: List[str] | None = None,
env_obj_idx: Tensor | None = None,
env_idx: int = 0,
)

Update poses for a list of meshes in the same environment

Parameters:
  • w_obj_pose (Optional[Pose], optional) – _description_. Defaults to None.

  • obj_w_pose (Optional[Pose], optional) – _description_. Defaults to None.

  • name (Optional[List[str]], optional) – _description_. Defaults to None.

  • env_obj_idx (Optional[torch.Tensor], optional) – _description_. Defaults to None.

  • env_idx (int, optional) – _description_. Defaults to 0.

update_mesh_pose_env(
w_obj_pose: Pose | None = None,
obj_w_pose: Pose | None = None,
name: str | None = None,
env_obj_idx: Tensor | None = None,
env_idx: List[int] = [0],
)

Update pose of a single object in a list of environments

Parameters:
  • w_obj_pose (Optional[Pose], optional) – _description_. Defaults to None.

  • obj_w_pose (Optional[Pose], optional) – _description_. Defaults to None.

  • name (Optional[List[str]], optional) – _description_. Defaults to None.

  • env_obj_idx (Optional[torch.Tensor], optional) – _description_. Defaults to None.

  • env_idx (List[int], optional) – _description_. Defaults to [0].

update_mesh_from_warp(
warp_mesh_idx: int,
w_obj_pose: Pose | None = None,
obj_w_pose: Pose | None = None,
obj_idx: int = 0,
env_idx: int = 0,
name: str | None = None,
)
update_obstacle_pose(
name: str,
w_obj_pose: Pose,
env_idx: int = 0,
)
enable_obstacle(
name: str,
enable: bool = True,
env_idx: int = 0,
)
enable_mesh(
enable: bool = True,
name: str | None = None,
env_mesh_idx: Tensor | None = None,
env_idx: int = 0,
)

Update obstacle dimensions

Parameters:
_get_sdf(
query_spheres,
collision_query_buffer: CollisionQueryBuffer,
weight: Tensor,
activation_distance: Tensor,
env_query_idx=None,
return_loss=False,
compute_esdf=False,
)
_get_swept_sdf(
query_spheres,
collision_query_buffer: CollisionQueryBuffer,
weight: Tensor,
activation_distance: Tensor,
speed_dt: Tensor,
sweep_steps: int,
enable_speed_metric=False,
env_query_idx=None,
return_loss: bool = False,
)
get_sphere_distance(
query_sphere: Tensor,
collision_query_buffer: CollisionQueryBuffer,
weight: Tensor,
activation_distance: Tensor,
env_query_idx: Tensor | None = None,
return_loss: bool = False,
sum_collisions: bool = True,
compute_esdf: bool = False,
)

Computes the signed distance via analytic function Args: tensor_sphere: b, n, 4

get_sphere_collision(
query_sphere,
collision_query_buffer: CollisionQueryBuffer,
weight: Tensor,
activation_distance: Tensor,
env_query_idx=None,
return_loss=False,
**kwargs,
)

Computes the signed distance via analytic function Args: tensor_sphere: b, n, 4 we assume we don’t need gradient for this function. If you need gradient, use get_sphere_distance

get_swept_sphere_distance(
query_sphere,
collision_query_buffer: CollisionQueryBuffer,
weight: Tensor,
activation_distance: Tensor,
speed_dt: Tensor,
sweep_steps: int,
enable_speed_metric=False,
env_query_idx: Tensor | None = None,
return_loss: bool = False,
sum_collisions: bool = True,
)

Computes the signed distance via analytic function Args: tensor_sphere: b, n, 4

get_swept_sphere_collision(
query_sphere,
collision_query_buffer: CollisionQueryBuffer,
weight: Tensor,
sweep_steps,
activation_distance: Tensor,
speed_dt: Tensor,
enable_speed_metric=False,
env_query_idx: Tensor | None = None,
return_loss: bool = False,
)

Computes the signed distance via analytic function Args: tensor_sphere: b, n, 4

clear_cache()
_create_obb_cache(
obb_cache,
)
classmethod _get_obstacle_poses(
w_obj_pose: Pose | None = None,
obj_w_pose: Pose | None = None,
)
_load_collision_model_in_cache(
world_config: WorldConfig,
env_idx: int = 0,
fix_cache_reference: bool = False,
)
add_obb(
cuboid: Cuboid,
env_idx: int = 0,
)
add_obb_from_raw(
name: str,
dims: Tensor,
env_idx: int,
w_obj_pose: Pose | None = None,
obj_w_pose: Pose | None = None,
)

Args: dims: lenght, width, height position: x,y,z rotation: matrix (3x3)

cache: Dict[Obstacle, int] | None = None
checker_type: CollisionCheckerType = 'PRIMITIVE'
clear_voxelization_cache()
enable_obb(
enable: bool = True,
name: str | None = None,
env_obj_idx: Tensor | None = None,
env_idx: int = 0,
)

Update obstacle dimensions

Parameters:
get_esdf_in_bounding_box(
cuboid: Cuboid = Cuboid(name='test', pose=[0, 0, 0, 1, 0, 0, 0], scale=None, color=None, texture_id=None, texture=None, material=Material(metallic=0.0, roughness=0.4), tensor_args=TensorDeviceType(device=device(type='cuda', index=0), dtype=torch.float32, collision_geometry_dtype=torch.float32, collision_gradient_dtype=torch.float32, collision_distance_dtype=torch.float32), dims=[1, 1, 1]),
voxel_size: float = 0.02,
dtype=torch.float32,
) VoxelGrid
get_mesh_in_bounding_box(
cuboid: Cuboid = Cuboid(name='test', pose=[0, 0, 0, 1, 0, 0, 0], scale=None, color=None, texture_id=None, texture=None, material=Material(metallic=0.0, roughness=0.4), tensor_args=TensorDeviceType(device=device(type='cuda', index=0), dtype=torch.float32, collision_geometry_dtype=torch.float32, collision_gradient_dtype=torch.float32, collision_distance_dtype=torch.float32), dims=[1, 1, 1]),
voxel_size: float = 0.02,
) Mesh
get_obb_idx(
name: str,
env_idx: int = 0,
) int
get_occupancy_in_bounding_box(
cuboid: Cuboid = Cuboid(name='test', pose=[0, 0, 0, 1, 0, 0, 0], scale=None, color=None, texture_id=None, texture=None, material=Material(metallic=0.0, roughness=0.4), tensor_args=TensorDeviceType(device=device(type='cuda', index=0), dtype=torch.float32, collision_geometry_dtype=torch.float32, collision_gradient_dtype=torch.float32, collision_distance_dtype=torch.float32), dims=[1, 1, 1]),
voxel_size: float = 0.02,
) VoxelGrid
get_sphere_trace(
query_sphere,
collision_query_buffer: CollisionQueryBuffer,
weight: Tensor,
sweep_steps: int,
env_query_idx: Tensor | None = None,
return_loss: bool = False,
)
get_voxels_in_bounding_box(
cuboid: Cuboid = Cuboid(name='test', pose=[0, 0, 0, 1, 0, 0, 0], scale=None, color=None, texture_id=None, texture=None, material=Material(metallic=0.0, roughness=0.4), tensor_args=TensorDeviceType(device=device(type='cuda', index=0), dtype=torch.float32, collision_geometry_dtype=torch.float32, collision_gradient_dtype=torch.float32, collision_distance_dtype=torch.float32), dims=[1, 1, 1]),
voxel_size: float = 0.02,
) List[Cuboid] | Tensor
static load_from_dict(
world_coll_checker_dict: Dict,
world_model_dict: WorldConfig | Dict | List[WorldConfig] | None = None,
tensor_args: TensorDeviceType = TensorDeviceType(device=device(type='cuda', index=0), dtype=torch.float32, collision_geometry_dtype=torch.float32, collision_gradient_dtype=torch.float32, collision_distance_dtype=torch.float32),
)
max_distance: torch.Tensor | float = 0.1
max_esdf_distance: torch.Tensor | float = 100.0
n_envs: int = 1
update_cache_voxelization(
new_grid: VoxelGrid,
)
update_obb_dims(
obj_dims: Tensor,
name: str | None = None,
env_obj_idx: Tensor | None = None,
env_idx: int = 0,
)

Update obstacle dimensions

Parameters:
update_obb_pose(
w_obj_pose: Pose | None = None,
obj_w_pose: Pose | None = None,
name: str | None = None,
env_obj_idx: Tensor | None = None,
env_idx: int = 0,
)

Update pose of a specific objects. This also updates the signed distance grid to account for the updated object pose. Args: obj_w_pose: Pose obj_idx:

world_model: List[WorldConfig] | WorldConfig | None = None