Class AtlasChart
Defined in File AtlasChart.h
Nested Relationships
Nested Types
Class Documentation
-
class AtlasChart
Tangent space and bounding polytope approximating some patch of the manifold.
Public Functions
-
AtlasChart(const AtlasChart&) = delete
-
AtlasChart &operator=(const AtlasChart&) = delete
-
AtlasChart(const AtlasStateSpace *atlas, const AtlasStateSpace::StateType *state)
Create a tangent space chart for atlas with center at ambient space point xorigin.
- Throws:
ompl::Exception – when manifold seems degenerate here.
-
~AtlasChart()
Destructor.
-
void clear()
Forget all acquired information such as the halfspace boundary.
-
inline const AtlasStateSpace::StateType *getOrigin() const
Returns phi(0), the center of the chart in ambient space.
-
inline unsigned int getAmbientDimension() const
Returns the dimension of the ambient space.
-
inline unsigned int getManifoldDimension() const
Returns the dimension of the manifold.
-
void phi(const Eigen::Ref<const Eigen::VectorXd> &u, Eigen::Ref<Eigen::VectorXd> out) const
Rewrite a chart point u in ambient space coordinates and store the result in out, which should be allocated to size n_.
-
bool psi(const Eigen::Ref<const Eigen::VectorXd> &u, Eigen::Ref<Eigen::VectorXd> out) const
Exponential mapping. Project chart point u onto the manifold and store the result in out, which should be allocated to size n_.
-
void psiInverse(const Eigen::Ref<const Eigen::VectorXd> &x, Eigen::Ref<Eigen::VectorXd> out) const
Logarithmic mapping. Project ambient point x onto the chart and store the result in out, which should be allocated to size k_.
-
bool inPolytope(const Eigen::Ref<const Eigen::VectorXd> &u, const Halfspace *ignore1 = nullptr, const Halfspace *ignore2 = nullptr) const
Check if a point u on the chart lies within its polytope boundary. Can ignore up to 2 of the halfspaces if specified in ignore1 and ignore2.
-
void borderCheck(const Eigen::Ref<const Eigen::VectorXd> &v) const
Check if chart point v lies very close to any part of the boundary. Wherever it does, expand the neighboring chart’s boundary to include.
-
const AtlasChart *owningNeighbor(const Eigen::Ref<const Eigen::VectorXd> &x) const
Try to find an owner for ambient point \x from among the neighbors of this chart. Returns nullptr if none found.
-
bool toPolygon(std::vector<Eigen::VectorXd> &vertices) const
For manifolds of dimension 2, return in order in vertices the polygon boundary of this chart, including an approximation of the circular boundary where the polygon exceeds radius rho_. Returns true if a circular portion is included.
-
inline std::size_t getNeighborCount() const
Returns the number of charts this chart shares a halfspace boundary with.
-
bool estimateIsFrontier() const
Use sampling to make a quick estimate as to whether this chart’s polytope boundary is completely defined by its halfspaces.
Public Static Functions
-
static void generateHalfspace(AtlasChart *c1, AtlasChart *c2)
Create two complementary halfspaces dividing the space between charts c1 and c2, and add them to the charts’ polytopes boundaries.
Note
Charts must be different charts from the same atlas.
Protected Functions
Protected Attributes
-
const Constraint *constraint_
The constraint function that defines the manifold.
-
AtlasChart(const AtlasChart&) = delete