41#include <ompl/base/Constraint.h>
46#include <moveit_msgs/msg/constraints.hpp>
71 Bounds(
const std::vector<double>& lower,
const std::vector<double>& upper);
83 Eigen::VectorXd
penalty(
const Eigen::Ref<const Eigen::VectorXd>& x)
const;
91 Eigen::VectorXd
derivative(
const Eigen::Ref<const Eigen::VectorXd>& x)
const;
93 std::size_t
size()
const;
96 std::vector<double> lower_, upper_;
126 BaseConstraint(
const moveit::core::RobotModelConstPtr& robot_model,
const std::string& group,
127 const unsigned int num_dofs,
const unsigned int num_cons = 3);
134 void init(
const moveit_msgs::msg::Constraints& constraints);
140 void function(
const Eigen::Ref<const Eigen::VectorXd>& joint_values, Eigen::Ref<Eigen::VectorXd> out)
const override;
147 void jacobian(
const Eigen::Ref<const Eigen::VectorXd>& joint_values, Eigen::Ref<Eigen::MatrixXd> out)
const override;
155 Eigen::Isometry3d
forwardKinematics(
const Eigen::Ref<const Eigen::VectorXd>& joint_values)
const;
180 virtual Eigen::VectorXd
calcError(
const Eigen::Ref<const Eigen::VectorXd>& )
const;
194 virtual Eigen::MatrixXd
calcErrorJacobian(
const Eigen::Ref<const Eigen::VectorXd>& )
const;
260 BoxConstraint(
const moveit::core::RobotModelConstPtr& robot_model,
const std::string& group,
261 const unsigned int num_dofs);
278 Eigen::VectorXd
calcError(
const Eigen::Ref<const Eigen::VectorXd>& x)
const override;
292 Eigen::MatrixXd
calcErrorJacobian(
const Eigen::Ref<const Eigen::VectorXd>& x)
const override;
313 const unsigned int num_dofs);
321 void function(
const Eigen::Ref<const Eigen::VectorXd>& joint_values, Eigen::Ref<Eigen::VectorXd> out)
const override;
323 void jacobian(
const Eigen::Ref<const Eigen::VectorXd>& joint_values, Eigen::Ref<Eigen::MatrixXd> out)
const override;
347 static constexpr double EQUALITY_CONSTRAINT_THRESHOLD{ 0.001 };
350 std::vector<bool> is_dim_constrained_;
381 const unsigned int num_dofs)
401 Eigen::VectorXd
calcError(
const Eigen::Ref<const Eigen::VectorXd>& x)
const override;
415 Eigen::MatrixXd
calcErrorJacobian(
const Eigen::Ref<const Eigen::VectorXd>& x)
const override;
441 const std::string& group,
442 const moveit_msgs::msg::Constraints& constraints);
451 double t{ std::abs(angle) };
452 Eigen::Matrix3d r_skew;
453 r_skew << 0, -axis[2], axis[1], axis[2], 0, -axis[0], -axis[1], axis[0], 0;
457 c = (1 - 0.5 * t * std::sin(t) / (1 - std::cos(t)));
459 return Eigen::Matrix3d::Identity() - 0.5 * r_skew + (r_skew * r_skew / (t * t)) * c;
ROS/KDL based interface for the inverse kinematics of the PR2 arm.
#define MOVEIT_CLASS_FORWARD(C)
Abstract base class for different types of constraints, implementations of ompl::base::Constraint.
Eigen::Quaterniond target_orientation_
target for equality constraints, nominal value for inequality constraints.
const std::string & getLinkName()
virtual void parseConstraintMsg(const moveit_msgs::msg::Constraints &constraints)=0
Parse bounds on position and orientation parameters from MoveIt's constraint message.
TSStateStorage state_storage_
Thread-safe storage of the robot state.
const moveit::core::JointModelGroup * joint_model_group_
virtual Eigen::MatrixXd calcErrorJacobian(const Eigen::Ref< const Eigen::VectorXd > &) const
For inequality constraints: calculate the Jacobian for the current parameters that are being constrai...
Bounds bounds_
Upper and lower bounds on constrained variables.
const Eigen::Quaterniond getTargetOrientation()
virtual Eigen::VectorXd calcError(const Eigen::Ref< const Eigen::VectorXd > &) const
For inequality constraints: calculate the value of the parameter that is being constrained by the bou...
const Eigen::Vector3d getTargetPosition()
Eigen::Isometry3d forwardKinematics(const Eigen::Ref< const Eigen::VectorXd > &joint_values) const
Wrapper for forward kinematics calculated by MoveIt's Robot State.
std::string link_name_
Robot link the constraints are applied to.
Eigen::MatrixXd robotGeometricJacobian(const Eigen::Ref< const Eigen::VectorXd > &joint_values) const
Calculate the robot's geometric Jacobian using MoveIt's Robot State.
Eigen::Vector3d target_position_
target for equality constraints, nominal value for inequality constraints.
void init(const moveit_msgs::msg::Constraints &constraints)
Initialize constraint based on message content.
void jacobian(const Eigen::Ref< const Eigen::VectorXd > &joint_values, Eigen::Ref< Eigen::MatrixXd > out) const override
Jacobian of the constraint function.
void function(const Eigen::Ref< const Eigen::VectorXd > &joint_values, Eigen::Ref< Eigen::VectorXd > out) const override
Represents upper and lower bound on the elements of a vector.
Eigen::VectorXd derivative(const Eigen::Ref< const Eigen::VectorXd > &x) const
Derivative of the penalty function ^ | | -1-1-1 0 0 0 +1+1+1 |---------------------—>
Eigen::VectorXd penalty(const Eigen::Ref< const Eigen::VectorXd > &x) const
Distance to region inside bounds.
friend std::ostream & operator<<(std::ostream &os, const ompl_interface::Bounds &bounds)
Pretty printing of bounds.
Box shaped position constraints.
Eigen::MatrixXd calcErrorJacobian(const Eigen::Ref< const Eigen::VectorXd > &x) const override
For inequality constraints: calculate the Jacobian for the current parameters that are being constrai...
Eigen::VectorXd calcError(const Eigen::Ref< const Eigen::VectorXd > &x) const override
For inequality constraints: calculate the value of the parameter that is being constrained by the bou...
void parseConstraintMsg(const moveit_msgs::msg::Constraints &constraints) override
Parse bounds on position parameters from MoveIt's constraint message.
Equality constraints on a link's position.
void function(const Eigen::Ref< const Eigen::VectorXd > &joint_values, Eigen::Ref< Eigen::VectorXd > out) const override
void parseConstraintMsg(const moveit_msgs::msg::Constraints &constraints) override
Parse bounds on position parameters from MoveIt's constraint message.
void jacobian(const Eigen::Ref< const Eigen::VectorXd > &joint_values, Eigen::Ref< Eigen::MatrixXd > out) const override
Orientation constraints parameterized using exponential coordinates.
Eigen::MatrixXd calcErrorJacobian(const Eigen::Ref< const Eigen::VectorXd > &x) const override
For inequality constraints: calculate the Jacobian for the current parameters that are being constrai...
OrientationConstraint(const moveit::core::RobotModelConstPtr &robot_model, const std::string &group, const unsigned int num_dofs)
void parseConstraintMsg(const moveit_msgs::msg::Constraints &constraints) override
Parse bounds on orientation parameters from MoveIt's constraint message.
Eigen::VectorXd calcError(const Eigen::Ref< const Eigen::VectorXd > &x) const override
For inequality constraints: calculate the value of the parameter that is being constrained by the bou...
The MoveIt interface to OMPL.
Bounds orientationConstraintMsgToBoundVector(const moveit_msgs::msg::OrientationConstraint &ori_con)
Extract orientation constraints from the MoveIt message.
std::ostream & operator<<(std::ostream &os, const ompl_interface::Bounds &bounds)
Pretty printing of bounds.
ompl::base::ConstraintPtr createOMPLConstraints(const moveit::core::RobotModelConstPtr &robot_model, const std::string &group, const moveit_msgs::msg::Constraints &constraints)
Factory to create constraints based on what is in the MoveIt constraint message.
Eigen::Matrix3d angularVelocityToAngleAxis(double angle, const Eigen::Ref< const Eigen::Vector3d > &axis)
Return a matrix to convert angular velocity to angle-axis velocity Based on: https://ethz....
Bounds positionConstraintMsgToBoundVector(const moveit_msgs::msg::PositionConstraint &pos_con)
Extract position constraints from the MoveIt message.