RobotUnitModuleControlThreadDataBuffer.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * ArmarX is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * ArmarX is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * @package 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 
23 #pragma once
24 
25 #include <VirtualRobot/Robot.h>
26 
28 
29 #include <RobotAPI/interface/units/RobotUnit/RobotUnitInterface.h>
30 
31 #include "../SensorValues/SensorValue1DoFActuator.h"
32 #include "../util/ControlThreadOutputBuffer.h"
33 #include "../util/JointAndNJointControllers.h"
34 #include "RobotUnitModuleBase.h"
35 
36 namespace armarx
37 {
38  class SensorValue1DoFActuatorPosition;
39 }
40 
42 {
43  /**
44  * @ingroup Library-RobotUnit-Modules
45  * @brief This \ref ModuleBase "Module" manages all communication into and out of the \ref ControlThread.
46  *
47  * \section buffers Data Buffers
48  * This class holds three data buffers
49  *
50  * \subsection bufferreq Buffer for requested controllers
51  * \note This buffer's direction is ArmarX -> \ref ControlThread
52  *
53  * This buffer contains all \ref NJointControllerBase "NJointControllers"
54  * requested by the user (e.g.: via \ref NJointControllerBase::activate) and
55  * the set of \ref JointController "JointControllers" implicitly defined by this.
56  * These controllers will be activated by \ref ControlThread::rtSwitchControllerSetup.
57  *
58  *
59  * \subsection bufferact Buffer for activated controllers
60  * \note This buffer's direction is \ref ControlThread -> ArmarX
61  *
62  * This buffer contains all \ref JointController "Joint-" and
63  * \ref NJointControllerBase "NJointControllers" executed by the \ref ControlThread.
64  *
65  *
66  * \subsection bufferout Buffer for iteration data
67  * \note This buffer's direction is \ref ControlThread -> ArmarX
68  *
69  * This buffer contains all \ref SensorValueBase "SensorValues" and \ref ControlTargetBase "ControlTargets"
70  * for each iteration.
71  * It also contains messages logged via \ref ARMARX_RT_LOGF.
72  *
73  * This data is used to update \ref Units and is reported to topics (see \ref Publish).
74  *
75  * This buffer is organized as a ringbuffer and holds several old iterations.
76  *
77  * @see ModuleBase
78  */
79  class ControlThreadDataBuffer : virtual public ModuleBase
80  {
81  friend class ModuleBase;
82 
83  public:
84  /**
85  * @brief Returns the singleton instance of this class
86  * @return The singleton instance of this class
87  */
90  {
91  return ModuleBase::Instance<ControlThreadDataBuffer>();
92  }
93 
94  // //////////////////////////////////////////////////////////////////////////////////////// //
95  // ///////////////////////////////// RobotUnitModule hooks //////////////////////////////// //
96  // //////////////////////////////////////////////////////////////////////////////////////// //
97  private:
98  /// @see ModuleBase::_postFinishDeviceInitialization
99  void _postFinishDeviceInitialization();
100  // //////////////////////////////////////////////////////////////////////////////////////// //
101  // /////////////////////////////////// Module interface /////////////////////////////////// //
102  // //////////////////////////////////////////////////////////////////////////////////////// //
103  public:
104  /**
105  * @brief Updates the given VirtualRobot with the current joint values
106  * @param robot The robot to update
107  */
108  void updateVirtualRobot(const VirtualRobot::RobotPtr& robot) const;
109  /**
110  * @brief Updates the given VirtualRobot with the current joint values
111  * @param robot The robot to update
112  * @param nodes The robot's nodes
113  */
114  void updateVirtualRobot(const VirtualRobot::RobotPtr& robot,
115  const std::vector<VirtualRobot::RobotNodePtr>& nodes) const;
116 
117  /**
118  * @brief Returns whether the set of activated \ref JointController "Joint-" and
119  * \ref NJointControllerBase "NJointControllers" changed.
120  * @return Whether the set of activated \ref JointController "Joint-" and
121  * \ref NJointControllerBase "NJointControllers" changed.
122  * @see ControlThread
123  * @see ControlThread::rtSwitchControllerSetup
124  */
125  bool activatedControllersChanged() const; ///TODO private + attorney for publish
126  /**
127  * @brief Returns the set of activated \ref JointController "Joint-" and
128  * \ref NJointControllerBase "NJointControllers".
129  * @return The set of activated \ref JointController "Joint-" and
130  * \ref NJointControllerBase "NJointControllers".
131  * @see ControlThread
132  * @see ControlThread::rtSwitchControllerSetup
133  */
135  /**
136  * @brief Returns the set of activated \ref JointController "JointControllers".
137  * @return The set of activated \ref JointController "JointControllers".
138  * @see ControlThread
139  * @see ControlThread::rtSwitchControllerSetup
140  */
141  std::vector<JointController*> getActivatedJointControllers() const;
142  /**
143  * @brief Returns the set of activated \ref NJointControllerBase "NJointControllers".
144  * @return The set of activated \ref NJointControllerBase "NJointControllers".
145  * @see ControlThread
146  * @see ControlThread::rtSwitchControllerSetup
147  */
148  std::vector<NJointControllerBase*> getActivatedNJointControllers() const;
149 
150  /**
151  * @brief Returns the set of requsted \ref JointController "Joint-" and
152  * \ref NJointControllerBase "NJointControllers".
153  * @return The set of requested \ref JointController "Joint-" and
154  * \ref NJointControllerBase "NJointControllers".
155  * @see ControllerManagement
156  * @see ControllerManagement::activateNJointController
157  * @see ControllerManagement::deactivateNJointController
158  * @see ControllerManagement::switchNJointControllerSetup
159  * @see NJointControllerBase::activateController
160  * @see NJointControllerBase::deactivateController
161  * @see setActivateControllersRequest
162  */
164  /**
165  * @brief Returns the set of requsted \ref JointController "JointControllers".
166  * @return The set of requested \ref JointController "JointControllers".
167  * @see ControllerManagement
168  * @see ControllerManagement::activateNJointController
169  * @see ControllerManagement::deactivateNJointController
170  * @see ControllerManagement::switchNJointControllerSetup
171  * @see NJointControllerBase::activateController
172  * @see NJointControllerBase::deactivateController
173  * @see setActivateControllersRequest
174  */
175  std::vector<JointController*> copyRequestedJointControllers() const;
176  /**
177  * @brief Returns the set of requsted \ref NJointControllerBase "NJointControllers".
178  * @return The set of requested \ref NJointControllerBase "NJointControllers".
179  * @see ControllerManagement
180  * @see ControllerManagement::activateNJointController
181  * @see ControllerManagement::deactivateNJointController
182  * @see ControllerManagement::switchNJointControllerSetup
183  * @see NJointControllerBase::activateController
184  * @see NJointControllerBase::deactivateController
185  * @see setActivateControllersRequest
186  */
187  std::vector<NJointControllerBase*> copyRequestedNJointControllers() const;
188 
189  /**
190  * @brief Updates the sensor and control buffer and returns whether the buffer was updated.
191  * @return Whether the buffer was updated.
192  */
193  bool sensorAndControlBufferChanged() const; /// TODO private + attorney for publish
194  /**
195  * @brief Returns the last updated sensor and control buffer.
196  * @return The last updated sensor and control buffer.
197  */
199 
200  /**
201  * @brief Returns the \ref ControlThreadOutputBuffer
202  * \warning This function is dangerous to use.
203  * @return The \ref ControlThreadOutputBuffer
204  */
206  getControlThreadOutputBuffer() ///TODO refactor logging and remove this function
207  {
208  return controlThreadOutputBuffer;
209  }
210 
211  /**
212  * @brief Returns the writer buffer for sensor and control values.
213  * @return The writer buffer for sensor and control values.
214  */
216  rtGetSensorAndControlBuffer() ///TODO move to attorney
217  {
218  return controlThreadOutputBuffer.getWriteBuffer();
219  }
220 
221  /**
222  * @brief Commits the writer buffer for sensor and control values.
223  */
224  void
225  rtSensorAndControlBufferCommitWrite() ///TODO move to attorney
226  {
227  return controlThreadOutputBuffer.commitWrite();
228  }
229 
230  /**
231  * @brief Sets the set of requested \ref NJointControllerBase "NJointControllers" to \param ctrls.
232  * @param ctrls \ref NJointControllerBase "NJointControllers" requested.
233  * @see ControllerManagement
234  * @see ControllerManagement::activateNJointController
235  * @see ControllerManagement::deactivateNJointController
236  * @see ControllerManagement::switchNJointControllerSetup
237  * @see NJointControllerBase::activateController
238  * @see NJointControllerBase::deactivateController
239  */
241  std::set<NJointControllerBasePtr, std::greater<NJointControllerBasePtr>> ctrls);
242  // //////////////////////////////////////////////////////////////////////////////////////// //
243  // //////////////////////////////////// implementation //////////////////////////////////// //
244  // //////////////////////////////////////////////////////////////////////////////////////// //
245  protected:
246  /**
247  * @brief This hook is called prior to writing the set of requested controllers.
248  * A deriving class can override this function to perform some additional checks
249  * (e.g. two controll devices may always need to have the same control mode, this can be checked here)
250  * If any check fails, throw an exception with a descriptive message.
251  * @param controllers The controllers to activate
252  */
253  virtual void
255  {
256  }
257 
258  private:
259  void writeRequestedControllers(JointAndNJointControllers&& setOfControllers);
260 
261  // //////////////////////////////////////////////////////////////////////////////////////// //
262  // ///////////////////////////////////////// Data ///////////////////////////////////////// //
263  // //////////////////////////////////////////////////////////////////////////////////////// //
264  private:
265  /// @brief Controllers the RT thread is supposed to activate (direction nonRT -> RT) (some NJoint controllers may be null)
266  /// data may only be used after State::InitializingDevices
267  /// all NJointControllerBase have to be sorted by id (null controllers are at the end)
269  /// @brief Mutex guarding \ref controllersRequested
270  mutable std::recursive_mutex controllersRequestedMutex;
271 
272  /// @brief Controllers the RT thread is currently running (direction RT -> nonRT) (some NJoint controllers may be null)
273  /// data may only be used after State::InitializingDevices
274  /// all NJointControllerBase are sorted by id (null controllers may be anywhere)
276  /// @brief Mutex guarding \ref controllersActivated
277  mutable std::recursive_mutex controllersActivatedMutex;
278 
279  /// @brief Transfers Data (current sensor values and control targets) from the control thread to other threads (direction RT -> nonRT)
280  /// \warning DO NOT ACCESS EXCEPT YOU KNOW WHAT YOU ARE DOING!
281  ControlThreadOutputBuffer controlThreadOutputBuffer;
282  /// @brief Mutex guarding \ref controlThreadOutputBuffer
283  mutable std::recursive_mutex
284  controlThreadOutputBufferMutex; /// TODO use this mutex instead of the global one
285  // //////////////////////////////////////////////////////////////////////////////////////// //
286  // /////////////////////////////////////// Attorneys ////////////////////////////////////// //
287  // //////////////////////////////////////////////////////////////////////////////////////// //
288  private:
289  /**
290  * \brief This class allows minimal access to private members of \ref ControlThreadDataBuffer in a sane fashion for \ref ControlThread.
291  * \warning !! DO NOT ADD ADDITIONAL FRIENDS IF YOU DO NOT KNOW WAHT YOU ARE DOING! IF YOU DO SOMETHING WRONG YOU WILL CAUSE UNDEFINED BEHAVIOUR !!
292  */
294  };
295 } // namespace armarx::RobotUnitModule
armarx::JointAndNJointControllers
Structure used by the RobotUnit to swap lists of Joint and NJoint controllers.
Definition: JointAndNJointControllers.h:32
armarx::RobotUnitModule::ControlThreadDataBuffer::getActivatedNJointControllers
std::vector< NJointControllerBase * > getActivatedNJointControllers() const
Returns the set of activated NJointControllers.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:85
armarx::RobotUnitModule::ControlThreadDataBuffer::getControlThreadOutputBuffer
ControlThreadOutputBuffer & getControlThreadOutputBuffer()
Returns the ControlThreadOutputBuffer.
Definition: RobotUnitModuleControlThreadDataBuffer.h:206
armarx::RobotUnitModule::ControlThreadDataBuffer::Instance
static ControlThreadDataBuffer & Instance()
Returns the singleton instance of this class.
Definition: RobotUnitModuleControlThreadDataBuffer.h:89
RobotUnitModuleBase.h
armarx::RobotUnitModule::ControlThreadDataBuffer::copyRequestedNJointControllers
std::vector< NJointControllerBase * > copyRequestedNJointControllers() const
Returns the set of requsted NJointControllers.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:121
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::ControlThreadOutputBuffer
Definition: ControlThreadOutputBuffer.h:216
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::detail::ControlThreadOutputBufferEntry
Definition: ControlThreadOutputBuffer.h:177
armarx::RobotUnitModule::ControlThreadDataBufferAttorneyForControlThread
This class allows minimal access to private members of ControlThreadDataBuffer in a sane fashion for ...
Definition: RobotUnitModuleControlThread.cpp:79
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
armarx::RobotUnitModule::ControlThreadDataBuffer::sensorAndControlBufferChanged
bool sensorAndControlBufferChanged() const
Updates the sensor and control buffer and returns whether the buffer was updated.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:130
TripleBuffer.h
armarx::ControlThreadOutputBuffer::getWriteBuffer
Entry & getWriteBuffer()
Definition: ControlThreadOutputBuffer.cpp:34
armarx::RobotUnitModule::ControlThreadDataBuffer::rtGetSensorAndControlBuffer
SensorAndControl & rtGetSensorAndControlBuffer()
Returns the writer buffer for sensor and control values.
Definition: RobotUnitModuleControlThreadDataBuffer.h:216
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
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::ControlThreadDataBuffer::copyRequestedControllers
JointAndNJointControllers copyRequestedControllers() const
Returns the set of requsted Joint- and NJointControllers.
Definition: RobotUnitModuleControlThreadDataBuffer.cpp:103
armarx::ControlThreadOutputBuffer::commitWrite
void commitWrite()
Definition: ControlThreadOutputBuffer.cpp:41
armarx::WriteBufferedTripleBuffer
Same as the TripleBuffer, but partial writes of the data structure are ok. The write operation may be...
Definition: TripleBuffer.h:267
armarx::RobotUnitModule
Definition: ControlDevice.h:34
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::RobotUnitModule::ModuleBase
Base class for all RobotUnitModules.
Definition: RobotUnitModuleBase.h:183
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::RobotUnitModule::ControlThreadDataBuffer::rtSensorAndControlBufferCommitWrite
void rtSensorAndControlBufferCommitWrite()
Commits the writer buffer for sensor and control values.
Definition: RobotUnitModuleControlThreadDataBuffer.h:225