LaserScannerSelfLocalisationWidgetController.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 RobotComponents::gui-plugins::LaserScannerSelfLocalisationWidgetController
17  * \author Fabian Paus ( fabian dot paus at kit dot edu )
18  * \date 2017
19  * \copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
24 
25 #include <QSpinBox>
26 #include <QDoubleSpinBox>
27 #include <QCheckBox>
28 #include <QTimer>
29 
30 #include <string>
31 #include <cfloat>
32 
33 using namespace armarx;
34 
36  : setPoseState(SetPoseState::None)
37 {
38  widget.setupUi(getWidget());
39  painterWidget = new QPainterWidget();
40  painterWidget->setupUi(widget.frame);
41  painterWidget->setPaintCallback([this](QPainter & painter)
42  {
43  onPaintCanvas(painter, painterWidget->size());
44  });
45 
46  paintTimerId = startTimer(16);
47 }
48 
49 
51 {
52 
53 }
54 
55 
57 {
58 
59 }
60 
62 {
63 
64 }
65 
66 
68 {
69  usingProxy(localisationName);
70 }
71 
72 
74 {
75  localisation = getProxy<LaserScannerSelfLocalisationInterfacePrx>(localisationName);
76  localisationManager = getProxy<armarx::ArmarXManagerInterfacePrx>(localisationName + "Manager");
77  localisationAdmin = localisationManager->getPropertiesAdmin();
78  readProperties();
79 
80  map = localisation->getMap();
81 
82  connect(widget.smoothingFrameSize, SIGNAL(valueChanged(int)), this, SLOT(onSpinBoxChanged(int)));
83  connect(widget.smoothingMergeDistance, SIGNAL(valueChanged(int)), this, SLOT(onSpinBoxChanged(int)));
84  connect(widget.matchingMaxDistance, SIGNAL(valueChanged(double)), this, SLOT(onSpinBoxChanged(double)));
85  connect(widget.matchingMinPoints, SIGNAL(valueChanged(double)), this, SLOT(onSpinBoxChanged(double)));
86  connect(widget.matchingCorrectionFactor, SIGNAL(valueChanged(double)), this, SLOT(onSpinBoxChanged(double)));
87  connect(widget.edgeMaxDistance, SIGNAL(valueChanged(double)), this, SLOT(onSpinBoxChanged(double)));
88  connect(widget.edgeMaxDeltaAngle, SIGNAL(valueChanged(double)), this, SLOT(onSpinBoxChanged(double)));
89  connect(widget.edgePointAddingThreshold, SIGNAL(valueChanged(double)), this, SLOT(onSpinBoxChanged(double)));
90  connect(widget.edgeEpsilon, SIGNAL(valueChanged(int)), this, SLOT(onSpinBoxChanged(int)));
91  connect(widget.edgeMinPoints, SIGNAL(valueChanged(int)), this, SLOT(onSpinBoxChanged(int)));
92  connect(widget.useMapCorrection, SIGNAL(stateChanged(int)), this, SLOT(onSpinBoxChanged(int)));
93  connect(widget.useOdometry, SIGNAL(stateChanged(int)), this, SLOT(onSpinBoxChanged(int)));
94  connect(widget.reportPoints, SIGNAL(stateChanged(int)), this, SLOT(onSpinBoxChanged(int)));
95  connect(widget.reportEdges, SIGNAL(stateChanged(int)), this, SLOT(onSpinBoxChanged(int)));
96  connect(widget.setPoseButton, SIGNAL(clicked()), this, SLOT(onSetPoseClick()));
97  connect(widget.sensorStdDev, SIGNAL(valueChanged(double)), this, SLOT(onSpinBoxChanged(double)));
98  connect(widget.velSensorStdDev, SIGNAL(valueChanged(double)), this, SLOT(onSpinBoxChanged(double)));
99 
100  connect(painterWidget, SIGNAL(mousePressed(QPoint)), this, SLOT(onCanvasClick(QPoint)));
101 
102  connect(this, SIGNAL(newDataReported()), this, SLOT(onNewDataReported()), Qt::QueuedConnection);
103 
104  usingTopic(localisation->getReportTopicName());
105 }
106 
107 
109 {
110  if (!dialog)
111  {
112  dialog = new SimpleConfigDialog(parent);
113  dialog->addProxyFinder<LaserScannerSelfLocalisationInterfacePrx>({"LaserScannerSelfLocalisation", "", "*"});
114  }
115  return qobject_cast<SimpleConfigDialog*>(dialog);
116 }
117 
119 {
120  if (dialog)
121  {
122  localisationName = dialog->getProxyName("LaserScannerSelfLocalisation");
123  }
124 }
125 
127 {
128  float maxX = 0.0f;
129  float minX = FLT_MAX;
130  float maxY = 0.0f;
131  float minY = FLT_MAX;
132  for (LineSegment2D& s : map)
133  {
134  maxX = std::max(maxX, s.start.e0);
135  maxY = std::max(maxY, s.start.e1);
136  minX = std::min(minX, s.start.e0);
137  minY = std::min(minY, s.start.e1);
138  maxX = std::max(maxX, s.end.e0);
139  maxY = std::max(maxY, s.end.e1);
140  minX = std::min(minX, s.end.e0);
141  minY = std::min(minY, s.end.e1);
142  }
143 
144  float normX = 1.0f / (maxX - minX);
145  float normY = 1.0f / (maxY - minY);
146  float scaleFactorX = size.width() * normX;
147  float scaleFactorY = size.height() * normY;
148  float scaleFactor = 0.95f * std::min(scaleFactorX, scaleFactorY);
149  float invScaleFactor = 1.0f / scaleFactor;
150 
151  auto toCanvas = [ = ](armarx::Vector2f p)
152  {
153  float xCoord = scaleFactor * (p.e0 - minX);
154  float yCoord = scaleFactor * (p.e1 - minY);
155  return QPoint((int)xCoord, (int)(size.height() - 1 - yCoord));
156  };
157 
158  auto toCanvasE = [ = ](Eigen::Vector2f p)
159  {
160  float xCoord = scaleFactor * (p.x() - minX);
161  float yCoord = scaleFactor * (p.y() - minY);
162  return QPoint((int)xCoord, (int)(size.height() - 1 - yCoord));
163  };
164 
165  auto fromCanvas = [ = ](QPoint p)
166  {
167  float globalX = (invScaleFactor * p.x()) + minX;
168  float globalY = invScaleFactor * (size.height() - 1 - p.y()) + minY;
169  return Eigen::Vector2f(globalX, globalY);
170  };
171 
172  if (setPoseState == SetPoseState::Wait)
173  {
174  setPoseState = SetPoseState::Orientation;
175  }
176  else if (setPoseState == SetPoseState::Finished)
177  {
178  // Transform click points into global coordinates
179  Eigen::Vector2f globalPos = fromCanvas(setPosition);
180  Eigen::Vector2f globalOr = fromCanvas(setOrientation);
181  Eigen::Vector2f fromPosToOr = globalOr - globalPos;
182  float theta = std::atan2(fromPosToOr.y(), fromPosToOr.x()) - M_PI_2;
183 
184  try
185  {
186  ARMARX_INFO << "Set global pose to (" << globalPos.x() << ", " << globalPos.y() << ", " << theta << ")";
187  localisation->setAbsolutePose(globalPos.x(), globalPos.y(), theta);
188  }
189  catch (std::exception const& ex)
190  {
191  ARMARX_WARNING << "Could not set absolute pose: " << ex.what();
192  }
193 
194  setPoseState = SetPoseState::None;
195  }
196 
197  QBrush whiteBrush(QColor(240, 240, 240));
198  QPen blackPen(QColor(0, 0, 0));
199  blackPen.setWidth(1);
200  painter.setBrush(whiteBrush);
201  painter.setPen(blackPen);
202 
203  lines.clear();
204  lines.reserve(map.size());
205  for (LineSegment2D const& s : map)
206  {
207  lines.emplace_back(toCanvas(s.start), toCanvas(s.end));
208  }
209  painter.drawLines(lines.data(), lines.size());
210 
211  if (setPoseState == SetPoseState::Orientation)
212  {
213  QPoint setOrientation = painterWidget->mapFromGlobal(QCursor::pos());
214  Eigen::Vector2f globalPos = fromCanvas(setPosition);
215  Eigen::Vector2f globalOr = fromCanvas(setOrientation);
216 
217  painter.setBrush(QColor(255, 0, 0));
218  painter.drawEllipse(toCanvasE(globalPos), 10, 10);
219  painter.drawLine(toCanvasE(globalPos), toCanvasE(globalOr));
220  }
221 
222  // Draw the robot pose
223  Eigen::Vector2f robotPos(poseX, poseY);
224  float robotTheta = poseTheta;
225 
226  armarx::Vector2f estRobotPos {robotPos.x(), robotPos.y()};
227  Eigen::Vector2f estRobotEnd = robotPos + 500.0f * Eigen::Vector2f(Eigen::Rotation2Df(robotTheta) * Eigen::Vector2f::UnitY());
228  armarx::Vector2f estRobotEnda {estRobotEnd.x(), estRobotEnd.y()};
229  painter.setBrush(QColor(0, 255, 255));
230  painter.drawEllipse(toCanvas(estRobotPos), 10, 10);
231  painter.drawLine(toCanvas(estRobotPos), toCanvas(estRobotEnda));
232  painter.setBrush(QColor(255, 255, 0, 25));
233  float posUncertaintyAverage = (poseUncertaintyX + poseUncertaintyY) * 0.5;
234  painter.drawEllipse(toCanvas(estRobotPos), (int)(posUncertaintyAverage * scaleFactor), (int)(posUncertaintyAverage * scaleFactor));
235 
236  qpoints.clear();
237  qedges.clear();
238  {
239 
240  if (widget.reportPoints->checkState() == Qt::Checked)
241  {
242  ScopedLock lock(pointsMutex);
243  qpoints.reserve(points.size());
244  for (armarx::Vector2f const& point : points)
245  {
246  qpoints.push_back(toCanvas(point));
247  }
248  }
249 
250  if (widget.reportEdges->checkState() == Qt::Checked)
251  {
252  ScopedLock lock(pointsMutex);
253  qedges.reserve(edges.size());
254  for (armarx::LineSegment2D const& s : edges)
255  {
256  QPoint start = toCanvas(s.start);
257  QPoint end = toCanvas(s.end);
258  qedges.push_back(QLine(start, end));
259  }
260  }
261  }
262 
263  // Draw the laser scanner points
264  float lineWidth = 1.0f;
265  QPen pointPen(QColor(0, 0, 255), lineWidth);
266  painter.setPen(pointPen);
267 
268  painter.drawPoints(qpoints.data(), qpoints.size());
269 
270  // Draw extracted edges
271  QPen edgePen(QColor(0, 255, 0), lineWidth);
272  painter.setPen(edgePen);
273  painter.drawLines(qedges.data(), qedges.size());
274 }
275 
276 
278 {
279  poseX = x;
280  poseY = y;
281  poseTheta = theta;
282 
283  emit newDataReported();
284 }
285 
287 {
288  poseUncertaintyX = x;
289  poseUncertaintyY = y;
290  poseUncertaintyTheta = theta;
291 
292  emit newDataReported();
293 
294 }
295 
296 
297 void armarx::LaserScannerSelfLocalisationWidgetController::reportLaserScanPoints(const Vector2fSeq& globalPoints, const Ice::Current&)
298 {
299  {
300  ScopedLock guard(pointsMutex);
301  points = globalPoints;
302  }
303  emit newDataReported();
304 }
305 
306 void armarx::LaserScannerSelfLocalisationWidgetController::reportExtractedEdges(const LineSegment2DSeq& globalEdges, const Ice::Current&)
307 {
308  {
309  ScopedLock guard(pointsMutex);
310  edges = globalEdges;
311  }
312  emit newDataReported();
313 }
314 
316 {
317  updateProperties();
318 }
319 
321 {
322  updateProperties();
323 }
324 
326 {
327  QString poseString = QString("Pose: ") + QString::number(poseX) + ", " + QString::number(poseY)
328  + ", " + QString::number(poseTheta) + "\nUncertainty: " + QString::number(poseUncertaintyX, 'g', 4) + ", " + QString::number(poseUncertaintyY, 'g', 4)
329  + ", " + QString::number(poseUncertaintyTheta, 'g', 4);
330  widget.poseLabel->setText(poseString);
331 }
332 
334 {
335  setPoseState = SetPoseState::Position;
336  ARMARX_INFO << "Starting to set new position";
337 }
338 
340 {
341  if (setPoseState == SetPoseState::Position)
342  {
343  setPosition = setOrientation = p;
344  setPoseState = SetPoseState::Wait;
345  ARMARX_INFO << "Poistion set, now setting orientation";
346  }
347  else if (setPoseState == SetPoseState::Orientation)
348  {
349  setOrientation = p;
350  setPoseState = SetPoseState::Finished;
351  ARMARX_INFO << "Orientation set, waiting for finish";
352  }
353 }
354 
355 static std::string floatToString(float v)
356 {
357  std::ostringstream s;
358  s.imbue(std::locale::classic());
359  s << v;
360  return s.str();
361 }
362 
363 static float stringToFloat(std::string const& string)
364 {
365  std::istringstream s(string);
366  s.imbue(std::locale::classic());
367  float v = 0.0f;
368  s >> v;
369  return v;
370 }
371 
372 const std::string PROPERTIES_PREFIX = "ArmarX.LaserScannerSelfLocalisation.";
373 
374 void LaserScannerSelfLocalisationWidgetController::updateProperties()
375 {
376  if (!localisationAdmin)
377  {
378  ARMARX_WARNING << "Could not set properties because no admin proxy is set";
379  return;
380  }
381 
382  ARMARX_INFO << "start updating LaserScannerSelfLocalisationWidget properties";
383  int smoothingFrameSize = widget.smoothingFrameSize->value();
384  int smoothingMergeDistance = widget.smoothingMergeDistance->value();
385  float matchingMaxDistance = widget.matchingMaxDistance->value();
386  float matchingMinPoints = widget.matchingMinPoints->value();
387  float matchingCorrectionFactor = widget.matchingCorrectionFactor->value();
388  float edgeMaxDistance = widget.edgeMaxDistance->value();
389  float edgeMaxDeltaAngle = widget.edgeMaxDeltaAngle->value();
390  float edgePointAddingThreshold = widget.edgePointAddingThreshold->value();
391  int edgeEpsilon = widget.edgeEpsilon->value();
392  int edgeMinPoints = widget.edgeMinPoints->value();
393  bool useMapCorrection = widget.useMapCorrection->checkState() == Qt::Checked;
394  bool useOdometry = widget.useOdometry->checkState() == Qt::Checked;
395  bool reportPoints = widget.reportPoints->checkState() == Qt::Checked;
396  bool reportEdges = widget.reportEdges->checkState() == Qt::Checked;
397  float sensorStdDev = widget.sensorStdDev->value();
398  float velSensorStdDev = widget.velSensorStdDev->value();
399 
400  Ice::PropertyDict properties;
401  properties[PROPERTIES_PREFIX + "SmoothFrameSize"] = to_string(smoothingFrameSize);
402  properties[PROPERTIES_PREFIX + "SmoothMergeDistance"] = to_string(smoothingMergeDistance);
403  properties[PROPERTIES_PREFIX + "MatchingMaxDistance"] = floatToString(matchingMaxDistance);
404  properties[PROPERTIES_PREFIX + "MatchingMinPoints"] = floatToString(matchingMinPoints);
405  properties[PROPERTIES_PREFIX + "MatchingCorrectionFactor"] = floatToString(matchingCorrectionFactor);
406  properties[PROPERTIES_PREFIX + "EdgeMaxDistance"] = floatToString(edgeMaxDistance);
407  properties[PROPERTIES_PREFIX + "EdgeMaxDeltaAngle"] = floatToString(edgeMaxDeltaAngle * M_PI / 180.0);
408  properties[PROPERTIES_PREFIX + "EdgePointAddingThreshold"] = floatToString(edgePointAddingThreshold);
409  properties[PROPERTIES_PREFIX + "EdgeEpsilon"] = to_string(edgeEpsilon);
410  properties[PROPERTIES_PREFIX + "EdgeMinPoints"] = to_string(edgeMinPoints);
411  properties[PROPERTIES_PREFIX + "UseMapCorrection"] = useMapCorrection ? "1" : "0";
412  properties[PROPERTIES_PREFIX + "UseOdometry"] = useOdometry ? "1" : "0";
413  properties[PROPERTIES_PREFIX + "ReportPoints"] = reportPoints ? "1" : "0";
414  properties[PROPERTIES_PREFIX + "ReportEdges"] = reportEdges ? "1" : "0";
415  properties[PROPERTIES_PREFIX + "SensorStdDev"] = floatToString(sensorStdDev);
416  properties[PROPERTIES_PREFIX + "VelSensorStdDev"] = floatToString(velSensorStdDev);
417 
418  ARMARX_INFO << "setting properties on local admin";
419  localisationAdmin->setProperties(properties);
420  ARMARX_INFO << "done updating LaserScannerSelfLocalisationWidget properties";
421 }
422 
423 void LaserScannerSelfLocalisationWidgetController::readProperties()
424 {
425  ARMARX_IMPORTANT << "Trying to read properties";
426  ObjectPropertyInfos properties = localisationManager->getObjectPropertyInfos(localisationName);
427 
428  int smoothingFrameSize = std::stoi(properties[PROPERTIES_PREFIX + "SmoothFrameSize"].value);
429  int smoothingMergeDistance = std::stoi(properties[PROPERTIES_PREFIX + "SmoothMergeDistance"].value);
430  float matchingMaxDistance = stringToFloat(properties[PROPERTIES_PREFIX + "MatchingMaxDistance"].value);
431  float matchingMinPoints = stringToFloat(properties[PROPERTIES_PREFIX + "MatchingMinPoints"].value);
432  float matchingCorrectionFactor = stringToFloat(properties[PROPERTIES_PREFIX + "MatchingCorrectionFactor"].value);
433  float edgeMaxDistance = stringToFloat(properties[PROPERTIES_PREFIX + "EdgeMaxDistance"].value);
434  float edgeMaxDeltaAngle = 180.0 / M_PI * stringToFloat(properties[PROPERTIES_PREFIX + "EdgeMaxDeltaAngle"].value);
435  float edgePointAddingThreshold = stringToFloat(properties[PROPERTIES_PREFIX + "EdgePointAddingThreshold"].value);
436  int edgeEpsilon = std::stoi(properties[PROPERTIES_PREFIX + "EdgeEpsilon"].value);
437  int edgeMinPoints = std::stoi(properties[PROPERTIES_PREFIX + "EdgeMinPoints"].value);
438  bool useMapCorrection = properties[PROPERTIES_PREFIX + "UseMapCorrection"].value == "true";
439  bool useOdometry = properties[PROPERTIES_PREFIX + "UseOdometry"].value == "true";
440  bool reportPoints = properties[PROPERTIES_PREFIX + "ReportPoints"].value == "true";
441  bool reportEdges = properties[PROPERTIES_PREFIX + "ReportEdges"].value == "true";
442  float sensorStdDev = stringToFloat(properties[PROPERTIES_PREFIX + "SensorStdDev"].value);
443  float velSensorStdDev = stringToFloat(properties[PROPERTIES_PREFIX + "VelSensorStdDev"].value);
444 
445  widget.smoothingFrameSize->setValue(smoothingFrameSize);
446  widget.smoothingMergeDistance->setValue(smoothingMergeDistance);
447  widget.matchingMaxDistance->setValue(matchingMaxDistance);
448  widget.matchingMinPoints->setValue(matchingMinPoints);
449  widget.matchingCorrectionFactor->setValue(matchingCorrectionFactor);
450  widget.edgeMaxDistance->setValue(edgeMaxDistance);
451  widget.edgeMaxDeltaAngle->setValue(edgeMaxDeltaAngle);
452  widget.edgePointAddingThreshold->setValue(edgePointAddingThreshold);
453  widget.edgeEpsilon->setValue(edgeEpsilon);
454  widget.edgeMinPoints->setValue(edgeMinPoints);
455  widget.useMapCorrection->setChecked(useMapCorrection);
456  widget.useOdometry->setChecked(useOdometry);
457  widget.reportPoints->setChecked(reportPoints);
458  widget.reportEdges->setChecked(reportEdges);
459  widget.sensorStdDev->setValue(sensorStdDev);
460  widget.velSensorStdDev->setValue(velSensorStdDev);
461 }
462 
464 {
465  painterWidget->update();
466 }
armarx::LaserScannerSelfLocalisationWidgetController::reportExtractedEdges
void reportExtractedEdges(const LineSegment2DSeq &, const Ice::Current &) override
Definition: LaserScannerSelfLocalisationWidgetController.cpp:306
armarx::VariantType::Float
const VariantTypeId Float
Definition: Variant.h:918
armarx::LaserScannerSelfLocalisationWidgetController::newDataReported
void newDataReported()
ARMARX_IMPORTANT
#define ARMARX_IMPORTANT
Definition: Logging.h:183
armarx::LaserScannerSelfLocalisationWidgetController::saveSettings
void saveSettings(QSettings *settings) override
Definition: LaserScannerSelfLocalisationWidgetController.cpp:61
armarx::QPainterWidget::setPaintCallback
void setPaintCallback(PaintCallback const &callback)
Definition: QPainterWidget.h:76
armarx::LaserScannerSelfLocalisationWidgetController::onConnectComponent
void onConnectComponent() override
Definition: LaserScannerSelfLocalisationWidgetController.cpp:73
armarx::LaserScannerSelfLocalisationWidgetController::onInitComponent
void onInitComponent() override
Definition: LaserScannerSelfLocalisationWidgetController.cpp:67
LaserScannerSelfLocalisationWidgetController.h
armarx::LaserScannerSelfLocalisationWidgetController::configured
void configured() override
This function must be implemented by the user, if he supplies a config dialog.
Definition: LaserScannerSelfLocalisationWidgetController.cpp:118
armarx::QPainterWidget::setupUi
void setupUi(QWidget *parent=0)
Definition: QPainterWidget.h:44
armarx::ScopedLock
Mutex::scoped_lock ScopedLock
Definition: Synchronization.h:132
armarx::LaserScannerSelfLocalisationWidgetController::timerEvent
void timerEvent(QTimerEvent *event) override
Definition: LaserScannerSelfLocalisationWidgetController.cpp:463
PROPERTIES_PREFIX
const std::string PROPERTIES_PREFIX
Definition: LaserScannerSelfLocalisationWidgetController.cpp:372
cxxopts::value
std::shared_ptr< Value > value()
Definition: cxxopts.hpp:926
M_PI
#define M_PI
Definition: MathTools.h:17
armarx::QPainterWidget
Definition: QPainterWidget.h:36
armarx::LaserScannerSelfLocalisationWidgetController::onSpinBoxChanged
void onSpinBoxChanged(int value)
Definition: LaserScannerSelfLocalisationWidgetController.cpp:315
armarx::LaserScannerSelfLocalisationWidgetController::LaserScannerSelfLocalisationWidgetController
LaserScannerSelfLocalisationWidgetController()
Controller Constructor.
Definition: LaserScannerSelfLocalisationWidgetController.cpp:35
armarx::LaserScannerSelfLocalisationWidgetController::reportLaserScanPoints
void reportLaserScanPoints(const Vector2fSeq &globalPoints, const Ice::Current &) override
Definition: LaserScannerSelfLocalisationWidgetController.cpp:297
max
T max(T t1, T t2)
Definition: gdiam.h:48
armarx::LaserScannerSelfLocalisationWidgetController::reportCorrectedPose
void reportCorrectedPose(Ice::Float x, Ice::Float y, Ice::Float theta, const Ice::Current &) override
Definition: LaserScannerSelfLocalisationWidgetController.cpp:277
armarx::to_string
const std::string & to_string(const std::string &s)
Definition: StringHelpers.h:40
armarx::ManagedIceObject::usingTopic
void usingTopic(const std::string &name, bool orderedPublishing=false)
Registers a proxy for subscription after initialization.
Definition: ManagedIceObject.cpp:248
armarx::LaserScannerSelfLocalisationWidgetController::onSetPoseClick
void onSetPoseClick()
Definition: LaserScannerSelfLocalisationWidgetController.cpp:333
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
armarx::LaserScannerSelfLocalisationWidgetController::onPaintCanvas
void onPaintCanvas(QPainter &painter, QSize size)
Definition: LaserScannerSelfLocalisationWidgetController.cpp:126
armarx::LaserScannerSelfLocalisationWidgetController::reportPoseUncertainty
void reportPoseUncertainty(Ice::Float x, Ice::Float y, Ice::Float theta, const Ice::Current &) override
Definition: LaserScannerSelfLocalisationWidgetController.cpp:286
ARMARX_INFO
#define ARMARX_INFO
Definition: Logging.h:174
armarx::LaserScannerSelfLocalisationWidgetController::loadSettings
void loadSettings(QSettings *settings) override
Definition: LaserScannerSelfLocalisationWidgetController.cpp:56
armarx::LaserScannerSelfLocalisationWidgetController::onCanvasClick
void onCanvasClick(QPoint p)
Definition: LaserScannerSelfLocalisationWidgetController.cpp:339
armarx::ArmarXWidgetController::getWidget
virtual QPointer< QWidget > getWidget()
getWidget returns a pointer to the a widget of this controller.
Definition: ArmarXWidgetController.cpp:54
min
T min(T t1, T t2)
Definition: gdiam.h:42
ARMARX_WARNING
#define ARMARX_WARNING
Definition: Logging.h:186
armarx::LaserScannerSelfLocalisationWidgetController::getConfigDialog
QPointer< QDialog > getConfigDialog(QWidget *parent) override
getConfigDialog returns a pointer to the a configuration widget of this controller.
Definition: LaserScannerSelfLocalisationWidgetController.cpp:108
armarx::ManagedIceObject::usingProxy
bool usingProxy(const std::string &name, const std::string &endpoints="")
Registers a proxy for retrieval after initialization and adds it to the dependency list.
Definition: ManagedIceObject.cpp:151
armarx::ctrlutil::s
double s(double t, double s0, double v0, double a0, double j)
Definition: CtrlUtil.h:33
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::LaserScannerSelfLocalisationWidgetController::onNewDataReported
void onNewDataReported()
Definition: LaserScannerSelfLocalisationWidgetController.cpp:325
armarx::LaserScannerSelfLocalisationWidgetController::~LaserScannerSelfLocalisationWidgetController
~LaserScannerSelfLocalisationWidgetController() override
Controller destructor.
Definition: LaserScannerSelfLocalisationWidgetController.cpp:50
armarx::SimpleConfigDialog
A config-dialog containing one (or multiple) proxy finders.
Definition: SimpleConfigDialog.h:84