|
|
Implements the worker side of the batch distributed adaptive dynamic domain informed rrt* planner. More...
#include <RobotComponents/components/MotionPlanning/Tasks/AdaptiveDynamicDomainInformedRRTStar/WorkerNode.h>
Inheritance diagram for WorkerNode:Public Types | |
| using | ConfigType = Tree::ConfigType |
| Type of a configuration. | |
Public Types inherited from ManagedIceObject | |
| using | PeriodicTaskPtr = IceUtil::Handle<SimplePeriodicTask<std::function<void(void)>>> |
Public Member Functions | |
| std::string | getDefaultName () const override |
| Update | getUpdate (Ice::Long updateId, const Ice::Current &=Ice::emptyCurrent) const override |
| void | ice_postUnmarshal () override |
| noop | |
| void | killWorker (const Ice::Current &=Ice::emptyCurrent) override |
| Signals the worker thread to exit. | |
| void | onConnectComponent () override |
| Gets a proxy to the topic. | |
| void | onDisconnectComponent () override |
| noop | |
| void | onExitComponent () override |
| Kills the worker thread (if it is still running) and joins it. | |
| void | onInitComponent () override |
| Initializes the worker and starts the worker thread. | |
| void | pauseWorker (bool pauseFlag, const Ice::Current &=Ice::emptyCurrent) override |
| void | updateTree (const Update &u, const Ice::Current &=Ice::emptyCurrent) override |
| Receives an update from other workers and adds it to the queue of pending updates. | |
| WorkerNode (const CSpaceBasePtr &cspace, const VectorXf &startCfg, const VectorXf &goalCfg, Ice::Float DCDStepSize, AdaptiveDynamicDomainParameters addParams, const ManagerNodeBasePrx &manager, Ice::Long workerId, Ice::Long batchSize, Ice::Long nodeCountDeltaForGoalConnectionTries, const std::string &topicPrefix, const Ice::FloatSeq &rotationMatrix) | |
| ctor | |
| ~WorkerNode () override | |
| dtor. | |
Public Member Functions inherited from ManagedIceObject | |
| void | enableProfiler (bool enable) |
| setProfiler allows setting ManagedIceObject::profiler to a new instance (if the new instance is actually not a null pointer) | |
| std::string | generateSubObjectName (const std::string &subObjectName) |
| Generates a unique name for a sub object from a general name. | |
| ArmarXManagerPtr | getArmarXManager () const |
| Returns the ArmarX manager used to add and remove components. | |
| ManagedIceObjectConnectivity | getConnectivity () const |
| Retrieve connectivity of the object (topcis as well as proxies) | |
| IceManagerPtr | getIceManager () const |
| Returns the IceManager. | |
| VariantBasePtr | getMetaInfo (const std::string &id) |
| StringVariantBaseMap | getMetaInfoMap () const |
| std::string | getName () const |
| Retrieve name of object. | |
| Ice::ObjectAdapterPtr | getObjectAdapter () const |
| Returns object's Ice adapter. | |
| ArmarXObjectSchedulerPtr | getObjectScheduler () const |
| PeriodicTaskPtr | getPeriodicTask (const std::string &name) |
| Profiler::ProfilerPtr | getProfiler () const |
| getProfiler returns an instance of armarx::Profiler | |
| template<class ProxyTarg, class... Args> | |
| void | getProxy (const char *name, IceInternal::ProxyHandle< ProxyTarg > &proxy, Args &&... args) |
| template<class ProxyType> | |
| ProxyType | getProxy (const std::string &name, bool addToDependencies=false, const std::string &endpoints="", bool throwOnProxyError=true) |
| Retrieves a proxy object. | |
| template<class ProxyTarg, class... Args> | |
| void | getProxy (const std::string &name, IceInternal::ProxyHandle< ProxyTarg > &proxy, Args &&... args) |
| template<class ProxyTarg, class... Args> | |
| void | getProxy (IceInternal::ProxyHandle< ProxyTarg > &proxy, const char *name, Args &&... args) |
| template<class ProxyTarg, class... Args> | |
| void | getProxy (IceInternal::ProxyHandle< ProxyTarg > &proxy, const std::string &name, Args &&... args) |
Assigns a proxy to proxy. | |
| Ice::ObjectPrx | getProxy (long timeoutMs=0, bool waitForScheduler=true) const |
| Returns the proxy of this object (optionally it waits for the proxy) | |
| template<class Prx> | |
| Prx | getProxy (long timeoutMs=0, bool waitForScheduler=true) const |
| template<class ProxyType> | |
| void | getProxy (ProxyType &proxy, const char *name, bool addToDependencies=false, const std::string &endpoints="", bool throwOnProxyError=true) |
| Overload to allow using string literals as name (solve ambiguous overload). | |
| template<class Prx> | |
| void | getProxy (Prx &prx, long timeoutMs=0, bool waitForScheduler=true) const |
| int | getState () const |
| Retrieve current state of the ManagedIceObject. | |
| template<class TopicProxyType> | |
| TopicProxyType | getTopic (const std::string &name) |
| Returns a proxy of the specified topic. | |
| template<class TopicProxyType> | |
| void | getTopic (TopicProxyType &topicProxy, const std::string &name) |
Assigns a proxy of the specified topic to topicProxy. | |
| std::vector< std::string > | getUnresolvedDependencies () const |
| returns the names of all unresolved dependencies | |
| ManagedIceObject (ManagedIceObject const &other) | |
| void | offeringTopic (const std::string &name) |
| Registers a topic for retrival after initialization. | |
| void | preambleGetTopic (std::string const &name) |
| void | setMetaInfo (const std::string &id, const VariantBasePtr &value) |
| Allows to set meta information that can be queried live via Ice interface on the ArmarXManager. | |
| void | startPeriodicTask (const std::string &uniqueName, std::function< void(void)> f, int periodMs, bool assureMeanInterval=false, bool forceSystemTime=true) |
| bool | stopPeriodicTask (const std::string &name) |
| bool | unsubscribeFromTopic (const std::string &name) |
| Unsubscribe from a topic. | |
| bool | usingProxy (const std::string &name, const std::string &endpoints="") |
| Registers a proxy for retrieval after initialization and adds it to the dependency list. | |
| void | usingTopic (const std::string &name, bool orderedPublishing=false) |
| Registers a proxy for subscription after initialization. | |
| void | waitForObjectScheduler () |
| Waits until the ObjectScheduler could resolve all dependencies. | |
| void | waitForProxy (std::string const &name, bool addToDependencies) |
Public Member Functions inherited from Logging | |
| SpamFilterDataPtr | deactivateSpam (float deactivationDurationSec=10.0f, const std::string &identifier="", bool deactivate=true) const |
| disables the logging for the current line for the given amount of seconds. | |
| MessageTypeT | getEffectiveLoggingLevel () const |
| Logging () | |
| void | setLocalMinimumLoggingLevel (MessageTypeT level) |
| With setLocalMinimumLoggingLevel the minimum verbosity-level of log-messages can be set. | |
| void | setTag (const LogTag &tag) |
| void | setTag (const std::string &tagName) |
| virtual | ~Logging () |
Static Public Member Functions | |
| static float | distance (const ConfigType &from, const ConfigType &to) |
| Calculates the euclidian distance between from and to. | |
Static Public Member Functions inherited from ManagedIceObject | |
| static std::string | generateSubObjectName (const std::string &superObjectName, const std::string &subObjectName) |
| Generates a unique name for a sub object from a general name and unique name. | |
| static std::string | GetObjectStateAsString (int state) |
Protected Member Functions | |
| void | addAndRewireConfig (const ConfigType &cfgReached, const NodeId &nodeNearestId) |
| Adds a configuration to the tree. | |
| void | applyPendingUpdates () |
| Applies all pending updates to the tree. | |
| void | doBatch () |
| Executes a batch. | |
| void | doBatchIteration () |
| Executes one iteration of a batch. | |
| void | findBestParent (const NodeId &nodeNearestId, const ConfigType &cfgReached, NodeId &outNodeBestId, float &outCostReachedToNodeBest, std::vector< std::pair< NodeId, float > > &outKNearestIdsAndDistances, std::map< NodeId, bool > &outIsCollisionFreeCache) |
| Searches the optimal parent for a configuration. | |
| std::size_t | getDimensionality () |
| std::size_t | getK () |
| Update | getRemoteUpdate (Ice::Long workerNodeId, Ice::Long updateSubId) |
| void | initTree () |
| initializes the tree by getting the current tree from the manager | |
| bool | isCollisionFree (const ConfigType &cfg) |
| bool | isPathCollisionFree (const ConfigType &from, const ConfigType &to) |
| void | rewire (const NodeId &nodeId, const std::vector< std::pair< NodeId, float > > &kNearestIdsAndDistances, const std::map< NodeId, bool > &isCollisionFreeCache) |
| The rewire operation of the rrt* algorithm. | |
| ConfigType | steer (const ConfigType &from, const ConfigType &to) |
| Does a linear interpolation from from to to and checks the path per DCD. | |
| WorkerNode ()=default | |
| Only used when transmitting through ice. | |
| void | workerTask () |
| The worker task. | |
Protected Member Functions inherited from ManagedIceObject | |
| template<class PluginT, class... ParamsT> | |
| PluginT * | addPlugin (const std::string prefix="", ParamsT &&... params) |
| template<class PluginT, class... ParamsT> | |
| void | addPlugin (PluginT *&targ, const std::string prefix="", ParamsT &&... params) |
| template<class PluginT, class... ParamsT> | |
| void | addPlugin (std::experimental::observer_ptr< PluginT > &targ, const std::string prefix="", ParamsT &&... params) |
| Ice::CommunicatorPtr | getCommunicator () const |
| std::unique_ptr< ManagedIceObjectPlugin > & | getPluginPointer (std::type_info const &type, std::string const &prefix) |
| ManagedIceObject () | |
| Protected default constructor. | |
| virtual void | postOnConnectComponent () |
| virtual void | postOnDisconnectComponent () |
| virtual void | postOnExitComponent () |
| virtual void | postOnInitComponent () |
| virtual void | preOnConnectComponent () |
| virtual void | preOnDisconnectComponent () |
| virtual void | preOnExitComponent () |
| virtual void | preOnInitComponent () |
| bool | removeProxyDependency (const std::string &name) |
| This function removes the dependency of this object on the in parameter name specified object. | |
| void | setName (std::string name) |
| Override name of well-known object. | |
| void | terminate () |
| Initiates termination of this IceManagedObject. | |
| ~ManagedIceObject () override | |
Protected Member Functions inherited from Logging | |
| bool | checkLogLevel (MessageTypeT level) const |
| const LogSenderPtr & | getLogSender () const |
| Retrieve log sender. | |
| LogSenderPtr | loghelper (const char *file, int line, const char *function) const |
Protected Attributes | |
| TreeUpdateInterfacePrx | globalWorkers |
| Proxy used to write to the update topic. | |
| std::atomic_bool | killRequest |
| Wheether the node should shut down. | |
| std::size_t | onePastLastGoalConnect |
| The index one past the last node that was considered to be connected to the goal configuration. | |
| std::unique_ptr< InformedSampler > | sampler |
| Stores the sampler. | |
| Tree | tree |
| The RRT tree. | |
| std::mutex | updateMutex |
| Mutex protecting the update structures. | |
| std::string | updateTopicName |
| The update topic's name. | |
| std::string | workerIdSring |
| A string representation of the worker id. | |
| std::atomic_bool | workerPaused |
| workerPaused is true if the worker is currently on hold and does not perform any calculations. | |
| std::thread | workerThread |
| Thread executing the worker task. | |
Protected Attributes inherited from Logging | |
| MessageTypeT | minimumLoggingLevel |
| SpamFilterDataPtr | spamFilter |
| LogTag | tag |
Friends | |
| class | GenericFactory< WorkerNodeBase, WorkerNode > |
| class | ManagedIceObject |
| required for static factory methode create | |
Additional Inherited Members | |
Static Public Attributes inherited from ManagedIceObject | |
| static const ManagedIceObjectPtr | NullPtr |
| A nullptr to be used when a const ref to a nullptr is required. | |
Implements the worker side of the batch distributed adaptive dynamic domain informed rrt* planner.
This algorithm has two variants for selecting nodes for rewiring. (see doi> 10.1177/0278364911406761) One using k-Nearest-Neighbours with:
One using Nearest-Neighbours with a radius:
since μ(Xfree) can only be estimated the k-NN version is used.
Definition at line 75 of file WorkerNode.h.
| using ConfigType = Tree::ConfigType |
Type of a configuration.
Definition at line 81 of file WorkerNode.h.
|
inline |
ctor
| cspace | The palnning cspace. |
| startCfg | The start configuration. |
| goalCfg | The goal configuration. |
| DCDStepSize | The dcd step size. |
| addParams | The adaptive dynamic domain parameters. |
| manager | A proxy to the manager node. |
| workerId | The worker's id. |
| batchSize | The batch size. |
| nodeCountDeltaForGoalConnectionTries | Number of nodes created (by a worker) before a connect to the goal node is tried (by this worker). |
| topicPrefix | The used topic prefix. (for the topic name to distribute updates) |
| rotationMatrix | The rotation matrix for the informed ellipsoid. |
Definition at line 100 of file WorkerNode.h.
|
inlineoverride |
|
protecteddefault |
Only used when transmitting through ice.
|
protected |
Adds a configuration to the tree.
The configurations best parent is searched and rewiring is performed fot it.
| cfgReached | The configuration. |
| nodeNearestId | The nearest node's id. |
Definition at line 280 of file WorkerNode.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Applies all pending updates to the tree.
Definition at line 212 of file WorkerNode.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlinestatic |
Calculates the euclidian distance between from and to.
| from | First vector. |
| to | Second vector. |
Definition at line 218 of file WorkerNode.h.
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Executes a batch.
Definition at line 134 of file WorkerNode.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Executes one iteration of a batch.
Definition at line 225 of file WorkerNode.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Searches the optimal parent for a configuration.
Used by the rrt* component.
| nodeNearestId | The id of the nearest node. |
| cfgReached | The reached configuration. |
| outNodeBestId | Output parameter: The id of the optimal parent. |
| outCostReachedToNodeBest | Output parameter: The distance of reached and the optimal parent. |
| outKNearestIdsAndDistances | Output parameter: The k nearest nodes and their distance to reached. |
| outIsCollisionFreeCache | Output parameter: Cache storing collision checks for paths between nodes from knearest and reached. |
Definition at line 342 of file WorkerNode.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineoverridevirtual |
Implements ManagedIceObject.
Definition at line 166 of file WorkerNode.h.
|
inlineprotected |
Definition at line 280 of file WorkerNode.h.
Here is the caller graph for this function:
|
protected |
Definition at line 416 of file WorkerNode.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
| workerNodeId | The update's worker id. |
| updateSubId | The update's sub id. |
Definition at line 434 of file WorkerNode.cpp.
Here is the caller graph for this function:
|
override |
| updateId | The updates id. |
Definition at line 425 of file WorkerNode.cpp.
|
inlineoverride |
noop
Definition at line 207 of file WorkerNode.h.
|
inlineprotected |
initializes the tree by getting the current tree from the manager
Definition at line 249 of file WorkerNode.h.
Here is the caller graph for this function:
|
protected |
| cfg | The configuration. |
Definition at line 408 of file WorkerNode.cpp.
Here is the caller graph for this function:
|
protected |
| from | The start configuration. |
| to | The goal configuration. |
Definition at line 396 of file WorkerNode.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
|
inlineoverride |
Signals the worker thread to exit.
Definition at line 176 of file WorkerNode.h.
Here is the caller graph for this function:
|
overridevirtual |
Gets a proxy to the topic.
Implements ManagedIceObject.
Definition at line 56 of file WorkerNode.cpp.
Here is the call graph for this function:
|
inlineoverridevirtual |
|
overridevirtual |
Kills the worker thread (if it is still running) and joins it.
Reimplemented from ManagedIceObject.
Definition at line 62 of file WorkerNode.cpp.
Here is the call graph for this function:
|
overridevirtual |
Initializes the worker and starts the worker thread.
Implements ManagedIceObject.
Definition at line 38 of file WorkerNode.cpp.
Here is the call graph for this function:
|
inlineoverride |
Definition at line 182 of file WorkerNode.h.
|
protected |
The rewire operation of the rrt* algorithm.
It optimizes path lengths.
| nodeId | The root node's id |
| kNearestIdsAndDistances | The k nearest nodes and their distance to the root node. |
| isCollisionFreeCache | Cache storing collision checks for paths between nodes from knearest and the root node.. |
Definition at line 306 of file WorkerNode.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
|
protected |
Does a linear interpolation from from to to and checks the path per DCD.
| from | starting point for the interpolation. (assumed to be collision free) |
| to | end point for the interpolation. |
Definition at line 386 of file WorkerNode.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
|
override |
Receives an update from other workers and adds it to the queue of pending updates.
| u | the update. |
Definition at line 70 of file WorkerNode.cpp.
|
protected |
The worker task.
It performs all planning.
Definition at line 77 of file WorkerNode.cpp.
Here is the call graph for this function:
Here is the caller graph for this function:
|
friend |
Definition at line 218 of file WorkerNode.h.
|
friend |
required for static factory methode create
Definition at line 346 of file WorkerNode.h.
|
protected |
Proxy used to write to the update topic.
Definition at line 322 of file WorkerNode.h.
|
protected |
Wheether the node should shut down.
Definition at line 298 of file WorkerNode.h.
|
protected |
The index one past the last node that was considered to be connected to the goal configuration.
Definition at line 332 of file WorkerNode.h.
|
protected |
Stores the sampler.
A pointer is used, since the sampler ctor requires space information and in case of default construction the information is not available. (the default ctor is used when transmitting this object per ice.) The pointer gets set during construction or post unmarshalling.
Definition at line 341 of file WorkerNode.h.
|
protected |
The RRT tree.
Definition at line 293 of file WorkerNode.h.
|
mutableprotected |
Mutex protecting the update structures.
Definition at line 308 of file WorkerNode.h.
|
protected |
The update topic's name.
Definition at line 318 of file WorkerNode.h.
|
protected |
A string representation of the worker id.
Used for output.
Definition at line 327 of file WorkerNode.h.
|
protected |
workerPaused is true if the worker is currently on hold and does not perform any calculations.
Definition at line 303 of file WorkerNode.h.
|
protected |
Thread executing the worker task.
Definition at line 313 of file WorkerNode.h.