BoxToGraspCandidatesWidgetController.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * ArmarX is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * ArmarX is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * \package ARCHES::gui-plugins::BoxToGraspCandidatesWidgetController
17  * \author Raphael Grimm ( raphael dot grimm at kit dot edu )
18  * \date 2020
19  * \copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #include <string>
24 
25 #include <SimoxUtility/shapes/OrientedBox.h>
26 #include <SimoxUtility/math/convert/rpy_to_mat3f.h>
27 #include <SimoxUtility/math/convert/pos_mat3f_to_mat4f.h>
28 #include <SimoxUtility/math/convert/rpy_to_mat3f.h>
29 #include <SimoxUtility/math/distance/angle_between.h>
30 #include <SimoxUtility/math/distance/angle_between.h>
31 #include <SimoxUtility/math/project_to_plane.h>
32 
36 
38 
39 // configure
40 namespace armarx
41 {
43  {
44  getRobotStateComponentPlugin().setRobotStateComponentName(settings->value("rsc", "Armar6StateComponent").toString().toStdString());
45  _gc_topic_name = settings->value("rsc", "GraspCandidatesTopic").toString().toStdString();
46  }
47 
49  {
50  settings->setValue("rsc", QString::fromStdString(getRobotStateComponentPlugin().getRobotStateComponentName()));
51  settings->setValue("gct", QString::fromStdString(_gc_topic_name));
52  }
53 
54  QPointer<QDialog> BoxToGraspCandidatesWidgetController::getConfigDialog(QWidget* parent)
55  {
56  if (!_dialog)
57  {
58  _dialog = new SimpleConfigDialog(parent);
59  _dialog->addProxyFinder<RobotStateComponentInterfacePrx>("rsc", "Robot State Component", "*Component");
60  _dialog->addLineEdit("gct", "Grasp Candidates Topic", "GraspCandidatesTopic");
61  }
62  return qobject_cast<SimpleConfigDialog*>(_dialog);
63  }
65  {
66  getRobotStateComponentPlugin().setRobotStateComponentName(_dialog->getProxyName("rsc"));
67  _gc_topic_name = _dialog->getLineEditText("gct");
68  }
69 }
70 
71 namespace armarx
72 {
74  {
75  _ui.setupUi(getWidget());
76 
77  _box_pose.setXYZWidgets(
78  _ui.doubleSpinBoxBoxTX,
79  _ui.doubleSpinBoxBoxTY,
80  _ui.doubleSpinBoxBoxTZ
81  );
82 
83  _box_pose.setRPYWidgets(
84  _ui.doubleSpinBoxBoxRX,
85  _ui.doubleSpinBoxBoxRY,
86  _ui.doubleSpinBoxBoxRZ
87  );
88 
89  _box_extend.addWidget(_ui.doubleSpinBoxBoxSizeX);
90  _box_extend.addWidget(_ui.doubleSpinBoxBoxSizeY);
91  _box_extend.addWidget(_ui.doubleSpinBoxBoxSizeZ);
92 
93  _transversal_l.addWidget(_ui.doubleSpinBoxHandLTransvX);
94  _transversal_l.addWidget(_ui.doubleSpinBoxHandLTransvY);
95  _transversal_l.addWidget(_ui.doubleSpinBoxHandLTransvZ);
96 
97  _transversal_r.addWidget(_ui.doubleSpinBoxHandRTransvX);
98  _transversal_r.addWidget(_ui.doubleSpinBoxHandRTransvY);
99  _transversal_r.addWidget(_ui.doubleSpinBoxHandRTransvZ);
100 
101  _up_l.addWidget(_ui.doubleSpinBoxHandLUpX);
102  _up_l.addWidget(_ui.doubleSpinBoxHandLUpY);
103  _up_l.addWidget(_ui.doubleSpinBoxHandLUpZ);
104 
105  _up_r.addWidget(_ui.doubleSpinBoxHandRUpX);
106  _up_r.addWidget(_ui.doubleSpinBoxHandRUpY);
107  _up_r.addWidget(_ui.doubleSpinBoxHandRUpZ);
108 
109  _tcp_shift_l.addWidget(_ui.doubleSpinBoxTCPShiftLX);
110  _tcp_shift_l.addWidget(_ui.doubleSpinBoxTCPShiftLY);
111  _tcp_shift_l.addWidget(_ui.doubleSpinBoxTCPShiftLZ);
112 
113  _tcp_shift_r.addWidget(_ui.doubleSpinBoxTCPShiftRX);
114  _tcp_shift_r.addWidget(_ui.doubleSpinBoxTCPShiftRY);
115  _tcp_shift_r.addWidget(_ui.doubleSpinBoxTCPShiftRZ);
116 
117  const std::vector spinboxes
118  {
119  _ui.doubleSpinBoxBoundTransvMax, _ui.doubleSpinBoxBoundTransvMin,
120  _ui.doubleSpinBoxBoundWidthMin, _ui.doubleSpinBoxBoundWidthMax,
121  _ui.doubleSpinBoxBoundDepthMin, _ui.doubleSpinBoxBoundDepthMax,
122 
123  _ui.doubleSpinBoxBoxTX, _ui.doubleSpinBoxBoxTY, _ui.doubleSpinBoxBoxTZ,
124  _ui.doubleSpinBoxBoxRX, _ui.doubleSpinBoxBoxRY, _ui.doubleSpinBoxBoxRZ,
125  _ui.doubleSpinBoxBoxSizeX, _ui.doubleSpinBoxBoxSizeY, _ui.doubleSpinBoxBoxSizeZ,
126 
127  _ui.doubleSpinBoxHandLTransvX, _ui.doubleSpinBoxHandLTransvY, _ui.doubleSpinBoxHandLTransvZ,
128  _ui.doubleSpinBoxHandRTransvX, _ui.doubleSpinBoxHandRTransvY, _ui.doubleSpinBoxHandRTransvZ,
129 
130  _ui.doubleSpinBoxHandLUpX, _ui.doubleSpinBoxHandLUpY, _ui.doubleSpinBoxHandLUpZ,
131  _ui.doubleSpinBoxHandRUpX, _ui.doubleSpinBoxHandRUpY, _ui.doubleSpinBoxHandRUpZ,
132 
133  _ui.doubleSpinBoxTCPShiftLX, _ui.doubleSpinBoxTCPShiftLY, _ui.doubleSpinBoxTCPShiftLZ,
134  _ui.doubleSpinBoxTCPShiftRX, _ui.doubleSpinBoxTCPShiftRY, _ui.doubleSpinBoxTCPShiftRZ
135  };
136  for (QDoubleSpinBox* ptr : spinboxes)
137  {
138  connect(ptr, qOverload<double>(&QDoubleSpinBox::valueChanged), this, &BoxToGraspCandidatesWidgetController::update);
139  }
140 
141  const std::vector checkboxes
142  {
143  //Left
144  _ui.checkBoxGraspLPosXPosY, _ui.checkBoxGraspLPosXPosZ,
145  _ui.checkBoxGraspLPosXNegY, _ui.checkBoxGraspLPosXNegZ,
146 
147  _ui.checkBoxGraspLNegXPosY, _ui.checkBoxGraspLNegXPosZ,
148  _ui.checkBoxGraspLNegXNegY, _ui.checkBoxGraspLNegXNegZ,
149 
150  _ui.checkBoxGraspLPosYPosX, _ui.checkBoxGraspLPosYPosZ,
151  _ui.checkBoxGraspLPosYNegX, _ui.checkBoxGraspLPosYNegZ,
152 
153  _ui.checkBoxGraspLNegYPosX, _ui.checkBoxGraspLNegYPosZ,
154  _ui.checkBoxGraspLNegYNegX, _ui.checkBoxGraspLNegYNegZ,
155 
156  _ui.checkBoxGraspLPosZPosX, _ui.checkBoxGraspLPosZPosY,
157  _ui.checkBoxGraspLPosZNegX, _ui.checkBoxGraspLPosZNegY,
158 
159  _ui.checkBoxGraspLNegZPosX, _ui.checkBoxGraspLNegZPosY,
160  _ui.checkBoxGraspLNegZNegX, _ui.checkBoxGraspLNegZNegY,
161 
162  //Right
163  _ui.checkBoxGraspRPosXPosY, _ui.checkBoxGraspRPosXPosZ,
164  _ui.checkBoxGraspRPosXNegY, _ui.checkBoxGraspRPosXNegZ,
165 
166  _ui.checkBoxGraspRNegXPosY, _ui.checkBoxGraspRNegXPosZ,
167  _ui.checkBoxGraspRNegXNegY, _ui.checkBoxGraspRNegXNegZ,
168 
169  _ui.checkBoxGraspRPosYPosX, _ui.checkBoxGraspRPosYPosZ,
170  _ui.checkBoxGraspRPosYNegX, _ui.checkBoxGraspRPosYNegZ,
171 
172  _ui.checkBoxGraspRNegYPosX, _ui.checkBoxGraspRNegYPosZ,
173  _ui.checkBoxGraspRNegYNegX, _ui.checkBoxGraspRNegYNegZ,
174 
175  _ui.checkBoxGraspRPosZPosX, _ui.checkBoxGraspRPosZPosY,
176  _ui.checkBoxGraspRPosZNegX, _ui.checkBoxGraspRPosZNegY,
177 
178  _ui.checkBoxGraspRNegZPosX, _ui.checkBoxGraspRNegZPosY,
179  _ui.checkBoxGraspRNegZNegX, _ui.checkBoxGraspRNegZNegY
180  };
181  for (QCheckBox* ptr : checkboxes)
182  {
183  ptr->setChecked(true);
184  connect(ptr, &QCheckBox::clicked, this, &BoxToGraspCandidatesWidgetController::update);
185  }
186  }
187 
189  {
190  {
191  std::lock_guard guard{_mutex};
192  _robot = addRobot("state robot", VirtualRobot::RobotIO::eStructure);
193  getTopic(_gc_topic, _gc_topic_name);
194  }
195  QMetaObject::invokeMethod(this, "update", Qt::QueuedConnection);
196  }
197 
199  {
200  ARMARX_TRACE;
201  std::lock_guard guard{_mutex};
202  if (!_robot)
203  {
204  return;
205  }
206  synchronizeLocalClone(_robot);
207  const simox::OrientedBox<float> box {_box_pose.getMat4(), _box_extend.get<Eigen::Vector3f>()};
208 
209  grasp_candidate_drawer gc_draw{getRobotNameHelper(), _robot};
211  //sides
212  {
213  auto& l = b2gc.side("Left");
214  auto& r = b2gc.side("Right");
215 
216  l.hand_transverse = _transversal_l.get<Eigen::Vector3f>().normalized();
217  r.hand_transverse = _transversal_r.get<Eigen::Vector3f>().normalized();
218  l.hand_up = _up_l.get<Eigen::Vector3f>().normalized();
219  r.hand_up = _up_r.get<Eigen::Vector3f>().normalized();
220  l.tcp_shift = _tcp_shift_l.get<Eigen::Vector3f>().normalized();
221  r.tcp_shift = _tcp_shift_r.get<Eigen::Vector3f>().normalized();
222  }
224  {
225  lim.transverse_length_min = _ui.doubleSpinBoxBoundTransvMin->value();
226  lim.transverse_length_max = _ui.doubleSpinBoxBoundTransvMax->value();
227  lim.upward_length_min = _ui.doubleSpinBoxBoundDepthMin->value();
228  lim.upward_length_max = _ui.doubleSpinBoxBoundDepthMax->value();
229  lim.forward_length_min = _ui.doubleSpinBoxBoundWidthMin->value();
230  lim.forward_length_max = _ui.doubleSpinBoxBoundWidthMax->value();
231  }
233  {
235  side_enabled_l[ba::pos_x_pos_y] = _ui.checkBoxGraspLPosXPosY->isChecked();
236  side_enabled_l[ba::pos_x_pos_z] = _ui.checkBoxGraspLPosXPosZ->isChecked();
237  side_enabled_l[ba::pos_x_neg_y] = _ui.checkBoxGraspLPosXNegY->isChecked();
238  side_enabled_l[ba::pos_x_neg_z] = _ui.checkBoxGraspLPosXNegZ->isChecked();
239 
240  side_enabled_l[ba::neg_x_pos_y] = _ui.checkBoxGraspLNegXPosY->isChecked();
241  side_enabled_l[ba::neg_x_pos_z] = _ui.checkBoxGraspLNegXPosZ->isChecked();
242  side_enabled_l[ba::neg_x_neg_y] = _ui.checkBoxGraspLNegXNegY->isChecked();
243  side_enabled_l[ba::neg_x_neg_z] = _ui.checkBoxGraspLNegXNegZ->isChecked();
244 
245  side_enabled_l[ba::pos_y_pos_x] = _ui.checkBoxGraspLPosYPosX->isChecked();
246  side_enabled_l[ba::pos_y_pos_z] = _ui.checkBoxGraspLPosYPosZ->isChecked();
247  side_enabled_l[ba::pos_y_neg_x] = _ui.checkBoxGraspLPosYNegX->isChecked();
248  side_enabled_l[ba::pos_y_neg_z] = _ui.checkBoxGraspLPosYNegZ->isChecked();
249 
250  side_enabled_l[ba::neg_y_pos_x] = _ui.checkBoxGraspLNegYPosX->isChecked();
251  side_enabled_l[ba::neg_y_pos_z] = _ui.checkBoxGraspLNegYPosZ->isChecked();
252  side_enabled_l[ba::neg_y_neg_x] = _ui.checkBoxGraspLNegYNegX->isChecked();
253  side_enabled_l[ba::neg_y_neg_z] = _ui.checkBoxGraspLNegYNegZ->isChecked();
254 
255  side_enabled_l[ba::pos_z_pos_x] = _ui.checkBoxGraspLPosZPosX->isChecked();
256  side_enabled_l[ba::pos_z_pos_y] = _ui.checkBoxGraspLPosZPosY->isChecked();
257  side_enabled_l[ba::pos_z_neg_x] = _ui.checkBoxGraspLPosZNegX->isChecked();
258  side_enabled_l[ba::pos_z_neg_y] = _ui.checkBoxGraspLPosZNegY->isChecked();
259 
260  side_enabled_l[ba::neg_z_pos_x] = _ui.checkBoxGraspLNegZPosX->isChecked();
261  side_enabled_l[ba::neg_z_pos_y] = _ui.checkBoxGraspLNegZPosY->isChecked();
262  side_enabled_l[ba::neg_z_neg_x] = _ui.checkBoxGraspLNegZNegX->isChecked();
263  side_enabled_l[ba::neg_z_neg_y] = _ui.checkBoxGraspLNegZNegY->isChecked();
264  }
266  {
268  side_enabled_r[ba::pos_x_pos_y] = _ui.checkBoxGraspRPosXPosY->isChecked();
269  side_enabled_r[ba::pos_x_pos_z] = _ui.checkBoxGraspRPosXPosZ->isChecked();
270  side_enabled_r[ba::pos_x_neg_y] = _ui.checkBoxGraspRPosXNegY->isChecked();
271  side_enabled_r[ba::pos_x_neg_z] = _ui.checkBoxGraspRPosXNegZ->isChecked();
272 
273  side_enabled_r[ba::neg_x_pos_y] = _ui.checkBoxGraspRNegXPosY->isChecked();
274  side_enabled_r[ba::neg_x_pos_z] = _ui.checkBoxGraspRNegXPosZ->isChecked();
275  side_enabled_r[ba::neg_x_neg_y] = _ui.checkBoxGraspRNegXNegY->isChecked();
276  side_enabled_r[ba::neg_x_neg_z] = _ui.checkBoxGraspRNegXNegZ->isChecked();
277 
278  side_enabled_r[ba::pos_y_pos_x] = _ui.checkBoxGraspRPosYPosX->isChecked();
279  side_enabled_r[ba::pos_y_pos_z] = _ui.checkBoxGraspRPosYPosZ->isChecked();
280  side_enabled_r[ba::pos_y_neg_x] = _ui.checkBoxGraspRPosYNegX->isChecked();
281  side_enabled_r[ba::pos_y_neg_z] = _ui.checkBoxGraspRPosYNegZ->isChecked();
282 
283  side_enabled_r[ba::neg_y_pos_x] = _ui.checkBoxGraspRNegYPosX->isChecked();
284  side_enabled_r[ba::neg_y_pos_z] = _ui.checkBoxGraspRNegYPosZ->isChecked();
285  side_enabled_r[ba::neg_y_neg_x] = _ui.checkBoxGraspRNegYNegX->isChecked();
286  side_enabled_r[ba::neg_y_neg_z] = _ui.checkBoxGraspRNegYNegZ->isChecked();
287 
288  side_enabled_r[ba::pos_z_pos_x] = _ui.checkBoxGraspRPosZPosX->isChecked();
289  side_enabled_r[ba::pos_z_pos_y] = _ui.checkBoxGraspRPosZPosY->isChecked();
290  side_enabled_r[ba::pos_z_neg_x] = _ui.checkBoxGraspRPosZNegX->isChecked();
291  side_enabled_r[ba::pos_z_neg_y] = _ui.checkBoxGraspRPosZNegY->isChecked();
292 
293  side_enabled_r[ba::neg_z_pos_x] = _ui.checkBoxGraspRNegZPosX->isChecked();
294  side_enabled_r[ba::neg_z_pos_y] = _ui.checkBoxGraspRNegZPosY->isChecked();
295  side_enabled_r[ba::neg_z_neg_x] = _ui.checkBoxGraspRNegZNegX->isChecked();
296  side_enabled_r[ba::neg_z_neg_y] = _ui.checkBoxGraspRNegZNegY->isChecked();
297  }
298 
299  viz::Layer layer_l = arviz.layer("grasps_l");
300  viz::Layer layer_r = arviz.layer("grasps_r");
301  viz::Layer layer_hand_vec = arviz.layer("hand_vec");
302  viz::Layer layer_box = arviz.layer("box");
303  layer_box.add(viz::Box{"box"}
304  .set(box)
305  .transformPose(_robot->getGlobalPose())
306  );
307 
308  gc_draw.draw(b2gc.side("Left"), layer_hand_vec);
309  gc_draw.draw(b2gc.side("Right"), layer_hand_vec);
310 
311  grasping::GraspCandidateSeq graps;
312  const auto consume_l = [&](const auto & g)
313  {
314  graps.emplace_back(g.make_candidate(getName()));
315  gc_draw.draw(graps.back(), layer_l);
316  };
317  const auto consume_r = [&](const auto & g)
318  {
319  graps.emplace_back(g.make_candidate(getName()));
320  gc_draw.draw(graps.back(), layer_r);
321  };
322  b2gc.center_grasps(box, "Left", lim, consume_l, side_enabled_l);
323  b2gc.center_grasps(box, "Right", lim, consume_r, side_enabled_r);
324 
325  arviz.commit({layer_l, layer_r, layer_hand_vec, layer_box});
326 
327  _gc_topic->reportGraspCandidates(getName(), graps);
328  }
329 }
armarx::viz::Client::commit
CommitResult commit(StagedCommit const &commit)
Definition: Client.cpp:80
armarx::SpinBoxToPose::setXYZWidgets
void setXYZWidgets(Qwid *x, Qwid *y, Qwid *z)
Definition: SpinBoxToPose.h:86
armarx::box_to_grasp_candidates::length_limit::upward_length_max
float upward_length_max
Definition: box_to_grasp_candidates.h:68
armarx::box_to_grasp_candidates::length_limit::transverse_length_max
float transverse_length_max
Definition: box_to_grasp_candidates.h:66
armarx::RobotStateComponentPluginUser::getRobotNameHelper
RobotNameHelperPtr getRobotNameHelper() const
Definition: RobotStateComponentPlugin.cpp:321
armarx::SpinBoxToPose::setRPYWidgets
void setRPYWidgets(Qwid *r, Qwid *p, Qwid *y)
Definition: SpinBoxToPose.h:92
armarx::SpinBoxToPose::getMat4
Eigen::Matrix4f getMat4() const
Definition: SpinBoxToPose.h:80
armarx::BoxToGraspCandidatesWidgetController::BoxToGraspCandidatesWidgetController
BoxToGraspCandidatesWidgetController()
Definition: BoxToGraspCandidatesWidgetController.cpp:73
armarx::SpinBoxToVector::get
void get(Eigen::Matrix< Scalar, Rows, Cols > &m) const
Definition: SpinBoxToVector.h:45
armarx::viz::Layer::add
void add(ElementT const &element)
Definition: Layer.h:29
armarx::plugins::RobotStateComponentPlugin::setRobotStateComponentName
void setRobotStateComponentName(const std::string &name)
Definition: RobotStateComponentPlugin.cpp:272
armarx::RobotStateComponentPluginUser::addRobot
VirtualRobot::RobotPtr addRobot(const std::string &id, const VirtualRobot::RobotPtr &robot, const VirtualRobot::RobotNodeSetPtr &rns={}, const VirtualRobot::RobotNodePtr &node={})
Definition: RobotStateComponentPlugin.cpp:331
armarx::RobotStateComponentPluginUser::synchronizeLocalClone
bool synchronizeLocalClone(const VirtualRobot::RobotPtr &robot) const
Definition: RobotStateComponentPlugin.cpp:371
GraspCandidateHelper.h
armarx::box_to_grasp_candidates::length_limit::upward_length_min
float upward_length_min
Definition: box_to_grasp_candidates.h:67
armarx::box_to_grasp_candidates::length_limit::transverse_length_min
float transverse_length_min
Definition: box_to_grasp_candidates.h:65
ARMARX_TRACE
#define ARMARX_TRACE
Definition: trace.h:69
armarx::box_to_grasp_candidates::length_limit
Definition: box_to_grasp_candidates.h:63
armarx::box_to_grasp_candidates::box_alignment
box_alignment
Definition: box_to_grasp_candidates.h:17
armarx::BoxToGraspCandidatesWidgetController::update
void update()
Definition: BoxToGraspCandidatesWidgetController.cpp:198
armarx::SpinBoxToVector::addWidget
void addWidget(Qwid *s)
Definition: SpinBoxToVector.h:140
armarx::RobotStateComponentPluginUser::getRobotStateComponentPlugin
const RobotStateComponentPlugin & getRobotStateComponentPlugin() const
Definition: RobotStateComponentPlugin.cpp:307
armarx::box_to_grasp_candidates::length_limit::forward_length_max
float forward_length_max
Definition: box_to_grasp_candidates.h:70
armarx::viz::Box
Definition: Elements.h:51
grasp_candidate_drawer.h
armarx::BoxToGraspCandidatesWidgetController::loadSettings
void loadSettings(QSettings *settings) override
Implement to load the settings that are part of the GUI configuration.
Definition: BoxToGraspCandidatesWidgetController.cpp:42
armarx::box_to_grasp_candidates
Definition: box_to_grasp_candidates.h:14
armarx::BoxToGraspCandidatesWidgetController::saveSettings
void saveSettings(QSettings *settings) override
Implement to save the settings as part of the GUI configuration.
Definition: BoxToGraspCandidatesWidgetController.cpp:48
armarx::ArVizComponentPluginUser::arviz
armarx::viz::Client arviz
Definition: ArVizComponentPlugin.h:43
armarx::ManagedIceObject::getTopic
TopicProxyType getTopic(const std::string &name)
Returns a proxy of the specified topic.
Definition: ManagedIceObject.h:451
simox::OrientedBox
Definition: ice_conversions.h:18
IceInternal::ProxyHandle<::IceProxy::armarx::RobotStateComponentInterface >
armarx::grasp_candidate_drawer
Definition: grasp_candidate_drawer.h:14
armarx::ArmarXWidgetController::getWidget
virtual QPointer< QWidget > getWidget()
getWidget returns a pointer to the a widget of this controller.
Definition: ArmarXWidgetController.cpp:54
armarx::ManagedIceObject::getName
std::string getName() const
Retrieve name of object.
Definition: ManagedIceObject.cpp:107
box_to_grasp_candidates.h
BoxToGraspCandidatesWidgetController.h
armarx::viz::Client::layer
Layer layer(std::string const &name) const
Definition: Client.cpp:73
armarx::box_to_grasp_candidates::side_enabled_map
Definition: box_to_grasp_candidates.h:37
armarx::box_to_grasp_candidates::length_limit::forward_length_min
float forward_length_min
Definition: box_to_grasp_candidates.h:69
armarx::BoxToGraspCandidatesWidgetController::configured
void configured() override
This function must be implemented by the user, if he supplies a config dialog.
Definition: BoxToGraspCandidatesWidgetController.cpp:64
armarx::viz::Layer
Definition: Layer.h:12
armarx::viz::Box::set
Box & set(const simox::OrientedBoxBase< float > &b)
Definition: Elements.cpp:70
armarx::BoxToGraspCandidatesWidgetController::onConnectComponent
void onConnectComponent() override
Pure virtual hook for the subclass.
Definition: BoxToGraspCandidatesWidgetController.cpp:188
armarx::BoxToGraspCandidatesWidgetController::getConfigDialog
QPointer< QDialog > getConfigDialog(QWidget *parent)
getConfigDialog returns a pointer to the a configuration widget of this controller.
Definition: BoxToGraspCandidatesWidgetController.cpp:54
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::SimpleConfigDialog
A config-dialog containing one (or multiple) proxy finders.
Definition: SimpleConfigDialog.h:84