Functions for reasoning about 3D rotations in a @MathematicalProgram.
There are a number of choices for representing 3D rotations in a mathematical program – many of these choices involve using more than the minimal three parameters and therefore require additional constraints For example:
Unfortunately, in the context of mathematical programming, most of these constraints are non-convex. The methods below include convex relaxations of these non-convex constraints.
#include <string>
#include <tuple>
#include <utility>
#include <vector>
#include "drake/common/eigen_types.h"
#include "drake/solvers/decision_variable.h"
#include "drake/solvers/mathematical_program.h"
Namespaces | |
drake | |
drake::solvers | |
Typedefs | |
typedef uint32_t | RollPitchYawLimits |
Enumerations | |
enum | RollPitchYawLimitOptions { kNoLimits = 0, kRPYError = 1 << 0, kRoll_NegPI_2_to_PI_2 = 1 << 1, kRoll_0_to_PI = 1 << 2, kPitch_NegPI_2_to_PI_2 = 1 << 3, kPitch_0_to_PI = 1 << 4, kYaw_NegPI_2_to_PI_2 = 1 << 5, kYaw_0_to_PI = 1 << 6, kRoll_0_to_PI_2 = (1 << 1) | (1 << 2), kPitch_0_to_PI_2 = (1 << 3) | (1 << 4), kYaw_0_to_PI_2 = (1 << 5) | (1 << 6) } |
Functions | |
MatrixDecisionVariable< 3, 3 > | NewRotationMatrixVars (MathematicalProgram *prog, const std::string &name="R") |
Allocates a 3x3 matrix of decision variables with the trivial bounding box constraint ensuring all elements are [-1,1], and the linear constraint imposing -1 <= trace(R) <= 3. More... | |
void | AddBoundingBoxConstraintsImpliedByRollPitchYawLimits (MathematicalProgram *prog, const Eigen::Ref< const MatrixDecisionVariable< 3, 3 >> &R, RollPitchYawLimits limits=kNoLimits) |
Applies very conservative limits on the entries of R for the cases when rotations can be limited (for instance, if you want to search over rotations, but there is an obvious symmetry in the problem so that e.g. More... | |
void | AddRotationMatrixSpectrahedralSdpConstraint (MathematicalProgram *prog, const Eigen::Ref< const MatrixDecisionVariable< 3, 3 >> &R) |
Adds constraint (10) from https://arxiv.org/pdf/1403.4914.pdf , which exactly represents the convex hull of all rotation matrices in 3D. More... | |
void | AddRotationMatrixOrthonormalSocpConstraint (MathematicalProgram *prog, const Eigen::Ref< const MatrixDecisionVariable< 3, 3 >> &R) |
Adds a set of convex constraints which approximate the set of orthogonal matrices, O(3). More... | |