RobotUnitModuleControlThreadDataBuffer.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 RobotAPI::ArmarXObjects::RobotUnit
17  * @author Raphael Grimm ( raphael dot grimm at kit dot edu )
18  * @date 2018
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
24 
26 
28 #include "RobotUnitModuleDevices.h"
29 
31 {
32  /**
33  * \brief This class allows minimal access to private members of \ref Devices in a sane fashion for \ref ControlThreadDataBuffer.
34  * \warning !! DO NOT ADD ANYTHING IF YOU DO NOT KNOW WAHT YOU ARE DOING! IF YOU DO SOMETHING WRONG YOU WILL CAUSE UNDEFINED BEHAVIOUR !!
35  */
37  {
39 
40  static std::vector<JointController*>
41  GetStopMovementJointControllers(ControlThreadDataBuffer* p)
42  {
43  return p->_module<Devices>().getStopMovementJointControllers();
44  }
45  };
46 
47  /**
48  * \brief This class allows minimal access to private members of \ref ControllerManagement in a sane fashion for \ref ControlThreadDataBuffer.
49  * \warning !! DO NOT ADD ANYTHING IF YOU DO NOT KNOW WAHT YOU ARE DOING! IF YOU DO SOMETHING WRONG YOU WILL CAUSE UNDEFINED BEHAVIOUR !!
50  */
52  {
54 
55  static void
56  UpdateNJointControllerRequestedState(ControlThreadDataBuffer* p,
57  const std::set<NJointControllerBasePtr>& request)
58  {
59  p->_module<ControllerManagement>().updateNJointControllerRequestedState(request);
60  }
61  };
62 } // namespace armarx::RobotUnitModule
63 
65 {
66  JointAndNJointControllers
68  {
69  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
70  throwIfDevicesNotReady(__FUNCTION__);
71  std::lock_guard<std::recursive_mutex> guard{controllersActivatedMutex};
72  return controllersActivated.getReadBuffer();
73  }
74 
75  std::vector<JointController*>
77  {
78  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
79  throwIfDevicesNotReady(__FUNCTION__);
80  std::lock_guard<std::recursive_mutex> guard{controllersActivatedMutex};
81  return controllersActivated.getReadBuffer().jointControllers;
82  }
83 
84  std::vector<NJointControllerBase*>
86  {
87  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
88  throwIfDevicesNotReady(__FUNCTION__);
89  std::lock_guard<std::recursive_mutex> guard{controllersActivatedMutex};
90  return controllersActivated.getReadBuffer().nJointControllers;
91  }
92 
93  bool
95  {
96  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
97  throwIfDevicesNotReady(__FUNCTION__);
98  std::lock_guard<std::recursive_mutex> guard{controllersActivatedMutex};
99  return controllersActivated.updateReadBuffer();
100  }
101 
104  {
105  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
106  throwIfDevicesNotReady(__FUNCTION__);
107  std::lock_guard<std::recursive_mutex> guard{controllersRequestedMutex};
108  return controllersRequested.getWriteBuffer();
109  }
110 
111  std::vector<JointController*>
113  {
114  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
115  throwIfDevicesNotReady(__FUNCTION__);
116  std::lock_guard<std::recursive_mutex> guard{controllersRequestedMutex};
117  return controllersRequested.getWriteBuffer().jointControllers;
118  }
119 
120  std::vector<NJointControllerBase*>
122  {
123  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
124  throwIfDevicesNotReady(__FUNCTION__);
125  std::lock_guard<std::recursive_mutex> guard{controllersRequestedMutex};
126  return controllersRequested.getWriteBuffer().nJointControllers;
127  }
128 
129  bool
131  {
132  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
133  throwIfDevicesNotReady(__FUNCTION__);
134  return controlThreadOutputBuffer.updateReadBuffer();
135  }
136 
137  const SensorAndControl&
139  {
140  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
141  throwIfDevicesNotReady(__FUNCTION__);
142  return controlThreadOutputBuffer.getReadBuffer();
143  }
144 
145  void
146  ControlThreadDataBuffer::writeRequestedControllers(JointAndNJointControllers&& setOfControllers)
147  {
148  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
149  throwIfDevicesNotReady(__FUNCTION__);
150  //check NJoint
151  const auto& nJointCtrls = setOfControllers.nJointControllers;
152  std::set<NJointControllerBasePtr> nJointSet{nJointCtrls.begin(), nJointCtrls.end()};
153  nJointSet.erase(nullptr);
154  //# NJoint
155  const std::size_t nNJointCtrls =
156  std::count_if(nJointCtrls.begin(),
157  nJointCtrls.end(),
158  [](const NJointControllerBasePtr& p) { return p; });
159 
160  ARMARX_CHECK_EXPRESSION(nNJointCtrls == nJointSet.size());
161  ARMARX_CHECK_EXPRESSION(nJointCtrls.size() ==
162  _module<Devices>().getNumberOfControlDevices());
163  //first nNJointCtrls not null
164  ARMARX_CHECK_EXPRESSION(std::all_of(nJointCtrls.begin(),
165  nJointCtrls.begin() + nNJointCtrls,
166  [](NJointControllerBase* p) { return p; }));
167  //last getNumberOfControlDevices()-nNJointCtrls null
168  ARMARX_CHECK_EXPRESSION(std::all_of(nJointCtrls.begin() + nNJointCtrls,
169  nJointCtrls.end(),
170  [](NJointControllerBase* p) { return !p; }));
171  //conflict free and sorted
172  ARMARX_CHECK_EXPRESSION(std::is_sorted(
173  nJointCtrls.begin(), nJointCtrls.end(), std::greater<NJointControllerBase*>{}));
175  nJointCtrls.begin(), nJointCtrls.begin() + nNJointCtrls));
176 
177  //check JointCtrl
178  const auto& jointCtrls = setOfControllers.jointControllers;
179  ARMARX_CHECK_EXPRESSION(jointCtrls.size() ==
180  _module<Devices>().getNumberOfControlDevices());
181  ARMARX_CHECK_EXPRESSION(std::all_of(
182  jointCtrls.begin(), jointCtrls.end(), [](JointController* p) { return p; }));
183 
184  //check groups
185  {
186  ARMARX_DEBUG << "check groups";
187  std::size_t grpIdx = 0;
188  for (const auto& group : _module<Devices>().getControlModeGroups().groups)
189  {
190  ARMARX_CHECK_EXPRESSION(!group.empty());
191  const auto hwMode =
192  setOfControllers.jointControllers
193  .at(_module<Devices>().getControlDeviceIndex(*group.begin()))
194  ->getHardwareControlMode();
195  ARMARX_DEBUG << "---- group " << grpIdx << " mode '" << hwMode << "'";
196  for (const auto& other : group)
197  {
198  const auto& dev = _module<Devices>().getControlDeviceIndex(other);
200  const auto otherHwMode =
201  setOfControllers.jointControllers.at(dev)->getHardwareControlMode();
202  ARMARX_DEBUG << "-------- '" << other << "'' mode '" << otherHwMode << "'";
203  ARMARX_CHECK_EXPRESSION(otherHwMode == hwMode);
204  }
205  ++grpIdx;
206  }
207  }
208  //setup assignement
209  {
210  ARMARX_DEBUG << "setup assignement index";
211  setOfControllers.resetAssignement();
212  for (std::size_t nJointCtrlIndex = 0;
213  nJointCtrlIndex < setOfControllers.nJointControllers.size();
214  ++nJointCtrlIndex)
215  {
216  const NJointControllerBase* nJoint =
217  setOfControllers.nJointControllers.at(nJointCtrlIndex);
218  if (!nJoint)
219  {
220  break;
221  }
222  ARMARX_DEBUG << "---- " << nJoint->getInstanceName();
223  for (std::size_t jointIndex : nJoint->getControlDeviceUsedIndices())
224  {
225  ARMARX_DEBUG << "-------- Index " << jointIndex << ": "
226  << setOfControllers.jointToNJointControllerAssignement.at(
227  jointIndex)
228  << "-> " << nJointCtrlIndex;
229  ARMARX_CHECK_EXPRESSION(setOfControllers.jointToNJointControllerAssignement.at(
230  jointIndex) == IndexSentinel());
231  setOfControllers.jointToNJointControllerAssignement.at(jointIndex) =
232  nJointCtrlIndex;
233  }
234  }
235  }
236 
237  {
238  ARMARX_DEBUG << "call checkSetOfControllersToActivate";
239  checkSetOfControllersToActivate(setOfControllers);
240  }
241  //set requested state
242  ControllerManagementAttorneyForControlThreadDataBuffer::
243  UpdateNJointControllerRequestedState(this, nJointSet);
244 
245  ARMARX_CHECK_EQUAL(_module<Devices>().getNumberOfControlDevices(),
246  setOfControllers.jointControllers.size());
247  ARMARX_CHECK_EQUAL(_module<Devices>().getNumberOfControlDevices(),
248  setOfControllers.nJointControllers.size());
249  ARMARX_CHECK_EQUAL(_module<Devices>().getNumberOfControlDevices(),
250  setOfControllers.jointToNJointControllerAssignement.size());
251  {
252  std::lock_guard<std::recursive_mutex> guard{controllersRequestedMutex};
253  controllersRequested.getWriteBuffer() = std::move(setOfControllers);
254  controllersRequested.commitWrite();
255  }
257  << "writeRequestedControllers(JointAndNJointControllers&& setOfControllers)...done!";
258  }
259 
260  void
262  std::set<NJointControllerBasePtr, std::greater<NJointControllerBasePtr>> ctrls)
263  {
264  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
265  std::lock_guard<std::recursive_mutex> guardRequested{controllersRequestedMutex};
266  throwIfDevicesNotReady(__FUNCTION__);
267  //erase nullptr
268  ctrls.erase(nullptr);
269  ARMARX_CHECK_EXPRESSION(ctrls.size() <= _module<Devices>().getNumberOfControlDevices());
270 
271  const std::set<NJointControllerBasePtr, std::greater<NJointControllerBasePtr>>
272  setOfRequestedCtrls{controllersRequested.getWriteBuffer().nJointControllers.begin(),
273  controllersRequested.getWriteBuffer().nJointControllers.end()};
274  if (setOfRequestedCtrls == ctrls)
275  {
276  //redirty the flag to swap in the same set again
277  controllersRequested.commitWrite();
278  return;
279  }
280  JointAndNJointControllers request{_module<Devices>().getNumberOfControlDevices()};
281  std::size_t idx = 0;
282  for (const NJointControllerBasePtr& nJointCtrl : ctrls)
283  {
284  request.nJointControllers.at(idx++) = nJointCtrl.get();
285  //add Joint for this ctrl
286  for (const auto& cd2cm : nJointCtrl->getControlDeviceUsedControlModeMap())
287  {
288  std::size_t jointCtrlIndex =
289  _module<Devices>().getControlDevices().index(cd2cm.first);
290  if (request.jointControllers.at(jointCtrlIndex))
291  {
292  std::stringstream ss;
293  ss << "RobotUnit:setActivateControllersRequest controllers to activate are in "
294  "conflict!\ncontrollers:";
295  for (const auto& ctrl : ctrls)
296  {
297  ss << "\n" << ctrl->getInstanceName();
298  }
299  ARMARX_ERROR << ss.str();
300  throw InvalidArgumentException{ss.str()};
301  }
302  request.jointControllers.at(jointCtrlIndex) =
303  _module<Devices>()
304  .getControlDevices()
305  .at(jointCtrlIndex)
306  ->getJointController(cd2cm.second);
307  }
308  }
309 
310  std::size_t jointControllersCount = request.jointControllers.size();
311  for (std::size_t i = 0; i < jointControllersCount; ++i)
312  {
313  JointController*& jointCtrl = request.jointControllers.at(i);
314  if (!jointCtrl)
315  {
316  JointController* jointCtrlOld =
317  controllersRequested.getWriteBuffer().jointControllers.at(i);
318  if (jointCtrlOld ==
319  _module<Devices>().getControlDevices().at(i)->getJointStopMovementController())
320  {
321  //don't replace this controller with emergency stop
322  jointCtrl = jointCtrlOld;
323  }
324  else
325  {
326  //no one controls this device -> emergency stop
327  jointCtrl = _module<Devices>()
328  .getControlDevices()
329  .at(i)
330  ->getJointEmergencyStopController();
331  }
332  }
333  }
334  ARMARX_DEBUG << "wrote requested controllers";
335  ARMARX_INFO << "requested controllers:\n" << ARMARX_STREAM_PRINTER
336  {
337  for (std::size_t i = 0; i < request.nJointControllers.size(); ++i)
338  {
339  const auto& ctrl = request.nJointControllers.at(i);
340  if (ctrl)
341  {
342  out << i << "\t'" << ctrl->getInstanceName() << "' \t of class '"
343  << ctrl->getClassName() << "'\n";
344  }
345  }
346  };
347  writeRequestedControllers(std::move(request));
348  }
349 
350  void
352  const VirtualRobot::RobotPtr& robot,
353  const std::vector<VirtualRobot::RobotNodePtr>& nodes) const
354  {
355  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
356  _module<Devices>().updateVirtualRobotFromSensorValues(
357  robot, nodes, controlThreadOutputBuffer.getReadBuffer().sensors);
358  }
359 
360  void
362  {
363  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
364  _module<Devices>().updateVirtualRobotFromSensorValues(
365  robot, controlThreadOutputBuffer.getReadBuffer().sensors);
366  }
367 
368  void
369  ControlThreadDataBuffer::_postFinishDeviceInitialization()
370  {
371  throwIfInControlThread(BOOST_CURRENT_FUNCTION);
372  ARMARX_DEBUG << "initializing buffers:";
373  {
374  ARMARX_DEBUG << "----initializing controller buffers for "
375  << _module<Devices>().getNumberOfControlDevices() << " control devices";
376 
377  JointAndNJointControllers ctrlinitReq(_module<Devices>().getNumberOfControlDevices());
378  ARMARX_CHECK_EQUAL(_module<Devices>().getNumberOfControlDevices(),
379  ctrlinitReq.jointControllers.size());
380  ARMARX_CHECK_EQUAL(_module<Devices>().getNumberOfControlDevices(),
381  ctrlinitReq.nJointControllers.size());
382  ARMARX_CHECK_EQUAL(_module<Devices>().getNumberOfControlDevices(),
383  ctrlinitReq.jointToNJointControllerAssignement.size());
384  controllersActivated.reinitAllBuffers(ctrlinitReq);
385 
386  ctrlinitReq.jointControllers =
387  DevicesAttorneyForControlThreadDataBuffer::GetStopMovementJointControllers(this);
388  ARMARX_CHECK_EQUAL(_module<Devices>().getNumberOfControlDevices(),
389  ctrlinitReq.jointControllers.size());
390  ARMARX_CHECK_EQUAL(_module<Devices>().getNumberOfControlDevices(),
391  ctrlinitReq.nJointControllers.size());
392  ARMARX_CHECK_EQUAL(_module<Devices>().getNumberOfControlDevices(),
393  ctrlinitReq.jointToNJointControllerAssignement.size());
394  controllersRequested.reinitAllBuffers(ctrlinitReq);
395  controllersRequested
396  .commitWrite(); //to make sure the diry bit is activated (to trigger rt switch)
397  }
398  }
399 } // namespace armarx::RobotUnitModule
armarx::ControlThreadOutputBuffer::updateReadBuffer
bool updateReadBuffer() const
Definition: ControlThreadOutputBuffer.cpp:61
RobotUnitModuleControllerManagement.h
armarx::JointAndNJointControllers
Structure used by the RobotUnit to swap lists of Joint and NJoint controllers.
Definition: JointAndNJointControllers.h:32
NJointControllerBase.h
armarx::RobotUnitModule::ControlThreadDataBuffer::getActivatedNJointControllers
std::vector< NJointControllerBase * > getActivatedNJointControllers() const
Returns the set of activated NJointControllers.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:85
armarx::RobotUnitModule::DevicesAttorneyForControlThreadDataBuffer
This class allows minimal access to private members of Devices in a sane fashion for ControlThreadDat...
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:36
armarx::detail::ControlThreadOutputBufferEntry::sensors
std::vector< PropagateConst< SensorValueBase * > > sensors
Definition: ControlThreadOutputBuffer.h:203
armarx::RobotUnitModule::ControlThreadDataBuffer::copyRequestedNJointControllers
std::vector< NJointControllerBase * > copyRequestedNJointControllers() const
Returns the set of requsted NJointControllers.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:121
armarx::JointController
The JointController class represents one joint in one control mode.
Definition: JointController.h:51
armarx::RobotUnitModule::ControlThreadDataBuffer::getActivatedControllers
JointAndNJointControllers getActivatedControllers() const
TODO private + attorney for publish.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:67
armarx::RobotUnitModule::ControlThreadDataBuffer::copyRequestedJointControllers
std::vector< JointController * > copyRequestedJointControllers() const
Returns the set of requsted JointControllers.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:112
armarx::RobotUnitModule::ControlThreadDataBuffer::getActivatedJointControllers
std::vector< JointController * > getActivatedJointControllers() const
Returns the set of activated JointControllers.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:76
armarx::RobotUnitModule::ControlThreadDataBuffer::activatedControllersChanged
bool activatedControllersChanged() const
Returns whether the set of activated Joint- and NJointControllers changed.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:94
armarx::JointAndNJointControllers::nJointControllers
std::vector< NJointControllerBase * > nJointControllers
Definition: JointAndNJointControllers.h:48
armarx::RobotUnitModule::ControlThreadDataBuffer::updateVirtualRobot
void updateVirtualRobot(const VirtualRobot::RobotPtr &robot) const
Updates the given VirtualRobot with the current joint values.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:361
armarx::ControlThreadOutputBuffer::getReadBuffer
const Entry & getReadBuffer() const
Definition: ControlThreadOutputBuffer.cpp:49
armarx::detail::ControlThreadOutputBufferEntry
Definition: ControlThreadOutputBuffer.h:177
armarx::RobotUnitModule::ControlThreadDataBuffer::setActivateControllersRequest
void setActivateControllersRequest(std::set< NJointControllerBasePtr, std::greater< NJointControllerBasePtr >> ctrls)
Sets the set of requested NJointControllers to.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:261
armarx::RobotUnitModule::ControlThreadDataBuffer::getSensorAndControlBuffer
const SensorAndControl & getSensorAndControlBuffer() const
TODO private + attorney for publish.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:138
RobotUnitModuleDevices.h
armarx::RobotUnitModule::ModuleBase::IndexSentinel
static constexpr std::size_t IndexSentinel()
Returns a sentinel value for an index (std::numeric_limits<std::size_t>::max())
Definition: RobotUnitModuleBase.h:720
ARMARX_DEBUG
#define ARMARX_DEBUG
Definition: Logging.h:177
RobotUnitModuleControlThreadDataBuffer.h
armarx::RobotUnitModule::ControlThreadDataBuffer::sensorAndControlBufferChanged
bool sensorAndControlBufferChanged() const
Updates the sensor and control buffer and returns whether the buffer was updated.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:130
ARMARX_ERROR
#define ARMARX_ERROR
Definition: Logging.h:189
armarx::RobotUnitModule::Devices
This Module manages sensor and control devices for a RobotUnit and only allows save and sane access.
Definition: RobotUnitModuleDevices.h:67
armarx::RobotUnitModule::ControlThreadDataBuffer::checkSetOfControllersToActivate
virtual void checkSetOfControllersToActivate(const JointAndNJointControllers &) const
This hook is called prior to writing the set of requested controllers.
Definition: RobotUnitModuleControlThreadDataBuffer.h:254
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_INFO
#define ARMARX_INFO
Definition: Logging.h:174
armarx::NJointControllerBase
A high level controller writing its results into ControlTargets.
Definition: NJointControllerBase.h:578
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
armarx::RobotUnitModule::ControllerManagement
This Module manages NJointControllers.
Definition: RobotUnitModuleControllerManagement.h:39
armarx::RobotUnitModule::ModuleBase::_module
T & _module()
Returns this as ref to the given type.
Definition: RobotUnitModuleBase.h:249
armarx::RobotUnitModule::ModuleBase::throwIfInControlThread
void throwIfInControlThread(const std::string &fnc) const
Throws if the current thread is the ControlThread.
Definition: RobotUnitModuleBase.cpp:416
armarx::RobotUnitModule::ControlThreadDataBuffer::copyRequestedControllers
JointAndNJointControllers copyRequestedControllers() const
Returns the set of requsted Joint- and NJointControllers.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:103
armarx::RobotUnitModule::ModuleBase::throwIfDevicesNotReady
void throwIfDevicesNotReady(const std::string &fnc) const
Throws if the Devices are not ready.
Definition: RobotUnitModuleBase.cpp:530
armarx::RobotUnitModule
Definition: ControlDevice.h:34
ARMARX_CHECK_EQUAL
#define ARMARX_CHECK_EQUAL(lhs, rhs)
This macro evaluates whether lhs is equal (==) rhs and if it turns out to be false it will throw an E...
Definition: ExpressionException.h:130
armarx::NJointControllerBase::AreNotInConflict
static std::optional< std::vector< char > > AreNotInConflict(ItT first, ItT last)
Definition: NJointControllerBase.h:1036
armarx::RobotUnitModule::ControllerManagementAttorneyForControlThreadDataBuffer
This class allows minimal access to private members of ControllerManagement in a sane fashion for Con...
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:51
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:18
armarx::RobotUnitModule::ControlThreadDataBuffer
This Module manages all communication into and out of the ControlThread.
Definition: RobotUnitModuleControlThreadDataBuffer.h:79
ARMARX_STREAM_PRINTER
#define ARMARX_STREAM_PRINTER
use this macro to write output code that is executed when printed and thus not executed if the debug ...
Definition: Logging.h:304