RobotStateObserver.cpp
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 ArmarX::Core
17 * @author Stefan Ulbrich <stefan dot ulbrich at kit dot edu>, Kai Welke (welke _at_ kit _dot_ edu)
18 * @date 2011 Kai Welke
19 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20 * GNU General Public License
21 */
22 
23 #include "RobotStateObserver.h"
24 
25 #include <SimoxUtility/algorithm/string/string_tools.h>
26 #include <VirtualRobot/IK/DifferentialIK.h>
27 #include <VirtualRobot/Nodes/RobotNode.h>
28 #include <VirtualRobot/RobotConfig.h>
29 #include <VirtualRobot/RobotNodeSet.h>
30 #include <VirtualRobot/VirtualRobot.h>
31 
38 
39 #include <RobotAPI/interface/core/RobotState.h>
42 
43 #define TCP_POSE_CHANNEL "TCPPose"
44 #define TCP_TRANS_VELOCITIES_CHANNEL "TCPVelocities"
45 
46 
47 using namespace armarx;
48 using namespace VirtualRobot;
49 
50 // ********************************************************************
51 // observer framework hooks
52 // ********************************************************************
54 {
55 }
56 
57 void
59 {
60 
61  // register all checks
62  offerConditionCheck("equals", new ConditionCheckEquals());
63  offerConditionCheck("inrange", new ConditionCheckInRange());
64  offerConditionCheck("larger", new ConditionCheckLarger());
65  offerConditionCheck("smaller", new ConditionCheckSmaller());
66 }
67 
68 void
70 {
71 
72 
73  offerChannel(TCP_POSE_CHANNEL, "TCP poses of the robot.");
74  offerChannel(TCP_TRANS_VELOCITIES_CHANNEL, "TCP velocities of the robot.");
75 }
76 
77 // ********************************************************************
78 // private methods
79 // ********************************************************************
80 
81 
82 void
84 {
85  if (getState() < eManagedIceObjectStarting)
86  {
87  return;
88  }
89 
90  if (!robot)
91  {
92  return;
93  }
94 
95  std::unique_lock lock(dataMutex);
96  ReadLockPtr lock2 = robot->getReadLock();
97  FramedPoseBaseMap tcpPoses;
98  std::string rootFrame = robot->getRootNode()->getName();
99 
100  //IceUtil::Time start = IceUtil::Time::now();
101  for (unsigned int i = 0; i < nodesToReport.size(); i++)
102  {
103  VirtualRobot::RobotNodePtr& node = nodesToReport.at(i).first;
104  const std::string& tcpName = node->getName();
105  const Eigen::Matrix4f& currentPose = node->getPoseInRootFrame();
106  tcpPoses[tcpName] = new FramedPose(currentPose, rootFrame, robot->getName());
107  FramedPosePtr::dynamicCast(tcpPoses[tcpName])
108  ->changeFrame(robot, nodesToReport.at(i).second);
109  }
110 
111  udpatePoseDatafields(tcpPoses);
112 }
113 
114 void
116 {
117  // ARMARX_INFO << deactivateSpam() << "new tcp poses reported";
118  FramedPoseBaseMap::const_iterator it = poseMap.begin();
119 
120  for (; it != poseMap.end(); it++)
121  {
122 
123  FramedPosePtr vec = FramedPosePtr::dynamicCast(it->second);
124  const std::string& tcpName = it->first;
125 
126  if (!existsDataField(TCP_POSE_CHANNEL, tcpName))
127  {
128  offerDataFieldWithDefault(
129  TCP_POSE_CHANNEL, tcpName, Variant(it->second), "Pose of " + tcpName);
130  }
131  else
132  {
133  setDataField(TCP_POSE_CHANNEL, tcpName, Variant(it->second));
134  }
135 
136  updateChannel(TCP_POSE_CHANNEL);
137 
138  if (!existsChannel(tcpName))
139  {
140  offerChannel(tcpName, "pose components of " + tcpName);
141  offerDataFieldWithDefault(tcpName, "x", Variant(vec->position->x), "X axis");
142  offerDataFieldWithDefault(tcpName, "y", Variant(vec->position->y), "Y axis");
143  offerDataFieldWithDefault(tcpName, "z", Variant(vec->position->z), "Z axis");
144  offerDataFieldWithDefault(
145  tcpName, "qx", Variant(vec->orientation->qx), "Quaternion part x");
146  offerDataFieldWithDefault(
147  tcpName, "qy", Variant(vec->orientation->qy), "Quaternion part y");
148  offerDataFieldWithDefault(
149  tcpName, "qz", Variant(vec->orientation->qz), "Quaternion part z");
150  offerDataFieldWithDefault(
151  tcpName, "qw", Variant(vec->orientation->qw), "Quaternion part w");
152  offerDataFieldWithDefault(tcpName, "frame", Variant(vec->frame), "Reference Frame");
153  }
154  else
155  {
156  StringVariantBaseMap newValues;
157  newValues["x"] = new Variant(vec->position->x);
158  newValues["y"] = new Variant(vec->position->y);
159  newValues["z"] = new Variant(vec->position->z);
160  newValues["qx"] = new Variant(vec->orientation->qx);
161  newValues["qy"] = new Variant(vec->orientation->qy);
162  newValues["qz"] = new Variant(vec->orientation->qz);
163  newValues["qw"] = new Variant(vec->orientation->qw);
164  newValues["frame"] = new Variant(vec->frame);
165  setDataFieldsFlatCopy(tcpName, newValues);
166  }
167 
168  updateChannel(tcpName);
169  }
170 }
171 
172 void
174  const AMD_RobotStateObserverInterface_getPoseDatafieldPtr& amd,
175  const std::string& nodeName,
176  const Ice::Current&) const
177 {
178  addWorkerJob("RobotStateObserver::getPoseDatafield",
179  [this, amd, nodeName]
180  { return getDatafieldRefByName(TCP_POSE_CHANNEL, nodeName); });
181 }
182 
183 void
184 RobotStateObserver::updateNodeVelocities(const NameValueMap& jointVel, long timestampMicroSeconds)
185 {
186  if (jointVel.empty())
187  {
188  return;
189  }
190  if (getState() < eManagedIceObjectStarting)
191  {
192  return;
193  }
194 
195  std::unique_lock lock(dataMutex);
196 
197  if (!robot)
198  {
199  return;
200  }
201 
202  ReadLockPtr lock2 = robot->getReadLock();
203 
204  if (!velocityReportRobot)
205  {
206  velocityReportRobot = robot->clone(robot->getName());
207  }
208 
209  // IceUtil::Time start = IceUtil::Time::now();
210  // ARMARX_INFO << jointVel; FramedPoseBaseMap tcpPoses;
211  FramedDirectionMap tcpTranslationVelocities;
212  FramedDirectionMap tcpOrientationVelocities;
213  std::string rootFrame = robot->getRootNode()->getName();
214  NameValueMap tempJointAngles = robot->getConfig()->getRobotNodeJointValueMap();
215  FramedPoseBaseMap tcpPoses;
216 
217  for (unsigned int i = 0; i < nodesToReport.size(); i++)
218  {
219  RobotNodePtr node = nodesToReport.at(i).first;
220  const std::string& tcpName = node->getName();
221  const Eigen::Matrix4f& currentPose =
222  velocityReportRobot->getRobotNode(tcpName)->getGlobalPose();
223  tcpPoses[tcpName] = new FramedPose(currentPose, GlobalFrame, "");
224  }
225 
226 
227  velocityReportRobot->setJointValues(tempJointAngles);
228  velocityReportRobot->setGlobalPose(robot->getGlobalPose());
229 
230  Eigen::Matrix4f mat;
231  Eigen::Vector3f rpy;
232 
233  auto keys = armarx::getMapKeys(jointVel);
234  Eigen::VectorXf jointVelocities(jointVel.size());
235  auto rootFrameName = velocityReportRobot->getRootNode()->getName();
236  RobotNodeSetPtr rns =
237  RobotNodeSet::createRobotNodeSet(velocityReportRobot, "All_Nodes", keys, rootFrameName);
238  for (size_t i = 0; i < rns->getSize(); ++i)
239  {
240  jointVelocities(i) = jointVel.at(rns->getNode(i)->getName());
241  }
242  DifferentialIKPtr j(new DifferentialIK(rns));
243 
244 
245  auto robotName = velocityReportRobot->getName();
246  for (unsigned int i = 0; i < nodesToReport.size(); i++)
247  {
248  RobotNodePtr node = velocityReportRobot->getRobotNode(nodesToReport.at(i).first->getName());
249  Eigen::MatrixXf jac = j->getJacobianMatrix(node, IKSolver::All);
250  Eigen::VectorXf nodeVel = jac * jointVelocities;
251 
252  const std::string tcpName = node->getName();
253  tcpTranslationVelocities[tcpName] =
254  new FramedDirection(nodeVel.block<3, 1>(0, 0), rootFrameName, robotName);
255  tcpOrientationVelocities[tcpName] =
256  new FramedDirection(nodeVel.block<3, 1>(3, 0), rootFrameName, robotName);
257  }
258  updateVelocityDatafields(tcpTranslationVelocities, tcpOrientationVelocities);
259 }
260 
261 void
262 RobotStateObserver::updateVelocityDatafields(const FramedDirectionMap& tcpTranslationVelocities,
263  const FramedDirectionMap& tcpOrientationVelocities)
264 {
265  FramedDirectionMap::const_iterator it = tcpTranslationVelocities.begin();
266 
267  for (; it != tcpTranslationVelocities.end(); it++)
268  {
269 
270  FramedDirectionPtr vec = FramedDirectionPtr::dynamicCast(it->second);
271  FramedDirectionPtr vecOri;
272  FramedDirectionMap::const_iterator itOri = tcpOrientationVelocities.find(it->first);
273 
274  if (itOri != tcpOrientationVelocities.end())
275  {
276  vecOri = FramedDirectionPtr::dynamicCast(itOri->second);
277  }
278 
279  const std::string& tcpName = it->first;
280 
281  ARMARX_CHECK_EXPRESSION(vec->frame == vecOri->frame);
282 
283  if (!existsDataField(TCP_TRANS_VELOCITIES_CHANNEL, tcpName))
284  {
285  offerDataFieldWithDefault(
286  TCP_TRANS_VELOCITIES_CHANNEL, tcpName, Variant(it->second), "Pose of " + tcpName);
287  }
288  else
289  {
290  setDataField(TCP_TRANS_VELOCITIES_CHANNEL, tcpName, Variant(it->second));
291  }
292 
293  updateChannel(TCP_TRANS_VELOCITIES_CHANNEL);
294  const std::string channelName = tcpName + "Velocities";
295 
296  if (!existsChannel(channelName))
297  {
298  offerChannel(channelName, "pose components of " + tcpName);
299  offerDataFieldWithDefault(channelName, "x", Variant(vec->x), "X axis");
300  offerDataFieldWithDefault(channelName, "y", Variant(vec->y), "Y axis");
301  offerDataFieldWithDefault(channelName, "z", Variant(vec->z), "Z axis");
302  offerDataFieldWithDefault(channelName, "roll", Variant(vecOri->x), "Roll");
303  offerDataFieldWithDefault(channelName, "pitch", Variant(vecOri->y), "Pitch");
304  offerDataFieldWithDefault(channelName, "yaw", Variant(vecOri->z), "Yaw");
305  offerDataFieldWithDefault(
306  channelName, "frame", Variant(vecOri->frame), "Reference Frame");
307  }
308  else
309  {
310  StringVariantBaseMap newValues;
311  newValues["x"] = new Variant(vec->x);
312  newValues["y"] = new Variant(vec->y);
313  newValues["z"] = new Variant(vec->z);
314  newValues["roll"] = new Variant(vecOri->x);
315  newValues["pitch"] = new Variant(vecOri->y);
316  newValues["yaw"] = new Variant(vecOri->z);
317  newValues["frame"] = new Variant(vec->frame);
318  setDataFieldsFlatCopy(channelName, newValues);
319  }
320 
321  updateChannel(channelName);
322  }
323 }
324 
327 {
328  return PropertyDefinitionsPtr(new RobotStateObserverPropertyDefinitions(getConfigIdentifier()));
329 }
330 
331 void
333 {
334  std::unique_lock lock(dataMutex);
335  this->robot = robot;
336 
337  std::vector<VirtualRobot::RobotNodeSetPtr> robotNodes;
338  robotNodes = robot->getRobotNodeSets();
339 
340  std::string nodesetsString = getProperty<std::string>("TCPsToReport").getValue();
341  nodesToReport.clear();
342  // nodesToReport.push_back(std::make_pair(robot->getRootNode(), GlobalFrame));
343  if (!nodesetsString.empty())
344  {
345  if (nodesetsString == "*")
346  {
347  auto nodesets = robot->getRobotNodeSets();
348 
349  for (RobotNodeSetPtr& set : nodesets)
350  {
351  if (set->getTCP())
352  {
353  nodesToReport.push_back(
354  std::make_pair(set->getTCP(), robot->getRootNode()->getName()));
355  }
356  }
357  }
358  else
359  {
360  std::vector<std::string> nodesetNames = simox::alg::split(nodesetsString, ",");
361 
362  for (auto name : nodesetNames)
363  {
364  simox::alg::trim(name);
365  auto node = robot->getRobotNode(name);
366 
367  if (node)
368  {
369  nodesToReport.push_back(std::make_pair(node, robot->getRootNode()->getName()));
370  }
371  else
372  {
373  ARMARX_ERROR << "Could not find node with name: " << name;
374  }
375  }
376  }
377  }
378 }
armarx::Variant
The Variant class is described here: Variants.
Definition: Variant.h:223
RemoteRobot.h
algorithm.h
armarx::StringVariantBaseMap
std::map< std::string, VariantBasePtr > StringVariantBaseMap
Definition: ManagedIceObject.h:110
ConditionCheckEquals.h
armarx::VariantType::FramedPose
const VariantTypeId FramedPose
Definition: FramedPose.h:36
VirtualRobot
Definition: FramedPose.h:42
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
TCP_POSE_CHANNEL
#define TCP_POSE_CHANNEL
Definition: RobotStateObserver.cpp:43
ConditionCheckInRange.h
armarx::GlobalFrame
const std::string GlobalFrame
Definition: FramedPose.h:65
armarx::ConditionCheckSmaller
Definition: ConditionCheckSmaller.h:40
armarx::RobotStateObserver::updateNodeVelocities
void updateNodeVelocities(const NameValueMap &jointVel, long timestampMicroSeconds)
Definition: RobotStateObserver.cpp:184
armarx::FramedPoseBaseMap
::std::map<::std::string, ::armarx::FramedPoseBasePtr > FramedPoseBaseMap
Definition: RobotStateObserver.h:59
armarx::RobotStateObserver::createPropertyDefinitions
PropertyDefinitionsPtr createPropertyDefinitions() override
Definition: RobotStateObserver.cpp:326
IceInternal::Handle< FramedPose >
armarx::RobotStateObserver::getPoseDatafield_async
void getPoseDatafield_async(const AMD_RobotStateObserverInterface_getPoseDatafieldPtr &amd, const std::string &nodeName, const Ice::Current &) const override
Definition: RobotStateObserver.cpp:173
DatafieldRef.h
armarx::RobotStateObserver::updateVelocityDatafields
void updateVelocityDatafields(const FramedDirectionMap &tcpTranslationVelocities, const FramedDirectionMap &tcpOrientationVelocities)
Definition: RobotStateObserver.cpp:262
FramedPose.h
armarx::RobotStateObserver::onConnectObserver
void onConnectObserver() override
Framework hook.
Definition: RobotStateObserver.cpp:69
armarx::RobotStateObserver::updatePoses
void updatePoses()
Definition: RobotStateObserver.cpp:83
armarx::channels::KinematicUnitObserver::jointVelocities
const KinematicUnitDatafieldCreator jointVelocities("jointVelocities")
ARMARX_ERROR
#define ARMARX_ERROR
Definition: Logging.h:196
armarx::ConditionCheckInRange
Definition: ConditionCheckInRange.h:41
armarx::control::njoint_controller::platform::platform_follower_controller::NameValueMap
std::map< std::string, float > NameValueMap
Definition: PlatformFollowerController.h:88
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
TCP_TRANS_VELOCITIES_CHANNEL
#define TCP_TRANS_VELOCITIES_CHANNEL
Definition: RobotStateObserver.cpp:44
armarx::RobotStateObserver::udpatePoseDatafields
void udpatePoseDatafields(const FramedPoseBaseMap &poseMap)
Definition: RobotStateObserver.cpp:115
armarx::VariantType::FramedDirection
const VariantTypeId FramedDirection
Definition: FramedPose.h:37
ConditionCheckSmaller.h
armarx::RobotStateObserverPropertyDefinitions
RobotStatePropertyDefinition Property Definitions.
Definition: RobotStateObserver.h:45
set
set(LIBS ArmarXCoreInterfaces ${CMAKE_THREAD_LIBS_INIT} ${dl_LIBRARIES} ${rt_LIBRARIES} ${QT_LIBRARIES} ${Boost_LIBRARIES} BoostAssertionHandler ArmarXCPPUtility SimoxUtility) set(LIB_FILES ArmarXManager.cpp ArmarXMultipleObjectsScheduler.cpp ArmarXObjectScheduler.cpp ManagedIceObject.cpp ManagedIceObjectPlugin.cpp Component.cpp ComponentPlugin.cpp IceGridAdmin.cpp ArmarXObjectObserver.cpp IceManager.cpp PackagePath.cpp RemoteReferenceCount.cpp logging/LoggingUtil.cpp logging/Logging.cpp logging/LogSender.cpp logging/ArmarXLogBuf.cpp system/ArmarXDataPath.cpp system/DynamicLibrary.cpp system/ProcessWatcher.cpp system/FactoryCollectionBase.cpp system/cmake/CMakePackageFinder.cpp system/cmake/CMakePackageFinderCache.cpp system/cmake/ArmarXPackageToolInterface.cpp system/RemoteObjectNode.cpp services/sharedmemory/HardwareId.cpp services/tasks/RunningTask.cpp services/tasks/ThreadList.cpp services/tasks/ThreadPool.cpp services/profiler/Profiler.cpp services/profiler/FileLoggingStrategy.cpp services/profiler/IceLoggingStrategy.cpp application/Application.cpp application/ApplicationOptions.cpp application/ApplicationProcessFacet.cpp application/ApplicationNetworkStats.cpp application/properties/PropertyUser.cpp application/properties/Property.cpp application/properties/PropertyDefinition.cpp application/properties/PropertyDefinitionContainer.cpp application/properties/PropertyDefinitionHelpFormatter.cpp application/properties/PropertyDefinitionConfigFormatter.cpp application/properties/PropertyDefinitionBriefHelpFormatter.cpp application/properties/PropertyDefinitionXmlFormatter.cpp application/properties/PropertyDefinitionDoxygenFormatter.cpp application/properties/PropertyDefinitionDoxygenComponentPagesFormatter.cpp application/properties/PropertyDefinitionContainerBriefHelpFormatter.cpp application/properties/IceProperties.cpp exceptions/Exception.cpp exceptions/local/UnexpectedEnumValueException.cpp util/FileSystemPathBuilder.cpp util/StringHelpers.cpp util/IceReportSkipper.cpp util/Throttler.cpp util/distributed/AMDCallbackCollection.cpp util/distributed/RemoteHandle/ClientSideRemoteHandleControlBlock.cpp util/distributed/RemoteHandle/RemoteHandle.cpp util/distributed/RemoteHandle/RemoteHandleControlBlock.cpp time/ice_conversions.cpp time/json_conversions.cpp time/CallbackWaitLock.cpp time/Clock.cpp time/ClockType.cpp time/ClockTypeNames.cpp time/CycleUtil.cpp time/DateTime.cpp time/Duration.cpp time/Frequency.cpp time/LocalTimeServer.cpp time/Metronome.cpp time/ScopedStopWatch.cpp time/StopWatch.cpp time/Timer.cpp time/TimeKeeper.cpp time/TimeUtil.cpp csv/CsvWriter.cpp csv/CsvReader.cpp eigen/conversions.cpp eigen/ice_conversions.cpp) set(LIB_HEADERS ArmarXManager.h ArmarXDummyManager.h ArmarXMultipleObjectsScheduler.h ArmarXObjectObserver.h ArmarXObjectScheduler.h ArmarXFwd.h Component.h ComponentPlugin.h ComponentFactories.h CoreObjectFactories.h IceGridAdmin.h IceManager.h IceManagerImpl.h json_conversions.h ManagedIceObject.h ManagedIceObjectPlugin.h ManagedIceObjectImpl.h ManagedIceObjectDependency.h ManagedIceObjectRegistryInterface.h PackagePath.h RemoteReferenceCount.h system/ImportExport.h system/ImportExportComponent.h system/AbstractFactoryMethod.h system/FactoryCollectionBase.h system/Synchronization.h system/ArmarXDataPath.h system/DynamicLibrary.h system/ProcessWatcher.h system/ConditionSynchronization.h system/cmake/CMakePackageFinder.h system/cmake/CMakePackageFinderCache.h system/cmake/FindPackageX.cmake system/cmake/ArmarXPackageToolInterface.h system/RemoteObjectNode.h logging/LoggingUtil.h logging/LogSender.h logging/Logging.h logging/ArmarXLogBuf.h logging/SpamFilterData.h services/tasks/RunningTask.h services/tasks/PeriodicTask.h services/tasks/ThreadList.h services/tasks/TaskUtil.h services/tasks/ThreadPool.h services/sharedmemory/SharedMemoryProvider.h services/sharedmemory/SharedMemoryConsumer.h services/sharedmemory/IceSharedMemoryProvider.h services/sharedmemory/IceSharedMemoryConsumer.h services/sharedmemory/HardwareIdentifierProvider.h services/sharedmemory/HardwareId.h services/sharedmemory/exceptions/SharedMemoryExceptions.h services/profiler/Profiler.h services/profiler/LoggingStrategy.h services/profiler/FileLoggingStrategy.h services/profiler/IceLoggingStrategy.h application/Application.h application/ApplicationOptions.h application/ApplicationProcessFacet.h application/ApplicationNetworkStats.h application/properties/forward_declarations.h application/properties/Properties.h application/properties/Property.h application/properties/PluginEigen.h application/properties/PluginEnumNames.h application/properties/PluginCfgStruct.h application/properties/PluginAll.h application/properties/PropertyUser.h application/properties/PropertyDefinition.h application/properties/PropertyDefinition.hpp application/properties/PropertyDefinitionInterface.h application/properties/PropertyDefinitionContainer.h application/properties/PropertyDefinitionFormatter.h application/properties/PropertyDefinitionContainerFormatter.h application/properties/PropertyDefinitionConfigFormatter.h application/properties/PropertyDefinitionHelpFormatter.h application/properties/PropertyDefinitionBriefHelpFormatter.h application/properties/PropertyDefinitionXmlFormatter.h application/properties/PropertyDefinitionDoxygenFormatter.h application/properties/PropertyDefinitionDoxygenComponentPagesFormatter.h application/properties/PropertyDefinitionContainerBriefHelpFormatter.h application/properties/ProxyPropertyDefinition.h application/properties/IceProperties.h exceptions/Exception.h exceptions/LocalException.h exceptions/local/DynamicLibraryException.h exceptions/local/ExpressionException.h exceptions/local/FileIOException.h exceptions/local/InvalidPropertyValueException.h exceptions/local/MissingRequiredPropertyException.h exceptions/local/PropertyInheritanceCycleException.h exceptions/local/ProxyNotInitializedException.h exceptions/local/UnexpectedEnumValueException.h exceptions/local/UnmappedValueException.h exceptions/local/ValueRangeExceededException.h exceptions/user/NotImplementedYetException.h rapidxml/rapidxml.hpp rapidxml/rapidxml_print.hpp rapidxml/rapidxml_iterators.hpp rapidxml/rapidxml_utils.hpp rapidxml/wrapper/RapidXmlReader.h rapidxml/wrapper/RapidXmlWriter.h rapidxml/wrapper/DefaultRapidXmlReader.h rapidxml/wrapper/MultiNodeRapidXMLReader.h util/IceBlobToObject.h util/ObjectToIceBlob.h util/FileSystemPathBuilder.h util/FiniteStateMachine.h util/StringHelpers.h util/StringHelperTemplates.h util/algorithm.h util/OnScopeExit.h util/Predicates.h util/Preprocessor.h util/PropagateConst.h util/Registrar.h util/TemplateMetaProgramming.h util/TripleBuffer.h util/IceReportSkipper.h util/Throttler.h util/distributed/AMDCallbackCollection.h util/distributed/RemoteHandle/ClientSideRemoteHandleControlBlock.h util/distributed/RemoteHandle/RemoteHandle.h util/distributed/RemoteHandle/RemoteHandleControlBlock.h util/SimpleStatemachine.h time.h time_minimal.h time/forward_declarations.h time/ice_conversions.h time/json_conversions.h time/CallbackWaitLock.h time/Clock.h time/ClockType.h time/ClockTypeNames.h time/CycleUtil.h time/DateTime.h time/Duration.h time/Frequency.h time/LocalTimeServer.h time/Metronome.h time/ScopedStopWatch.h time/StopWatch.h time/Timer.h time/TimeUtil.h time/TimeKeeper.h csv/CsvWriter.h csv/CsvReader.h eigen/conversions.h eigen/ice_conversions.h ice_conversions.h ice_conversions/ice_conversions_boost_templates.h ice_conversions/ice_conversions_templates.h ice_conversions/ice_conversions_templates.tpp $
Definition: CMakeLists.txt:12
IceUtil::Handle< class PropertyDefinitionContainer >
armarx::ConditionCheckEquals
Definition: ConditionCheckEquals.h:46
armarx::RobotStateObserver::RobotStateObserver
RobotStateObserver()
Definition: RobotStateObserver.cpp:53
ConditionCheckLarger.h
armarx::ConditionCheckLarger
Definition: ConditionCheckLarger.h:40
armarx::PropertyDefinitionsPtr
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.
Definition: forward_declarations.h:35
RobotStateObserver.h
armarx::getMapKeys
void getMapKeys(const MapType &map, OutputIteratorType it)
Definition: algorithm.h:173
armarx::RobotStateObserver::setRobot
void setRobot(VirtualRobot::RobotPtr robot)
Definition: RobotStateObserver.cpp:332
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::RobotStateObserver::onInitObserver
void onInitObserver() override
Framework hook.
Definition: RobotStateObserver.cpp:58
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:19
armarx::split
std::vector< std::string > split(const std::string &source, const std::string &splitBy, bool trimElements=false, bool removeEmptyElements=false)
Definition: StringHelpers.cpp:38