setup_assistant_widget.cpp
Go to the documentation of this file.
1 /*********************************************************************
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2012, Willow Garage, Inc.
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: Dave Coleman */
36 
37 // SA
38 #include "setup_screen_widget.h" // a base class for screens in the setup assistant
39 #include "setup_assistant_widget.h"
40 #include "header_widget.h"
41 
42 // Qt
43 #include <QApplication>
44 #include <QCheckBox>
45 #include <QCloseEvent>
46 #include <QFont>
47 #include <QHBoxLayout>
48 #include <QLabel>
49 #include <QMessageBox>
50 #include <QPushButton>
51 #include <QSplitter>
52 #include <QStackedWidget>
53 #include <QString>
54 #include <pluginlib/class_loader.hpp> // for loading all avail kinematic planners
55 // Rviz
56 #include <rviz/render_panel.h>
58 #include <rviz/view_manager.h>
61 
62 namespace moveit_setup_assistant
63 {
64 // ******************************************************************************************
65 // Outer User Interface for MoveIt Configuration Assistant
66 // ******************************************************************************************
67 SetupAssistantWidget::SetupAssistantWidget(QWidget* parent, const boost::program_options::variables_map& args)
68  : QWidget(parent)
69 {
70  rviz_manager_ = nullptr;
71  rviz_render_panel_ = nullptr;
72 
73  // Create object to hold all MoveIt configuration data
74  config_data_ = std::make_shared<MoveItConfigData>();
75 
76  // Set debug mode flag if necessary
77  if (args.count("debug"))
78  config_data_->debug_ = true;
79 
80  // Setting the window icon
81  std::string moveit_ros_visualization_package_path = ros::package::getPath("moveit_ros_visualization");
82  moveit_ros_visualization_package_path += "/icons/classes/MotionPlanning.png";
83  this->setWindowIcon(QIcon(moveit_ros_visualization_package_path.c_str()));
84 
85  // Basic widget container -----------------------------------------
86  QHBoxLayout* layout = new QHBoxLayout();
87  layout->setAlignment(Qt::AlignTop);
88 
89  // Create main content stack for various screens
90  main_content_ = new QStackedWidget();
91  current_index_ = 0;
92 
93  // Screens --------------------------------------------------------
94 
95  // Start Screen
96  start_screen_widget_ = new StartScreenWidget(this, config_data_);
97  start_screen_widget_->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
98  connect(start_screen_widget_, SIGNAL(readyToProgress()), this, SLOT(progressPastStartScreen()));
99  connect(start_screen_widget_, SIGNAL(loadRviz()), this, SLOT(loadRviz()));
100  main_content_->addWidget(start_screen_widget_);
101 
102  // Pass command arg values to start screen and show appropriate part of screen
103  if (args.count("urdf_path"))
104  {
105  start_screen_widget_->urdf_file_->setPath(args["urdf_path"].as<std::string>());
106  start_screen_widget_->select_mode_->btn_new_->click();
107  }
108  if (args.count("config_pkg"))
109  {
110  start_screen_widget_->stack_path_->setPath(args["config_pkg"].as<std::string>());
111  start_screen_widget_->select_mode_->btn_exist_->click();
112  }
113  else
114  {
115  start_screen_widget_->stack_path_->setPath(QString(getenv("PWD")));
116  }
117 
118  // Add Navigation Buttons (but do not load widgets yet except start screen)
119  nav_name_list_ << "Start";
120  nav_name_list_ << "Self-Collisions";
121  nav_name_list_ << "Virtual Joints";
122  nav_name_list_ << "Planning Groups";
123  nav_name_list_ << "Robot Poses";
124  nav_name_list_ << "End Effectors";
125  nav_name_list_ << "Passive Joints";
126  nav_name_list_ << "Controllers";
127  nav_name_list_ << "Simulation";
128  nav_name_list_ << "3D Perception";
129  nav_name_list_ << "Author Information";
130  nav_name_list_ << "Configuration Files";
131 
132  // Navigation Left Pane --------------------------------------------------
133  navs_view_ = new NavigationWidget(this);
134  navs_view_->setNavs(nav_name_list_);
135  navs_view_->setDisabled(true);
136  navs_view_->setSelected(0); // start screen
137 
138  // Rviz View Right Pane ---------------------------------------------------
139  rviz_container_ = new QWidget(this);
140  rviz_container_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
141  rviz_container_->hide(); // do not show until after the start screen
142 
143  // Split screen -----------------------------------------------------
144  splitter_ = new QSplitter(Qt::Horizontal, this);
145  splitter_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
146  splitter_->addWidget(navs_view_);
147  splitter_->addWidget(main_content_);
148  splitter_->addWidget(rviz_container_);
149  splitter_->setHandleWidth(6);
150  // splitter_->setCollapsible( 0, false ); // don't let navigation collapse
151  layout->addWidget(splitter_);
152 
153  // Add event for switching between screens -------------------------
154  connect(navs_view_, SIGNAL(clicked(const QModelIndex&)), this, SLOT(navigationClicked(const QModelIndex&)));
155 
156  // Final Layout Setup ---------------------------------------------
157  this->setLayout(layout);
158 
159  // Title
160  this->setWindowTitle("MoveIt Setup Assistant"); // title of window
161 
162  // Show screen before message
163  QApplication::processEvents();
164 }
165 
166 // ******************************************************************************************
167 // Decontructor
168 // ******************************************************************************************
169 SetupAssistantWidget::~SetupAssistantWidget()
170 {
171  if (rviz_manager_ != nullptr)
172  rviz_manager_->removeAllDisplays();
173  if (rviz_render_panel_ != nullptr)
174  delete rviz_render_panel_;
175  if (rviz_manager_ != nullptr)
176  delete rviz_manager_;
177 }
178 
179 void SetupAssistantWidget::virtualJointReferenceFrameChanged()
180 {
181  if (rviz_manager_ && robot_state_display_)
182  {
183  rviz_manager_->setFixedFrame(QString::fromStdString(config_data_->getRobotModel()->getModelFrame()));
184  robot_state_display_->reset();
185  robot_state_display_->setVisible(true);
186  }
187 }
188 
189 // ******************************************************************************************
190 // Change screens of Setup Assistant
191 // ******************************************************************************************
192 void SetupAssistantWidget::navigationClicked(const QModelIndex& index)
193 {
194  // Convert QModelIndex to int
195  moveToScreen(index.row());
196 }
197 
198 // ******************************************************************************************
199 // Change screens
200 // ******************************************************************************************
201 void SetupAssistantWidget::moveToScreen(const int index)
202 {
203  boost::mutex::scoped_lock slock(change_screen_lock_);
204 
205  if (current_index_ != index)
206  {
207  // Send the focus lost command to the screen widget
208  SetupScreenWidget* ssw = qobject_cast<SetupScreenWidget*>(main_content_->widget(current_index_));
209  if (!ssw->focusLost())
210  {
211  navs_view_->setSelected(current_index_);
212  return; // switching not accepted
213  }
214 
215  current_index_ = index;
216 
217  // Unhighlight anything on robot
218  unhighlightAll();
219 
220  // Change screens
221  main_content_->setCurrentIndex(index);
222 
223  // Send the focus given command to the screen widget
224  ssw = qobject_cast<SetupScreenWidget*>(main_content_->widget(index));
225  ssw->focusGiven();
226 
227  // Change navigation selected option
228  navs_view_->setSelected(index); // Select first item in list
229  }
230 }
231 
232 // ******************************************************************************************
233 // Loads other windows, enables navigation
234 // ******************************************************************************************
235 void SetupAssistantWidget::progressPastStartScreen()
236 {
237  // Load all widgets ------------------------------------------------
238 
239  // Self-Collisions
240  default_collisions_widget_ = new DefaultCollisionsWidget(this, config_data_);
241  main_content_->addWidget(default_collisions_widget_);
242  connect(default_collisions_widget_, SIGNAL(highlightLink(const std::string&, const QColor&)), this,
243  SLOT(highlightLink(const std::string&, const QColor&)));
244  connect(default_collisions_widget_, SIGNAL(highlightGroup(const std::string&)), this,
245  SLOT(highlightGroup(const std::string&)));
246  connect(default_collisions_widget_, SIGNAL(unhighlightAll()), this, SLOT(unhighlightAll()));
247 
248  // Virtual Joints
249  virtual_joints_widget_ = new VirtualJointsWidget(this, config_data_);
250  main_content_->addWidget(virtual_joints_widget_);
251  connect(virtual_joints_widget_, SIGNAL(isModal(bool)), this, SLOT(setModalMode(bool)));
252  connect(virtual_joints_widget_, SIGNAL(highlightLink(const std::string&, const QColor&)), this,
253  SLOT(highlightLink(const std::string&, const QColor&)));
254  connect(virtual_joints_widget_, SIGNAL(highlightGroup(const std::string&)), this,
255  SLOT(highlightGroup(const std::string&)));
256  connect(virtual_joints_widget_, SIGNAL(unhighlightAll()), this, SLOT(unhighlightAll()));
257  connect(virtual_joints_widget_, SIGNAL(referenceFrameChanged()), this, SLOT(virtualJointReferenceFrameChanged()));
258 
259  // Planning Groups
260  planning_groups_widget = new PlanningGroupsWidget(this, config_data_);
261  main_content_->addWidget(planning_groups_widget);
262  connect(planning_groups_widget, SIGNAL(isModal(bool)), this, SLOT(setModalMode(bool)));
263  connect(planning_groups_widget, SIGNAL(highlightLink(const std::string&, const QColor&)), this,
264  SLOT(highlightLink(const std::string&, const QColor&)));
265  connect(planning_groups_widget, SIGNAL(highlightGroup(const std::string&)), this,
266  SLOT(highlightGroup(const std::string&)));
267  connect(planning_groups_widget, SIGNAL(unhighlightAll()), this, SLOT(unhighlightAll()));
268 
269  // Robot Poses
270  robot_poses_widget_ = new RobotPosesWidget(this, config_data_);
271  main_content_->addWidget(robot_poses_widget_);
272  connect(robot_poses_widget_, SIGNAL(isModal(bool)), this, SLOT(setModalMode(bool)));
273  connect(robot_poses_widget_, SIGNAL(highlightLink(const std::string&, const QColor&)), this,
274  SLOT(highlightLink(const std::string&, const QColor&)));
275  connect(robot_poses_widget_, SIGNAL(highlightGroup(const std::string&)), this,
276  SLOT(highlightGroup(const std::string&)));
277  connect(robot_poses_widget_, SIGNAL(unhighlightAll()), this, SLOT(unhighlightAll()));
278 
279  // End Effectors
280  end_effectors_widget_ = new EndEffectorsWidget(this, config_data_);
281  main_content_->addWidget(end_effectors_widget_);
282  connect(end_effectors_widget_, SIGNAL(isModal(bool)), this, SLOT(setModalMode(bool)));
283  connect(end_effectors_widget_, SIGNAL(highlightLink(const std::string&, const QColor&)), this,
284  SLOT(highlightLink(const std::string&, const QColor&)));
285  connect(end_effectors_widget_, SIGNAL(highlightGroup(const std::string&)), this,
286  SLOT(highlightGroup(const std::string&)));
287  connect(end_effectors_widget_, SIGNAL(unhighlightAll()), this, SLOT(unhighlightAll()));
288 
289  // Virtual Joints
290  passive_joints_widget_ = new PassiveJointsWidget(this, config_data_);
291  main_content_->addWidget(passive_joints_widget_);
292  connect(passive_joints_widget_, SIGNAL(isModal(bool)), this, SLOT(setModalMode(bool)));
293  connect(passive_joints_widget_, SIGNAL(highlightLink(const std::string&, const QColor&)), this,
294  SLOT(highlightLink(const std::string&, const QColor&)));
295  connect(passive_joints_widget_, SIGNAL(highlightGroup(const std::string&)), this,
296  SLOT(highlightGroup(const std::string&)));
297  connect(passive_joints_widget_, SIGNAL(unhighlightAll()), this, SLOT(unhighlightAll()));
298 
299  // Controllers
300  controllers_widget_ = new ControllersWidget(this, config_data_);
301  main_content_->addWidget(controllers_widget_);
302  connect(controllers_widget_, SIGNAL(isModal(bool)), this, SLOT(setModalMode(bool)));
303  connect(controllers_widget_, SIGNAL(highlightLink(const std::string&, const QColor&)), this,
304  SLOT(highlightLink(const std::string&, const QColor&)));
305  connect(controllers_widget_, SIGNAL(highlightGroup(const std::string&)), this,
306  SLOT(highlightGroup(const std::string&)));
307  connect(controllers_widget_, SIGNAL(unhighlightAll()), this, SLOT(unhighlightAll()));
308 
309  // Simulation Screen
310  simulation_widget_ = new SimulationWidget(this, config_data_);
311  main_content_->addWidget(simulation_widget_);
312  connect(simulation_widget_, SIGNAL(isModal(bool)), this, SLOT(setModalMode(bool)));
313  connect(simulation_widget_, SIGNAL(highlightLink(const std::string&, const QColor&)), this,
314  SLOT(highlightLink(const std::string&, const QColor&)));
315  connect(simulation_widget_, SIGNAL(highlightGroup(const std::string&)), this,
316  SLOT(highlightGroup(const std::string&)));
317  connect(simulation_widget_, SIGNAL(unhighlightAll()), this, SLOT(unhighlightAll()));
318 
319  // Perception
320  perception_widget_ = new PerceptionWidget(this, config_data_);
321  main_content_->addWidget(perception_widget_);
322  connect(perception_widget_, SIGNAL(isModal(bool)), this, SLOT(setModalMode(bool)));
323  connect(perception_widget_, SIGNAL(highlightLink(const std::string&, const QColor&)), this,
324  SLOT(highlightLink(const std::string&, const QColor&)));
325  connect(perception_widget_, SIGNAL(highlightGroup(const std::string&)), this,
326  SLOT(highlightGroup(const std::string&)));
327  connect(perception_widget_, SIGNAL(unhighlightAll()), this, SLOT(unhighlightAll()));
328 
329  // Author Information
330  author_information_widget_ = new AuthorInformationWidget(this, config_data_);
331  main_content_->addWidget(author_information_widget_);
332  connect(author_information_widget_, SIGNAL(isModal(bool)), this, SLOT(setModalMode(bool)));
333  connect(author_information_widget_, SIGNAL(highlightLink(const std::string&, const QColor&)), this,
334  SLOT(highlightLink(const std::string&, const QColor&)));
335  connect(author_information_widget_, SIGNAL(highlightGroup(const std::string&)), this,
336  SLOT(highlightGroup(const std::string&)));
337  connect(author_information_widget_, SIGNAL(unhighlightAll()), this, SLOT(unhighlightAll()));
338 
339  // Configuration Files
340  configuration_files_widget_ = new ConfigurationFilesWidget(this, config_data_);
341  main_content_->addWidget(configuration_files_widget_);
342 
343  // Enable all nav buttons -------------------------------------------
344  for (int i = 0; i < nav_name_list_.count(); ++i)
345  {
346  navs_view_->setEnabled(i, true);
347  }
348 
349  // Enable navigation
350  navs_view_->setDisabled(false);
351 
352  // Replace logo with Rviz screen
353  rviz_container_->show();
354 
355  // Move to next screen in debug mode
356  if (config_data_->debug_)
357  {
358  moveToScreen(3);
359  }
360 }
361 
362 // ******************************************************************************************
363 // Ping ROS on internval
364 // ******************************************************************************************
365 void SetupAssistantWidget::updateTimer()
366 {
367  ros::spinOnce(); // keep ROS node alive
368 }
369 
370 // ******************************************************************************************
371 // Load Rviz once we have a robot description ready
372 // ******************************************************************************************
373 void SetupAssistantWidget::loadRviz()
374 {
375  // Create rviz frame
376  rviz_render_panel_ = new rviz::RenderPanel();
377  rviz_render_panel_->setMinimumWidth(200);
378  rviz_render_panel_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
379 
380  rviz_manager_ = new rviz::VisualizationManager(rviz_render_panel_);
381  rviz_render_panel_->initialize(rviz_manager_->getSceneManager(), rviz_manager_);
382  rviz_manager_->initialize();
383  rviz_manager_->startUpdate();
384 
385  // Set the fixed and target frame
386  rviz_manager_->setFixedFrame(QString::fromStdString(config_data_->getRobotModel()->getModelFrame()));
387 
388  // Create the MoveIt Rviz Plugin and attach to display
389  robot_state_display_ = new moveit_rviz_plugin::RobotStateDisplay();
390  robot_state_display_->setName("Robot State");
391 
392  rviz_manager_->addDisplay(robot_state_display_, true);
393 
394  // Set the topic on which the moveit_msgs::PlanningScene messages are received
395  robot_state_display_->subProp("Robot State Topic")->setValue(QString::fromStdString(MOVEIT_ROBOT_STATE));
396 
397  // Set robot description
398  robot_state_display_->subProp("Robot Description")->setValue(QString::fromStdString(ROBOT_DESCRIPTION));
399  robot_state_display_->setVisible(true);
400 
401  // Zoom into robot
402  rviz::ViewController* view = rviz_manager_->getViewManager()->getCurrent();
403  view->subProp("Distance")->setValue(4.0f);
404 
405  // Add Rviz to Planning Groups Widget
406  QVBoxLayout* rviz_layout = new QVBoxLayout();
407  rviz_layout->addWidget(rviz_render_panel_);
408  rviz_container_->setLayout(rviz_layout);
409 
410  // visual / collision buttons
411  auto btn_layout = new QHBoxLayout();
412  rviz_layout->addLayout(btn_layout);
413 
414  QCheckBox* btn;
415  btn_layout->addWidget(btn = new QCheckBox("visual"), 0);
416  btn->setChecked(true);
417  connect(btn, &QCheckBox::toggled,
418  [this](bool checked) { robot_state_display_->subProp("Visual Enabled")->setValue(checked); });
419 
420  btn_layout->addWidget(btn = new QCheckBox("collision"), 1);
421  btn->setChecked(false);
422  connect(btn, &QCheckBox::toggled,
423  [this](bool checked) { robot_state_display_->subProp("Collision Enabled")->setValue(checked); });
424 
425  rviz_container_->show();
426 }
427 
428 // ******************************************************************************************
429 // Highlight a robot link
430 // ******************************************************************************************
431 void SetupAssistantWidget::highlightLink(const std::string& link_name, const QColor& color)
432 {
433  const moveit::core::LinkModel* lm = config_data_->getRobotModel()->getLinkModel(link_name);
434  if (!lm->getShapes().empty()) // skip links with no geometry
435  robot_state_display_->setLinkColor(link_name, color);
436 }
437 
438 // ******************************************************************************************
439 // Highlight a robot group
440 // ******************************************************************************************
441 void SetupAssistantWidget::highlightGroup(const std::string& group_name)
442 {
443  // Highlight the selected planning group by looping through the links
444  if (!config_data_->getRobotModel()->hasJointModelGroup(group_name))
445  return;
446 
447  const moveit::core::JointModelGroup* joint_model_group =
448  config_data_->getRobotModel()->getJointModelGroup(group_name);
449  if (joint_model_group)
450  {
451  // Iterate through the links
452  for (const moveit::core::LinkModel* lm : joint_model_group->getLinkModels())
453  highlightLink(lm->getName(), QColor(255, 0, 0));
454  }
455 }
456 
457 // ******************************************************************************************
458 // Unhighlight all robot links
459 // ******************************************************************************************
460 void SetupAssistantWidget::unhighlightAll()
461 {
462  // Get the names of the all links robot
463  const std::vector<std::string>& links = config_data_->getRobotModel()->getLinkModelNamesWithCollisionGeometry();
464 
465  // Quit if no links found
466  if (links.empty())
467  {
468  return;
469  }
470 
471  // check if rviz is ready
472  if (!rviz_manager_ || !robot_state_display_)
473  {
474  return;
475  }
476 
477  // Iterate through the links
478  for (const std::string& link : links)
479  {
480  if (link.empty())
481  continue;
482 
483  robot_state_display_->unsetLinkColor(link);
484  }
485 }
486 
487 // ******************************************************************************************
488 // Qt close event function for reminding user to save
489 // ******************************************************************************************
490 void SetupAssistantWidget::closeEvent(QCloseEvent* event)
491 {
492  // Only prompt to close if not in debug mode
493  if (!config_data_->debug_)
494  {
495  if (QMessageBox::question(this, "Exit Setup Assistant",
496  QString("Are you sure you want to exit the MoveIt Setup Assistant?"),
497  QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Cancel)
498  {
499  event->ignore();
500  return;
501  }
502  }
503 
504  // Shutdown app
505  event->accept();
506 }
507 
508 // ******************************************************************************************
509 // Qt Error Handling - TODO
510 // ******************************************************************************************
511 bool SetupAssistantWidget::notify(QObject* /*receiver*/, QEvent* /*event*/)
512 {
513  QMessageBox::critical(this, "Error", "An error occurred and was caught by Qt notify event handler.", QMessageBox::Ok);
514 
515  return false;
516 }
517 
518 // ******************************************************************************************
519 // Change the widget modal state based on subwidgets state
520 // ******************************************************************************************
521 void SetupAssistantWidget::setModalMode(bool isModal)
522 {
523  navs_view_->setDisabled(isModal);
524 
525  for (int i = 0; i < nav_name_list_.count(); ++i)
526  {
527  navs_view_->setEnabled(i, !isModal);
528  }
529 }
530 
531 } // namespace moveit_setup_assistant
moveit_setup_assistant::VirtualJointsWidget
Definition: virtual_joints_widget.h:56
moveit_setup_assistant::ROBOT_DESCRIPTION
static const std::string ROBOT_DESCRIPTION
Definition: moveit_config_data.h:86
moveit::core::LinkModel
moveit_setup_assistant::SetupAssistantWidget::SetupAssistantWidget
SetupAssistantWidget(QWidget *parent, const boost::program_options::variables_map &args)
Definition: setup_assistant_widget.cpp:99
moveit_setup_assistant::PassiveJointsWidget
Definition: passive_joints_widget.h:81
ros::package::getPath
ROSLIB_DECL std::string getPath(const std::string &package_name)
moveit_setup_assistant::EndEffectorsWidget
Definition: end_effectors_widget.h:55
rviz::VisualizationManager
SetupScreenWidget::focusLost
virtual bool focusLost()
function called when widget lost focus, allows to accept/reject changes and to reject switching (retu...
Definition: setup_screen_widget.cpp:44
ros::spinOnce
ROSCPP_DECL void spinOnce()
moveit_setup_assistant::MOVEIT_ROBOT_STATE
static const std::string MOVEIT_ROBOT_STATE
Definition: moveit_config_data.h:87
rviz::Property::subProp
virtual Property * subProp(const QString &sub_name)
moveit_setup_assistant::SimulationWidget
Definition: simulation_widget.h:57
SetupScreenWidget::focusGiven
virtual void focusGiven()
function called when widget is activated, allows to update/initialize GUI
Definition: setup_screen_widget.cpp:40
visualization_manager.h
moveit::core::JointModelGroup::getLinkModels
const std::vector< const LinkModel * > & getLinkModels() const
moveit_setup_assistant::PlanningGroupsWidget
Definition: planning_groups_widget.h:76
moveit_setup_assistant::AuthorInformationWidget
Definition: author_information_widget.h:49
moveit_setup_assistant::ControllersWidget
Definition: controllers_widget.h:57
setup_assistant_widget.h
render_panel.h
rviz::Property::setValue
virtual bool setValue(const QVariant &new_value)
SetupScreenWidget
Definition: setup_screen_widget.h:44
moveit_setup_assistant::RobotPosesWidget
Definition: robot_poses_widget.h:59
class_loader.hpp
moveit_setup_assistant::DefaultCollisionsWidget
User interface for editing the default collision matrix list in an SRDF.
Definition: default_collisions_widget.h:74
header_widget.h
moveit_setup_assistant
Definition: compute_default_collisions.h:46
view_manager.h
moveit_setup_assistant::ConfigurationFilesWidget
Definition: configuration_files_widget.h:75
rviz::ViewController
setup_screen_widget.h
moveit::core::JointModelGroup
index
unsigned int index
robot_state_display.h
args
moveit_rviz_plugin::RobotStateDisplay
moveit::core::LinkModel::getShapes
const std::vector< shapes::ShapeConstPtr > & getShapes() const
rviz::RenderPanel
moveit::core::LinkModel::getName
const std::string & getName() const
moveit_setup_assistant::PerceptionWidget
Definition: perception_widget.h:55
orbit_view_controller.h


moveit_setup_assistant
Author(s): Dave Coleman
autogenerated on Sat May 3 2025 02:28:04