From 42393dac76229a206ffae50ee8554216b5bdce0f Mon Sep 17 00:00:00 2001 From: Fabian Paus <fabian.paus@kit.edu> Date: Thu, 23 Mar 2017 12:52:44 +0100 Subject: [PATCH] Added subpage for LaserScannerGUI --- etc/doxygen/pages/GuiPlugins.dox | 2 ++ .../LaserScannerPluginWidgetController.cpp | 29 +++++++++++++++++-- .../LaserScannerPluginWidgetController.h | 6 ++-- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/etc/doxygen/pages/GuiPlugins.dox b/etc/doxygen/pages/GuiPlugins.dox index 8f8fe7c3b..5bde34684 100644 --- a/etc/doxygen/pages/GuiPlugins.dox +++ b/etc/doxygen/pages/GuiPlugins.dox @@ -18,4 +18,6 @@ The following Gui Plugins are available: \subpage RobotAPI-GuiPlugins-ViewSelection \subpage ArmarXGui-GuiPlugins-DebugDrawerViewer + +\subpage ArmarXGui-GuiPlugins-LaserScannerPlugin */ diff --git a/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.cpp b/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.cpp index 036f956a4..4ed9add23 100644 --- a/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.cpp @@ -134,7 +134,7 @@ void LaserScannerPluginWidgetController::onNewSensorValuesReported() int outerR = std::min(view->width() / 2, view->height() / 2); scene.addEllipse(-outerR, -outerR, 2 * outerR, 2 * outerR, QPen(QColor(255, 255, 255))); int r = outerR - 10; - scene.addEllipse(-r, -r, 2 * r, 2 * r, QPen(QColor(200, 200, 200))); + //scene.addEllipse(-r, -r, 2 * r, 2 * r, QPen(QColor(200, 200, 200))); QColor stepColor(QColor::fromRgb(100, 100, 255)); QPen stepPen(stepColor); QBrush stepBrush(stepColor); @@ -148,9 +148,34 @@ void LaserScannerPluginWidgetController::onNewSensorValuesReported() }; LaserScan& scan = scans[deviceName]; + float maxDistance = 1000.0f; for (LaserScanStep & step : scan) { - line(step.angle, step.distance / 10000.0f); + if (step.distance > maxDistance) + { + maxDistance = step.distance; + } + } + float ringDistance = 1000.0f; + int numberOfRings = (std::size_t)std::ceil(maxDistance / ringDistance); + std::deque<int>& history = numberOfRingsHistory[deviceName]; + history.push_back(numberOfRings); + if (history.size() > 256) + { + history.pop_front(); + } + int maxNumberOfRings = *std::max_element(history.begin(), history.end()); + float outerRadius = maxNumberOfRings * ringDistance; + + for (LaserScanStep & step : scan) + { + line(step.angle, step.distance / outerRadius); + } + + for (int ringIndex = 1; ringIndex <= maxNumberOfRings; ++ringIndex) + { + float ri = 1.0f * ringIndex / maxNumberOfRings * r; + scene.addEllipse(-ri, -ri, 2 * ri, 2 * ri, QPen(QColor(200, 200, 200))); } view->fitInView(scene.itemsBoundingRect(), Qt::KeepAspectRatio); diff --git a/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.h b/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.h index a98917b3e..f0310dba0 100644 --- a/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.h +++ b/source/RobotAPI/gui-plugins/LaserScannerPlugin/LaserScannerPluginWidgetController.h @@ -35,10 +35,7 @@ namespace armarx { /** \page ArmarXGui-GuiPlugins-LaserScannerPlugin LaserScannerPlugin - \brief The LaserScannerPlugin allows visualizing ... - - \image html LaserScannerPlugin.png - The user can + \brief The LaserScannerPlugin allows visualizing the raw sensor data captured from multiple laser scanners. API Documentation \ref LaserScannerPluginWidgetController @@ -125,6 +122,7 @@ namespace armarx Mutex scanMutex; std::unordered_map<std::string, LaserScan> scans; + std::unordered_map<std::string, std::deque<int>> numberOfRingsHistory; QGraphicsScene scene; -- GitLab