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::Navigator
17  * @author Fabian Reister ( fabian dot reister at kit dot edu )
18  * @author Christian R. G. Dreher ( c dot dreher at kit dot edu )
19  * @date 2021
20  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
21  * GNU General Public License
22  */
23 
24 
25 #pragma once
26 
27 
28 #include <memory>
29 #include <mutex>
30 #include <optional>
31 #include <string>
32 #include <unordered_map>
33 #include <vector>
34 
35 #include <Eigen/Core>
36 
37 #include <Ice/Current.h>
38 #include <Ice/Object.h>
39 
43 
44 #include <ArmarXGui/interface/RemoteGuiInterface.h>
45 
46 #include <RobotAPI/interface/aron/Aron.h>
52 
54 #include <armarx/navigation/client/ice/NavigatorInterface.h>
72 
74 {
75 
76  /**
77  * @defgroup Component-Navigator Navigator
78  * @ingroup armarx_navigation-Components
79  * A description of the component Navigator.
80  *
81  * @class Navigator
82  * @ingroup Component-Navigator
83  * @brief Brief description of class Navigator.
84  *
85  * Detailed description of class Navigator.
86  */
87  class Component :
88  virtual public armarx::Component,
89  virtual public client::NavigatorInterface,
90  virtual public ObjectPoseClientPluginUser,
91  virtual public ArVizComponentPluginUser,
94  // virtual public armem::ListeningClientPluginUser
95  {
96 
97  public:
98  Component();
99  ~Component() override;
100 
101  /// @see armarx::ManagedIceObject::getDefaultName()
102  std::string getDefaultName() const override;
103 
104  static std::string GetDefaultName();
105 
106  void createConfig(const aron::data::dto::DictPtr& stackConfig,
107  const std::string& callerId,
108  const Ice::Current& c = Ice::emptyCurrent) override;
109 
110  void moveTo(const std::vector<Eigen::Matrix4f>& waypoints,
111  const std::string& navigationMode,
112  const std::string& callerId,
113  const Ice::Current& c = Ice::emptyCurrent) override;
114 
115  void moveTo2(const client::detail::Waypoints& waypoints,
116  const std::string& navigationMode,
117  const std::string& callerId,
118  const Ice::Current& c = Ice::emptyCurrent) override;
119 
120  void moveToLocation(const std::string& location,
121  const std::string& callerId,
122  const Ice::Current& c = Ice::emptyCurrent) override;
123 
124  void updateMoveTo(const std::vector<Eigen::Matrix4f>& waypoints,
125  const std::string& navigationMode,
126  const std::string& callerId,
127  const Ice::Current& c = Ice::emptyCurrent) override;
128 
129  void moveTowards(const Eigen::Vector3f& direction,
130  const std::string& navigationMode,
131  const std::string& callerId,
132  const Ice::Current& c = Ice::emptyCurrent) override;
133 
134  void setVelocityFactor(float velocityFactor,
135  const std::string& callerId,
136  const Ice::Current& c = Ice::emptyCurrent) override;
137 
138  void pause(const std::string& callerId, const Ice::Current& c = Ice::emptyCurrent) override;
139 
140  void resume(const std::string& callerId,
141  const Ice::Current& c = Ice::emptyCurrent) override;
142 
143  void stop(const std::string& callerId, const Ice::Current& c = Ice::emptyCurrent) override;
144 
145  void stopAll(const Ice::Current& c = Ice::emptyCurrent) override;
146 
147  bool isPaused(const std::string& callerId,
148  const Ice::Current& c = Ice::emptyCurrent) override;
149 
150  bool isStopped(const std::string& callerId,
151  const Ice::Current& c = Ice::emptyCurrent) override;
152 
153  const core::Scene& scene() const;
154 
155  protected:
156  /// @see PropertyUser::createPropertyDefinitions()
158 
159  /// @see armarx::ManagedIceObject::onInitComponent()
160  void onInitComponent() override;
161 
162  /// @see armarx::ManagedIceObject::onConnectComponent()
163  void onConnectComponent() override;
164 
165  /// @see armarx::ManagedIceObject::onDisconnectComponent()
166  void onDisconnectComponent() override;
167 
168  /// @see armarx::ManagedIceObject::onExitComponent()
169  void onExitComponent() override;
170 
171  bool initializeScene();
172 
173  void stopAllImpl(bool emitMemoryEvent);
174 
175 
176  // core::StaticScene staticScene();
177 
178  // [[nodiscard]] VirtualRobot::RobotPtr getRobot();
179  // void updateRobot();
180 
182  std::optional<std::string> activeNavigatorId() const;
183 
184  private:
185  void visualizeSPFA();
186 
187  RemoteGuiInterfacePrx remoteGui;
188 
189  // core::Scene scene;
190 
191  std::optional<server::PlatformControllerExecutor> executor;
192  std::optional<server::ArvizIntrospector> introspector;
193  // std::optional<server::MemoryIntrospector> memoryIntrospector;
194  std::optional<server::scene_provider::SceneProvider> sceneProvider;
195 
196  std::unordered_map<std::string, server::Navigator> navigators;
197 
198  std::mutex propertiesMutex;
199 
200  std::optional<armarx::navigation::components::navigator::RemoteGui> navRemoteGui;
201 
202  // unique_ptr to avoid dangling refs
203  std::vector<std::unique_ptr<server::MemoryIntrospector>> memoryIntrospectors;
204 
205  // `navigation` memory reader and writer
207  parameterizationReaderPlugin = nullptr;
209  parameterizationWriterPlugin = nullptr;
211  eventsWriterPlugin = nullptr;
213  resultsWriterPlugin = nullptr;
215  graphReaderPlugin = nullptr;
217  costmapReaderPlugin = nullptr;
219  humanReaderPlugin = nullptr;
221  laserScannerFeaturesReaderPlugin = nullptr;
222 
223  // armem::vision::occupancy_grid::client::Reader occupancyGridReader;
224 
225  // `robot_state` memory reader and writer
226  std::optional<armem::robot_state::description::RobotDescription> robotDescription;
228  virtualRobotReaderPlugin = nullptr;
229 
230 
231  server::MemoryParameterizationService parameterizationService;
232  // server::MemoryPublisher publisher;
233 
234  // key is `callerId`
235  std::unordered_map<std::string, std::unique_ptr<server::MemoryPublisher>> memoryPublishers;
236 
237  struct Parameters
238  {
239  float occupiedGridThreshold{0.55F};
240  bool disableExecutor{false};
241 
243 
244  bool rtUnitDynamicallyLoadLibraries = false;
245 
246  server::Navigator::Config::General navigatorGeneralConfig;
247  server::GoalReachedMonitorConfig navigatorGoalReachedConfig;
248  };
249 
250  Parameters params;
251  };
252 } // namespace armarx::navigation::components::navigator
armarx::navigation::components::navigator::Component::activeNavigator
server::Navigator * activeNavigator()
Definition: Component.cpp:618
ArVizComponentPlugin.h
armarx::navigation::components::navigator::Component::isStopped
bool isStopped(const std::string &callerId, const Ice::Current &c=Ice::emptyCurrent) override
Definition: Component.cpp:509
armarx::navigation::components::navigator::Component::activeNavigatorId
std::optional< std::string > activeNavigatorId() const
Definition: Component.cpp:631
Writer.h
armarx::navigation::components::navigator::Component::createPropertyDefinitions
PropertyDefinitionsPtr createPropertyDefinitions() override
Definition: Component.cpp:518
ObjectPoseClientPlugin.h
armarx::navigation::components::navigator::Component::pause
void pause(const std::string &callerId, const Ice::Current &c=Ice::emptyCurrent) override
Definition: Component.cpp:429
armarx::armem::client::plugins::ReaderWriterPlugin
A component plugin offering client-side access to a reader or writer and manages the lifecycle,...
Definition: ReaderWriterPlugin.h:44
armarx::navigation::client::NavigatorInterface::stopAll
idempotent void stopAll()
GoalReachedMonitor.h
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
armarx::navigation::components::navigator::Component::stop
void stop(const std::string &callerId, const Ice::Current &c=Ice::emptyCurrent) override
Definition: Component.cpp:446
armarx::navigation::server::Navigator
Definition: Navigator.h:63
Reader.h
ReaderWriterPlugin.h
armarx::ObjectPoseClientPluginUser
Provides an objpose::ObjectPoseTopicPrx objectPoseTopic as member variable.
Definition: ObjectPoseClientPlugin.h:64
armarx::skills::gui::Parameters
aron::data::DictPtr Parameters
Definition: SkillManagerWrapper.h:21
MemoryParameterizationService.h
armarx::navigation::components::navigator::Component::updateMoveTo
void updateMoveTo(const std::vector< Eigen::Matrix4f > &waypoints, const std::string &navigationMode, const std::string &callerId, const Ice::Current &c=Ice::emptyCurrent) override
Definition: Component.cpp:338
armarx::navigation::components::navigator::Component::scene
const core::Scene & scene() const
Definition: Component.cpp:502
armarx::navigation::components::navigator::Component::moveToLocation
void moveToLocation(const std::string &location, const std::string &callerId, const Ice::Current &c=Ice::emptyCurrent) override
Definition: Component.cpp:387
Reader.h
armarx::navigation::components::navigator::Component
Definition: Component.h:87
armarx::navigation::components::navigator::Component::onDisconnectComponent
void onDisconnectComponent() override
Definition: Component.cpp:194
IceInternal::Handle
Definition: forward_declarations.h:8
armarx::control::client::ComponentPluginUser
Definition: ComponentPlugin.h:146
armarx::navigation::components::navigator::Component::resume
void resume(const std::string &callerId, const Ice::Current &c=Ice::emptyCurrent) override
Definition: Component.cpp:437
RemoteGui.h
armarx::navigation::server::scene_provider::SceneProvider::Config
Definition: SceneProvider.h:88
armarx::ArVizComponentPluginUser
Provides a ready-to-use ArViz client arviz as member variable.
Definition: ArVizComponentPlugin.h:35
armarx::navigation::components::navigator::Component::stopAllImpl
void stopAllImpl(bool emitMemoryEvent)
Definition: Component.cpp:467
armarx::navigation::client::detail::Waypoints
sequence< Waypoint > Waypoints
Definition: NavigatorInterface.ice:57
armarx::navigation::components::navigator::Component::moveTo2
void moveTo2(const client::detail::Waypoints &waypoints, const std::string &navigationMode, const std::string &callerId, const Ice::Current &c=Ice::emptyCurrent) override
Definition: Component.cpp:369
armarx::navigation::server::GoalReachedMonitorConfig
Definition: GoalReachedMonitor.h:34
DebugObserverComponentPlugin.h
Writer.h
VirtualRobotReader.h
armarx::navigation::components::navigator::Component::moveTowards
void moveTowards(const Eigen::Vector3f &direction, const std::string &navigationMode, const std::string &callerId, const Ice::Current &c=Ice::emptyCurrent) override
Definition: Component.cpp:402
PlatformControllerExecutor.h
types.h
armarx::navigation::server::Navigator::Config::General
Definition: Navigator.h:69
armarx::navigation::client::NavigatorInterface
Definition: NavigatorInterface.ice:61
armarx::navigation::core::Scene
Definition: types.h:60
Reader.h
MemoryIntrospector.h
Component.h
armarx::Component
Baseclass for all ArmarX ManagedIceObjects requiring properties.
Definition: Component.h:91
armarx::navigation::components::navigator::Component::initializeScene
bool initializeScene()
Definition: Component.cpp:233
MemoryPublisher.h
armarx::navigation::components::navigator::Component::moveTo
void moveTo(const std::vector< Eigen::Matrix4f > &waypoints, const std::string &navigationMode, const std::string &callerId, const Ice::Current &c=Ice::emptyCurrent) override
Definition: Component.cpp:308
PropertyDefinitionContainer.h
armarx::navigation::components::navigator::Component::onConnectComponent
void onConnectComponent() override
Definition: Component.cpp:137
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::DebugObserverComponentPluginUser
Definition: DebugObserverComponentPlugin.h:73
armarx::navigation::components::navigator::Component::Component
Component()
Definition: Component.cpp:108
Writer.h
ComponentPlugin.h
armarx::navigation::components::navigator::Component::GetDefaultName
static std::string GetDefaultName()
Definition: Component.cpp:246
armarx::navigation::components::navigator::Component::setVelocityFactor
void setVelocityFactor(float velocityFactor, const std::string &callerId, const Ice::Current &c=Ice::emptyCurrent) override
Definition: Component.cpp:418
armarx::navigation::components::navigator::Component::~Component
~Component() override
armarx::navigation::components::navigator::Component::isPaused
bool isPaused(const std::string &callerId, const Ice::Current &c=Ice::emptyCurrent) override
Definition: Component.cpp:493
armarx::navigation::components::navigator::Component::getDefaultName
std::string getDefaultName() const override
Definition: Component.cpp:240
armarx::navigation::components::navigator::Component::createConfig
void createConfig(const aron::data::dto::DictPtr &stackConfig, const std::string &callerId, const Ice::Current &c=Ice::emptyCurrent) override
Definition: Component.cpp:252
types.h
Navigator.h
armarx::navigation::server::MemoryParameterizationService
Definition: MemoryParameterizationService.h:38
Reader.h
armarx::navigation::components::navigator
This file is part of ArmarX.
Definition: Component.cpp:83
armarx::navigation::components::navigator::Component::onInitComponent
void onInitComponent() override
Definition: Component.cpp:132
armarx::navigation::components::navigator::Component::onExitComponent
void onExitComponent() override
Definition: Component.cpp:228
ArvizIntrospector.h
SceneProvider.h