slam_toolbox_rviz_plugin.cpp
Go to the documentation of this file.
1 /*
2  * slam_toolbox
3  * Copyright (c) 2018, Simbe Robotics, Inc.
4  *
5  * THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
6  * COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
7  * COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
8  * AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
9  *
10  * BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO
11  * BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS
12  * CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
13  * CONDITIONS.
14  *
15  */
16 
17 /* Author: Steven Macenski */
18 
19 // Header
21 // QT
22 #include <QPushButton>
23 #include <QCheckBox>
24 #include <QLineEdit>
25 #include <QComboBox>
26 #include <QVBoxLayout>
27 #include <QHBoxLayout>
28 #include <QtGui>
29 #include <QLabel>
30 #include <QFrame>
31 
32 // ROS
33 #include <tf/tf.h>
36 
37 namespace slam_toolbox
38 {
39 
40 /*****************************************************************************/
41 SlamToolboxPlugin::SlamToolboxPlugin(QWidget* parent):
42  rviz::Panel(parent),
43  _thread(NULL),
44  _match_type(PROCESS_FIRST_NODE_CMT)
45 /*****************************************************************************/
46 {
47  ros::NodeHandle nh;
48  bool paused_measure = false, interactive = false;
49  nh.getParam("/slam_toolbox/paused_new_measurements", paused_measure);
50  nh.getParam("/slam_toolbox/interactive_mode", interactive);
51  _serialize = nh.serviceClient<slam_toolbox_msgs::SerializePoseGraph>("/slam_toolbox/serialize_map");
52  _load_map = nh.serviceClient<slam_toolbox_msgs::DeserializePoseGraph>("/slam_toolbox/deserialize_map");
53  _clearChanges = nh.serviceClient<slam_toolbox_msgs::Clear>("/slam_toolbox/clear_changes");
54  _saveChanges = nh.serviceClient<slam_toolbox_msgs::LoopClosure>("/slam_toolbox/manual_loop_closure");
55  _saveMap = nh.serviceClient<slam_toolbox_msgs::SaveMap>("/slam_toolbox/save_map");
56  _clearQueue = nh.serviceClient<slam_toolbox_msgs::ClearQueue>("/slam_toolbox/clear_queue");
57  _interactive = nh.serviceClient<slam_toolbox_msgs::ToggleInteractive>("/slam_toolbox/toggle_interactive_mode");
58  _pause_measurements = nh.serviceClient<slam_toolbox_msgs::Pause>("/slam_toolbox/pause_new_measurements");
59  _load_submap_for_merging = nh.serviceClient<slam_toolbox_msgs::AddSubmap>("/map_merging/add_submap");
60  _merge = nh.serviceClient<slam_toolbox_msgs::MergeMaps>("/map_merging/merge_submaps");
61 
62  _initialposeSub = nh.subscribe("/initialpose", 10, &SlamToolboxPlugin::InitialPoseCallback, this);
63 
64  _vbox = new QVBoxLayout();
65  _hbox1 = new QHBoxLayout();
66  _hbox2 = new QHBoxLayout();
67  _hbox3 = new QHBoxLayout();
68  _hbox4 = new QHBoxLayout();
69  _hbox5 = new QHBoxLayout();
70  _hbox6 = new QHBoxLayout();
71  _hbox7 = new QHBoxLayout();
72  _hbox8 = new QHBoxLayout();
73  _hbox9 = new QHBoxLayout();
74  _hbox10 = new QHBoxLayout();
75 
76  QFrame* _line = new QFrame();
77  _line->setFrameShape(QFrame::HLine);
78  _line->setFrameShadow(QFrame::Sunken);
79 
80  _button1 = new QPushButton(this);
81  _button1->setText("Clear Changes");
82  connect(_button1, SIGNAL(clicked()), this, SLOT(ClearChanges()));
83  _button2 = new QPushButton(this);
84  _button2->setText("Save Changes");
85  connect(_button2, SIGNAL(clicked()), this, SLOT(SaveChanges()));
86  _button3 = new QPushButton(this);
87  _button3->setText("Save Map");
88  connect(_button3, SIGNAL(clicked()), this, SLOT(SaveMap()));
89  _button4 = new QPushButton(this);
90  _button4->setText("Clear Measurement Queue");
91  connect(_button4, SIGNAL(clicked()), this, SLOT(ClearQueue()));
92  _button5 = new QPushButton(this);
93  _button5->setText("Add Submap");
94  connect(_button5, SIGNAL(clicked()), this, SLOT(LoadSubmap()));
95  _button6 = new QPushButton(this);
96  _button6->setText("Generate Map");
97  connect(_button6, SIGNAL(clicked()), this, SLOT(GenerateMap()));
98  _button7 = new QPushButton(this);
99  _button7->setText("Serialize Map");
100  connect(_button7, SIGNAL(clicked()), this, SLOT(SerializeMap()));
101  _button8 = new QPushButton(this);
102  _button8->setText("Deserialize Map");
103  connect(_button8, SIGNAL(clicked()), this, SLOT(DeserializeMap()));
104 
105  _label1 = new QLabel(this);
106  _label1->setText("Interactive Mode");
107  _label2 = new QLabel(this);
108  _label2->setText("Accept New Scans");
109  _label4 = new QLabel(this);
110  _label4->setText("Merge Map Tool");
111  _label4->setAlignment(Qt::AlignCenter);
112  _label5 = new QLabel(this);
113  _label5->setText("Create Map Tool");
114  _label5->setAlignment(Qt::AlignCenter);
115  _label6 = new QLabel(this);
116  _label6->setText("X");
117  _label6->setAlignment(Qt::AlignCenter);
118  _label7 = new QLabel(this);
119  _label7->setText("Y");
120  _label7->setAlignment(Qt::AlignCenter);
121  _label8 = new QLabel(this);
122  _label8->setText("θ");
123  _label8->setAlignment(Qt::AlignCenter);
124 
125  _check1 = new QCheckBox();
126  _check1->setChecked(interactive);
127  connect(_check1, SIGNAL(stateChanged(int)), this, SLOT(InteractiveCb(int)));
128  _check2 = new QCheckBox();
129  _check2->setChecked(!paused_measure);
130  connect(_check2, SIGNAL(stateChanged(int)), this, SLOT(PauseMeasurementsCb(int)));
131  _radio1 = new QRadioButton(tr("Start At Dock"));
132  _radio1->setChecked(true);
133  _radio2 = new QRadioButton(tr("Start At Pose Est."));
134  _radio3 = new QRadioButton(tr("Start At Curr. Odom"));
135  _radio4 = new QRadioButton(tr("Localize"));
136 
137  connect(_radio1, SIGNAL(clicked()), this, SLOT(FirstNodeMatchCb()));
138  connect(_radio2, SIGNAL(clicked()), this, SLOT(PoseEstMatchCb()));
139  connect(_radio3, SIGNAL(clicked()), this, SLOT(CurEstMatchCb()));
140  connect(_radio4, SIGNAL(clicked()), this, SLOT(LocalizeCb()));
141 
142  _line1 = new QLineEdit();
143  _line2 = new QLineEdit();
144  _line3 = new QLineEdit();
145  _line4 = new QLineEdit();
146  _line5 = new QLineEdit();
147  _line6 = new QLineEdit();
148  _line7 = new QLineEdit();
149 
150  _button1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
151  _button2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
152  _button3->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
153  _button4->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
154  _button5->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
155  _button6->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
156  _button7->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
157  _button8->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
158  _check1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
159  _check2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
160  _line1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
161  _line2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
162  _line3->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
163  _line4->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
164  _line5->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
165  _line6->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
166  _line7->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
167 
168  _hbox1->addWidget(_check1);
169  _hbox1->addWidget(_label1);
170  _hbox1->addWidget(_check2);
171  _hbox1->addWidget(_label2);
172 
173  _hbox2->addWidget(_button1);
174  _hbox2->addWidget(_button2);
175 
176  _hbox3->addWidget(_button3);
177  _hbox3->addWidget(_line1);
178 
179  _hbox4->addWidget(_button4);
180 
181  _hbox5->addWidget(_button5);
182  _hbox5->addWidget(_line2);
183 
184  _hbox6->addWidget(_button6);
185 
186  _hbox7->addWidget(_button7);
187  _hbox7->addWidget(_line3);
188 
189  _hbox8->addWidget(_button8);
190  _hbox8->addWidget(_line4);
191 
192  _hbox9->addWidget(_radio1);
193  _hbox9->addWidget(_radio2);
194  _hbox9->addWidget(_radio3);
195  _hbox9->addWidget(_radio4);
196  _hbox9->addStretch(1);
197 
198  _hbox10->addWidget(_label6);
199  _hbox10->addWidget(_line5);
200  _hbox10->addWidget(_label7);
201  _hbox10->addWidget(_line6);
202  _hbox10->addWidget(_label8);
203  _hbox10->addWidget(_line7);
204 
205  _vbox->addWidget(_label5);
206  _vbox->addLayout(_hbox1);
207  _vbox->addLayout(_hbox2);
208  _vbox->addLayout(_hbox3);
209  _vbox->addLayout(_hbox7);
210  _vbox->addLayout(_hbox8);
211  _vbox->addLayout(_hbox9);
212  _vbox->addLayout(_hbox10);
213  _vbox->addLayout(_hbox4);
214  _vbox->addWidget(_line);
215  _vbox->addWidget(_label4);
216  _vbox->addLayout(_hbox5);
217  _vbox->addLayout(_hbox6);
218 
219  setLayout(_vbox);
220 
222 }
223 
224 /*****************************************************************************/
226 /*****************************************************************************/
227 {
228  if (_thread)
229  {
230  delete _thread;
231  }
232 }
233 
234 /*****************************************************************************/
235 void SlamToolboxPlugin::InitialPoseCallback(const geometry_msgs::PoseWithCovarianceStamped::ConstPtr& msg)
236 /*****************************************************************************/
237 {
239  ROS_INFO("Setting initial pose from rviz; you can now deserialize a map given that pose.");
240  _radio2->setChecked(true);
241  _line5->setText(QString::number(msg->pose.pose.position.x, 'f', 2));
242  _line6->setText(QString::number(msg->pose.pose.position.y, 'f', 2));
243  tf::Quaternion q(
244  msg->pose.pose.orientation.x,
245  msg->pose.pose.orientation.y,
246  msg->pose.pose.orientation.z,
247  msg->pose.pose.orientation.w);
248  tf::Matrix3x3 m(q);
249  double roll, pitch, yaw;
250  m.getRPY(roll, pitch, yaw);
251  _line7->setText(QString::number(yaw, 'f', 2));
252 }
253 
254 /*****************************************************************************/
256 /*****************************************************************************/
257 {
258  slam_toolbox_msgs::SerializePoseGraph msg;
259  msg.request.filename = _line3->text().toStdString();
260  if (!_serialize.call(msg))
261  {
262  ROS_WARN("SlamToolbox: Failed to serialize pose graph to file, is service running?");
263  }
264 }
265 
266 /*****************************************************************************/
268 /*****************************************************************************/
269 {
270  typedef slam_toolbox_msgs::DeserializePoseGraph::Request procType;
271 
272  slam_toolbox_msgs::DeserializePoseGraph msg;
273  msg.request.filename = _line4->text().toStdString();
275  {
276  msg.request.match_type = procType::START_AT_FIRST_NODE;
277  }
279  {
280  try
281  {
282  msg.request.match_type = procType::START_AT_GIVEN_POSE;
283  msg.request.initial_pose.x = std::stod(_line5->text().toStdString());
284  msg.request.initial_pose.y = std::stod(_line6->text().toStdString());
285  msg.request.initial_pose.theta = std::stod(_line7->text().toStdString());
286  }
287  catch (const std::invalid_argument& ia)
288  {
289  ROS_WARN("Initial pose invalid.");
290  return;
291  }
292  }
293  else if (_match_type == LOCALIZE_CMT)
294  {
295  try
296  {
297  msg.request.match_type = procType::LOCALIZE_AT_POSE;
298  msg.request.initial_pose.x = std::stod(_line5->text().toStdString());
299  msg.request.initial_pose.y = std::stod(_line6->text().toStdString());
300  msg.request.initial_pose.theta = std::stod(_line7->text().toStdString());
301  }
302  catch (const std::invalid_argument& ia)
303  {
304  ROS_WARN("Initial pose invalid.");
305  return;
306  }
307  }
308  else
309  {
310  ROS_WARN("No match type selected, cannot send request.");
311  return;
312  }
313  if (!_load_map.call(msg))
314  {
315  ROS_WARN("SlamToolbox: Failed to deserialize mapper object "
316  "from file, is service running?");
317  }
318 }
319 
320 /*****************************************************************************/
322 /*****************************************************************************/
323 {
324  slam_toolbox_msgs::AddSubmap msg;
325  msg.request.filename = _line2->text().toStdString();
326  if (!_load_submap_for_merging.call(msg))
327  {
328  ROS_WARN("MergeMaps: Failed to load pose graph from file, is service running?");
329  }
330 }
331 /*****************************************************************************/
333 /*****************************************************************************/
334 {
335  slam_toolbox_msgs::MergeMaps msg;
336  if (!_merge.call(msg))
337  {
338  ROS_WARN("MergeMaps: Failed to merge maps, is service running?");
339  }
340 }
341 
342 /*****************************************************************************/
344 /*****************************************************************************/
345 {
346  slam_toolbox_msgs::Clear msg;
347  if (!_clearChanges.call(msg))
348  {
349  ROS_WARN("SlamToolbox: Failed to clear changes, is service running?");
350  }
351 }
352 
353 /*****************************************************************************/
355 /*****************************************************************************/
356 {
357  slam_toolbox_msgs::LoopClosure msg;
358 
359  if (!_saveChanges.call(msg))
360  {
361  ROS_WARN("SlamToolbox: Failed to save changes, is service running?");
362  }
363 }
364 
365 /*****************************************************************************/
367 /*****************************************************************************/
368 {
369  slam_toolbox_msgs::SaveMap msg;
370  msg.request.name.data = _line1->text().toStdString();
371  if (!_saveMap.call(msg))
372  {
373  ROS_WARN("SlamToolbox: Failed to save map as %s, is service running?",
374  msg.request.name.data.c_str());
375  }
376 }
377 
378 /*****************************************************************************/
380 /*****************************************************************************/
381 {
382  slam_toolbox_msgs::ClearQueue msg;
383  if (!_clearQueue.call(msg))
384  {
385  ROS_WARN("Failed to clear queue, is service running?");
386  }
387 }
388 
389 /*****************************************************************************/
391 /*****************************************************************************/
392 {
393  slam_toolbox_msgs::ToggleInteractive msg;
394  if (!_interactive.call(msg))
395  {
396  ROS_WARN("SlamToolbox: Failed to toggle interactive mode, is service running?");
397  }
398 }
399 
400 /*****************************************************************************/
402 /*****************************************************************************/
403 {
404  slam_toolbox_msgs::Pause msg;
405  if (!_pause_measurements.call(msg))
406  {
407  ROS_WARN("SlamToolbox: Failed to toggle pause measurements, is service running?");
408  }
409 }
410 
411 /*****************************************************************************/
413 /*****************************************************************************/
414 {
415  if (_radio1->isChecked() == Qt::Unchecked)
416  {
417  return;
418  }
419  else
420  {
422  ROS_INFO("Processing at first node selected.");
423  }
424 }
425 
426 /*****************************************************************************/
428 /*****************************************************************************/
429 {
430  if (_radio2->isChecked() == Qt::Unchecked)
431  {
432  return;
433  }
434  else
435  {
437  ROS_INFO("Processing at current pose estimate selected.");
438  }
439 }
440 
441 /*****************************************************************************/
443 /*****************************************************************************/
444 {
445  if (_radio3->isChecked() == Qt::Unchecked)
446  {
447  return;
448  }
449  else
450  {
452  ROS_INFO("Processing at current odometry selected.");
453  }
454 }
455 
456 
457 /*****************************************************************************/
459 /*****************************************************************************/
460 {
461  if (_radio4->isChecked() == Qt::Unchecked)
462  {
463  return;
464  }
465  else
466  {
468  ROS_INFO("Processing localization selected.");
469  }
470 }
471 
472 
473 /*****************************************************************************/
475 /*****************************************************************************/
476 {
477  ros::Rate r(1); //1 hz
478  ros::NodeHandle nh;
479  bool paused_measure = false, interactive = false;
480  while (ros::ok())
481  {
482  nh.getParam("/slam_toolbox/paused_new_measurements", paused_measure);
483  nh.getParam("/slam_toolbox/interactive_mode", interactive);
484 
485  bool oldState = _check1->blockSignals(true);
486  _check1->setChecked(interactive);
487  _check1->blockSignals(oldState);
488 
489  oldState = _check2->blockSignals(true);
490  _check2->setChecked(!paused_measure);
491  _check2->blockSignals(oldState);
492 
493  r.sleep();
494  }
495 }
496 
497 } // end namespace
tf::Matrix3x3
slam_toolbox::SlamToolboxPlugin::_button4
QPushButton * _button4
Definition: slam_toolbox_rviz_plugin.h:115
slam_toolbox::SlamToolboxPlugin::_label8
QLabel * _label8
Definition: slam_toolbox_rviz_plugin.h:143
slam_toolbox::SlamToolboxPlugin::_button8
QPushButton * _button8
Definition: slam_toolbox_rviz_plugin.h:119
slam_toolbox::SlamToolboxPlugin::_label4
QLabel * _label4
Definition: slam_toolbox_rviz_plugin.h:139
NULL
#define NULL
slam_toolbox::SlamToolboxPlugin::_hbox6
QHBoxLayout * _hbox6
Definition: slam_toolbox_rviz_plugin.h:106
slam_toolbox::SlamToolboxPlugin::_radio4
QRadioButton * _radio4
Definition: slam_toolbox_rviz_plugin.h:135
slam_toolbox::SlamToolboxPlugin::_line6
QLineEdit * _line6
Definition: slam_toolbox_rviz_plugin.h:126
slam_toolbox::SlamToolboxPlugin::ClearQueue
void ClearQueue()
Definition: slam_toolbox_rviz_plugin.cpp:379
rviz::Panel
slam_toolbox::PROCESS_NEAR_REGION_CMT
@ PROCESS_NEAR_REGION_CMT
Definition: slam_toolbox_rviz_plugin.h:68
tf::Matrix3x3::getRPY
void getRPY(tfScalar &roll, tfScalar &pitch, tfScalar &yaw, unsigned int solution_number=1) const
slam_toolbox::SlamToolboxPlugin::_load_submap_for_merging
ros::ServiceClient _load_submap_for_merging
Definition: slam_toolbox_rviz_plugin.h:147
slam_toolbox::SlamToolboxPlugin::_line1
QLineEdit * _line1
Definition: slam_toolbox_rviz_plugin.h:121
slam_toolbox::SlamToolboxPlugin::_match_type
ContinueMappingType _match_type
Definition: slam_toolbox_rviz_plugin.h:154
slam_toolbox::SlamToolboxPlugin::_thread
std::thread * _thread
Definition: slam_toolbox_rviz_plugin.h:152
slam_toolbox::SlamToolboxPlugin::_hbox4
QHBoxLayout * _hbox4
Definition: slam_toolbox_rviz_plugin.h:104
slam_toolbox::SlamToolboxPlugin::_line2
QLineEdit * _line2
Definition: slam_toolbox_rviz_plugin.h:122
ros::NodeHandle::getParam
bool getParam(const std::string &key, bool &b) const
slam_toolbox::SlamToolboxPlugin::_clearChanges
ros::ServiceClient _clearChanges
Definition: slam_toolbox_rviz_plugin.h:147
slam_toolbox_rviz_plugin.h
ros::NodeHandle::serviceClient
ServiceClient serviceClient(const std::string &service_name, bool persistent=false, const M_string &header_values=M_string())
slam_toolbox::SlamToolboxPlugin::_label1
QLabel * _label1
Definition: slam_toolbox_rviz_plugin.h:137
slam_toolbox::SlamToolboxPlugin::ClearChanges
void ClearChanges()
Definition: slam_toolbox_rviz_plugin.cpp:343
slam_toolbox::SlamToolboxPlugin::_radio1
QRadioButton * _radio1
Definition: slam_toolbox_rviz_plugin.h:132
slam_toolbox::SlamToolboxPlugin::_button2
QPushButton * _button2
Definition: slam_toolbox_rviz_plugin.h:113
slam_toolbox::SlamToolboxPlugin::FirstNodeMatchCb
void FirstNodeMatchCb()
Definition: slam_toolbox_rviz_plugin.cpp:412
slam_toolbox::LOCALIZE_CMT
@ LOCALIZE_CMT
Definition: slam_toolbox_rviz_plugin.h:69
slam_toolbox::SlamToolboxPlugin::_button6
QPushButton * _button6
Definition: slam_toolbox_rviz_plugin.h:117
slam_toolbox::SlamToolboxPlugin::_load_map
ros::ServiceClient _load_map
Definition: slam_toolbox_rviz_plugin.h:147
slam_toolbox::SlamToolboxPlugin::SaveMap
void SaveMap()
Definition: slam_toolbox_rviz_plugin.cpp:366
ros::ok
ROSCPP_DECL bool ok()
slam_toolbox::SlamToolboxPlugin::LocalizeCb
void LocalizeCb()
Definition: slam_toolbox_rviz_plugin.cpp:458
slam_toolbox::SlamToolboxPlugin::_line7
QLineEdit * _line7
Definition: slam_toolbox_rviz_plugin.h:127
class_list_macros.h
slam_toolbox::SlamToolboxPlugin::_check1
QCheckBox * _check1
Definition: slam_toolbox_rviz_plugin.h:129
slam_toolbox::SlamToolboxPlugin::_saveMap
ros::ServiceClient _saveMap
Definition: slam_toolbox_rviz_plugin.h:147
PLUGINLIB_EXPORT_CLASS
#define PLUGINLIB_EXPORT_CLASS(class_type, base_class_type)
slam_toolbox::SlamToolboxPlugin::updateCheckStateIfExternalChange
void updateCheckStateIfExternalChange()
Definition: slam_toolbox_rviz_plugin.cpp:474
slam_toolbox::SlamToolboxPlugin::CurEstMatchCb
void CurEstMatchCb()
Definition: slam_toolbox_rviz_plugin.cpp:442
slam_toolbox::SlamToolboxPlugin::DeserializeMap
void DeserializeMap()
Definition: slam_toolbox_rviz_plugin.cpp:267
slam_toolbox::SlamToolboxPlugin::SaveChanges
void SaveChanges()
Definition: slam_toolbox_rviz_plugin.cpp:354
slam_toolbox::SlamToolboxPlugin
Definition: slam_toolbox_rviz_plugin.h:72
rviz
slam_toolbox::SlamToolboxPlugin::_line3
QLineEdit * _line3
Definition: slam_toolbox_rviz_plugin.h:123
slam_toolbox::SlamToolboxPlugin::_label6
QLabel * _label6
Definition: slam_toolbox_rviz_plugin.h:141
slam_toolbox::SlamToolboxPlugin::_line
QFrame * _line
Definition: slam_toolbox_rviz_plugin.h:145
slam_toolbox::SlamToolboxPlugin::PoseEstMatchCb
void PoseEstMatchCb()
Definition: slam_toolbox_rviz_plugin.cpp:427
slam_toolbox::SlamToolboxPlugin::_hbox7
QHBoxLayout * _hbox7
Definition: slam_toolbox_rviz_plugin.h:107
ROS_WARN
#define ROS_WARN(...)
slam_toolbox::SlamToolboxPlugin::_serialize
ros::ServiceClient _serialize
Definition: slam_toolbox_rviz_plugin.h:147
slam_toolbox::SlamToolboxPlugin::_hbox9
QHBoxLayout * _hbox9
Definition: slam_toolbox_rviz_plugin.h:109
ros::NodeHandle::subscribe
Subscriber subscribe(const std::string &topic, uint32_t queue_size, const boost::function< void(C)> &callback, const VoidConstPtr &tracked_object=VoidConstPtr(), const TransportHints &transport_hints=TransportHints())
slam_toolbox::SlamToolboxPlugin::_clearQueue
ros::ServiceClient _clearQueue
Definition: slam_toolbox_rviz_plugin.h:147
slam_toolbox::SlamToolboxPlugin::~SlamToolboxPlugin
~SlamToolboxPlugin()
Definition: slam_toolbox_rviz_plugin.cpp:225
slam_toolbox::SlamToolboxPlugin::_check2
QCheckBox * _check2
Definition: slam_toolbox_rviz_plugin.h:130
slam_toolbox::SlamToolboxPlugin::_button1
QPushButton * _button1
Definition: slam_toolbox_rviz_plugin.h:112
slam_toolbox::SlamToolboxPlugin::_saveChanges
ros::ServiceClient _saveChanges
Definition: slam_toolbox_rviz_plugin.h:147
slam_toolbox::PROCESS_FIRST_NODE_CMT
@ PROCESS_FIRST_NODE_CMT
Definition: slam_toolbox_rviz_plugin.h:67
ros::Rate::sleep
bool sleep()
slam_toolbox::SlamToolboxPlugin::_label7
QLabel * _label7
Definition: slam_toolbox_rviz_plugin.h:142
slam_toolbox::SlamToolboxPlugin::_label2
QLabel * _label2
Definition: slam_toolbox_rviz_plugin.h:138
slam_toolbox::SlamToolboxPlugin::_initialposeSub
ros::Subscriber _initialposeSub
Definition: slam_toolbox_rviz_plugin.h:148
slam_toolbox::SlamToolboxPlugin::_button3
QPushButton * _button3
Definition: slam_toolbox_rviz_plugin.h:114
slam_toolbox::SlamToolboxPlugin::LoadSubmap
void LoadSubmap()
Definition: slam_toolbox_rviz_plugin.cpp:321
slam_toolbox::SlamToolboxPlugin::_merge
ros::ServiceClient _merge
Definition: slam_toolbox_rviz_plugin.h:147
tf.h
slam_toolbox::SlamToolboxPlugin::_vbox
QVBoxLayout * _vbox
Definition: slam_toolbox_rviz_plugin.h:100
slam_toolbox::SlamToolboxPlugin::_hbox5
QHBoxLayout * _hbox5
Definition: slam_toolbox_rviz_plugin.h:105
slam_toolbox::SlamToolboxPlugin::_hbox8
QHBoxLayout * _hbox8
Definition: slam_toolbox_rviz_plugin.h:108
slam_toolbox::PROCESS_CMT
@ PROCESS_CMT
Definition: slam_toolbox_rviz_plugin.h:66
slam_toolbox::SlamToolboxPlugin::InitialPoseCallback
void InitialPoseCallback(const geometry_msgs::PoseWithCovarianceStamped::ConstPtr &pose)
Definition: slam_toolbox_rviz_plugin.cpp:235
slam_toolbox::SlamToolboxPlugin::_hbox1
QHBoxLayout * _hbox1
Definition: slam_toolbox_rviz_plugin.h:101
slam_toolbox::SlamToolboxPlugin::_radio2
QRadioButton * _radio2
Definition: slam_toolbox_rviz_plugin.h:133
ros::ServiceClient::call
bool call(const MReq &req, MRes &resp, const std::string &service_md5sum)
slam_toolbox::SlamToolboxPlugin::_label5
QLabel * _label5
Definition: slam_toolbox_rviz_plugin.h:140
slam_toolbox::SlamToolboxPlugin::_interactive
ros::ServiceClient _interactive
Definition: slam_toolbox_rviz_plugin.h:147
slam_toolbox::SlamToolboxPlugin::SerializeMap
void SerializeMap()
Definition: slam_toolbox_rviz_plugin.cpp:255
slam_toolbox::SlamToolboxPlugin::_radio3
QRadioButton * _radio3
Definition: slam_toolbox_rviz_plugin.h:134
ros::Rate
slam_toolbox::SlamToolboxPlugin::_button7
QPushButton * _button7
Definition: slam_toolbox_rviz_plugin.h:118
slam_toolbox
Definition: slam_toolbox_rviz_plugin.cpp:37
slam_toolbox::SlamToolboxPlugin::_hbox3
QHBoxLayout * _hbox3
Definition: slam_toolbox_rviz_plugin.h:103
slam_toolbox::SlamToolboxPlugin::_line4
QLineEdit * _line4
Definition: slam_toolbox_rviz_plugin.h:124
ROS_INFO
#define ROS_INFO(...)
slam_toolbox::SlamToolboxPlugin::PauseMeasurementsCb
void PauseMeasurementsCb(int state)
Definition: slam_toolbox_rviz_plugin.cpp:401
slam_toolbox::SlamToolboxPlugin::_hbox2
QHBoxLayout * _hbox2
Definition: slam_toolbox_rviz_plugin.h:102
slam_toolbox::SlamToolboxPlugin::GenerateMap
void GenerateMap()
Definition: slam_toolbox_rviz_plugin.cpp:332
slam_toolbox::SlamToolboxPlugin::_line5
QLineEdit * _line5
Definition: slam_toolbox_rviz_plugin.h:125
slam_toolbox::SlamToolboxPlugin::_pause_measurements
ros::ServiceClient _pause_measurements
Definition: slam_toolbox_rviz_plugin.h:147
slam_toolbox::SlamToolboxPlugin::_button5
QPushButton * _button5
Definition: slam_toolbox_rviz_plugin.h:116
tf::Quaternion
slam_toolbox::SlamToolboxPlugin::_hbox10
QHBoxLayout * _hbox10
Definition: slam_toolbox_rviz_plugin.h:110
ros::NodeHandle
slam_toolbox::SlamToolboxPlugin::InteractiveCb
void InteractiveCb(int state)
Definition: slam_toolbox_rviz_plugin.cpp:390


slam_toolbox_rviz
Author(s): Steve Macenski
autogenerated on Thu Jan 11 2024 03:38:03