Support Multi-part Collision Geometry#946
Conversation
Greptile SummaryThis PR introduces the contracts for multi-part collision geometry. It adds a
Confidence Score: 4/5Safe to merge; all changes are additive defaults with no effect on existing behaviour. The core logic —
Important Files Changed
Class Diagram%%{init: {'theme': 'neutral'}}%%
classDiagram
class CollisionObject {
<<Protocol>>
+name: str
+collision_mode: CollisionMode | None
+get_bounding_box() AxisAlignedBoundingBox
+get_world_bounding_box() AxisAlignedBoundingBox
+get_collision_mesh() Trimesh | None
}
class PlacementAsset {
<<Abstract>>
+get_bounding_box() AxisAlignedBoundingBox
+get_relation_bounding_box() AxisAlignedBoundingBox
+get_collision_components() list~CollisionComponent~
+get_collision_mesh() Trimesh | None
}
class CollisionComponent {
<<dataclass, frozen>>
+name: str
+local_pose: Pose
+bounding_box: AxisAlignedBoundingBox
+mesh: Trimesh | None
}
class AxisAlignedBoundingBox {
+min_point: Tensor
+max_point: Tensor
+num_envs: int
+union(boxes)$ AxisAlignedBoundingBox
+overlaps(other) Tensor
}
PlacementAsset ..|> CollisionObject : structural subtype
PlacementAsset "1" --> "*" CollisionComponent : get_collision_components()
CollisionComponent --> AxisAlignedBoundingBox : bounding_box
PlacementAsset --> AxisAlignedBoundingBox : get_bounding_box / get_relation_bounding_box
|
🤖 Isaac Lab-Arena Review BotSummaryThis PR adds pure-domain contracts for multi-part collision geometry: a frozen Design, Boundaries & ScopeAll four new pieces ( Findings🔵 Improvement: placement_asset.py:98 — New methods (and Test CoverageGood. VerdictShip it — just confirm the contracts-ahead-of-consumer sequencing is intentional. |
ee9f659 to
dedf07a
Compare
Signed-off-by: zhx06 <zihaox@nvidia.com>
Signed-off-by: zhx06 <zihaox@nvidia.com>
Signed-off-by: zhx06 <zihaox@nvidia.com>
e680d5c to
5f63733
Compare
Summary
Contracts for multi-part collision geometry.
Detailed description
CollisionComponent, a rigid sub-volume with a pose, per-env bounding box, and optional mesh.AxisAlignedBoundingBox.unionto merge boxes.PlacementAsset.get_relation_bounding_box()andget_collision_components(), defaulting to one component per asset.