This class tries to find large convex polytopes in the tangential-configuration space, such that all configurations in the convex polytopes is collision free.
By tangential-configuration space, we mean the revolute joint angle θ is replaced by t = tan(θ/2). We refer to the algorithm as C-IRIS. For more details, refer to the paper
Certified Polyhedral Decomposition of Collision-Free Configuration Space by Hongkai Dai*, Alexandre Amice*, Peter Werner, Annan Zhang and Russ Tedrake.
A conference version is published at
Finding and Optimizing Certified, Collision-Free Regions in Configuration Space for Robot Manipulators by Alexandre Amice*, Hongkai Dai*, Peter Werner, Annan Zhang and Russ Tedrake.
|
| | CspaceFreePolytope (const multibody::MultibodyPlant< double > *plant, const geometry::SceneGraph< double > *scene_graph, SeparatingPlaneOrder plane_order, const Eigen::Ref< const Eigen::VectorXd > &q_star, const Options &options=Options{}) |
| | ~CspaceFreePolytope () override |
| bool | FindSeparationCertificateGivenPolytope (const Eigen::Ref< const Eigen::MatrixXd > &C, const Eigen::Ref< const Eigen::VectorXd > &d, const IgnoredCollisionPairs &ignored_collision_pairs, const FindSeparationCertificateGivenPolytopeOptions &options, std::unordered_map< SortedPair< geometry::GeometryId >, SeparationCertificateResult > *certificates) const |
| | Finds the certificates that the C-space polytope {s | C*s<=d, s_lower <= s <= s_upper} is collision free.
|
| void | AddCspacePolytopeContainment (solvers::MathematicalProgram *prog, const MatrixX< symbolic::Variable > &C, const VectorX< symbolic::Variable > &d, const Eigen::MatrixXd &s_inner_pts) const |
| | Adds the constraint that each column of s_inner_pts is in the polytope {s | C*s<=d}.
|
| std::vector< SearchResult > | SearchWithBilinearAlternation (const IgnoredCollisionPairs &ignored_collision_pairs, const Eigen::Ref< const Eigen::MatrixXd > &C_init, const Eigen::Ref< const Eigen::VectorXd > &d_init, const BilinearAlternationOptions &options) const |
| | Search for a collision-free C-space polytope.
|
| std::optional< SearchResult > | BinarySearch (const IgnoredCollisionPairs &ignored_collision_pairs, const Eigen::Ref< const Eigen::MatrixXd > &C, const Eigen::Ref< const Eigen::VectorXd > &d_init, const Eigen::Ref< const Eigen::VectorXd > &s_center, const BinarySearchOptions &options) const |
| | Binary search on d such that the C-space polytope {s | C*s<=d, s_lower<=s<=s_upper} is collision free.
|
| std::unique_ptr< solvers::MathematicalProgram > | InitializePolytopeSearchProgram (const IgnoredCollisionPairs &ignored_collision_pairs, const std::unordered_map< SortedPair< geometry::GeometryId >, SeparationCertificateResult > &certificates, bool search_s_bounds_lagrangians, MatrixX< symbolic::Variable > *C, VectorX< symbolic::Variable > *d, std::unordered_map< int, SeparationCertificate > *new_certificates=nullptr) const |
| | Constructs a program to search for the C-space polytope {s | C*s<=d, s_lower<=s<=s_upper} such that this polytope is collision free.
|
| SeparationCertificateProgram | MakeIsGeometrySeparableProgram (const SortedPair< geometry::GeometryId > &geometry_pair, const Eigen::Ref< const Eigen::MatrixXd > &C, const Eigen::Ref< const Eigen::VectorXd > &d) const |
| | Constructs the MathematicalProgram which searches for a separation certificate for a pair of geometries for a C-space polytope.
|
| std::optional< SeparationCertificateResult > | SolveSeparationCertificateProgram (const SeparationCertificateProgram &certificate_program, const FindSeparationCertificateGivenPolytopeOptions &options) const |
| | Solves a SeparationCertificateProgram with the given options.
|
| | CspaceFreePolytope (const CspaceFreePolytope &)=delete |
| CspaceFreePolytope & | operator= (const CspaceFreePolytope &)=delete |
| | CspaceFreePolytope (CspaceFreePolytope &&)=delete |
| CspaceFreePolytope & | operator= (CspaceFreePolytope &&)=delete |
| virtual | ~CspaceFreePolytopeBase () |
| const multibody::RationalForwardKinematics & | rational_forward_kin () const |
| | Getter for the rational forward kinematics object that computes the forward kinematics as rational functions.
|
| const std::unordered_map< SortedPair< geometry::GeometryId >, int > & | map_geometries_to_separating_planes () const |
| | separating_planes()[map_geometries_to_separating_planes.at(geometry1_id,
geometry2_id)] is the separating plane that separates geometry 1 and geometry 2.
|
| const std::vector< CSpaceSeparatingPlane< symbolic::Variable > > & | separating_planes () const |
| | All the separating planes between each pair of geometries.
|
| const Vector3< symbolic::Variable > & | y_slack () const |
| | Get the slack variable used for non-polytopic collision geometries.
|
| | CspaceFreePolytopeBase (const CspaceFreePolytopeBase &)=delete |
| CspaceFreePolytopeBase & | operator= (const CspaceFreePolytopeBase &)=delete |
| | CspaceFreePolytopeBase (CspaceFreePolytopeBase &&)=delete |
| CspaceFreePolytopeBase & | operator= (CspaceFreePolytopeBase &&)=delete |
|
| enum class | SForPlane { kAll
, kOnChain
} |
| | When we set up the separating plane {x | a(s)ᵀx + b(s) = 0} between a pair of geometries, we need to determine which s are used in a(s) and b(s). More...
|
| | CspaceFreePolytopeBase (const multibody::MultibodyPlant< double > *plant, const geometry::SceneGraph< double > *scene_graph, SeparatingPlaneOrder plane_order, SForPlane s_for_plane_enum, const Options &options=Options{}) |
| | Constructor.
|
| template<typename T> |
| void | CalcSBoundsPolynomial (const VectorX< T > &s_lower, const VectorX< T > &s_upper, VectorX< symbolic::Polynomial > *s_minus_s_lower, VectorX< symbolic::Polynomial > *s_upper_minus_s) const |
| | Computes s-s_lower and s_upper - s as polynomials of s.
|
| int | GetSeparatingPlaneIndex (const SortedPair< geometry::GeometryId > &pair) const |
| | Returns the index of the plane which will separate the geometry pair.
|
| const symbolic::Variables & | get_s_set () const |
| const geometry::SceneGraph< double > & | scene_graph () const |
| const std::map< multibody::BodyIndex, std::vector< std::unique_ptr< CIrisCollisionGeometry > > > & | link_geometries () const |
| SeparatingPlaneOrder | plane_order () const |
| const std::unordered_map< SortedPair< multibody::BodyIndex >, std::array< VectorX< symbolic::Monomial >, 4 > > & | map_body_to_monomial_basis_array () const |
| | Maps a pair of body (body1, body2) to an array of monomial basis monomial_basis_array.
|
| bool | with_cross_y () const |
| | Check Options::with_cross_y for more details.
|
| const std::unordered_map< SortedPair< multibody::BodyIndex >, std::vector< int > > & | map_body_pair_to_s_on_chain () const |
| | For a pair of bodies body_pair, returns the indices of all s on the kinematics chain from body_pair.first() to body_pair.second().
|
| VectorX< symbolic::Variable > | GetSForPlane (const SortedPair< multibody::BodyIndex > &body_pair, SForPlane s_for_plane_enum) const |
| | Returns a vector of s variable used in a(s), b(s), which parameterize the separating plane {x | a(s)ᵀx+b(s) = 0}.
|
| void | SolveCertificationForEachPlaneInParallel (const std::vector< int > &active_plane_indices, const std::function< std::pair< bool, int >(int)> &solve_plane_sos, Parallelism parallelism, bool verbose, bool terminate_at_failure) const |
| | For each pair of geometries, solve the certification problem to find their separation plane in parallel.
|
| int | GetGramVarSizeForPolytopeSearchProgram (const std::vector< PlaneSeparatesGeometries > &plane_geometries_vec, const IgnoredCollisionPairs &ignored_collision_pairs, const std::function< int(const symbolic::RationalFunction &rational, const std::array< VectorX< symbolic::Monomial >, 4 > &monomial_basis_array)> &count_gram_per_rational) const |
| | Get the total size of all the decision variables for the Gram matrices, so as to search for the polytope with given Lagrangian multipliers.
|