handeye_context_widget.cpp
Go to the documentation of this file.
1 /*********************************************************************
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2019, Intel Corporation.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the following
15  * disclaimer in the documentation and/or other materials provided
16  * with the distribution.
17  * * Neither the name of Willow Garage nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *********************************************************************/
34 
35 /* Author: Yu Yan */
36 
38 #include <math.h>
39 
40 namespace moveit_rviz_plugin
41 {
42 const std::string LOGNAME = "handeye_context_widget";
43 
44 void TFFrameNameComboBox::mousePressEvent(QMouseEvent* event)
45 {
46  std::vector<std::string> names;
47  frame_manager_->update();
48  frame_manager_->getTF2BufferPtr()->_getFrameStrings(names);
49 
50  clear();
51  addItem(QString(""));
52  if (robot_model_loader_->getModel()) // Ensure that robot is brought up
53  {
54  const std::vector<std::string>& robot_links = robot_model_loader_->getModel()->getLinkModelNames();
55  for (const std::string& name : names)
56  {
57  auto it = std::find(robot_links.begin(), robot_links.end(), name);
58  size_t index = name.find("camera");
59 
61  if (it != robot_links.end())
62  addItem(QString(name.c_str()));
63 
64  // add all frames as potential camera frame
66  addItem(QString(name.c_str()));
67 
69  if (it == robot_links.end() && index == std::string::npos)
70  addItem(QString(name.c_str()));
71  }
72  }
73  showPopup();
74 }
75 
76 bool TFFrameNameComboBox::hasFrame(const std::string& frame_name)
77 {
78  std::vector<std::string> names;
79  frame_manager_->update();
80  frame_manager_->getTF2BufferPtr()->_getFrameStrings(names);
81 
82  auto it = std::find(names.begin(), names.end(), frame_name);
83  return it != names.end();
84 }
85 
86 SliderWidget::SliderWidget(QWidget* parent, std::string name, double min, double max)
87  : QWidget(parent), min_position_(min), max_position_(max)
88 {
89  QHBoxLayout* row = new QHBoxLayout(this);
90  row->setContentsMargins(0, 10, 0, 10);
91 
92  // QLabel init
93  label_ = new QLabel(QString(name.c_str()), this);
94  label_->setContentsMargins(0, 0, 0, 0);
95  row->addWidget(label_);
96 
97  // QSlider init
98  slider_ = new QSlider(Qt::Horizontal, this);
99  slider_->setSingleStep(100);
100  slider_->setPageStep(100);
101  slider_->setTickInterval(1000);
102  slider_->setContentsMargins(0, 0, 0, 0);
103  row->addWidget(slider_);
104 
105  slider_->setMaximum(max_position_ * 10000);
106  slider_->setMinimum(min_position_ * 10000);
107 
108  connect(slider_, SIGNAL(valueChanged(int)), this, SLOT(changeValue(int)));
109 
110  // QLineEdit init
111  edit_ = new QLineEdit(this);
112  edit_->setMinimumWidth(62);
113  edit_->setContentsMargins(0, 0, 0, 0);
114  connect(edit_, SIGNAL(editingFinished()), this, SLOT(changeSlider()));
115  row->addWidget(edit_);
116 
117  this->setLayout(row);
118 }
119 
120 double SliderWidget::getValue()
121 {
122  return edit_->text().toDouble();
123 }
124 
125 void SliderWidget::setValue(double value)
126 {
127  if (min_position_ > value || value > max_position_)
128  {
130  }
131  edit_->setText(QString("%1").arg(value, 0, 'f', 4));
132  slider_->setSliderPosition(value * 10000);
133 }
134 
135 void SliderWidget::changeValue(int value)
136 {
137  const double double_value = double(value) / 10000;
138 
139  // Set textbox
140  edit_->setText(QString("%1").arg(double_value, 0, 'f', 4));
141 
142  // Send event to parent widget
143  Q_EMIT valueChanged(double_value);
144 }
145 
147 {
148  // Get joint value
149  double value = edit_->text().toDouble();
150 
151  setValue(value);
152 
153  // Send event to parent widget
154  Q_EMIT valueChanged(value);
155 }
156 
158  : QWidget(parent), calibration_display_(pdisplay), tf_listener_(tf_buffer_)
159 {
160  // Context setting tab ----------------------------------------------------
161  QHBoxLayout* layout = new QHBoxLayout();
162  this->setLayout(layout);
163  QVBoxLayout* layout_left = new QVBoxLayout();
164  layout->addLayout(layout_left);
165  QVBoxLayout* layout_right = new QVBoxLayout();
166  layout->addLayout(layout_right);
167 
168  // Sensor mount type area
169  QGroupBox* group_left_top = new QGroupBox("General Setting", this);
170  layout_left->addWidget(group_left_top);
171  QFormLayout* layout_left_top = new QFormLayout();
172  group_left_top->setLayout(layout_left_top);
173 
174  sensor_mount_type_ = new QComboBox();
175  sensor_mount_type_->addItem("Eye-to-hand");
176  sensor_mount_type_->addItem("Eye-in-hand");
177  layout_left_top->addRow("Sensor configuration", sensor_mount_type_);
178  connect(sensor_mount_type_, SIGNAL(activated(int)), this, SLOT(updateSensorMountType(int)));
179 
180  // Frame name selection area
181  QGroupBox* frame_group = new QGroupBox("Frames Selection", this);
182  layout_left->addWidget(frame_group);
183  QFormLayout* frame_layout = new QFormLayout();
184  frame_group->setLayout(frame_layout);
185 
186  frames_.insert(std::make_pair("sensor", new TFFrameNameComboBox(CAMERA_FRAME)));
187  frame_layout->addRow("Sensor frame:", frames_["sensor"]);
188 
189  frames_.insert(std::make_pair("object", new TFFrameNameComboBox(ENVIRONMENT_FRAME)));
190  frame_layout->addRow("Object frame:", frames_["object"]);
191 
192  frames_.insert(std::make_pair("eef", new TFFrameNameComboBox(ROBOT_FRAME)));
193  frame_layout->addRow("End-effector frame:", frames_["eef"]);
194 
195  frames_.insert(std::make_pair("base", new TFFrameNameComboBox(ROBOT_FRAME)));
196  frame_layout->addRow("Robot base frame:", frames_["base"]);
197 
198  for (std::pair<const std::string, TFFrameNameComboBox*>& frame : frames_)
199  connect(frame.second, SIGNAL(activated(int)), this, SLOT(updateFrameName(int)));
200 
201  // Camera Pose initial guess area
202  QGroupBox* pose_group = new QGroupBox("Camera Pose Inital Guess", this);
203  pose_group->setMinimumWidth(300);
204  layout_right->addWidget(pose_group);
205  QFormLayout* pose_layout = new QFormLayout();
206  pose_group->setLayout(pose_layout);
207 
208  guess_pose_.insert(std::make_pair("Tx", new SliderWidget(this, "X", -2.0, 2.0)));
209  pose_layout->addRow(guess_pose_["Tx"]);
210 
211  guess_pose_.insert(std::make_pair("Ty", new SliderWidget(this, "Y", -2.0, 2.0)));
212  pose_layout->addRow(guess_pose_["Ty"]);
213 
214  guess_pose_.insert(std::make_pair("Tz", new SliderWidget(this, "Z", -2.0, 2.0)));
215  pose_layout->addRow(guess_pose_["Tz"]);
216 
217  guess_pose_.insert(std::make_pair("Rx", new SliderWidget(this, "Roll", -M_PI, M_PI)));
218  pose_layout->addRow(guess_pose_["Rx"]);
219 
220  guess_pose_.insert(std::make_pair("Ry", new SliderWidget(this, "Pitch", -M_PI, M_PI)));
221  pose_layout->addRow(guess_pose_["Ry"]);
222 
223  guess_pose_.insert(std::make_pair("Rz", new SliderWidget(this, "Yaw", -M_PI, M_PI)));
224  pose_layout->addRow(guess_pose_["Rz"]);
225 
226  for (std::pair<const std::string, SliderWidget*>& dim : guess_pose_)
227  {
228  dim.second->setValue(0);
229  connect(dim.second, SIGNAL(valueChanged(double)), this, SLOT(updateCameraMarkerPose(double)));
230  }
231 
232  // Variable Initialization
233  camera_pose_ = Eigen::Isometry3d::Identity();
234  fov_pose_ = Eigen::Quaterniond(0.5, -0.5, 0.5, -0.5);
235  fov_pose_.translate(Eigen::Vector3d(0.0149, 0.0325, 0.0125));
236 
237  camera_info_.reset(new sensor_msgs::CameraInfo());
238 
239  visual_tools_.reset(new moveit_visual_tools::MoveItVisualTools("world"));
240  visual_tools_->enableFrameLocking(true);
241  visual_tools_->setAlpha(1.0);
242  visual_tools_->setLifetime(0.0);
243  visual_tools_->trigger();
244 
245  calibration_display_->setStatus(rviz::StatusProperty::Warn, "Calibration context",
246  "Not all calibration frames have been selected.");
247 }
248 
249 void ContextTabWidget::loadWidget(const rviz::Config& config)
250 {
251  int index;
252  if (config.mapGetInt("sensor_mount_type", &index))
253  sensor_mount_type_->setCurrentIndex(index);
254 
255  Q_EMIT sensorMountTypeChanged(index);
256 
257  for (std::pair<const std::string, TFFrameNameComboBox*>& frame : frames_)
258  {
259  QString frame_name;
260  if (config.mapGetString(frame.first.c_str(), &frame_name))
261  {
262  frame.second->clear();
263  if (!frame_name.isEmpty() && frame.second->hasFrame(frame_name.toStdString()))
264  frame.second->addItem(frame_name);
265  }
266  }
267 
268  for (std::pair<const std::string, SliderWidget*>& dim : guess_pose_)
269  {
270  float value;
271  if (config.mapGetFloat(dim.first.c_str(), &value))
272  dim.second->setValue(value);
273  }
275 
276  std::map<std::string, std::string> names;
277  for (std::pair<const std::string, TFFrameNameComboBox*>& frame : frames_)
278  names.insert(std::make_pair(frame.first, frame.second->currentText().toStdString()));
279 
280  Q_EMIT frameNameChanged(names);
281 }
282 
284 {
285  config.mapSetValue("sensor_mount_type", sensor_mount_type_->currentIndex());
286 
287  for (std::pair<const std::string, TFFrameNameComboBox*>& frame : frames_)
288  config.mapSetValue(frame.first.c_str(), frame.second->currentText());
289 
290  for (std::pair<const std::string, SliderWidget*>& dim : guess_pose_)
291  config.mapSetValue(dim.first.c_str(), dim.second->getValue());
292 }
293 
295 {
296  tf_tools_ = tf_pub;
297 }
298 
300 {
301  if (visual_tools_ && tf_tools_)
302  {
303  visual_tools_->deleteAllMarkers();
304  tf_tools_->clearAllTransforms();
305 
306  QString from_frame("");
307  mhc::SensorMountType setup = static_cast<mhc::SensorMountType>(sensor_mount_type_->currentIndex());
308 
309  switch (setup)
310  {
311  case mhc::EYE_TO_HAND:
312  from_frame = frames_["base"]->currentText();
313  break;
314  case mhc::EYE_IN_HAND:
315  from_frame = frames_["eef"]->currentText();
316  break;
317  default:
318  ROS_ERROR_STREAM_NAMED(LOGNAME, "Error sensor mount type.");
319  break;
320  }
321 
322  if (!from_frame.isEmpty())
323  {
324  for (std::pair<const std::string, TFFrameNameComboBox*> frame : frames_)
325  {
326  // Publish selected frame axis
327  const std::string& frame_id = frame.second->currentText().toStdString();
328  if (!frame_id.empty())
329  {
330  visual_tools_->setBaseFrame(frame_id);
331  visual_tools_->setAlpha(1.0);
332  visual_tools_->publishAxisLabeled(Eigen::Isometry3d::Identity(), frame_id);
333  }
334  }
335 
336  // Publish camera and fov marker
337  QString to_frame = frames_["sensor"]->currentText();
338  if (!to_frame.isEmpty())
339  {
340  // // Get camera pose guess
341  setCameraPose(guess_pose_["Tx"]->getValue(), guess_pose_["Ty"]->getValue(), guess_pose_["Tz"]->getValue(),
342  guess_pose_["Rx"]->getValue(), guess_pose_["Ry"]->getValue(), guess_pose_["Rz"]->getValue());
343 
344  // Publish new transform from robot base or end-effector to sensor frame
345  tf_tools_->publishTransform(camera_pose_, from_frame.toStdString(), to_frame.toStdString());
346 
347  // Publish new FOV marker
349  {
350  shape_msgs::Mesh mesh =
352  visual_tools_->setBaseFrame(to_frame.toStdString());
354  visual_tools_->publishMesh(fov_pose_, mesh, rvt::YELLOW, 1.0, "fov", 1);
355  }
356  }
357  }
358 
359  visual_tools_->trigger();
360  }
361  else
362  ROS_ERROR("Visual or TF tool is NULL.");
363 }
364 
366 {
367  QString sensor_frame = frames_["sensor"]->currentText();
368  geometry_msgs::TransformStamped tf_msg;
369  if (!optical_frame_.empty() && !sensor_frame.isEmpty())
370  {
371  try
372  {
373  // Get FOV pose W.R.T sensor frame
374  tf_msg = tf_buffer_.lookupTransform(sensor_frame.toStdString(), optical_frame_, ros::Time(0));
376  ROS_DEBUG_STREAM_NAMED(LOGNAME, "FOV pose from '" << sensor_frame.toStdString() << "' to '" << optical_frame_
377  << "' is:"
378  << "\nTranslation:\n"
379  << fov_pose_.translation() << "\nRotation:\n"
380  << fov_pose_.rotation());
381  }
382  catch (tf2::TransformException& e)
383  {
384  ROS_WARN_STREAM("TF exception: " << e.what());
385  }
386  }
387 }
388 
389 shape_msgs::Mesh ContextTabWidget::getCameraFOVMesh(const sensor_msgs::CameraInfo& camera_info, double max_dist)
390 {
391  shape_msgs::Mesh mesh;
393  camera_model.fromCameraInfo(camera_info);
394  double delta_x = camera_model.getDeltaX(camera_info.width / 2, max_dist);
395  double delta_y = camera_model.getDeltaY(camera_info.height / 2, max_dist);
396 
397  std::vector<double> x_cords = { -delta_x, delta_x };
398  std::vector<double> y_cords = { -delta_y, delta_y };
399 
400  // Get corners
401  mesh.vertices.clear();
402  // Add the first corner at origin of the optical frame
403  mesh.vertices.push_back(geometry_msgs::Point());
404 
405  // Add the four corners at bottom
406  for (const double& x_it : x_cords)
407  for (const double& y_it : y_cords)
408  {
409  geometry_msgs::Point vertex;
410  // Check in case camera info is not valid
411  if (std::isfinite(x_it) && std::isfinite(y_it) && std::isfinite(max_dist))
412  {
413  vertex.x = x_it;
414  vertex.y = y_it;
415  vertex.z = max_dist;
416  }
417  mesh.vertices.push_back(vertex);
418  }
419 
420  // Get surface triangles
421  mesh.triangles.resize(4);
422  mesh.triangles[0].vertex_indices = { 0, 1, 2 };
423  mesh.triangles[1].vertex_indices = { 0, 2, 4 };
424  mesh.triangles[2].vertex_indices = { 0, 4, 3 };
425  mesh.triangles[3].vertex_indices = { 0, 3, 1 };
426  return mesh;
427 }
428 
429 visualization_msgs::Marker ContextTabWidget::getCameraFOVMarker(const Eigen::Isometry3d& pose,
430  const shape_msgs::Mesh& mesh, rvt::colors color,
431  double alpha, std::string frame_id)
432 {
433  return getCameraFOVMarker(rvt::RvizVisualTools::convertPose(pose), mesh, color, alpha, frame_id);
434 }
435 
436 visualization_msgs::Marker ContextTabWidget::getCameraFOVMarker(const geometry_msgs::Pose& pose,
437  const shape_msgs::Mesh& mesh, rvt::colors color,
438  double alpha, std::string frame_id)
439 {
440  visualization_msgs::Marker marker;
441  marker.header.frame_id = frame_id;
442  marker.ns = "camera_fov";
443  marker.id = 0;
444  marker.type = visualization_msgs::Marker::TRIANGLE_LIST;
445  marker.action = visualization_msgs::Marker::ADD;
446  marker.lifetime = ros::Duration(0.0);
447  visual_tools_->setAlpha(alpha);
448  marker.color = visual_tools_->getColor(color);
449  marker.pose = pose;
450  marker.scale.x = 1.0;
451  marker.scale.y = 1.0;
452  marker.scale.z = 1.0;
453 
454  marker.points.clear();
455  for (const shape_msgs::MeshTriangle& triangle : mesh.triangles)
456  for (const uint32_t& index : triangle.vertex_indices)
457  marker.points.push_back(mesh.vertices[index]);
458 
459  return marker;
460 }
461 
462 void ContextTabWidget::setCameraPose(double tx, double ty, double tz, double rx, double ry, double rz)
463 {
464  camera_pose_.setIdentity();
465  camera_pose_ = visual_tools_->convertFromXYZRPY(tx, ty, tz, rx, ry, rz, rviz_visual_tools::XYZ);
466 }
467 
468 void ContextTabWidget::setCameraInfo(sensor_msgs::CameraInfo camera_info)
469 {
470  camera_info_->header = camera_info.header;
471  camera_info_->height = camera_info.height;
472  camera_info_->width = camera_info.width;
473  camera_info_->distortion_model = camera_info.distortion_model;
474  camera_info_->D = camera_info.D;
475  camera_info_->K = camera_info.K;
476  camera_info_->R = camera_info.R;
477  camera_info_->P = camera_info.P;
478  ROS_DEBUG_STREAM_NAMED(LOGNAME, "Camera info changed: " << *camera_info_);
479 }
480 
481 void ContextTabWidget::setOpticalFrame(const std::string& frame_id)
482 {
483  optical_frame_ = frame_id;
484  updateFOVPose();
485 }
486 
487 void ContextTabWidget::updateCameraPose(double tx, double ty, double tz, double rx, double ry, double rz)
488 {
489  // setCameraPose(tx, ty, tz, rx, ry, rz);
490  guess_pose_["Tx"]->setValue(tx);
491  guess_pose_["Ty"]->setValue(ty);
492  guess_pose_["Tz"]->setValue(tz);
493  guess_pose_["Rx"]->setValue(rx);
494  guess_pose_["Ry"]->setValue(ry);
495  guess_pose_["Rz"]->setValue(rz);
497 }
498 
500 {
501  for (std::pair<const std::string, SliderWidget*> dim : guess_pose_)
502  dim.second->setValue(0);
503 
505 
507 }
508 
509 void ContextTabWidget::updateFrameName(int index)
510 {
512  updateFOVPose();
513 
514  std::map<std::string, std::string> names;
515  bool any_empty = false;
516  for (std::pair<const std::string, TFFrameNameComboBox*>& frame : frames_)
517  {
518  names.insert(std::make_pair(frame.first, frame.second->currentText().toStdString()));
519  any_empty = any_empty || frame.second->currentText().toStdString().empty();
520  }
521  if (any_empty)
522  {
524  "Not all calibration frames have been selected.");
525  }
526  else
527  {
529  "Calibration frames have been selected.");
530  }
531 
532  Q_EMIT frameNameChanged(names);
533 }
534 
536 {
538 }
539 
540 } // namespace moveit_rviz_plugin
moveit_rviz_plugin::ContextTabWidget::updateFOVPose
void updateFOVPose()
Definition: handeye_context_widget.cpp:397
moveit_rviz_plugin::ContextTabWidget::setCameraPose
void setCameraPose(double tx, double ty, double tz, double rx, double ry, double rz)
Definition: handeye_context_widget.cpp:494
rviz::BoolProperty::getBool
virtual bool getBool() const
setup
moveit_rviz_plugin::HandEyeCalibrationDisplay::fov_marker_enabled_property_
rviz::BoolProperty * fov_marker_enabled_property_
Definition: handeye_calibration_display.h:133
moveit_rviz_plugin::ContextTabWidget::tf_buffer_
tf2_ros::Buffer tf_buffer_
Definition: handeye_context_widget.h:273
moveit_rviz_plugin::ContextTabWidget::setCameraInfo
void setCameraInfo(sensor_msgs::CameraInfo camera_info)
Definition: handeye_context_widget.cpp:500
moveit_rviz_plugin::ContextTabWidget::saveWidget
void saveWidget(rviz::Config &config)
Definition: handeye_context_widget.cpp:315
moveit_rviz_plugin::ContextTabWidget::updateFrameName
void updateFrameName(int index)
Definition: handeye_context_widget.cpp:541
moveit_rviz_plugin::SliderWidget::getValue
double getValue()
Definition: handeye_context_widget.cpp:152
min
int min(int a, int b)
moveit_rviz_plugin::SliderWidget::setValue
void setValue(double value)
Definition: handeye_context_widget.cpp:157
moveit_rviz_plugin::HandEyeCalibrationDisplay::fov_marker_size_property_
rviz::FloatProperty * fov_marker_size_property_
Definition: handeye_calibration_display.h:135
boost::shared_ptr< TFVisualTools >
moveit_rviz_plugin::ContextTabWidget::sensorMountTypeChanged
void sensorMountTypeChanged(int index)
ROS_DEBUG_STREAM_NAMED
#define ROS_DEBUG_STREAM_NAMED(name, args)
moveit_rviz_plugin::ContextTabWidget::updateSensorMountType
void updateSensorMountType(int index)
Definition: handeye_context_widget.cpp:531
moveit_rviz_plugin::SliderWidget::changeSlider
void changeSlider()
Definition: handeye_context_widget.cpp:178
moveit_rviz_plugin::SliderWidget::changeValue
void changeValue(int value)
Definition: handeye_context_widget.cpp:167
moveit_rviz_plugin::SliderWidget::edit_
QLineEdit * edit_
Definition: handeye_context_widget.h:161
moveit_rviz_plugin::ContextTabWidget::setOpticalFrame
void setOpticalFrame(const std::string &frame_id)
Definition: handeye_context_widget.cpp:513
moveit_rviz_plugin::SliderWidget::valueChanged
void valueChanged(double value)
rviz_visual_tools::RvizVisualTools::convertPose
static geometry_msgs::Pose convertPose(const Eigen::Isometry3d &pose)
moveit_rviz_plugin::ContextTabWidget::getCameraFOVMarker
visualization_msgs::Marker getCameraFOVMarker(const Eigen::Isometry3d &pose, const shape_msgs::Mesh &mesh, rvt::colors color, double alpha, std::string frame_id)
Definition: handeye_context_widget.cpp:461
moveit_rviz_plugin::ROBOT_FRAME
@ ROBOT_FRAME
Definition: handeye_context_widget.h:109
moveit_rviz_plugin::TFFrameNameComboBox
Definition: handeye_context_widget.h:117
moveit_handeye_calibration::EYE_TO_HAND
EYE_TO_HAND
handeye_context_widget.h
moveit_handeye_calibration::EYE_IN_HAND
EYE_IN_HAND
image_geometry::PinholeCameraModel::getDeltaX
double getDeltaX(double deltaU, double Z) const
moveit_rviz_plugin::ContextTabWidget::setTFTool
void setTFTool(rviz_visual_tools::TFVisualToolsPtr &tf_pub)
Definition: handeye_context_widget.cpp:326
moveit_rviz_plugin::ContextTabWidget::frames_
std::map< std::string, TFFrameNameComboBox * > frames_
Definition: handeye_context_widget.h:248
moveit_rviz_plugin::ContextTabWidget::ContextTabWidget
ContextTabWidget(HandEyeCalibrationDisplay *pdisplay, QWidget *parent=Q_NULLPTR)
Definition: handeye_context_widget.cpp:189
moveit_rviz_plugin::HandEyeCalibrationDisplay
Definition: handeye_calibration_display.h:89
rviz::Display::setStatus
virtual void setStatus(StatusProperty::Level level, const QString &name, const QString &text)
ROS_WARN_STREAM
#define ROS_WARN_STREAM(args)
moveit_rviz_plugin::LOGNAME
const std::string LOGNAME
Definition: handeye_context_widget.cpp:74
image_geometry::PinholeCameraModel::fromCameraInfo
bool fromCameraInfo(const sensor_msgs::CameraInfo &msg)
rviz::FloatProperty::getFloat
virtual float getFloat() const
moveit_rviz_plugin::ContextTabWidget::frameNameChanged
void frameNameChanged(std::map< std::string, std::string > names)
moveit_rviz_plugin::ContextTabWidget::optical_frame_
std::string optical_frame_
Definition: handeye_context_widget.h:262
ROS_ERROR_STREAM_NAMED
#define ROS_ERROR_STREAM_NAMED(name, args)
moveit_handeye_calibration::SensorMountType
SensorMountType
moveit_rviz_plugin::ContextTabWidget::getCameraFOVMesh
static shape_msgs::Mesh getCameraFOVMesh(const sensor_msgs::CameraInfo &camera_info, double maxdist)
Definition: handeye_context_widget.cpp:421
rviz::StatusProperty::Ok
Ok
rviz::StatusProperty::Warn
Warn
moveit_rviz_plugin::CAMERA_FRAME
@ CAMERA_FRAME
Definition: handeye_context_widget.h:110
moveit_rviz_plugin::ContextTabWidget::camera_pose_
Eigen::Isometry3d camera_pose_
Definition: handeye_context_widget.h:260
ROS_ERROR
#define ROS_ERROR(...)
image_geometry::PinholeCameraModel::getDeltaY
double getDeltaY(double deltaV, double Z) const
moveit_rviz_plugin::ContextTabWidget::updateAllMarkers
void updateAllMarkers()
Definition: handeye_context_widget.cpp:331
value
float value
moveit_rviz_plugin::SliderWidget::min_position_
double min_position_
Definition: handeye_context_widget.h:179
moveit_rviz_plugin::ENVIRONMENT_FRAME
@ ENVIRONMENT_FRAME
Definition: handeye_context_widget.h:111
moveit_rviz_plugin::ContextTabWidget::loadWidget
void loadWidget(const rviz::Config &config)
Definition: handeye_context_widget.cpp:281
name
name
tf2::transformToEigen
Eigen::Isometry3d transformToEigen(const geometry_msgs::Transform &t)
moveit_rviz_plugin::TFFrameNameComboBox::hasFrame
bool hasFrame(const std::string &frame_name)
Definition: handeye_context_widget.cpp:108
moveit_rviz_plugin::TFFrameNameComboBox::frame_source_
FRAME_SOURCE frame_source_
Definition: handeye_context_widget.h:138
rviz_visual_tools::colors
colors
moveit_rviz_plugin
moveit_rviz_plugin::ContextTabWidget::camera_info_
sensor_msgs::CameraInfoPtr camera_info_
Definition: handeye_context_widget.h:257
moveit_rviz_plugin::ContextTabWidget::tf_tools_
rviz_visual_tools::TFVisualToolsPtr tf_tools_
Definition: handeye_context_widget.h:272
moveit_rviz_plugin::TFFrameNameComboBox::mousePressEvent
void mousePressEvent(QMouseEvent *event)
Definition: handeye_context_widget.cpp:76
ros::Time
image_geometry::PinholeCameraModel
moveit_rviz_plugin::ContextTabWidget::fov_pose_
Eigen::Isometry3d fov_pose_
Definition: handeye_context_widget.h:265
moveit_rviz_plugin::SliderWidget::max_position_
double max_position_
Definition: handeye_context_widget.h:178
moveit_rviz_plugin::ContextTabWidget::visual_tools_
moveit_visual_tools::MoveItVisualToolsPtr visual_tools_
Definition: handeye_context_widget.h:271
moveit_rviz_plugin::TFFrameNameComboBox::frame_manager_
std::unique_ptr< rviz::FrameManager > frame_manager_
Definition: handeye_context_widget.h:139
index
unsigned int index
moveit_rviz_plugin::TFFrameNameComboBox::robot_model_loader_
robot_model_loader::RobotModelLoaderConstPtr robot_model_loader_
Definition: handeye_context_widget.h:140
moveit_rviz_plugin::HandEyeCalibrationDisplay::fov_marker_alpha_property_
rviz::FloatProperty * fov_marker_alpha_property_
Definition: handeye_calibration_display.h:134
moveit_visual_tools::MoveItVisualTools
moveit_rviz_plugin::SliderWidget::slider_
QSlider * slider_
Definition: handeye_context_widget.h:160
moveit_rviz_plugin::SliderWidget::SliderWidget
SliderWidget(QWidget *parent, std::string name, double min, double max)
Definition: handeye_context_widget.cpp:118
dim
int dim
moveit_rviz_plugin::ContextTabWidget::calibration_display_
HandEyeCalibrationDisplay * calibration_display_
Definition: handeye_context_widget.h:238
tf2::TransformException
ros::Duration
config
config
moveit_rviz_plugin::ContextTabWidget::guess_pose_
std::map< std::string, SliderWidget * > guess_pose_
Definition: handeye_context_widget.h:251
rviz::Config
tf2_ros::Buffer::lookupTransform
virtual geometry_msgs::TransformStamped lookupTransform(const std::string &target_frame, const ros::Time &target_time, const std::string &source_frame, const ros::Time &source_time, const std::string &fixed_frame, const ros::Duration timeout) const
moveit_rviz_plugin::ContextTabWidget::updateCameraPose
void updateCameraPose(double tx, double ty, double tz, double rx, double ry, double rz)
Definition: handeye_context_widget.cpp:519
moveit_rviz_plugin::ContextTabWidget::updateCameraMarkerPose
void updateCameraMarkerPose(double value)
Definition: handeye_context_widget.cpp:567
rviz_visual_tools::XYZ
XYZ
moveit_rviz_plugin::ContextTabWidget::sensor_mount_type_
QComboBox * sensor_mount_type_
Definition: handeye_context_widget.h:245


moveit_calibration_gui
Author(s): Yu Yan
autogenerated on Fri Oct 18 2024 02:14:15