box_to_grasp_candidates.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <Eigen/Dense>
4 
5 #include <SimoxUtility/meta/eigen/enable_if_compile_time_size.h>
6 #include <SimoxUtility/shapes/OrientedBox.h>
7 
9 
10 #include "GraspCandidateHelper.h"
11 
12 namespace armarx
13 {
15  {
17  enum class box_alignment : std::uint_fast8_t
18  {
23 
28 
33 
38 
43 
48  };
49 
51  {
52  bool&
54  {
55  return enabled.at(static_cast<std::uint_fast8_t>(al));
56  }
57 
58  bool&
59  operator[](std::uint_fast8_t al)
60  {
61  return enabled.at(al);
62  }
63 
64  bool
66  {
67  return enabled.at(static_cast<std::uint_fast8_t>(al));
68  }
69 
70  bool
71  operator[](std::uint_fast8_t al) const
72  {
73  return enabled.at(al);
74  }
75 
76  std::array<bool, 24> enabled{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
77  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
78  };
79 
80  struct length_limit
81  {
83  float transverse_length_max = 1500;
84  float upward_length_min = 25;
85  float upward_length_max = 500;
86  float forward_length_min = 50;
87  float forward_length_max = 150;
88 
89  bool in_limits(const box_t& box, box_alignment align) const;
90  std::string limit_violation_string(const box_t& box, box_alignment align) const;
91  };
92 
93  struct side_data
94  {
95  std::string name;
98  Eigen::Vector3f tcp_shift = Eigen::Vector3f::Constant(std::nanf(""));
99  Eigen::Vector3f hand_up = Eigen::Vector3f::Constant(std::nanf(""));
100  Eigen::Vector3f hand_transverse = Eigen::Vector3f::Constant(std::nanf(""));
101  };
102 
103  struct grasp
104  {
105  Eigen::Matrix4f pose = Eigen::Matrix4f::Constant(std::nanf(""));
106  Eigen::Vector3f approach = Eigen::Vector3f::Constant(std::nanf(""));
107  const side_data* side = nullptr;
108 
109  armarx::grasping::GraspCandidatePtr
110  make_candidate(const std::string& provider_name) const;
111  armarx::grasping::GraspCandidatePtr
112  make_candidate(const std::string& provider_name,
113  const std::string& side_name,
114  const VirtualRobot::RobotPtr& robot = nullptr) const;
115  armarx::grasping::GraspCandidatePtr
116  make_candidate(const std::string& provider_name,
117  const std::string& side_name,
118  const Eigen::Matrix4f& global_pose) const;
119  };
120 
121  public:
123  const VirtualRobot::RobotPtr& robot);
124 
125  void add_armar6_defaults();
126  //extract
127  public:
128  static Eigen::Vector3f box_transverse_axis(const box_t& box, box_alignment align);
129  static float box_transverse_len(const box_t& box, box_alignment align);
130 
131  static Eigen::Vector3f box_up_axis(const box_t& box, box_alignment align);
132  static float box_up_len(const box_t& box, box_alignment align);
133 
134  static float box_forward_len(const box_t& box, box_alignment align);
135  //side
136  public:
137  const side_data& side(const std::string& side) const;
138  side_data& side(const std::string& side);
139  const std::map<std::string, side_data>& sides() const;
140 
141  //center_grasp
142  public:
143  void center_grasps(const box_t& box,
144  const side_data& side,
145  const length_limit& limit,
146  auto consume_grasp);
147  void center_grasps(const box_t& box,
148  const std::string& side,
149  const length_limit& limit,
150  auto consume_grasp);
151  void center_grasps(const box_t& box,
152  const side_data& side,
153  const length_limit& limit,
154  auto consume_grasp,
155  const side_enabled_map& enabled);
156  void center_grasps(const box_t& box,
157  const std::string& side,
158  const length_limit& limit,
159  auto consume_grasp,
160  const side_enabled_map& enabled);
161 
163 
164  template <class D1, class D2, class D3>
165  static std::enable_if_t<simox::meta::is_vec3_v<D1> && simox::meta::is_vec3_v<D2> &&
166  simox::meta::is_vec3_v<D3>,
167  grasp>
168  center_grasp(const Eigen::MatrixBase<D1>& center_pos,
169  const Eigen::MatrixBase<D2>& up,
170  float up_len,
171  const Eigen::Vector3f& hand_up,
172  const Eigen::MatrixBase<D3>& transverse,
173  const Eigen::Vector3f& hand_transv,
174  const Eigen::Vector3f& tcp_shift);
175 
176  private:
178  VirtualRobot::RobotPtr _robot;
179  std::map<std::string, side_data> _sides;
180  };
181 } // namespace armarx
182 
armarx::box_to_grasp_candidates::side_enabled_map::operator[]
bool & operator[](box_alignment al)
Definition: box_to_grasp_candidates.h:53
armarx::box_to_grasp_candidates::side_enabled_map::operator[]
bool operator[](box_alignment al) const
Definition: box_to_grasp_candidates.h:65
armarx::box_to_grasp_candidates::center_grasps
void center_grasps(const box_t &box, const side_data &side, const length_limit &limit, auto consume_grasp)
Definition: box_to_grasp_candidates.ipp:96
armarx::box_to_grasp_candidates::box_alignment::neg_x_pos_z
@ neg_x_pos_z
armarx::box_to_grasp_candidates::box_alignment::pos_x_neg_y
@ pos_x_neg_y
armarx::box_to_grasp_candidates::length_limit::upward_length_max
float upward_length_max
Definition: box_to_grasp_candidates.h:85
armarx::box_to_grasp_candidates::length_limit::transverse_length_max
float transverse_length_max
Definition: box_to_grasp_candidates.h:83
armarx::box_to_grasp_candidates::box_alignment::pos_y_pos_x
@ pos_y_pos_x
armarx::box_to_grasp_candidates::box_alignment::neg_z_pos_x
@ neg_z_pos_x
armarx::box_to_grasp_candidates::box_alignment::neg_x_pos_y
@ neg_x_pos_y
armarx::box_to_grasp_candidates::box_alignment::neg_z_pos_y
@ neg_z_pos_y
armarx::box_to_grasp_candidates::box_to_grasp_candidates
box_to_grasp_candidates(armarx::RobotNameHelperPtr rnh, const VirtualRobot::RobotPtr &robot)
Definition: box_to_grasp_candidates.cpp:426
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::box_to_grasp_candidates::box_forward_len
static float box_forward_len(const box_t &box, box_alignment align)
Definition: box_to_grasp_candidates.cpp:287
armarx::box_to_grasp_candidates::side_data::tcp_shift
Eigen::Vector3f tcp_shift
Definition: box_to_grasp_candidates.h:98
armarx::box_to_grasp_candidates::box_transverse_len
static float box_transverse_len(const box_t &box, box_alignment align)
Definition: box_to_grasp_candidates.cpp:92
armarx::box_to_grasp_candidates::grasp::make_candidate
armarx::grasping::GraspCandidatePtr make_candidate(const std::string &provider_name) const
Definition: box_to_grasp_candidates.cpp:389
armarx::box_to_grasp_candidates::box_alignment::pos_z_neg_x
@ pos_z_neg_x
armarx::box_to_grasp_candidates::side_data::nh_arm_w_rob
armarx::RobotNameHelper::RobotArm nh_arm_w_rob
Definition: box_to_grasp_candidates.h:97
std::align
void * align(size_t alignment, size_t bytes, void *&bufferPlace, size_t &bufferSpace) noexcept
Definition: HeterogenousContinuousContainer.h:37
GraspCandidateHelper.h
armarx::box_to_grasp_candidates::box_alignment::neg_y_neg_z
@ neg_y_neg_z
armarx::box_to_grasp_candidates::length_limit::upward_length_min
float upward_length_min
Definition: box_to_grasp_candidates.h:84
armarx::box_to_grasp_candidates::side_data
Definition: box_to_grasp_candidates.h:93
armarx::box_to_grasp_candidates::length_limit::transverse_length_min
float transverse_length_min
Definition: box_to_grasp_candidates.h:82
armarx::box_to_grasp_candidates::box_alignment::neg_y_pos_x
@ neg_y_pos_x
armarx::box_to_grasp_candidates::length_limit
Definition: box_to_grasp_candidates.h:80
armarx::box_to_grasp_candidates::side_data::name
std::string name
Definition: box_to_grasp_candidates.h:95
armarx::box_to_grasp_candidates::box_alignment
box_alignment
Definition: box_to_grasp_candidates.h:17
armarx::RobotNameHelperPtr
std::shared_ptr< class RobotNameHelper > RobotNameHelperPtr
Definition: RobotNameHelper.h:32
armarx::box_to_grasp_candidates::length_limit::limit_violation_string
std::string limit_violation_string(const box_t &box, box_alignment align) const
Definition: box_to_grasp_candidates.cpp:365
armarx::box_to_grasp_candidates::box_alignment::neg_y_pos_z
@ neg_y_pos_z
armarx::box_to_grasp_candidates::box_alignment::pos_x_pos_y
@ pos_x_pos_y
armarx::box_to_grasp_candidates::side_data::hand_up
Eigen::Vector3f hand_up
Definition: box_to_grasp_candidates.h:99
armarx::box_to_grasp_candidates::side_data::nh_arm
armarx::RobotNameHelper::Arm nh_arm
Definition: box_to_grasp_candidates.h:96
armarx::box_to_grasp_candidates::box_alignment::neg_x_neg_z
@ neg_x_neg_z
armarx::box_to_grasp_candidates::grasp::pose
Eigen::Matrix4f pose
Definition: box_to_grasp_candidates.h:105
enabled
std::atomic< bool > * enabled
Definition: RemoteGuiWidgetController.cpp:75
armarx::box_to_grasp_candidates::length_limit::forward_length_max
float forward_length_max
Definition: box_to_grasp_candidates.h:87
armarx::box_to_grasp_candidates::side_enabled_map::enabled
std::array< bool, 24 > enabled
Definition: box_to_grasp_candidates.h:76
armarx::box_to_grasp_candidates::add_armar6_defaults
void add_armar6_defaults()
Definition: box_to_grasp_candidates.cpp:13
armarx::box_to_grasp_candidates::box_alignment::pos_x_neg_z
@ pos_x_neg_z
armarx::box_to_grasp_candidates::box_alignment::pos_y_neg_z
@ pos_y_neg_z
armarx::box_to_grasp_candidates::box_alignment::pos_z_pos_y
@ pos_z_pos_y
armarx::box_to_grasp_candidates::box_alignment::pos_z_neg_y
@ pos_z_neg_y
armarx::box_to_grasp_candidates::grasp
Definition: box_to_grasp_candidates.h:103
armarx::box_to_grasp_candidates
Definition: box_to_grasp_candidates.h:14
box_to_grasp_candidates.ipp
armarx::box_to_grasp_candidates::side
const side_data & side(const std::string &side) const
Definition: box_to_grasp_candidates.cpp:434
armarx::RobotArm
Definition: RobotNameHelper.h:99
armarx::box_to_grasp_candidates::center_grasp
grasp center_grasp(const box_t &box, const side_data &side, box_alignment align)
Definition: box_to_grasp_candidates.cpp:462
armarx::box_to_grasp_candidates::box_up_axis
static Eigen::Vector3f box_up_axis(const box_t &box, box_alignment align)
Definition: box_to_grasp_candidates.cpp:157
armarx::box_to_grasp_candidates::box_alignment::pos_z_pos_x
@ pos_z_pos_x
armarx::box_to_grasp_candidates::side_enabled_map::operator[]
bool operator[](std::uint_fast8_t al) const
Definition: box_to_grasp_candidates.h:71
armarx::box_to_grasp_candidates::box_alignment::neg_y_neg_x
@ neg_y_neg_x
armarx::box_to_grasp_candidates::box_alignment::pos_x_pos_z
@ pos_x_pos_z
armarx::box_to_grasp_candidates::box_alignment::pos_y_pos_z
@ pos_y_pos_z
armarx::box_to_grasp_candidates::box_alignment::neg_z_neg_y
@ neg_z_neg_y
armarx::box_to_grasp_candidates::side_enabled_map::operator[]
bool & operator[](std::uint_fast8_t al)
Definition: box_to_grasp_candidates.h:59
armarx::box_to_grasp_candidates::box_transverse_axis
static Eigen::Vector3f box_transverse_axis(const box_t &box, box_alignment align)
Definition: box_to_grasp_candidates.cpp:27
simox::OrientedBox
Definition: ice_conversions.h:17
armarx::box_to_grasp_candidates::box_alignment::pos_y_neg_x
@ pos_y_neg_x
armarx::Arm
Definition: RobotNameHelper.h:39
armarx::box_to_grasp_candidates::grasp::side
const side_data * side
Definition: box_to_grasp_candidates.h:107
armarx::box_to_grasp_candidates::box_up_len
static float box_up_len(const box_t &box, box_alignment align)
Definition: box_to_grasp_candidates.cpp:222
armarx::box_to_grasp_candidates::sides
const std::map< std::string, side_data > & sides() const
Definition: box_to_grasp_candidates.cpp:456
armarx::box_to_grasp_candidates::length_limit::in_limits
bool in_limits(const box_t &box, box_alignment align) const
Definition: box_to_grasp_candidates.cpp:352
armarx::box_to_grasp_candidates::side_data::hand_transverse
Eigen::Vector3f hand_transverse
Definition: box_to_grasp_candidates.h:100
armarx::box_to_grasp_candidates::grasp::approach
Eigen::Vector3f approach
Definition: box_to_grasp_candidates.h:106
armarx::box_to_grasp_candidates::side_enabled_map
Definition: box_to_grasp_candidates.h:50
armarx::box_to_grasp_candidates::length_limit::forward_length_min
float forward_length_min
Definition: box_to_grasp_candidates.h:86
armarx::box_to_grasp_candidates::box_alignment::neg_x_neg_y
@ neg_x_neg_y
armarx::box_to_grasp_candidates::box_alignment::neg_z_neg_x
@ neg_z_neg_x
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
RobotNameHelper.h
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:19