chart.h File Reference IntroductionDefinition of a local chart on a point on a manifold. Definition in file chart.h.
Macro Definition Documentation◆ COMPUTE_LQRPOLICY_IN_T
If 1, we use the procedure based on closed form expressions depending on the time (T). Otherwise, we use the standard approach based on the Runge-Kutta integration rule (recursive formulas instead of closed expresions). The later is less accurate but may be faster. This flag is defined here since the selected produre has influence in the data computed and stored in the chart after linearizing the dynamics. ◆ PLOT_ON_MANIFOLD
Charts are defined as polytopes in the tangent space. If the error is large the vertices of these polytopes are quite far away from the manifold and the plots have apparent gaps between the different charts. Those gaps can be minimized projecting the vertices of the charts to the manifold before plotting. Note: When using large charts this should be set to zero (points far away from the chart center do not properly converge to the manifold). ◆ PLOT_AS_POLYGONS
In general a chart is ploted using the edges between the vertices bounding the chart area of influence. For 2D manifolds the representation can be enhanced. In this case the edges define a polygon that can be filled. This results in a smoother graphical representation. ◆ MIN_SAMPLING_RADIUS
Function Documentation◆ InitChart()
Defines a new chart that locally parametrizes a manifold. This chart is supposed to be on a regular point. Otherwise an error is triggered. We do not extract m and k from the number of variables/equations in the world since our systems are overconstrained (we include redundant equations).
Definition at line 791 of file chart.c. References FALSE, InitChartInt(), and TRUE. Referenced by AddChart2Atlas(), ConnectDynamicStates(), ConnectDynamicStatesID(), ConnectSamplesChart(), ExtendAtlasFromPoint(), ExtendAtlasTowardPoint(), InitAtlasFromPoint(), main(), NewChartFromPoint(), and NewTemptativeSample(). ◆ InitPossiblySingularChart()
The same as InitChart but for charts possibly defined from singular points. No error is triggered if the point is not regular and charts are not forced to be singular.
Definition at line 799 of file chart.c. References FALSE, InitChartInt(), and TRUE. Referenced by FindSingularPoint(). ◆ InitSingularChart()
The same as InitChart but for charts defined from singular points. Charts as marked as singular even if numerically they are determined to be regular.
Definition at line 807 of file chart.c. References FALSE, InitChartInt(), and TRUE. Referenced by DefineChartsAtBifurcation(). ◆ InitTrustedChart()
The same as InitChart but for points that are for sure on the manifold and collision free.
Definition at line 815 of file chart.c. References FALSE, InitChartInt(), and TRUE. Referenced by AddChart2AtlasRRT(), AddTrustedChart2Atlas(), GradientSmooth(), and PathEffort(). ◆ InitChartWithTangent()
Defines a new chart that locally parametrizes a manifold. This is like InitChart but here the tangent space is given instead of computed from the Jacobian. This is used during branch switching where the tangent space is computed externally.
Definition at line 823 of file chart.c. References FALSE, InitChartInt(), and TRUE. Referenced by DefineChartsAtBifurcation(). ◆ SetLinearizedDynamics()
Stores the linearized dynamic information in the chart. The linearization is supposed to be defined in the chart center (but is up to the caller to define the linearization point). This can be seen as a complement to the constructor that is only used in dynamical systems. Note that we do not only store the provided information but also some products of the given matrices to speed up dynamic computations. CAUTION: In this method we re-use (point to) the buffers provided by the caller so, please, do not free them!. They will be freed when deleting the chart.
Definition at line 832 of file chart.c. References Tchart::A, Tchart::B, Tchart::BiRBt, Tchart::c, Tchart::d, Tchart::da, DeleteLS(), Error(), GetLSMatrixBuffer(), GetLSRHBuffer(), GetLSSolutionBuffer(), InitLS(), Tchart::iRBt, Tchart::k, LSSolve(), MatrixMatrixProduct(), MatrixTMatrixProduct(), NEW, NEWZ, and SymmetrizeMatrix(). Referenced by UpdateLQRPolicy(). ◆ GetLinearizedDynamics()
Returns the information stored in the chart using SetLinearizedDynamics and the derived information.
Definition at line 872 of file chart.c. References Tchart::A, Tchart::B, Tchart::BiRBt, Tchart::c, Tchart::d, and Tchart::iRBt. Referenced by UpdateLQRPolicy(). ◆ CopyChart()Copies one chart into another.
Definition at line 883 of file chart.c. References Tchart::A, Tchart::B, Tchart::BiRBt, Tchart::BJ, Tchart::c, Tchart::center, CopyPolytope(), CopySPolytope(), Tchart::d, Tchart::da, Tchart::degree, Tchart::eCurv, Tchart::error, Tchart::frontier, Tchart::iRBt, Tchart::k, Tchart::l, Tchart::m, Tchart::ml, Tchart::n, NEW, Tchart::nl, Tchart::nrJ, Tchart::p, Tchart::r, Tchart::simple, Tchart::singular, Tchart::sp, Tchart::T, and Tchart::w. Referenced by AddChart2AtlasRRT(), GradientSmooth(), and main(). ◆ CompareTangentSpaces()Computes the norm of the product of the tangent spaces on two charts. If they are similar, the norm of the resulting matrix must be below epsilon (the error). The comparison between tangent spaces is based on measuring the principal angles between the sub-spaces. Intuitively, similar sub-spaces have angles between them close to 0 or to pi.
Definition at line 981 of file chart.c. References Tchart::eCurv, Error(), Tchart::k, Tchart::m, MatrixDeterminant(), NEW, Tchart::T, TMatrixMatrixProduct(), and Tchart::w. Referenced by FindSingularPoint(), and IntersectChartsInt(). ◆ MinCosinusBetweenCharts()This is a wrapper for MinCosinusBetweenSubSpaces that can be used with charts.
Definition at line 1002 of file chart.c. References Error(), Tchart::k, Tchart::m, MinCosinusBetweenSubSpaces(), Tchart::T, and Tchart::w. Referenced by DefineChartsAtBifurcation(), and FindSingularPoint(). ◆ GetChartWorld()
Returns a pointer to the world structure with the system of equations defining the manifold. This is used to determine is two charts are defined on the same manifold (i.e., the same world).
Definition at line 1014 of file chart.c. References Tchart::w. ◆ GetChartCenter()
Returns a pointer to the point from which the local chart is defined
Definition at line 1019 of file chart.c. References Tchart::center. Referenced by AddChart2Btree(), AtlasAStar(), AtlasGBF(), BuildAtlasFromPoint(), DetermineChartNeighbours(), ExtendAtlasTowardPoint(), FindSingularPoint(), GeodesicDistance(), HaveChartAtPoint(), InitBTree(), MinimizeOnAtlas(), NextDynamicState(), PlotAtlas(), PlotBifurcations(), PlotQrand(), PointTowardRandSample(), ReconstructAtlasPath(), RefineSingularPoint(), SaveChartCenters(), SaveSingularCharts(), SearchInBtree(), Time2GoNNToTree(), TriangulateAtlas(), and UpdateLQRPolicy(). ◆ GetChartRadius()
Returns the radious of influence for the chart.
Definition at line 1024 of file chart.c. References Tchart::r. Referenced by ExtendAtlasTowardPoint(), and InitBTree(). ◆ GetChartSamplingRadius()
Returns the adjusted radious of influence for the chart. Right now there is no difference between the radius and the sampling radious. This can change in the future.
Definition at line 1029 of file chart.c. References Error(), Tchart::simple, Tchart::sp, and SPolytopeGetSamplingRadius(). Referenced by PrintAtlasRRTStatistics(), and RandomPointInAtlasTree(). ◆ GetChartMaxError()
Returns the maximum error between the chart and the manifold.
Definition at line 1036 of file chart.c. References Tchart::error. ◆ GetChartMaxCurvError()
Returns the maximum oriented curvature error between the chart and the manifold.
Definition at line 1041 of file chart.c. References Tchart::eCurv. ◆ GetChartAmbientDim()
Returns the dimensionality of the ambient space where the manifold is defined
Definition at line 1046 of file chart.c. References Tchart::m. Referenced by InitBTree(). ◆ GetChartManifoldDim()
◆ GetChartTangentSpace()
Returns a pointer to the matrix defining a basis of the chart tangent space. This matrix is m x k.
Definition at line 1056 of file chart.c. References Tchart::T. Referenced by AtlasRRTValidateSample(), DefineChartsAtBifurcation(), DetectBifurcation(), FindRightNullVector(), FindSingularPoint(), MinimizeOnAtlas(), NextDynamicState(), NextDynamicStateLocalEuler(), NextDynamicStateLocalRK4(), PointTowardRandSample(), RefineSingularPoint(), StepDispersionGradient(), StepEffort(), StepEffortGradient(), StepLengthGradient(), Time2Go(), and UpdateLQRPolicy(). ◆ SingularChart()Returns TRUE for charts defined on singularities (i.e., points where the Jacobian is not full rang).
Definition at line 1066 of file chart.c. References Tchart::singular. Referenced by AddChart2AtlasRRT(), DetectBifurcation(), ExtendAtlasFromPoint(), ExtendAtlasTowardPoint(), FindSingularPoint(), PlotAtlas(), and SaveSingularCharts(). ◆ GetChartJacobianBasis()Returns a pointer to an array of booleans indicating the linearly independent vectors of the Jacobian. This can be NULL if the Jacobian basis is not yet computed.
Definition at line 1061 of file chart.c. References Tchart::BJ. Referenced by GetPositionJacobian(). ◆ GetChartDegree()
The degree the modulo 2 of the number of non-negative real eigenvalues (i.e., possitive, or complex) of the squared matrix formed by the Jacobian in the top rows and the transposed tangent space (given in the function call) in the bottom rows. The degree of a chart is the degree for the center of this chart (i.e., the Jacobian is evaluated at the center of the chart). The degree is used to detect bifurcations (a change in the degree between two points on the manifold indicates that the line connecting the points crosses a bifurcation. Note that for this procedure to work effectively, we have to use the same tangent space to complement the Jacobian of the two points to be tested. That is, we use the tangent space of one of the points to evaluate the degrees of the two points. That is, the degree is not something intrinsec of a chart that can be computed and stored forever but depends on couples of charts (that use the same tangent space). When computing the degree for a pair of charts (a,b) we use the tangent space of a for the two evaluations. We use the cached degree for a and compute that of b from scratch using the tangent space of a. If we evaluate the possible existance of a bifurcation in between (b,a) we re-use the cached degree in b and we recompute that for a using the tangent space of b.
Definition at line 1071 of file chart.c. References Tchart::BJ, Tchart::center, CT_EPSILON, Tchart::degree, Error(), EvaluateJacobianSubSetInVector(), FALSE, GetParameter(), Tchart::k, Tchart::m, MatrixDeterminantSgn(), Tchart::n, NEW, NO_UINT, PrintMatrix(), PrintVector(), Tchart::singular, SubMatrixFromTMatrix(), Tchart::T, and TRUE. Referenced by DetectBifurcation(), and FindSingularPoint(). ◆ Manifold2Chart()
Returns the parametrization on the tangent space of a point on the manifold. In principle any point can be projected to the tangent space, even those given parameters out of the radius of the chart. This corresponds to the logarithmic map in differential geometry. In some cases we have to take into account the topology of the ambient space and in others not. When trying to determine which charts are neighbours, we take it into account so that we obtain the closest projection of a point to the current chart center. When defining RRT branches on the tangnent space the topology is not considered so that we define the correct advance direction towards the random/goal sample. We directly project the points to the tangent space, without transforming the point to project into canonical form (i.e,. move it in the range -pi,pi for the dimensions with circular topology). It is the user option to transform the point to project before actually projecting it. Observe that transforming a point before projecting it can actually generate a set of parameters that do not give the shortest displacement to the projected sample. This is critical when defining RRT-like structures using the charts.
Definition at line 1122 of file chart.c. References ArrayPi2Pi(), Tchart::center, DifferenceVector(), DifferenceVectorTopology(), Tchart::k, Tchart::m, Tchart::n, NEW, Norm(), Tchart::T, and TMatrixVectorProduct(). Referenced by AddBranchToAtlasDynamicRRT(), AddBranchToAtlasRRT(), AddChart2AtlasRRT(), AtlasRRTValidateSample(), ClassifyPointInChart(), ConnectDynamicStatesID(), ConnectSamplesChart(), DynamicStepResidue(), Error2Chart(), FindSingularPoint(), FocusedPointOnBoundary(), ForceChartCut(), GetRRTNNInChart(), IntersectChartsInt(), main(), NewTemptativeSample(), PointOnChart(), PointTowardRandSample(), PopulateWithSamples(), ReconstructAtlasPath(), and Time2GoNNToTree(). ◆ Chart2Manifold()
Returns a point in the mainifold corresponding to a set of parameters in a given chart. Note that not all parameters can be savely mapped to the manifold. The implicit function theorem guarantees the mapping to be valid for a ball around the linealization point. In principle this ball should reach the singularity locus possibly sourronding the central point. However, this mapping is implemented using a numerical procedure than can fail to converge even far from the singularity frontier. This corresponds to the exponential map in differential geometry. In many cases, this function not applies the pi2pi mapping since the output points can be used with many purposes (not only creating new charts). Thus, this function can produce points larger/smaller than pi/-pi in circular dimensions. The trick here is:
To skip the pi2pi mapping just call the function with tp set to NULL.
Definition at line 1156 of file chart.c. References ArrayPi2Pi(), Tchart::BJ, Tchart::center, CS_WD_EVALUATE_SIMP_EQUATIONS, CS_WD_EVALUATE_SUBSET_SIMP_EQUATIONS, CT_EPSILON, CT_MAX_NEWTON_ITERATIONS, DeleteLS(), DifferenceVectorTopology(), DistanceTopology(), Error(), EvaluateJacobianInVector(), EvaluateJacobianSubSetInVector(), FALSE, GetLSMatrixBuffer(), GetLSRHBuffer(), GetLSSolutionBuffer(), GetParameter(), INF, InitLS(), Tchart::k, Local2Global(), LSSolve(), Tchart::m, Tchart::n, NEW, Norm(), Tchart::nrJ, PI2PI, SubMatrixFromTMatrix(), SumVector(), Tchart::T, TMatrixVectorProduct(), TOPOLOGY_S, TRUE, and Tchart::w. Referenced by AtlasRRTSample(), AtlasRRTValidateSample(), ChartVolume(), ClassifyPointInChart(), ConnectSamplesChart(), DistanceOnChart(), ExtendAtlasFromPoint(), ExtendAtlasTowardPoint(), FindSingularPoint(), GradientSmooth(), LinearizeDynamics(), main(), MinimizeOnAtlas(), NewChartFromPoint(), NewTemptativeSample(), NextDynamicState(), NextDynamicStateLocalEuler(), NextDynamicStateLocalRK4(), PathInChart(), PlotChart(), PlotChartAsPolygon(), PointOnChart(), and StepCostNumericalGradient(). ◆ Local2Global()
Uses the center and the base of the tangent space to generate a point in ambient space from a parameter set in tangent space.
Definition at line 1301 of file chart.c. References AccumulateVector(), ArrayPi2Pi(), Tchart::center, Tchart::k, Tchart::m, MatrixVectorProduct(), Tchart::n, SumVector(), and Tchart::T. Referenced by AtlasRRTValidateSample(), Chart2Manifold(), ChartErrorFromParameters(), ConnectDynamicStatesID(), CutPolytopeWithFace(), PlotAtlasRRT(), PlotChart(), PlotChartAsPolygon(), PlotQrand(), PointTowardRandSample(), and RandomPointInChart(). ◆ ChartErrorFromParameters()
Transforms t to the ambient space (via Local2Global) and compute the distance to p. The point p and the paramters t are supposed to correspond each other (via the Chart2Manifold and Manifold2Chart mappings). In this way we compute the distance from the manifold to the tangent space for a given point.
Definition at line 1318 of file chart.c. References DistanceTopology(), Local2Global(), Tchart::m, Tchart::n, and NEW. Referenced by Error2Chart(). ◆ Error2Chart()
Basically combines Manifold2Chart with ChartErrorFromParameters.
Definition at line 1336 of file chart.c. References ChartErrorFromParameters(), Tchart::k, Manifold2Chart(), Tchart::n, and NEW. ◆ CloseCharts()
Determines if two local charts are close and have similar tangent spaces.
Definition at line 1353 of file chart.c. References FALSE, IntersectChartsInt(), and NO_UINT. Referenced by ExtendAtlasFromPoint(), ExtendAtlasTowardPoint(), NewChartFromPoint(), and NewTemptativeSample(). ◆ IntersectCharts()
Determines if two chart are neighbours and intersect the corresponding polytopes.
Definition at line 1359 of file chart.c. References IntersectChartsInt(), and TRUE. Referenced by DetermineChartNeighbours(). ◆ CollisionChart()Identifies charts that are in collision
Definition at line 1366 of file chart.c. References Tchart::collision. Referenced by ExtendAtlasFromPoint(), ExtendAtlasTowardPoint(), and NewChartFromPoint(). ◆ FrontierChart()Identifies charts that are at the borders of the domain.
Definition at line 1371 of file chart.c. References Tchart::frontier. Referenced by AtlasVolume(), InitAtlasFromPoint(), MinimizeOnAtlas(), and PlotAtlas(). ◆ ChartIsFrontier()
Marks a chart as a frontier chart. Frontier charts are note expanded.
Definition at line 1376 of file chart.c. References Tchart::frontier, and TRUE. Referenced by ExtendAtlasFromPoint(), and NewChartFromPoint(). ◆ ExpandibleChart()TRUE for external (frontier) charts, i.e., charts that can be used to expand the atlas. If the chart is based on simple polytope this function will trigger an error since simple polytopes can not identify open charts.
Definition at line 1381 of file chart.c. References Error(), ExpandiblePolytope(), Tchart::frontier, Tchart::p, and Tchart::simple. Referenced by AtlasAStar(), AtlasGBF(), FocusedPointOnBoundary(), and PlotAtlas(). ◆ OpenChart()TRUE for charts with polytope vertices still outside the ball. Those vertices can still be used to generate neighbours for the chart. If the chart is based on simple polytope this function will return TRUE always since for simple polytopes it is not possible to determine if a chart is closed or not. This is equivalent to ExpandibleChart but this function does not trigger error for charts based on simple polytopes.
Definition at line 1389 of file chart.c. References ExpandiblePolytope(), Tchart::p, and Tchart::simple. Referenced by BuildAtlasFromPoint(). ◆ WrongCorner()
Wrapper for WrongPolytopeCorner.
Definition at line 1394 of file chart.c. References Error(), Tchart::p, Tchart::simple, and WrongPolytopeCorner(). Referenced by AtlasAStar(), and BuildAtlasFromPoint(). ◆ InsideChartPolytope()Wrapper for InsidePolytope (or InsideSPolytope).
Definition at line 1402 of file chart.c. References InsidePolytope(), InsideSPolytope(), Tchart::p, Tchart::simple, and Tchart::sp. Referenced by ClassifyPointInChart(), NewTemptativeSample(), and PointOnChart(). ◆ DetermineChartNeighbour()
This function determines the neighbouring chart that includes a point inside the chart radius but outside the polytope. This is implemented determining the chart borders crossed when moving to the point.
Definition at line 1410 of file chart.c. References DetermineSPolytopeNeighbour(), Error(), NO_UINT, Tchart::simple, and Tchart::sp. Referenced by NewTemptativeSample(), and PopulateWithSamples(). ◆ EnlargeChart()
Ensures that a chart includes a given point possibly modifying the faces enlarging the polytope. Note that this function is not implemented for normal polytpes since moving a face will represent to recompute all vertices and this is too expensive. Thus, this function is only used from AtlasRRT where charts are defined with simple polytopes.
Definition at line 1421 of file chart.c. References EnlargeSPolytope(), Error(), Tchart::simple, and Tchart::sp. Referenced by AddChart2AtlasRRT(), NewTemptativeSample(), and PopulateWithSamples(). ◆ BoundaryPointFromExternalCorner()Wapper for PolytopeBoundaryPointFromExternalCorner.
Definition at line 1429 of file chart.c. References Error(), Tchart::p, PolytopeBoundaryPointFromExternalCorner(), Tchart::r, and Tchart::simple. Referenced by AtlasAStar(), and BuildAtlasFromPoint(). ◆ BoundaryPointsFromExternalCorners()
This is the same as BoundaryPointFromExternalCorner but instead of selecting one vertex returns points for all the possible vertices. This is used when parallelizing the generation of children charts from a given chart.
Definition at line 1441 of file chart.c. References Error(), Tchart::p, PolytopeBoundaryPointsFromExternalCorners(), Tchart::r, and Tchart::simple. ◆ RandomPointOnBoundary()Wrapper for PolytopeRandomPointOnBoundary.
Definition at line 1449 of file chart.c. References Tchart::p, PolytopeRandomPointOnBoundary(), Tchart::r, Tchart::simple, Tchart::sp, and SPolytopeRandomPointOnBoundary(). Referenced by AtlasGBF(). ◆ RandomPointInChart()
Selects a point on a chart with uniform distribution. Points are given in the tangent space associated with the chart and not on the manifold. However, given the chart manifold, a point on the tangent is supposed to give a point on the manifold. This is basically a wrapper RandomPointInPolytope plus a conversion of local points to global.
Definition at line 1461 of file chart.c. References Local2Global(), Tchart::p, RandomPointInPolytope(), RandomPointInSPolytope(), Tchart::simple, and Tchart::sp. Referenced by RandomPointInAtlas(), and RandomPointInAtlasTree(). ◆ IncreaseChartSamplingRadius()
Valid sampling on a chart leads to an increment of the sampling area.
Definition at line 1476 of file chart.c. References Tchart::simple, Tchart::sp, and SPolytopeIncreaseSamplingRadius(). Referenced by AtlasRRT(), and AtlasRRTSample(). ◆ DecreaseChartSamplingRadius()
Rejection sampling on a chart leads to a reduction of the sampling area.
Definition at line 1482 of file chart.c. References Tchart::simple, Tchart::sp, and SPolytopeDecreaseSamplingRadius(). Referenced by AtlasRRT(), and AtlasRRTSample(). ◆ ChartMaxVolume()
This is a simplified version of ChartVolume where collisions are not taken into account. Thus this returns an upper bound approximation of the collision free volume of the chart. This is used to fix some thresholds in RRT*.
Definition at line 1488 of file chart.c. References Tchart::p, PolytopeVolume(), Tchart::simple, Tchart::sp, and SPolytopeVolume(). Referenced by ChartVolume(). ◆ ChartVolume()
Estimate the volume of part of the manifold covered by a chart. The volume is estimated via MonteCarlo on the tangent space. Note that this function replicates PolytopeVolume and SPolytopeVolume but including the collision detection, which is not computable at the level of polytopes.
Definition at line 1503 of file chart.c. References Chart2Manifold(), ChartMaxVolume(), CS_WD_IN_COLLISION, INF, Tchart::k, Tchart::m, NEW, Tchart::p, PolytopeMaxVolume(), RandomPointInPolytope(), RandomPointInSPolytope(), Tchart::simple, Tchart::sp, SPolytopeMaxVolume(), and Tchart::w. Referenced by AtlasVolume(). ◆ FocusedPointOnBoundary()Tries to generate a point on the chart boundary that is aligned with a given point on the manifold.
Definition at line 1555 of file chart.c. References Error(), ExpandibleChart(), FALSE, InsidePolytope(), Tchart::k, Manifold2Chart(), Tchart::p, Tchart::r, ScaleVector(), and Tchart::simple. ◆ PathInChart()
Defines the path to a point in the chart. The samples added to the path are those resulting from using the chart projection moving at steps of size delta towards the given set of parameters. The final point is also added to the path. This is used when reconstructing the path from the start point to the goal and the segment of path on this chart is concatenated to the path already found.
Definition at line 1587 of file chart.c. References AddSample2Samples(), Tchart::center, Chart2Manifold(), CS_WD_ORIGINAL_IN_COLLISION, CS_WD_REGENERATE_ORIGINAL_POINT, CT_DELTA, Distance(), DistanceTopology(), Tchart::error, FALSE, GetParameter(), Tchart::k, Tchart::m, NEW, Norm(), ScaleVector(), TRUE, and Tchart::w. Referenced by ReconstructAtlasPath(). ◆ DistanceOnChart()
Approximates the geodesic distance between the center of a chart and a point on this chart. This is like GeodesicDistance but this function only operates on points on the same chart. If the path is not collision free, this function returns INF.
Definition at line 1656 of file chart.c. References Tchart::center, Chart2Manifold(), CS_WD_IN_COLLISION, CT_DELTA, Distance(), DistanceTopology(), Tchart::error, FALSE, GetParameter(), INF, Tchart::k, Tchart::m, NEW, Norm(), ScaleVector(), TRUE, and Tchart::w. Referenced by AtlasAStar(), and AtlasGBF(). ◆ PointOnChart()
Identifies points that are inside the area of influence of a given chart.
Definition at line 1712 of file chart.c. References Chart2Manifold(), CT_EPSILON, DistanceTopology(), Tchart::error, FALSE, GetParameter(), InsideChartPolytope(), Tchart::m, Manifold2Chart(), NEW, and Tchart::r. Referenced by AtlasAStar(), and AtlasGBF(). ◆ ClassifyPointInChart()
Computes the relative position of a point with respect to a given chart. The point can be
Codes 0 and 1 correspont to points inside the scope of the chart, although in different circumstances. In the first case the point wil for sure move to a neighbouring chart as new charts are created and in the second this is less likely to occur (but not impossible).
Definition at line 1739 of file chart.c. References Chart2Manifold(), CT_EPSILON, DistanceTopology(), Tchart::error, GetParameter(), InsideChartPolytope(), Tchart::m, Manifold2Chart(), NEW, and Tchart::r. ◆ LinkCharts()At bifurcation points we generate two charts, one at the singular point with tangent space aligned with the charts that allowed to detect the bifurcation and a chart at the other branch of the manifold. These two charts overlap because they are almost defined at the same point but with different tangent spaces. Since they have different tangent spaces they will not be considered neighbours by IntersectCharts and they have to be linked explicitly using this function. Explicitly linked chats also appear in the list of neighbours as retrieved using ChartNumNeighbours or ChartNeighbourID.
Definition at line 1778 of file chart.c. References LinkChart(). Referenced by DefineChartsAtBifurcation(). ◆ AddBorderConstraint()
Crops the domain of a given chart with a constraint derived form the global domain. This is used for charts that are at the border of the global domain.
Definition at line 230 of file chart.c. References CutPolytopeWithFace(), CutSPolytopeWithFace(), Tchart::k, Tchart::m, NO_UINT, Norm(), Tchart::simple, Tchart::sp, and Tchart::w. Referenced by ExtendAtlasFromPoint(). ◆ ForceChartCut()
Intersects two charts without checking first if they are actually neighbours. This is used in the AtlasRRT when using loose controls aboud curvature. In this case we can end up generating a chart that is not neighbour with its parent (but it must be almost neighbour). In this situation we enforce the neighbouring relation between them.
Definition at line 245 of file chart.c. References Tchart::center, CutPolytope(), CutSPolytope(), Tchart::k, Tchart::m, Manifold2Chart(), NEW, Tchart::r, Tchart::simple, Tchart::sp, and Tchart::w. Referenced by AddChart2AtlasRRT(). ◆ ChartNumNeighbours()
Returns the number of neighbouring charts. Note that for charts at the border of the ambient space, this returns and overestimation of the number of neighbours: it includes "virtual" neighbours generated by cropping the chart with the ambient space borders. These virtual neighbours have NO_UINT as identifier.
Definition at line 1784 of file chart.c. References Tchart::nl, Tchart::p, PolytopeNumNeighbours(), Tchart::simple, Tchart::sp, and SPolytopeNumNeighbours(). Referenced by AddChart2Atlas(), AddChart2AtlasRRT(), AtlasAStar(), AtlasRRTValidateSample(), AverageNumNeighbours(), DetermineChartNeighbours(), PlotAtlas(), PopulateWithSamples(), and SaveAtlasGraph(). ◆ ChartNeighbourID()
Gives the identifer for one of the neighbours of a chart. For the virtual neighbours eventually generated due to the intersection of the chart with the ambient space domain, NO_UINT is returned. The caller must take care of not using output of this function in these special cases.
Definition at line 1796 of file chart.c. References Tchart::l, Tchart::nl, Tchart::p, PolytopeNeighbourID(), Tchart::simple, Tchart::sp, and SPolytopeNeighbourID(). Referenced by AddChart2AtlasRRT(), AtlasAStar(), AtlasRRTValidateSample(), PlotAtlas(), PopulateWithSamples(), and SaveAtlasGraph(). ◆ GetChartNeighboursFromVertices()
When triangulating an atlas we want to define a triangle for each vertex of the atlas. Thus, for each vertex, we identify the three coincident charts so that we can connect their centers forming a triangle. The charts are the one defining the polytope whose vertex we are analyzing plust the two charts defining the edges coincident at that vertex. This only operates for bidimendional manifolds and does not return the neighbours through singularities. This is only used when triangulating atlas.
Definition at line 1813 of file chart.c. References DeletePolytope(), GetPolytopeNeighboursFromVertices(), NEW, Tchart::p, Tchart::simple, Tchart::sp, and SPolytope2Polytope(). Referenced by TriangulateAtlas(). ◆ PlotChart()
Plots a 3d projection of a local chart. In only works for 2D or 3D manifolds. We plot the edges delimiting the chart. Observe that this function does not take into account the topology of the variables in order to avoid plotting weird charts. When plotting on variables with topology TOPOLOGY_S a cut is introduced at pi and since plots are in generated in R. Charts over pi will produce vertices larger/smaller than pi/-pi. The resulting plot won't be continuous.
Definition at line 1835 of file chart.c. References Chart2Manifold(), CS_WD_REGENERATE_ORIGINAL_POINT, CT_CUT_X, CT_CUT_Y, CT_CUT_Z, DeletePolytope(), Error(), GetParameter(), GetPolytopeEdges(), GetPolytopeVertices(), INF, Tchart::k, Local2Global(), Tchart::m, M_2PI, NEW, Tchart::p, PLOT_AS_POLYGONS, PLOT_ON_MANIFOLD, PlotChartAsBox(), PlotChartAsPolygon(), PlotVect3d(), Tchart::simple, Tchart::sp, SPolytope2Polytope(), and Tchart::w. Referenced by PlotAtlas(). ◆ ChartMemSize()
Returns the approximated memory used (in bytes) by a given chart.
Definition at line 1971 of file chart.c. References Tchart::k, Tchart::m, Tchart::p, PolytopeMemSize(), Tchart::simple, Tchart::sp, and SPolytopeMemSize(). Referenced by AtlasMemSize(). ◆ SaveChart()
Stores the chart information on a file.
Definition at line 1986 of file chart.c. References Tchart::A, Tchart::B, Tchart::BiRBt, Tchart::BJ, Tchart::c, Tchart::center, Tchart::d, Tchart::da, Tchart::degree, Tchart::eCurv, Tchart::error, Tchart::frontier, Tchart::iRBt, Tchart::k, Tchart::l, Tchart::m, Tchart::ml, Tchart::n, Tchart::nl, Tchart::nrJ, Tchart::p, Tchart::r, SavePolytope(), SaveSPolytope(), Tchart::simple, Tchart::singular, Tchart::sp, and Tchart::T. Referenced by SaveAtlas(). ◆ LoadChart()
Chart constructor from the information on a file. The information is to be generated with SaveChart.
Definition at line 2073 of file chart.c. References Tchart::A, Tchart::B, Tchart::BiRBt, Tchart::BJ, Tchart::c, Tchart::center, Tchart::d, Tchart::da, Tchart::degree, Tchart::eCurv, Tchart::error, Tchart::frontier, Tchart::iRBt, Tchart::k, Tchart::l, LoadPolytope(), LoadSPolytope(), Tchart::m, Tchart::ml, Tchart::n, NEW, Tchart::nl, Tchart::nrJ, Tchart::p, Tchart::r, Tchart::simple, Tchart::singular, Tchart::sp, Tchart::T, and Tchart::w. Referenced by LoadAtlas(). ◆ PrintChartDefines()
Prints the defines in chart.h This is used only for debug purposes.
Definition at line 2191 of file chart.c. References COMPUTE_LQRPOLICY_IN_T, HALF_PLANES, MIN_SAMPLING_RADIUS, PLOT_AS_POLYGONS, PLOT_ON_MANIFOLD, and RANDOM_HALF_PLANES. Referenced by PrintAtlasDefines(). ◆ DeleteChart()
Deletes the information stored in a chartping.
Definition at line 2202 of file chart.c. References Tchart::A, Tchart::B, Tchart::BiRBt, Tchart::BJ, Tchart::c, Tchart::center, Tchart::d, DeletePolytope(), DeleteSPolytope(), Tchart::iRBt, Tchart::l, Tchart::p, Tchart::sp, and Tchart::T. Referenced by AddChart2AtlasRRT(), BuildAtlasFromPoint(), ConnectDynamicStates(), ConnectDynamicStatesID(), ConnectSamplesChart(), DeleteAtlas(), DeleteBranchState(), ExtendAtlasFromPoint(), ExtendAtlasTowardPoint(), FindSingularPoint(), GradientSmooth(), InitChartInt(), main(), NewChartFromPoint(), NewTemptativeSample(), and PathEffort(). |
Follow us!