IrisZoOptions collects all parameters for the IRIS-ZO algorithm.
#include <drake/planning/iris/iris_zo.h>
Public Types | |
typedef std::function< Eigen::VectorXd(const Eigen::VectorXd &)> | ParameterizationFunction |
Public Member Functions | |
template<typename Archive > | |
void | Serialize (Archive *a) |
Passes this object to an Archive. More... | |
IrisZoOptions ()=default | |
void | set_parameterization (const ParameterizationFunction ¶meterization, bool parameterization_is_threadsafe, int parameterization_dimension) |
Ordinarily, IRIS-ZO grows collision free regions in the robot's configuration space C. More... | |
void | SetParameterizationFromExpression (const Eigen::VectorX< symbolic::Expression > &expression_parameterization, const Eigen::VectorX< symbolic::Variable > &variables) |
Alternative to set_parameterization that allows the user to define the parameterization using a VectorX<Expression> . More... | |
const ParameterizationFunction & | get_parameterization () const |
Get the parameterization function. More... | |
bool | get_parameterization_is_threadsafe () const |
Returns whether or not the user has specified the parameterization to be threadsafe. More... | |
std::optional< int > | get_parameterization_dimension () const |
Returns what the user has specified as the input dimension for the parameterization function, or std::nullopt if it has not been set. More... | |
Implements CopyConstructible, CopyAssignable, MoveConstructible, MoveAssignable | |
IrisZoOptions (const IrisZoOptions &)=default | |
IrisZoOptions & | operator= (const IrisZoOptions &)=default |
IrisZoOptions (IrisZoOptions &&)=default | |
IrisZoOptions & | operator= (IrisZoOptions &&)=default |
Static Public Member Functions | |
static IrisZoOptions | CreateWithRationalKinematicParameterization (const multibody::RationalForwardKinematics *kin, const Eigen::Ref< const Eigen::VectorXd > &q_star_val) |
Constructs an instance of IrisZoOptions that handles a rational kinematic parameterization. More... | |
Public Attributes | |
int | num_particles = 1e3 |
Number of particles used to estimate the closest collision. More... | |
double | tau = 0.5 |
Decision threshold for the unadaptive test. More... | |
double | delta = 5e-2 |
Upper bound on the probability the returned region has a fraction-in-collision greater than epsilon . More... | |
double | epsilon = 1e-2 |
Admissible fraction of the region volume allowed to be in collision. More... | |
std::optional< Eigen::MatrixXd > | containment_points {std::nullopt} |
Points that are guaranteed to be contained in the final region provided their convex hull is collision free. More... | |
int | max_iterations {3} |
Maximum number of alternations between the ellipsoid and the separating planes step (a.k.a. More... | |
int | max_iterations_separating_planes {20} |
Maximum number of rounds of adding faces to the polytope per outer iteration. More... | |
int | max_separating_planes_per_iteration {-1} |
Maximum number of faces to add per inner iteration. More... | |
int | bisection_steps {10} |
Maximum number of bisection steps. More... | |
Parallelism | parallelism {Parallelism::Max()} |
Number of threads to use when updating the particles. More... | |
bool | verbose {false} |
Enables print statements indicating the progress of IrisZo. More... | |
bool | require_sample_point_is_contained {true} |
The initial polytope is guaranteed to contain the point if that point is collision-free. More... | |
double | configuration_space_margin {1e-2} |
We retreat by this margin from each C-space obstacle in order to avoid the possibility of requiring an infinite number of faces to approximate a curved boundary. More... | |
double | termination_threshold {2e-2} |
IRIS will terminate if the change in the volume of the hyperellipsoid between iterations is less that this threshold. More... | |
double | relative_termination_threshold {1e-3} |
IRIS will terminate if the change in the volume of the hyperellipsoid between iterations is less that this percent of the previous best volume. More... | |
int | random_seed {1234} |
This option sets the random seed for random sampling throughout the algorithm. More... | |
int | mixing_steps {50} |
Number of mixing steps used for hit-and-run sampling. More... | |
std::shared_ptr< geometry::Meshcat > | meshcat {} |
Passing a meshcat instance may enable debugging visualizations; this currently and when the configuration space is <= 3 dimensional. More... | |
const solvers::MathematicalProgram * | prog_with_additional_constraints {} |
By default, IRIS-ZO only considers collision avoidance constraints. More... | |
typedef std::function<Eigen::VectorXd(const Eigen::VectorXd&)> ParameterizationFunction |
|
default |
|
default |
|
default |
|
static |
Constructs an instance of IrisZoOptions that handles a rational kinematic parameterization.
Regions are grown in the s
variables, so as to minimize collisions in the q
variables. See RationalForwardKinematics for details.
kin
(and the underlying MultibodyPlant it is built on) is kept alive. If that object is deleted, then the parametrization can no longer be used. const ParameterizationFunction& get_parameterization | ( | ) | const |
Get the parameterization function.
set_parameterization()
, then the default value of parameterization_
is the identity function, indicating that the regions should be grown in the full configuration space (in the standard coordinate system). std::optional<int> get_parameterization_dimension | ( | ) | const |
Returns what the user has specified as the input dimension for the parameterization function, or std::nullopt if it has not been set.
A std::nullopt value indicates that IrisZo should use the ambient configuration space dimension as the input dimension to the parameterization.
bool get_parameterization_is_threadsafe | ( | ) | const |
Returns whether or not the user has specified the parameterization to be threadsafe.
parameterization_
is the identity function, which is threadsafe.
|
default |
|
default |
void Serialize | ( | Archive * | a | ) |
Passes this object to an Archive.
Refer to YAML Serialization for background. Note: This only serializes options that are YAML built-in types.
void set_parameterization | ( | const ParameterizationFunction & | parameterization, |
bool | parameterization_is_threadsafe, | ||
int | parameterization_dimension | ||
) |
Ordinarily, IRIS-ZO grows collision free regions in the robot's configuration space C.
This allows the user to specify a function f:Q→C , and grow the region in Q instead. The function should be a map R^m to R^n, where n is the dimension of the plant configuration space, determined via checker.plant().num_positions()
and m is parameterization_dimension
if specified. The user must provide parameterization
, which is the function f, parameterization_is_threadsafe
, which is whether or not parametrization
can be called concurrently, and parameterization_dimension
, the dimension of the input space Q.
void SetParameterizationFromExpression | ( | const Eigen::VectorX< symbolic::Expression > & | expression_parameterization, |
const Eigen::VectorX< symbolic::Variable > & | variables | ||
) |
Alternative to set_parameterization
that allows the user to define the parameterization using a VectorX<Expression>
.
The user must also provide a vector containing the variables used in expression_parameterization
, in the order that they should be evaluated. Each Variable
in variables
must be used, each Variable
used in expression_parameterization
must appear in variables
, and there must be no duplicates in variables
.
if | the number of variables used across expression_parameterization does not match ssize(variables) . |
if | any variables in expression_parameterization are not listed in variables . |
if | any variables in variables are not used anywhere in expression_parameterization . |
int bisection_steps {10} |
Maximum number of bisection steps.
double configuration_space_margin {1e-2} |
We retreat by this margin from each C-space obstacle in order to avoid the possibility of requiring an infinite number of faces to approximate a curved boundary.
std::optional<Eigen::MatrixXd> containment_points {std::nullopt} |
Points that are guaranteed to be contained in the final region provided their convex hull is collision free.
Note that if the containment points are closer than configuration_margin to an obstacle we will relax the margin in favor of including the containment points. The matrix containment_points
is expected to be of the shape dimension times number of points. IrisZo throws if the center of the starting ellipsoid is not contained in the convex hull of these containment points.
double delta = 5e-2 |
Upper bound on the probability the returned region has a fraction-in-collision greater than epsilon
.
double epsilon = 1e-2 |
Admissible fraction of the region volume allowed to be in collision.
int max_iterations {3} |
Maximum number of alternations between the ellipsoid and the separating planes step (a.k.a.
outer iterations).
int max_iterations_separating_planes {20} |
Maximum number of rounds of adding faces to the polytope per outer iteration.
int max_separating_planes_per_iteration {-1} |
Maximum number of faces to add per inner iteration.
Setting the value to -1 means there is no limit to the number of faces that can be added.
std::shared_ptr<geometry::Meshcat> meshcat {} |
Passing a meshcat instance may enable debugging visualizations; this currently and when the configuration space is <= 3 dimensional.
int mixing_steps {50} |
Number of mixing steps used for hit-and-run sampling.
int num_particles = 1e3 |
Number of particles used to estimate the closest collision.
Parallelism parallelism {Parallelism::Max()} |
Number of threads to use when updating the particles.
If the user requests more threads than the CollisionChecker supports, that number of threads will be used instead. However, see also parameterization_is_threadsafe
.
const solvers::MathematicalProgram* prog_with_additional_constraints {} |
By default, IRIS-ZO only considers collision avoidance constraints.
This option can be used to pass additional constraints that should be satisfied by the output region. We accept these in the form of a MathematicalProgram:
find q subject to g(q) ≤ 0.
The decision_variables() for the program are taken to define q
. IRIS-ZO will silently ignore any costs in prog_with_additional_constraints
. If any constraints are not threadsafe, then parallelism
will be overridden, and only one thread will be used.
int random_seed {1234} |
This option sets the random seed for random sampling throughout the algorithm.
double relative_termination_threshold {1e-3} |
IRIS will terminate if the change in the volume of the hyperellipsoid between iterations is less that this percent of the previous best volume.
This termination condition can be disabled by setting to a negative value.
bool require_sample_point_is_contained {true} |
The initial polytope is guaranteed to contain the point if that point is collision-free.
double tau = 0.5 |
Decision threshold for the unadaptive test.
Choosing a small value increases both the cost and the power statistical test. Increasing the value of tau
makes running an individual test cheaper but decreases its power to accept a polytope. We find choosing a value of 0.5 a good trade-off.
double termination_threshold {2e-2} |
IRIS will terminate if the change in the volume of the hyperellipsoid between iterations is less that this threshold.
This termination condition can be disabled by setting to a negative value.
bool verbose {false} |
Enables print statements indicating the progress of IrisZo.