42 #include <type_traits>
43 #include <initializer_list>
45 #include <Eigen/Geometry>
47 #include <moveit/macros/class_forward.h>
48 #include <moveit/robot_trajectory/robot_trajectory.h>
49 #include <moveit/collision_detection/collision_common.h>
50 #include <moveit/task_constructor/solvers/planner_interface.h>
52 namespace planning_scene {
53 MOVEIT_CLASS_FORWARD(PlanningScene);
59 MOVEIT_CLASS_FORWARD(LinkModel);
60 MOVEIT_CLASS_FORWARD(JointModelGroup);
61 MOVEIT_CLASS_FORWARD(RobotState);
64 namespace task_constructor {
65 MOVEIT_CLASS_FORWARD(Property);
70 template <
typename Enum>
73 static_assert((
sizeof(Enum) <=
sizeof(
int)),
"Flags uses an int as storage, this enum will overflow!");
76 using Int =
typename std::conditional<std::is_unsigned<Enum>::value,
unsigned int,
int>::type;
77 using enum_type = Enum;
81 constexpr
inline Flags() noexcept : i(Int(0)) {}
83 constexpr
inline Flags(Enum f) noexcept : i(Int(f)) {}
85 constexpr
inline Flags(std::initializer_list<Enum> flags) noexcept
86 : i(initializer_list_helper(flags.begin(), flags.end())) {}
88 const inline Flags& operator&=(
int mask) noexcept {
92 const inline Flags& operator&=(
unsigned int mask) noexcept {
96 const inline Flags& operator&=(Enum mask) noexcept {
100 const inline Flags& operator|=(
Flags f) noexcept {
104 const inline Flags& operator|=(Enum f) noexcept {
108 const inline Flags& operator^=(
Flags f) noexcept {
112 const inline Flags& operator^=(Enum f) noexcept {
117 constexpr
inline operator Int()
const noexcept {
return i; }
119 constexpr
inline Flags operator|(
Flags f)
const noexcept {
return Flags(i | f.i); }
120 constexpr
inline Flags operator|(Enum f)
const noexcept {
return Flags(i | Int(f)); }
121 constexpr
inline Flags operator^(
Flags f)
const noexcept {
return Flags(i ^ f.i); }
122 constexpr
inline Flags operator^(Enum f)
const noexcept {
return Flags(i ^ Int(f)); }
123 constexpr
inline Flags operator&(
int mask)
const noexcept {
return Flags(i & mask); }
124 constexpr
inline Flags operator&(
unsigned int mask)
const noexcept {
return Flags(i & mask); }
125 constexpr
inline Flags operator&(Enum f)
const noexcept {
return Flags(i & Int(f)); }
126 constexpr
inline Flags operator~()
const noexcept {
return Flags(~i); }
128 constexpr
inline bool operator!()
const noexcept {
return !i; }
130 constexpr
inline bool testFlag(Enum f)
const noexcept {
131 return (i & Int(f)) == Int(f) && (Int(f) != 0 || i == Int(f));
135 constexpr
inline Flags(Int i) : i(i) {}
136 constexpr
static inline Int
137 initializer_list_helper(
typename std::initializer_list<Enum>::const_iterator it,
138 typename std::initializer_list<Enum>::const_iterator end) noexcept {
139 return (it == end ? Int(0) : (Int(*it) | initializer_list_helper(it + 1, end)));
146 bool getRobotTipForFrame(
const Property& tip_pose,
const planning_scene::PlanningScene& scene,
147 const moveit::core::JointModelGroup* jmg, std::string& error_msg,
148 const moveit::core::LinkModel*& robot_link, Eigen::Isometry3d& tip_in_global_frame);
151 void addCollisionMarkers(std::vector<visualization_msgs::Marker>& markers,
const std::string& frame_id,
152 const collision_detection::CollisionResult::ContactMap& contacts,
double radius = 0.035);
155 void addCollisionMarkers(std::vector<visualization_msgs::Marker>& markers,
156 const robot_trajectory::RobotTrajectory& trajectory,
157 const planning_scene::PlanningSceneConstPtr& planning_scene);
Definition: properties.h:70
Definition: planner_interface.h:75