Class ObstacleGeometry

Inheritance Relationships

Derived Types

Class Documentation

class ObstacleGeometry

Abstract base class for obstacle geometry.

Each concrete subclass fully describes one obstacle shape (Sphere, Box, Cylinder, Ellipsoid, Capsule, Mesh) and implements the geometry-specific operations needed by PotentialFieldObstacle: signed-distance / normal computation, half-dimension queries, Coal shape construction, and control- point generation.

All operations that depend on the world-frame obstacle pose (position + orientation) are passed in as parameters so that the geometry object remains pose-independent and can be reused after a pose update.

Subclassed by pfield::BoxGeometry, pfield::CapsuleGeometry, pfield::CylinderGeometry, pfield::EllipsoidGeometry, pfield::MeshGeometry, pfield::SphereGeometry

Public Functions

virtual ~ObstacleGeometry() = default
virtual ObstacleType getType() const = 0

Returns the ObstacleType discriminator for this geometry.

virtual std::vector<double> asVector() const = 0

Returns a vector of the geometry’s defining parameters.

The vector layout is type-specific: Sphere → {radius} Box → {length, width, height} Cylinder → {radius, height} Ellipsoid → {semi_x, semi_y, semi_z} Capsule → {radius, height} Mesh → {length, width, height} (bounding-box dims or zeros)

virtual Eigen::Vector3d halfDimensions(const Eigen::Vector3d &meshScale) const = 0

Returns the half-dimensions of the obstacle’s axis-aligned bounding box.

Used for broad-phase influence-zone checks.

Parameters:

meshScale – Scale of the mesh resource (used only by MeshGeometry; ignored by all other types).

virtual void computeSignedDistanceAndNormal(const Eigen::Vector3d &localPoint, const Eigen::Quaterniond &obstacleOrientation, double &signedDistance, Eigen::Vector3d &normal) const = 0

Computes the signed distance and outward surface normal from a point expressed in the obstacle’s local frame.

The caller is responsible for transforming the world-frame query point into the obstacle’s local frame before calling this method.

Parameters:
  • localPoint[in] Query point in the obstacle’s local frame.

  • obstacleOrientation[in] World-frame orientation of the obstacle (quaternion), used to rotate the computed normal back to world coordinates.

  • signedDistance[out] Signed distance to the obstacle surface (negative if inside, positive if outside).

  • normal[out] Outward unit normal in world coordinates at the closest surface point.

virtual std::shared_ptr<coal::CollisionGeometry> buildCoalGeometry(const Eigen::Vector3d &obstaclePosition, const Eigen::Quaterniond &obstacleOrientation, coal::Transform3s &coalTransform) const = 0

Builds the Coal collision geometry for this obstacle.

The returned shared_ptr is used to construct a coal::CollisionObject. The caller is responsible for supplying the correct world-frame transform.

Parameters:
  • obstaclePosition – World-frame position of the obstacle origin.

  • obstacleOrientation – World-frame orientation of the obstacle.

  • coalTransform[out] The Coal transform that should be passed to coal::CollisionObject together with the returned geometry. For most types this equals the obstacle pose, but OBB-fitted shapes (Box, Capsule) may shift and rotate it to the OBB center.

Returns:

Shared pointer to the Coal collision geometry.

virtual coal::Transform3s computeUpdatedCoalTransform(const Eigen::Vector3d &obstaclePosition, const Eigen::Quaterniond &obstacleOrientation) const = 0

Computes the world-frame Coal transform to use when updating a cached collision object’s pose.

For most types this simply encodes (obstaclePosition, obstacleOrientation). OBB-fitted types (Box, Capsule) adjust for the centroid offset and PCA rotation baked into the Coal object at construction time.

Parameters:
  • obstaclePosition – New world-frame position of the obstacle.

  • obstacleOrientation – New world-frame orientation of the obstacle.

Returns:

The Coal transform to apply to the cached collision object.

virtual bool operator==(const ObstacleGeometry &other) const = 0

Equality comparison — only types with the same concrete class and parameters are equal.

inline bool operator!=(const ObstacleGeometry &other) const
virtual std::unique_ptr<ObstacleGeometry> clone() const = 0

Deep-copy factory, so PotentialFieldObstacle can clone its geometry.

Protected Functions

ObstacleGeometry() = default
ObstacleGeometry(const ObstacleGeometry&) = default
ObstacleGeometry &operator=(const ObstacleGeometry&) = default