Component.h
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 navigation::ArmarXObjects::dynamic_distance_to_obstacle_costmap_provider
17  * @author Fabian Reister ( fabian dot reister at kit dot edu )
18  * @date 2022
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 
24 #pragma once
25 
28 
33 
34 #include <armarx/navigation/components/dynamic_distance_to_obstacle_costmap_provider/ComponentInterface.h>
38 
40 {
41 
42  class Component :
43  virtual public armarx::Component,
44  virtual public armarx::navigation::components::
46  // , virtual public armarx::DebugObserverComponentPluginUser
47  // , virtual public armarx::LightweightRemoteGuiComponentPluginUser
48  virtual public armarx::ArVizComponentPluginUser,
50  {
51  public:
52  Component();
53 
54  /// @see armarx::ManagedIceObject::getDefaultName()
55  std::string getDefaultName() const override;
56 
57  /// Get the component's default name.
58  static std::string GetDefaultName();
59 
60 
61  protected:
62  /// @see PropertyUser::createPropertyDefinitions()
64 
65  /// @see armarx::ManagedIceObject::onInitComponent()
66  void onInitComponent() override;
67 
68  /// @see armarx::ManagedIceObject::onConnectComponent()
69  void onConnectComponent() override;
70 
71  /// @see armarx::ManagedIceObject::onDisconnectComponent()
72  void onDisconnectComponent() override;
73 
74  /// @see armarx::ManagedIceObject::onExitComponent()
75  void onExitComponent() override;
76 
77 
78  void updateCostmap();
79 
80  bool readStaticCostmap();
81 
83  const std::string& name,
84  float heightOffset);
85 
87  computeNavigationCostmap(const algorithms::Costmap& obstacleDistancesCostmap);
88 
89 
90  /* (Requires armarx::LightweightRemoteGuiComponentPluginUser.)
91  /// This function should be called once in onConnect() or when you
92  /// need to re-create the Remote GUI tab.
93  void createRemoteGuiTab();
94 
95  /// After calling `RemoteGui_startRunningTask`, this function is
96  /// called periodically in a separate thread. If you update variables,
97  /// make sure to synchronize access to them.
98  void RemoteGui_update() override;
99  */
100 
101 
102  private:
103  // Private methods go here.
104 
105  // Forward declare `Properties` if you used it before its defined.
106  // struct Properties;
107 
108  /* (Requires the armarx::ArVizComponentPluginUser.)
109  /// Draw some boxes in ArViz.
110  void drawBoxes(const Properties& p, viz::Client& arviz);
111  */
112 
113 
114  static const std::string defaultName;
115 
116  // Private member variables go here.
117 
118 
119  /// Properties shown in the Scenario GUI.
120  struct Properties
121  {
122  // std::string boxLayerName = "boxes";
123  struct
124  {
125  std::string providerName;
126  std::string name = "distance_to_obstacles";
127  } staticCostmap;
128 
129  struct
130  {
131  std::string providerName = "LaserScannerFeatureExtraction";
132  std::string name = ""; // all
133  } laserScannerFeatures;
134 
135  struct
136  {
137  std::string name = "Armar6";
138  } robot;
139 
140  int updatePeriodMs = 100;
141  };
142 
143  Properties properties;
144  /* Use a mutex if you access variables from different threads
145  * (e.g. ice functions and RemoteGui_update()).
146  std::mutex propertiesMutex;
147  */
148 
149 
150  /* (Requires the armarx::LightweightRemoteGuiComponentPluginUser.)
151  /// Tab shown in the Remote GUI.
152  struct RemoteGuiTab : armarx::RemoteGui::Client::Tab
153  {
154  armarx::RemoteGui::Client::LineEdit boxLayerName;
155  armarx::RemoteGui::Client::IntSpinBox numBoxes;
156 
157  armarx::RemoteGui::Client::Button drawBoxes;
158  };
159  RemoteGuiTab tab;
160  */
161 
162 
163  /* (Requires the armarx::ArVizComponentPluginUser.)
164  * When used from different threads, an ArViz client needs to be synchronized.
165  /// Protects the arviz client inherited from the ArViz plugin.
166  std::mutex arvizMutex;
167  */
168 
170 
171  memory::client::costmap::Reader costmapReader;
172  memory::client::costmap::Writer costmapWriter;
173 
174  memory::client::laser_scanner_features::Reader laserScannerFeaturesReader;
175 
176  std::optional<algorithms::Costmap> staticCostmap;
177 
178  PeriodicTask<Component>::pointer_type updateCostmapTask;
179  };
180 
181 } // namespace armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider
ArVizComponentPlugin.h
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component::updateCostmap
void updateCostmap()
Definition: Component.cpp:310
client.h
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component::onDisconnectComponent
void onDisconnectComponent() override
Definition: Component.cpp:398
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component::GetDefaultName
static std::string GetDefaultName()
Get the component's default name.
Definition: Component.cpp:414
armarx::navigation::memory::client::laser_scanner_features::Reader
Definition: Reader.h:49
Reader.h
PeriodicTask.h
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component::onConnectComponent
void onConnectComponent() override
Definition: Component.cpp:114
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component::createPropertyDefinitions
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
Definition: Component.cpp:58
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component::drawCostmap
void drawCostmap(const armarx::navigation::algorithms::Costmap &costmap, const std::string &name, float heightOffset)
Definition: Component.cpp:251
Reader.h
armarx::ArVizComponentPluginUser
Provides a ready-to-use ArViz client arviz as member variable.
Definition: ArVizComponentPlugin.h:36
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component::onExitComponent
void onExitComponent() override
Definition: Component.cpp:403
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component::readStaticCostmap
bool readStaticCostmap()
Definition: Component.cpp:163
armarx::navigation::memory::client::costmap::Reader
Definition: Reader.h:34
forward_declarations.h
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider
Definition: Component.cpp:52
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component
Definition: Component.h:42
armarx::navigation::memory::client::costmap::Writer
Definition: Writer.h:45
RobotReader.h
armarx::armem::robot_state::RobotReader
The RobotReader class.
Definition: RobotReader.h:43
Component.h
armarx::Component
Baseclass for all ArmarX ManagedIceObjects requiring properties.
Definition: Component.h:95
Writer.h
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::ComponentInterface
Definition: ComponentInterface.ice:31
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component::Component
Component()
Definition: Component.cpp:98
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component::onInitComponent
void onInitComponent() override
Definition: Component.cpp:104
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component::getDefaultName
std::string getDefaultName() const override
Definition: Component.cpp:408
armarx::navigation::components
Definition: Component.cpp:43
armarx::navigation::components::dynamic_distance_to_obstacle_costmap_provider::Component::computeNavigationCostmap
algorithms::Costmap computeNavigationCostmap(const algorithms::Costmap &obstacleDistancesCostmap)
Definition: Component.cpp:366
armarx::armem::client::plugins::ListeningPluginUser
A memory name system client which listens to the memory updates topic (MemoryListenerInterface).
Definition: ListeningPluginUser.h:23
armarx::navigation::algorithms::Costmap
Definition: Costmap.h:13