Class CapsuleGeometry
Defined in File pf_obstacle_geometry.hpp
Inheritance Relationships
Base Type
public pfield::ObstacleGeometry(Class ObstacleGeometry)
Class Documentation
-
class CapsuleGeometry : public pfield::ObstacleGeometry
Geometry for a capsule obstacle.
A capsule is a cylinder of radius
radiusand shaft lengthheightcapped at each end by a hemisphere of the same radius. The capsule axis is aligned with the local Z axis; total length = height + 2 * radius.Supports PCA-fitted capsules via
axes(OBB orientation, column 2 is the capsule Z axis) andcentroidOffset(offset to OBB center).SDF: distance from point to the nearest point on the capsule axis segment, minus the radius.
Public Functions
-
CapsuleGeometry(double radius, double height)
Constructs a CapsuleGeometry.
- Parameters:
radius – Radius of the cylinder shaft and hemispherical end caps.
height – Length of the cylindrical shaft (not including end caps).
-
CapsuleGeometry(double radius, double height, const Eigen::Matrix3d &axes, const Eigen::Vector3d ¢roidOffset)
Constructs an OBB-fitted CapsuleGeometry.
- Parameters:
radius – Radius of the shaft and end caps.
height – Shaft length (not including end caps).
axes – OBB rotation; column 2 is the capsule Z axis.
centroidOffset – Offset from the collision-origin to the OBB center, expressed in the obstacle’s local frame.
-
virtual ObstacleType getType() const override
Returns the ObstacleType discriminator for this geometry.
-
virtual std::vector<double> asVector() const override
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 override
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 override
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 override
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 override
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 override
Equality comparison — only types with the same concrete class and parameters are equal.
-
virtual std::unique_ptr<ObstacleGeometry> clone() const override
Deep-copy factory, so PotentialFieldObstacle can clone its geometry.
Public Members
-
double radius
Shaft and end-cap radius.
-
double height
Shaft length (excluding end caps).
-
Eigen::Matrix3d axes
OBB rotation (identity by default).
-
Eigen::Vector3d centroidOffset
OBB center offset (zero by default).
-
std::string sourceMeshResource
Mesh URI from which this capsule was fitted (empty if not mesh-derived).
-
Eigen::Vector3d sourceMeshScale = Eigen::Vector3d::Ones()
Mesh scale corresponding to
sourceMeshResource.
-
CapsuleGeometry(double radius, double height)