MotionPlanningServer.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2011-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5  *
6  * ArmarX is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * ArmarX is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * @package RobotComponents
19  * @author Raphael Grimm ( raphael dot grimm at kit dot edu )
20  * @date 2015
21  * @copyright http://www.gnu.org/licenses/gpl.txt
22  * GNU General Public License
23  */
24 #include <algorithm>
25 
26 #include <Ice/ObjectAdapter.h>
27 
28 #include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h>
29 
34 #include <MemoryX/interface/components/PriorKnowledgeInterface.h>
36 
37 #include "MotionPlanningServer.h"
38 #include "util/PlanningUtil.h"
39 
40 namespace armarx
41 {
42 
44  {
45  setTag("Server");
46 
47  const std::string remNames = getProperty<std::string>("RemoteObjectNodes").getValue();
48  startLocalNode = getProperty<bool>("LocalRONStart").getValue();
49  localNodePercent = getProperty<float>("LocalRONCorePerc").getValue();
50  remoteObjectNodeNames = Split(remNames, ";,");
51  //del empty names
52  remoteObjectNodeNames.resize(
54  remoteObjectNodeNames.begin(),
55  std::remove_if(remoteObjectNodeNames.begin(), remoteObjectNodeNames.end(), [](const std::string & s)
56  {
57  return s == "";
58  })
59  )
60  );
61 
62  for (const auto& name : remoteObjectNodeNames)
63  {
64  ARMARX_VERBOSE_S << "Using RemoteObjectNode with name: " << name;
65  usingProxy(name);
66  }
67 
68 
69  //start dispatcher
70  dispatcherThread = std::thread {[this]{this->dispatcherTask();}};
71  }
72 
74  {
75  remoteObjectNodes.clear();
76 
77  for (const auto& name : remoteObjectNodeNames)
78  {
79  remoteObjectNodes.emplace_back(getProxy<armarx::RemoteObjectNodeInterfacePrx>(name));
80  }
81 
82  if (remoteObjectNodeNames.empty())
83  {
84  if (startLocalNode)
85  {
86  localNode = Component::create<RemoteObjectNode>(getIceProperties(), generateSubObjectName("RemoteObjectNode"));
87  localNode->setCoreCount(localNodePercent * localNode->getDefaultCoreCount());
88  //registration is required since a proxy is required
89  getArmarXManager()->addObject(localNode);
90  remoteObjectNodes.emplace_back(RemoteObjectNodeInterfacePrx::uncheckedCast(localNode->getProxy(-1)));
91  }
92  else
93  {
94  ARMARX_WARNING_S << "Starting motion planning server without any remote object nodes! (some algorithms may still work)";
95  }
96  }
97  auto wm = getProxy<memoryx::WorkingMemoryInterfacePrx>("WorkingMemory", false, "", false);
98  auto cs = getProxy<memoryx::CommonStorageInterfacePrx>("CommonStorage", false, "", false);
99  auto rsc = getProxy<RobotStateComponentInterfacePrx>("RobotStateComponent", false, "", false);
100  if (wm && cs & rsc)
101  {
103  }
104  }
105 
107  {
108  //request kill on dispatcher
109  dispatcherKillRequest = true;
110  {
111  //start aborting current task since this could take a while
112  std::lock_guard<std::recursive_mutex> lock {queueMutex};
113 
114  //abort all queued tasks
115  for (auto taskId : taskQueue)
116  {
117  tasks.at(taskId).task->abortTask();
118  }
119  taskQueue.clear();
120 
121  for (auto& task : tasks)
122  {
123  task.second.rh->forceDeletion();
124  }
125 
126  tasks.clear();
127  }
128  //join dispatcher
129  waitForTaskOrDispatcherKill.notify_all();
131  dispatcherThread.join();
132  ARMARX_VERBOSE_S << "joined dispatcher";
133  //del local node
134  if (localNode)
135  {
136  getArmarXManager()->removeObjectNonBlocking(localNode);
137  }
138  }
139 
141  {
142  decltype(remoteObjectNodes) ronCache;
143  while (true)
144  {
146  {
147  break;
148  }
149 
150  //the task may be deleted concurrently from the map
151  //keep the smartpointer to ensure the task handle to stay alive until we are done with it
152  TaskAndRemoteHandle handle;
153  decltype(taskQueue)::value_type taskId; //simple to change taskids later
154  {
155  std::unique_lock<std::recursive_mutex> lock {queueMutex};
156 
157  if (taskQueue.empty())
158  {
159  //no task pending. so wait for a signal
160  waitForTaskOrDispatcherKill.wait(lock);
161  //could be woken up by kill request, rando wakeup or a new task=> redo checks
162  //since we perform a special action on dispatcherKillRequest we cant use a predicate
163  continue;
164  }
165 
166  //there is a task to perform
167  //we have to save the id since deleteTaskById deletes the id from the queue
168  taskId = *taskQueue.begin();
169  handle = tasks.at(taskId);
170  }
171  //if disconnect+connect is called the vector may change. to remove the requirement of sync: copy
172  ronCache = remoteObjectNodes;
173 
174  //what every task prints:
175 #define task_info "TASK FAILED!"\
176  << "\n\tname: " << handle.task->getTaskName()\
177  << "\n\tID: " << taskId\
178  << "\n\tice id = " << handle.task->ice_id()\
179  << "\n\tstatus " << TaskStatus::toString(handle.task->getTaskStatus())
180 
181  try
182  {
184  currentTask.rh = handle.rh;
185  currentTask.task = handle.task;
186  auto start = IceUtil::Time::now();
187  MotionPlanningTaskPtr t = handle.task;
188  while (t)
189  {
190  auto tp = t.get();
191  t->addTaskStatusCallback([tp, start, this](TaskStatus::Status s)
192  {
193  if (s == TaskStatus::eRefining)
194  {
195  auto duration = IceUtil::Time::now() - start;
196  tp->planningTime = duration.toMicroSeconds();
197  }
199  {
200  auto duration = IceUtil::Time::now() - start;
201  if (tp->planningTime > 0)
202  {
203  tp->refiningTime = duration.toMicroSeconds() - tp->planningTime;
204  }
205  else
206  {
207  tp->planningTime = duration.toMicroSeconds();
208  }
209  ARMARX_VERBOSE << tp->getTaskName() << ": Planning time: " << tp->planningTime * 0.001f << " ms, " << tp->refiningTime * 0.001f << " ms";
210  }
211  });
212  PostprocessingMotionPlanningTaskPtr tmp = PostprocessingMotionPlanningTaskPtr::dynamicCast(t);
213  if (tmp)
214  {
215  t = MotionPlanningTaskPtr::dynamicCast(tmp->previousStep);
216  }
217  else
218  {
219  t = nullptr;
220  }
221  }
222  handle.task->run(ronCache);
223  }
224  catch (Ice::Exception& e)
225  {
227  << "\n\tWHAT:\n" << e.what()
228  << "\n\tSTACK:\n" << e.ice_stackTrace();
229  handle.task->setTaskStatus(TaskStatus::eException);
230  }
231  catch (std::exception& e)
232  {
234  << "\n\tWHAT:\n" << e.what();
235  handle.task->setTaskStatus(TaskStatus::eException);
236  }
237  catch (...)
238  {
240  << "\n\tsomething not derived from std::exception was thrown";
241  handle.task->setTaskStatus(TaskStatus::eException);
242  }
243  currentTask.rh = nullptr;
244  currentTask.task = nullptr;
245 #undef task_info
246  //task done dequeue it
247  {
248  std::lock_guard<std::recursive_mutex> lock {queueMutex};
249  taskQueue.erase(taskId);
250  }
251  //loop to wait for next task or kill
252  }
253  ARMARX_DEBUG << "dispatcher task exit";
254  }
255 
257  {
258  std::lock_guard<std::recursive_mutex> lock {queueMutex};
259  auto it = tasks.find(id);
260 
261  if (it == tasks.end())
262  {
263  ARMARX_VERBOSE_S << "no task with id " << id << " to delete";
264  return false;
265  }
266 
267  //request task kill
268  it->second.task->abortTask();
269 
270  //don't remove it from the adapter yet. the proxy may be required to pass data to the task object.
271  //the task will remove it self from the adapter;
272 
273  taskQueue.erase(id);
274  tasks.erase(it);
275  return true;
276  }
277 
278  armarx::ClientSideRemoteHandleControlBlockBasePtr MotionPlanningServer::enqueueTask(const MotionPlanningTaskBasePtr& task, const Ice::Current&)
279  {
281  {
282  throw armarx::ServerShuttingDown {"MotionPlanningServerComponent"};
283  }
284 
285  MotionPlanningTaskPtr planningTask = MotionPlanningTaskPtr::dynamicCast(task);
286  ARMARX_CHECK_EXPRESSION(planningTask);
287  //register the task and add the data to unregister the task
288  auto adapter = getArmarXManager()->getAdapter();
289 
290  auto id = getNewTaskId();
291 
292  Ice::Identity ident;
293  ident.name = generateSubObjectName(task->getTaskName() + "_ID_" + to_string(id));
294  planningTask->registerAtIceAdapter(adapter, ident);
295 
296  //add the task
297 
298  auto remoteHandleHandles = armarx::RemoteHandleControlBlock::create(
300  MotionPlanningTaskControlInterfacePrx::uncheckedCast(planningTask->getProxy()),
301  [id, this, adapter, ident]
302  {
303  adapter->remove(ident);
304  //del from server
305  deleteTaskById(id);
306  }
307  );
308 
309  {
310  std::lock_guard<std::recursive_mutex> lock {queueMutex};
311  ARMARX_CHECK_EXPRESSION(planningTask);
313  {
314  remoteHandleHandles.directHandle,
315  planningTask
316  };
317  taskQueue.insert(id);
318  planningTask->postEnqueueing();
319  }
320  //wake up dispatcher
321  //holding the mutex a cv is holding on is inefficient since it may cause additional thread switches
322  waitForTaskOrDispatcherKill.notify_all();
323  return remoteHandleHandles.clientSideRemoteHandleControlBlock;
324  }
325 
327  {
328  std::lock_guard<std::recursive_mutex> lock {queueMutex};
329  return tasks.size();
330  }
331 
333  {
334  std::lock_guard<std::recursive_mutex> lock {queueMutex};
335  return taskQueue.size();
336  }
337 
338  TaskInfoSeq MotionPlanningServer::getAllTaskInfo(const Ice::Current&) const
339  {
340  std::lock_guard<std::recursive_mutex> lock {queueMutex};
341  TaskInfoSeq result;
342  result.reserve(tasks.size());
343  transform(
344  tasks.begin(), tasks.end(), std::back_inserter(result),
345  [](const decltype(tasks)::value_type & v)
346  {
347  const TaskAndRemoteHandle& rhs = v.second;
348  //ident, status, iceType
349  return TaskInfo
350  {
351  v.first,
352  rhs.rh->getManagedObjectProxy()->ice_getIdentity(),
353  rhs.task->getTaskStatus(),
354  rhs.task->ice_id(),
355  rhs.task->getTaskName()
356  };
357  });
358  return result;
359  }
360 
361  ClientSideRemoteHandleControlBlockBasePtr MotionPlanningServer::getCurrentTaskHandle(const Ice::Current&)
362  {
363  ClientSideRemoteHandleControlBlockBasePtr remoteHandle;
364  if (currentTask.rh)
365  {
366  remoteHandle = currentTask.rh->getClientSideRemoteHandleControlBlock();
367  }
368  return remoteHandle;
369  }
370 
371  CSpaceAndPaths MotionPlanningServer::getTaskCSpaceAndPathsById(Ice::Long id, const Ice::Current&)
372  {
373  CSpaceAndPaths result;
374  std::lock_guard<std::recursive_mutex> lock {queueMutex};
375  auto it = tasks.find(id);
376  if (it != tasks.end())
377  {
378  auto task = MotionPlanningTaskBasePtr::dynamicCast(it->second.task);
379 
380  result.cspace = task ? task->getCSpace()->clone() : nullptr;
381  auto multPathTask = MotionPlanningMultiPathTaskControlInterfacePtr::dynamicCast(task);
382  if (multPathTask)
383  {
384  result.paths = multPathTask->getAllPaths();
385  }
386  else
387  {
388  result.paths.emplace_back(it->second.task->getPath());
389  }
390  }
391  else
392  {
393  ARMARX_WARNING_S << "no task with id " << id << " on the server " << getName();
394  }
395  return result;
396  }
397 
398 
399  bool MotionPlanningServer::loadLibFromAbsolutePath(const std::string& path)
400  {
401  if (loadedLibs.count(path) > 0)
402  {
403  return true;
404  }
405  DynamicLibraryPtr lib(new DynamicLibrary());
406  try
407  {
408  lib->load(path);
409  }
410  catch (...)
411  {
413  return false;
414  }
415 
416  if (lib->isLibraryLoaded())
417  {
418  loadedLibs[path] = lib;
419  }
420  else
421  {
422  ARMARX_ERROR << "Could not load lib " + path + ": " + lib->getErrorMessage();
423  return false;
424  }
425 
427  return true;
428  }
429 
430  bool MotionPlanningServer::loadLibFromPath(const std::string& path, const Ice::Current&)
431  {
432  std::string absPath;
433  if (ArmarXDataPath::getAbsolutePath(path, absPath))
434  {
435  return loadLibFromAbsolutePath(absPath);
436  }
437  else
438  {
439  ARMARX_ERROR << "Could not find library " + path;
440  return false;
441  }
442  }
443 
444  bool MotionPlanningServer::loadLibFromPackage(const std::string& package, const std::string& name, const Ice::Current&)
445  {
446  CMakePackageFinder finder(package);
447  if (!finder.packageFound())
448  {
449  ARMARX_ERROR << "Could not find package '" << package << "'";
450  return false;
451  }
452 
453  for (auto libDirPath : armarx::Split(finder.getLibraryPaths(), ";"))
454  {
455  std::filesystem::path fullPath = libDirPath;
456  fullPath /= "lib" + name + "." + DynamicLibrary::GetSharedLibraryFileExtension();
457  if (!std::filesystem::exists(fullPath))
458  {
459  fullPath = libDirPath;
460  fullPath /= name;
461  if (!std::filesystem::exists(fullPath))
462  {
463  continue;
464  }
465  }
466  if (loadLibFromAbsolutePath(fullPath.string()))
467  {
468  return true;
469  }
470  }
471  ARMARX_ERROR << "Could not find library " << name << " in package " << package;
472  return false;
473  }
474 }
task_info
#define task_info
armarx::MotionPlanningServer::dispatcherKillRequest
std::atomic_bool dispatcherKillRequest
Whether the dispatcher should shut down.
Definition: MotionPlanningServer.h:272
ARMARX_VERBOSE
#define ARMARX_VERBOSE
Definition: Logging.h:180
armarx::ManagedIceObject::getIceManager
IceManagerPtr getIceManager() const
Returns the IceManager.
Definition: ManagedIceObject.cpp:353
armarx::MotionPlanningServer::dispatcherThread
std::thread dispatcherThread
The dispatcher's thread.
Definition: MotionPlanningServer.h:268
armarx::CMakePackageFinder::packageFound
bool packageFound() const
Returns whether or not this package was found with cmake.
Definition: CMakePackageFinder.cpp:485
armarx::DynamicLibraryPtr
std::shared_ptr< DynamicLibrary > DynamicLibraryPtr
Definition: DynamicLibrary.h:123
armarx::MotionPlanningServer::waitForTaskOrDispatcherKill
std::condition_variable_any waitForTaskOrDispatcherKill
The dispatcher's cv.
Definition: MotionPlanningServer.h:264
armarx::MotionPlanningServer::remoteObjectNodeNames
std::vector< std::string > remoteObjectNodeNames
The used remote object nodes' names.
Definition: MotionPlanningServer.h:205
ArmarXManager.h
DynamicLibrary.h
armarx::MotionPlanningServer::TaskAndRemoteHandle::rh
armarx::RemoteHandleControlBlockPtr rh
Definition: MotionPlanningServer.h:224
armarx::Split
std::vector< std::string > Split(const std::string &source, const std::string &splitBy, bool trimElements=false, bool removeEmptyElements=false)
Definition: StringHelperTemplates.h:35
armarx::ManagedIceObject::getArmarXManager
ArmarXManagerPtr getArmarXManager() const
Returns the ArmarX manager used to add and remove components.
Definition: ManagedIceObject.cpp:348
armarx::MotionPlanningServer::tasks
TaskMap tasks
The map of tasks.
Definition: MotionPlanningServer.h:235
armarx::MotionPlanningServer::onConnectComponent
void onConnectComponent() override
Connects to the used RemoteObjectNodes.
Definition: MotionPlanningServer.cpp:73
armarx::CMakePackageFinder
The CMakePackageFinder class provides an interface to the CMake Package finder capabilities.
Definition: CMakePackageFinder.h:53
armarx::MotionPlanningServer::currentTask
TaskAndRemoteHandle currentTask
currentTask stores a handle to the currently dispatched planning task.
Definition: MotionPlanningServer.h:240
armarx::MotionPlanningServer::getTaskCSpaceAndPathsById
CSpaceAndPaths getTaskCSpaceAndPathsById(Ice::Long id, const Ice::Current &=Ice::emptyCurrent) override
Returns a task's cspace and all found paths.
Definition: MotionPlanningServer.cpp:371
armarx::MotionPlanningServer::remoteObjectNodes
std::vector< armarx::RemoteObjectNodeInterfacePrx > remoteObjectNodes
The used remote object nodes.
Definition: MotionPlanningServer.h:209
armarx::CMakePackageFinder::getLibraryPaths
std::string getLibraryPaths() const
Returns the library paths seperated by semi-colons.
Definition: CMakePackageFinder.h:128
armarx::MotionPlanningServer::loadLibFromPackage
bool loadLibFromPackage(const std::string &package, const std::string &lib, const Ice::Current &=Ice::emptyCurrent) override
Definition: MotionPlanningServer.cpp:444
armarx::DynamicLibrary::GetSharedLibraryFileExtension
static std::string GetSharedLibraryFileExtension()
Definition: DynamicLibrary.cpp:157
armarx::MotionPlanningServer::onInitComponent
void onInitComponent() override
Initializes the server and starts the dispatcher thread.
Definition: MotionPlanningServer.cpp:43
MotionPlanningServer.h
IceInternal::Handle< MotionPlanningTask >
armarx::MotionPlanningServer::localNodePercent
float localNodePercent
Percentage of cores used by the local ron (if started).
Definition: MotionPlanningServer.h:218
armarx::MotionPlanningServer::onExitComponent
void onExitComponent() override
cleans up and joins the dispatcher
Definition: MotionPlanningServer.cpp:106
GfxTL::Identity
void Identity(MatrixXX< N, N, T > *a)
Definition: MatrixXX.h:523
armarx::MotionPlanningServer::getNumberOfQueuedTasks
Ice::Long getNumberOfQueuedTasks(const Ice::Current &) const override
Returns the number of queued tasks.
Definition: MotionPlanningServer.cpp:332
armarx::TaskStatus::finishedRunning
bool finishedRunning(Status status)
Returns whether the given task status describes a state where planning is done (may be failed).
Definition: PlanningUtil.cpp:94
armarx::MotionPlanningServer::getAllTaskInfo
TaskInfoSeq getAllTaskInfo(const Ice::Current &=Ice::emptyCurrent) const override
Returns information about all tasks.
Definition: MotionPlanningServer.cpp:338
ARMARX_ERROR_S
#define ARMARX_ERROR_S
Definition: Logging.h:209
ARMARX_DEBUG
#define ARMARX_DEBUG
Definition: Logging.h:177
armarx::MotionPlanningServer::localNode
RemoteObjectNodePtr localNode
Definition: MotionPlanningServer.h:220
MotionPlanningTask.h
armarx::ManagedIceObject::generateSubObjectName
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.
Definition: ManagedIceObject.cpp:117
armarx::VariantType::Long
const VariantTypeId Long
Definition: Variant.h:917
armarx::SimoxCSpace::PrefetchWorkingMemoryObjects
static SimoxCSpacePtr PrefetchWorkingMemoryObjects(memoryx::WorkingMemoryInterfacePrx workingMemoryPrx, memoryx::CommonStorageInterfacePrx commonStoragePrx, RobotStateComponentInterfacePrx rsc)
Load objects from WorkingMemory and puts them into the mesh cache.
Definition: SimoxCSpace.cpp:673
ARMARX_ERROR
#define ARMARX_ERROR
Definition: Logging.h:189
armarx::MotionPlanningServer::enqueueTask
armarx::ClientSideRemoteHandleControlBlockBasePtr enqueueTask(const MotionPlanningTaskBasePtr &task, const Ice::Current &=Ice::emptyCurrent) override
Enqueues a task.
Definition: MotionPlanningServer.cpp:278
ARMARX_WARNING_S
#define ARMARX_WARNING_S
Definition: Logging.h:206
armarx::to_string
const std::string & to_string(const std::string &s)
Definition: StringHelpers.h:40
armarx::MotionPlanningServer::getCurrentTaskHandle
ClientSideRemoteHandleControlBlockBasePtr getCurrentTaskHandle(const Ice::Current &) override
Definition: MotionPlanningServer.cpp:361
armarx::MotionPlanningServer::startLocalNode
bool startLocalNode
Whether a local node should be started, if no rons were provided.
Definition: MotionPlanningServer.h:214
CMakePackageFinder.h
armarx::MotionPlanningServer::taskQueue
std::set< Ice::Long > taskQueue
Contains the queue of task ids to execute.
Definition: MotionPlanningServer.h:249
CoreObjectFactories.h
armarx::MotionPlanningServer::loadedLibs
std::map< std::string, DynamicLibraryPtr > loadedLibs
Definition: MotionPlanningServer.h:274
armarx::MotionPlanningServer::loadLibFromPath
bool loadLibFromPath(const std::string &path, const Ice::Current &=Ice::emptyCurrent) override
Definition: MotionPlanningServer.cpp:430
armarx::MotionPlanningServer::TaskAndRemoteHandle::task
MotionPlanningTaskPtr task
Definition: MotionPlanningServer.h:225
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
ARMARX_CHECK_EXPRESSION
#define ARMARX_CHECK_EXPRESSION(expression)
This macro evaluates the expression and if it turns out to be false it will throw an ExpressionExcept...
Definition: ExpressionException.h:73
armarx::MotionPlanningServer::getNumberOfTasks
Ice::Long getNumberOfTasks(const Ice::Current &=Ice::emptyCurrent) const override
Returns the number of tasks.
Definition: MotionPlanningServer.cpp:326
armarx::MotionPlanningServer::getNewTaskId
Ice::Long getNewTaskId()
Returns a new task id.
Definition: MotionPlanningServer.h:197
armarx::transform
auto transform(const Container< InputT, Alloc > &in, OutputT(*func)(InputT const &)) -> Container< OutputT, typename std::allocator_traits< Alloc >::template rebind_alloc< OutputT > >
Convenience function (with less typing) to transform a container of type InputT into the same contain...
Definition: algorithm.h:315
armarx::MotionPlanningServer::TaskAndRemoteHandle
Definition: MotionPlanningServer.h:222
armarx::MotionPlanningServer::dispatcherTask
void dispatcherTask()
the dispatcher task.
Definition: MotionPlanningServer.cpp:140
ARMARX_VERBOSE_S
#define ARMARX_VERBOSE_S
Definition: Logging.h:200
distance
double distance(const Point &a, const Point &b)
Definition: point.hpp:88
armarx::ManagedIceObject::getName
std::string getName() const
Retrieve name of object.
Definition: ManagedIceObject.cpp:107
armarx::MotionPlanningServer::cacheCSpace
SimoxCSpacePtr cacheCSpace
Definition: MotionPlanningServer.h:276
armarx::MotionPlanningServer::queueMutex
std::recursive_mutex queueMutex
mutex protecting the task queue
Definition: MotionPlanningServer.h:254
armarx::ArmarXDataPath::getAbsolutePath
static bool getAbsolutePath(const std::string &relativeFilename, std::string &storeAbsoluteFilename, const std::vector< std::string > &additionalSearchPaths={}, bool verbose=true)
Definition: ArmarXDataPath.cpp:111
armarx::PropertyUser::getIceProperties
Ice::PropertiesPtr getIceProperties() const
Returns the set of Ice properties.
Definition: PropertyUser.cpp:229
armarx::Logging::setTag
void setTag(const LogTag &tag)
Definition: Logging.cpp:55
armarx::handleExceptions
void handleExceptions()
Definition: Exception.cpp:141
armarx::ManagedIceObject::getCommunicator
Ice::CommunicatorPtr getCommunicator() const
Definition: ManagedIceObject.cpp:431
PlanningUtil.h
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::RemoteHandleControlBlock::create
static ManagementData create(ArmarXManagerPtr manager, Ice::ObjectPrx managedObjectPrx, Deleter deleter)
Creates a new RemoteHandleControlBlock.
Definition: RemoteHandleControlBlock.h:215
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::ArmarXManager::RegisterKnownObjectFactoriesWithIce
static void RegisterKnownObjectFactoriesWithIce(const Ice::CommunicatorPtr &ic)
Registers all object factories that are known with Ice.
Definition: ArmarXManager.cpp:1204
armarx::MotionPlanningServer::deleteTaskById
bool deleteTaskById(Ice::Long id)
Definition: MotionPlanningServer.cpp:256