NJointControllerBase.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::NJointController
17  * @author Raphael Grimm ( raphael dot grimm at kit dot edu )
18  * @date 2017
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #pragma once
24 
25 #include <atomic>
26 #include <functional>
27 #include <map>
28 #include <mutex>
29 #include <optional>
30 
31 #include <VirtualRobot/VirtualRobot.h>
32 
34 #include <ArmarXCore/core/exceptions/local/ExpressionException.h> // for ARMARX_CHECK
36 #include <ArmarXCore/interface/core/ManagedIceObjectDefinitions.h>
37 
39 #include <RobotAPI/interface/units/RobotUnit/NJointController.h>
40 
41 namespace IceProxy::armarx
42 {
43  class DebugDrawerInterface;
44  class DebugObserverInterface;
45  class RobotUnitInterface;
46 } // namespace IceProxy::armarx
47 
48 namespace armarx
49 {
50  namespace RobotUnitModule
51  {
52  class NJointControllerAttorneyForPublisher;
53  class NJointControllerAttorneyForControlThread;
54  class NJointControllerAttorneyForControllerManagement;
55  } // namespace RobotUnitModule
56 
57  namespace detail
58  {
59  template <class>
62  } // namespace detail
63 
64  namespace WidgetDescription
65  {
66  class Widget;
67  typedef ::IceInternal::Handle<::armarx::WidgetDescription::Widget> WidgetPtr;
68  typedef ::std::map<::std::string, ::armarx::WidgetDescription::WidgetPtr>
70  } // namespace WidgetDescription
71 
73  class JointController;
74  class SensorValueBase;
75  class ControlTargetBase;
76  using ConstControlDevicePtr = std::shared_ptr<const class ControlDevice>;
77  using ConstSensorDevicePtr = std::shared_ptr<const class SensorDevice>;
78 
79  typedef ::IceInternal::ProxyHandle<::IceProxy::armarx::DebugDrawerInterface>
81  typedef ::IceInternal::ProxyHandle<::IceProxy::armarx::DebugObserverInterface>
83  typedef ::IceInternal::ProxyHandle<::IceProxy::armarx::RobotUnitInterface>
85 
86  using ThreadPoolPtr = std::shared_ptr<class ThreadPool>;
87 
91 
93 
579  virtual public NJointControllerInterface,
580  virtual public ManagedIceObject
581  {
582  // //////////////////////////////////////////////////////////////////////////////////////// //
583  // /////////////////////////////////////// typedefs /////////////////////////////////////// //
584  // //////////////////////////////////////////////////////////////////////////////////////// //
585  public:
586  using ConfigPtrT = NJointControllerConfigPtr;
588  const VirtualRobot::RobotPtr&,
589  const std::map<std::string, ConstControlDevicePtr>& controlDevices,
590  const std::map<std::string, ConstSensorDevicePtr>& sensorDevices);
591  template <class ConfigPrtType>
593  ConfigPrtType (*)(const StringVariantBaseMap&);
594  // //////////////////////////////////////////////////////////////////////////////////////// //
595  // ///////////////////////////// constructor setup functions ////////////////////////////// //
596  // //////////////////////////////////////////////////////////////////////////////////////// //
597  public:
604  ConstSensorDevicePtr peekSensorDevice(const std::string& deviceName) const;
611  ConstControlDevicePtr peekControlDevice(const std::string& deviceName) const;
612 
621  ControlTargetBase* useControlTarget(const std::string& deviceName,
622  const std::string& controlMode);
623 
632  template <class T>
633  T*
634  useControlTarget(const std::string& deviceName, const std::string& controlMode)
635  {
637  "The given type does not derive ControlTargetBase");
638  ControlTargetBase* const ptr = useControlTarget(deviceName, controlMode);
639  return dynamic_cast<T*>(ptr);
640  }
641 
648  const SensorValueBase* useSensorValue(const std::string& sensorDeviceName) const;
649 
656  template <class T>
657  const T*
658  useSensorValue(const std::string& deviceName) const
659  {
661  "The given type does not derive SensorValueBase");
662  const SensorValueBase* const ptr = useSensorValue(deviceName);
663  return dynamic_cast<const T*>(ptr);
664  }
665 
675  const VirtualRobot::RobotPtr& useSynchronizedRtRobot(bool updateCollisionModel = false);
676 
677  // //////////////////////////////////////////////////////////////////////////////////////// //
678  // ////////////////////////////////// Component interface ///////////////////////////////// //
679  // //////////////////////////////////////////////////////////////////////////////////////// //
680  protected:
682  std::string
683  getDefaultName() const override
684  {
685  return getClassName();
686  }
687 
689  void onInitComponent() final;
691  void onConnectComponent() final;
693  void onDisconnectComponent() final;
695  void onExitComponent() final;
696 
697  virtual void
699  {
700  }
701 
702  virtual void
704  {
705  }
706 
707  virtual void
709  {
710  }
711 
712  virtual void
714  {
715  }
716 
717  // //////////////////////////////////////////////////////////////////////////////////////// //
718  // ////////////////////////////////// ThreadPool functionality///////////////////////////// //
719  // //////////////////////////////////////////////////////////////////////////////////////// //
720  protected:
722 
751  template <typename Task>
752  void
753  runTask(const std::string& taskName, Task&& task)
754  {
755  std::unique_lock lock(threadHandlesMutex);
756  ARMARX_CHECK_EXPRESSION(!taskName.empty());
757  ARMARX_CHECK_EXPRESSION(!threadHandles.count(taskName));
758  ARMARX_CHECK_EXPRESSION(getState() < eManagedIceObjectExiting);
759  ARMARX_VERBOSE << "Adding NJointControllerBase task named '" << taskName
760  << "' - current available thread count: "
761  << getThreadPool()->getAvailableTaskCount();
762  auto handlePtr = std::make_shared<ThreadPool::Handle>(getThreadPool()->runTask(task));
763  ARMARX_CHECK_EXPRESSION(handlePtr->isValid())
764  << "Could not add task (" << taskName << " - " << GetTypeString(task)
765  << " ) - available threads: " << getThreadPool()->getAvailableTaskCount();
766  threadHandles[taskName] = handlePtr;
767  }
768 
769  std::map<std::string, std::shared_ptr<ThreadPool::Handle>> threadHandles;
770  std::mutex threadHandlesMutex;
771 
772  // //////////////////////////////////////////////////////////////////////////////////////// //
773  // ///////////////////////////////////// ice interface //////////////////////////////////// //
774  // //////////////////////////////////////////////////////////////////////////////////////// //
775  public:
776  bool
777  isControllerActive(const Ice::Current& = Ice::emptyCurrent) const final override
778  {
779  return isActive;
780  }
781 
782  bool
783  isControllerRequested(const Ice::Current& = Ice::emptyCurrent) const final override
784  {
785  return isRequested;
786  }
787 
788  bool
789  isDeletable(const Ice::Current& = Ice::emptyCurrent) const final override
790  {
791  return deletable;
792  }
793 
794  bool
795  hasControllerError(const Ice::Current& = Ice::emptyCurrent) const final override
796  {
797  return deactivatedBecauseOfError;
798  }
799 
800  std::string getClassName(const Ice::Current& = Ice::emptyCurrent) const override = 0;
801 
802  std::string
803  getInstanceName(const Ice::Current& = Ice::emptyCurrent) const final override
804  {
805  return instanceName_;
806  }
807 
808  NJointControllerDescription
809  getControllerDescription(const Ice::Current& = Ice::emptyCurrent) const final override;
810  NJointControllerStatus
811  getControllerStatus(const Ice::Current& = Ice::emptyCurrent) const final override;
812  NJointControllerDescriptionWithStatus getControllerDescriptionWithStatus(
813  const Ice::Current& = Ice::emptyCurrent) const final override;
814  //RobotUnitInterfacePrx getRobotUnit(const Ice::Current& = Ice::emptyCurrent) const final override;
815 
816  void activateController(const Ice::Current& = Ice::emptyCurrent) final override;
817  void deactivateController(const Ice::Current& = Ice::emptyCurrent) final override;
818  void deleteController(const Ice::Current& = Ice::emptyCurrent) final override;
819  void deactivateAndDeleteController(const Ice::Current& = Ice::emptyCurrent) final override;
820 
822  getFunctionDescriptions(const Ice::Current& = Ice::emptyCurrent) const override
823  {
824  return {};
825  }
826 
827  void
828  callDescribedFunction(const std::string&,
829  const StringVariantBaseMap&,
830  const Ice::Current& = Ice::emptyCurrent) override
831  {
832  }
833 
834  // //////////////////////////////////////////////////////////////////////////////////////// //
835  // ///////////////////////////////////// rt interface ///////////////////////////////////// //
836  // //////////////////////////////////////////////////////////////////////////////////////// //
837  public:
838 
844  const VirtualRobot::RobotPtr&
846  {
847  return rtRobot;
848  }
849 
856  const std::vector<VirtualRobot::RobotNodePtr>&
858  {
859  return rtRobotNodes;
860  }
861 
869  bool
870  rtUsesControlDevice(std::size_t deviceIndex) const
871  {
872  return controlDeviceUsedBitmap.at(deviceIndex);
873  }
874 
881  const std::vector<std::size_t>&
883  {
884  return controlDeviceUsedIndices;
885  }
886 
890  bool
892  {
893  return errorState;
894  }
895 
900  std::size_t
902  {
903  return controlDeviceUsedIndices.size();
904  }
905 
910  const std::string&
912  {
913  return rtClassName_;
914  }
915 
920  const std::string&
922  {
923  return instanceName_;
924  }
925 
926  protected:
931  virtual void
933  {
934  }
935 
940  virtual void
942  {
943  }
944 
948  void
950  {
951  errorState.store(true);
952  }
953 
954  private:
963  void rtActivateController();
972  void rtDeactivateController();
984  void rtDeactivateControllerBecauseOfError();
985 
986  public:
987  static const NJointControllerBasePtr NullPtr;
988 
990 
991  ~NJointControllerBase() override;
992  //ice interface (must not be called in the rt thread)
993 
994  //c++ interface (local calls) (must be called in the rt thread)
995  // //////////////////////////////////////////////////////////////////////////////////////// //
996  // ///////////////////////////////////// used targets ///////////////////////////////////// //
997  // //////////////////////////////////////////////////////////////////////////////////////// //
998  public:
999  //used control devices
1000  StringStringDictionary
1002  const Ice::Current& = Ice::emptyCurrent) const final override
1003  {
1004  return controlDeviceControlModeMap;
1005  }
1006 
1007  const std::vector<char>&
1009  {
1010  return controlDeviceUsedBitmap;
1011  }
1012 
1013  const std::vector<std::size_t>&
1015  {
1016  return controlDeviceUsedIndices;
1017  }
1018 
1019  const std::map<std::string, const JointController*>&
1021  {
1022  return controlDeviceUsedJointController;
1023  }
1024 
1025  //check for conflict
1026  std::optional<std::vector<char>>
1027  isNotInConflictWith(const NJointControllerBasePtr& other) const
1028  {
1029  return isNotInConflictWith(other->getControlDeviceUsedBitmap());
1030  }
1031 
1032  std::optional<std::vector<char>> isNotInConflictWith(const std::vector<char>& used) const;
1033 
1034  template <class ItT>
1035  static std::optional<std::vector<char>>
1036  AreNotInConflict(ItT first, ItT last)
1037  {
1038  if (first == last)
1039  {
1040  return std::vector<char>{};
1041  }
1042  std::size_t n = (*first)->getControlDeviceUsedBitmap().size();
1043  std::vector<char> inuse(n, false);
1044  while (first != last)
1045  {
1046  auto r = (*first)->isNotInConflictWith(inuse);
1047  if (!r)
1048  {
1049  return r;
1050  }
1051  inuse = std::move(*r);
1052  ++first;
1053  }
1054  return inuse;
1055  }
1056 
1057  // //////////////////////////////////////////////////////////////////////////////////////// //
1058  // ////////////////////////////////////// publishing ////////////////////////////////////// //
1059  // //////////////////////////////////////////////////////////////////////////////////////// //
1060  protected:
1061  //publish thread hooks
1062  virtual void
1064  {
1065  }
1066 
1067  virtual void
1069  {
1070  }
1071 
1072  virtual void
1074  const DebugDrawerInterfacePrx&,
1076  {
1077  }
1078 
1079  private:
1080  void publish(const SensorAndControl& sac,
1081  const DebugDrawerInterfacePrx& draw,
1082  const DebugObserverInterfacePrx& observer);
1083  void deactivatePublish(const DebugDrawerInterfacePrx& draw,
1084  const DebugObserverInterfacePrx& observer);
1085  // //////////////////////////////////////////////////////////////////////////////////////// //
1086  // ///////////////////////////////////////// data ///////////////////////////////////////// //
1087  // //////////////////////////////////////////////////////////////////////////////////////// //
1088  private:
1090  RobotUnit& robotUnit;
1092  StringStringDictionary controlDeviceControlModeMap;
1094  std::map<std::string, const JointController*> controlDeviceUsedJointController;
1096  std::vector<char> controlDeviceUsedBitmap;
1098  std::vector<std::size_t> controlDeviceUsedIndices;
1099 
1100  std::string rtClassName_;
1101  std::string instanceName_;
1102 
1103  //this data is filled by the robot unit to provide convenience functions
1104  std::atomic_bool isActive{false};
1105  std::atomic_bool isRequested{false};
1106  std::atomic_bool deactivatedBecauseOfError{false};
1107  std::atomic_bool errorState{false};
1108  bool deletable{false};
1109  bool internal{false};
1110 
1111  std::atomic_bool publishActive{false};
1112 
1113  std::atomic_bool statusReportedActive{false};
1114  std::atomic_bool statusReportedRequested{false};
1115 
1116  VirtualRobot::RobotPtr rtRobot;
1117  std::vector<VirtualRobot::RobotNodePtr> rtRobotNodes;
1118  // //////////////////////////////////////////////////////////////////////////////////////// //
1119  // /////////////////////////////////////// friends //////////////////////////////////////// //
1120  // //////////////////////////////////////////////////////////////////////////////////////// //
1121  private:
1141  template <class>
1143  };
1144 
1146  {
1147  public:
1148  virtual void rtRun(const IceUtil::Time& sensorValuesTimestamp,
1149  const IceUtil::Time& timeSinceLastIteration) = 0;
1150 
1151  virtual void
1152  rtSwapBufferAndRun(const IceUtil::Time& sensorValuesTimestamp,
1153  const IceUtil::Time& timeSinceLastIteration)
1154  {
1155  rtRun(sensorValuesTimestamp, timeSinceLastIteration);
1156  }
1157  };
1158 
1160  {
1161  public:
1162  virtual void rtRunIterationBegin(const IceUtil::Time& sensorValuesTimestamp,
1163  const IceUtil::Time& timeSinceLastIteration) = 0;
1164  virtual void rtRunIterationEnd(const IceUtil::Time& sensorValuesTimestamp,
1165  const IceUtil::Time& timeSinceLastIteration) = 0;
1166  };
1167 
1169  using NJointControllerPtr = SynchronousNJointControllerPtr;
1170 } // namespace armarx
armarx::NJointControllerBase::useControlTarget
T * useControlTarget(const std::string &deviceName, const std::string &controlMode)
Declares to calculate the ControlTarget for the given ControlDevice in the given ControlMode when rtR...
Definition: NJointControllerBase.h:634
armarx::AsynchronousNJointController::rtRunIterationBegin
virtual void rtRunIterationBegin(const IceUtil::Time &sensorValuesTimestamp, const IceUtil::Time &timeSinceLastIteration)=0
TODO make protected and use attorneys.
ARMARX_VERBOSE
#define ARMARX_VERBOSE
Definition: Logging.h:180
armarx::NJointControllerBase::peekSensorDevice
ConstSensorDevicePtr peekSensorDevice(const std::string &deviceName) const
Get a const ptr to the given SensorDevice.
Definition: NJointController.cpp:275
armarx::NJointControllerBase::rtGetInstanceName
const std::string & rtGetInstanceName() const
Returns the instance name.
Definition: NJointControllerBase.h:921
armarx::NJointControllerBase::~NJointControllerBase
~NJointControllerBase() override
Definition: NJointController.cpp:405
armarx::NJointControllerBase::getInstanceName
std::string getInstanceName(const Ice::Current &=Ice::emptyCurrent) const final override
Definition: NJointControllerBase.h:803
armarx::NJointControllerBase::useSynchronizedRtRobot
const VirtualRobot::RobotPtr & useSynchronizedRtRobot(bool updateCollisionModel=false)
Requests a VirtualRobot for use in rtRun *.
Definition: NJointController.cpp:293
armarx::NJointControllerBase::deactivateController
void deactivateController(const Ice::Current &=Ice::emptyCurrent) final override
Definition: NJointController.cpp:149
armarx::StringVariantBaseMap
std::map< std::string, VariantBasePtr > StringVariantBaseMap
Definition: ManagedIceObject.h:111
armarx::TYPEDEF_PTRS_HANDLE
TYPEDEF_PTRS_HANDLE(NJointCartesianNaturalPositionController)
IceProxy::armarx
Definition: LogSender.h:38
armarx::SensorValueBase
The SensorValueBase class.
Definition: SensorValueBase.h:40
armarx::NJointControllerBase::activateController
void activateController(const Ice::Current &=Ice::emptyCurrent) final override
Definition: NJointController.cpp:143
armarx::NJointControllerBase::onInitComponent
void onInitComponent() final
Definition: NJointController.cpp:305
armarx::ControlTargetBase
Brief description of class JointControlTargetBase.
Definition: ControlTargetBase.h:47
RobotUnit.h
armarx::NJointControllerBase::threadHandles
std::map< std::string, std::shared_ptr< ThreadPool::Handle > > threadHandles
Definition: NJointControllerBase.h:769
armarx::WidgetDescription::StringWidgetDictionary
::std::map<::std::string, ::armarx::WidgetDescription::WidgetPtr > StringWidgetDictionary
Definition: NJointControllerBase.h:69
armarx::SynchronousNJointController
Definition: NJointControllerBase.h:1145
armarx::NJointControllerBase::useControlTarget
ControlTargetBase * useControlTarget(const std::string &deviceName, const std::string &controlMode)
Declares to calculate the ControlTarget for the given ControlDevice in the given ControlMode when rtR...
Definition: NJointController.cpp:410
armarx::NJointControllerBase::getControlDevicesUsedJointController
const std::map< std::string, const JointController * > & getControlDevicesUsedJointController()
Definition: NJointControllerBase.h:1020
armarx::NJointControllerBase::rtGetRobotNodes
const std::vector< VirtualRobot::RobotNodePtr > & rtGetRobotNodes()
Returns the nodes of the virtual robot used by this NJointControllerBase in the rtRun.
Definition: NJointControllerBase.h:857
armarx::NJointControllerBase::getClassName
std::string getClassName(const Ice::Current &=Ice::emptyCurrent) const override=0
armarx::NJointControllerBase::onDisconnectNJointController
virtual void onDisconnectNJointController()
Definition: NJointControllerBase.h:708
armarx::NJointControllerBase::onDisconnectComponent
void onDisconnectComponent() final
Definition: NJointController.cpp:319
armarx::NJointControllerBase::threadHandlesMutex
std::mutex threadHandlesMutex
Definition: NJointControllerBase.h:770
armarx::detail::NJointControllerRegistryEntryHelper
Definition: NJointControllerBase.h:60
armarx::ManagedIceObject::getState
int getState() const
Retrieve current state of the ManagedIceObject.
Definition: ManagedIceObject.cpp:725
armarx::DebugObserverInterfacePrx
::IceInternal::ProxyHandle<::IceProxy::armarx::DebugObserverInterface > DebugObserverInterfacePrx
Definition: JointController.h:44
armarx::NJointControllerBase::getControlDeviceUsedControlModeMap
StringStringDictionary getControlDeviceUsedControlModeMap(const Ice::Current &=Ice::emptyCurrent) const final override
Definition: NJointControllerBase.h:1001
armarx::NJointControllerBase::onExitComponent
void onExitComponent() final
Definition: NJointController.cpp:326
detail
Definition: OpenCVUtil.cpp:127
armarx::JointController
The JointController class represents one joint in one control mode.
Definition: JointController.h:51
armarx::NJointControllerBase::getControllerDescription
NJointControllerDescription getControllerDescription(const Ice::Current &=Ice::emptyCurrent) const final override
Definition: NJointController.cpp:79
armarx::RobotUnitModule::NJointControllerAttorneyForControllerManagement
This class allows minimal access to private members of NJointControllerBase in a sane fashion for Con...
Definition: RobotUnitModuleControllerManagement.cpp:60
armarx::NJointControllerBase::onPublishDeactivation
virtual void onPublishDeactivation(const DebugDrawerInterfacePrx &, const DebugObserverInterfacePrx &)
Definition: NJointControllerBase.h:1068
armarx::NJointControllerBase::onConnectNJointController
virtual void onConnectNJointController()
Definition: NJointControllerBase.h:703
armarx::NJointControllerBase::ConfigPtrT
NJointControllerConfigPtr ConfigPtrT
Definition: NJointControllerBase.h:586
armarx::NJointControllerBase::callDescribedFunction
void callDescribedFunction(const std::string &, const StringVariantBaseMap &, const Ice::Current &=Ice::emptyCurrent) override
Definition: NJointControllerBase.h:828
armarx::NJointControllerBase::GenerateConfigFromVariantsFunctionSignature
ConfigPrtType(*)(const StringVariantBaseMap &) GenerateConfigFromVariantsFunctionSignature
Definition: NJointControllerBase.h:593
armarx::NJointControllerBase::isNotInConflictWith
std::optional< std::vector< char > > isNotInConflictWith(const NJointControllerBasePtr &other) const
Definition: NJointControllerBase.h:1027
armarx::NJointControllerBase::rtGetNumberOfUsedControlDevices
std::size_t rtGetNumberOfUsedControlDevices() const
Returns the number of used ControlDevices.
Definition: NJointControllerBase.h:901
armarx::NJointControllerBase::rtGetClassName
const std::string & rtGetClassName() const
Returns the class name.
Definition: NJointControllerBase.h:911
armarx::NJointControllerBase::NullPtr
static const NJointControllerBasePtr NullPtr
Definition: NJointControllerBase.h:987
armarx::SynchronousNJointController::rtRun
virtual void rtRun(const IceUtil::Time &sensorValuesTimestamp, const IceUtil::Time &timeSinceLastIteration)=0
TODO make protected and use attorneys.
armarx::ThreadPoolPtr
std::shared_ptr< ThreadPool > ThreadPoolPtr
Definition: Application.h:76
armarx::NJointControllerBase::onPublishActivation
virtual void onPublishActivation(const DebugDrawerInterfacePrx &, const DebugObserverInterfacePrx &)
Definition: NJointControllerBase.h:1063
armarx::NJointControllerBase::getControllerDescriptionWithStatus
NJointControllerDescriptionWithStatus getControllerDescriptionWithStatus(const Ice::Current &=Ice::emptyCurrent) const final override
Definition: NJointController.cpp:129
armarx::NJointControllerBase::onConnectComponent
void onConnectComponent() final
Definition: NJointController.cpp:312
armarx::NJointControllerBase::rtGetRobot
const VirtualRobot::RobotPtr & rtGetRobot()
TODO make protected and use attorneys.
Definition: NJointControllerBase.h:845
armarx::detail::ControlThreadOutputBufferEntry
Definition: ControlThreadOutputBuffer.h:175
armarx::RobotUnitModule::NJointControllerAttorneyForControlThread
This class allows minimal access to private members of NJointControllerBase in a sane fashion for Con...
Definition: RobotUnitModuleControlThread.cpp:52
cxxopts::value
std::shared_ptr< Value > value()
Definition: cxxopts.hpp:926
armarx::RemoteGui::Client::Widget
Definition: Widgets.h:21
armarx::NJointControllerBase::deactivateAndDeleteController
void deactivateAndDeleteController(const Ice::Current &=Ice::emptyCurrent) final override
Definition: NJointController.cpp:161
armarx::SynchronousNJointController::rtSwapBufferAndRun
virtual void rtSwapBufferAndRun(const IceUtil::Time &sensorValuesTimestamp, const IceUtil::Time &timeSinceLastIteration)
Definition: NJointControllerBase.h:1152
armarx::NJointControllerBase::rtPostDeactivateController
virtual void rtPostDeactivateController()
This function is called after the controller is deactivated.
Definition: NJointControllerBase.h:941
ManagedIceObject.h
ThreadPool.h
armarx::NJointControllerBase::rtUsesControlDevice
bool rtUsesControlDevice(std::size_t deviceIndex) const
Returns whether this NJointControllerBase calculates a ControlTarget for the given ControlDevice.
Definition: NJointControllerBase.h:870
armarx::RobotUnitModule::NJointControllerAttorneyForPublisher
This class allows minimal access to private members of NJointControllerBase in a sane fashion for Pub...
Definition: RobotUnitModulePublisher.cpp:45
armarx::NJointControllerBase::isControllerActive
bool isControllerActive(const Ice::Current &=Ice::emptyCurrent) const final override
Definition: NJointControllerBase.h:777
armarx::NJointControllerBase::useSensorValue
const T * useSensorValue(const std::string &deviceName) const
Get a const ptr to the given SensorDevice's SensorValue.
Definition: NJointControllerBase.h:658
armarx::NJointControllerBase::isDeletable
bool isDeletable(const Ice::Current &=Ice::emptyCurrent) const final override
Definition: NJointControllerBase.h:789
armarx::NJointControllerBase::getThreadPool
ThreadPoolPtr getThreadPool() const
Definition: NJointController.cpp:376
armarx::NJointControllerBase::runTask
void runTask(const std::string &taskName, Task &&task)
Executes a given task in a separate thread from the Application ThreadPool.
Definition: NJointControllerBase.h:753
armarx::NJointControllerBase::getFunctionDescriptions
WidgetDescription::StringWidgetDictionary getFunctionDescriptions(const Ice::Current &=Ice::emptyCurrent) const override
Definition: NJointControllerBase.h:822
armarx::NJointControllerBase::getControllerStatus
NJointControllerStatus getControllerStatus(const Ice::Current &=Ice::emptyCurrent) const final override
Definition: NJointController.cpp:114
armarx::NJointControllerBase::onPublish
virtual void onPublish(const SensorAndControl &, const DebugDrawerInterfacePrx &, const DebugObserverInterfacePrx &)
Definition: NJointControllerBase.h:1073
armarx::AsynchronousNJointController
Definition: NJointControllerBase.h:1159
armarx::NJointControllerBase::rtGetErrorState
bool rtGetErrorState() const
Sets the error state to true.
Definition: NJointControllerBase.h:891
armarx::NJointControllerBase::onExitNJointController
virtual void onExitNJointController()
Definition: NJointControllerBase.h:713
armarx::NJointControllerBase::NJointControllerBase
NJointControllerBase()
Definition: NJointController.cpp:398
armarx::NJointControllerBase::peekControlDevice
ConstControlDevicePtr peekControlDevice(const std::string &deviceName) const
Get a const ptr to the given ControlDevice.
Definition: NJointController.cpp:284
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::NJointControllerBase::deleteController
void deleteController(const Ice::Current &=Ice::emptyCurrent) final override
Definition: NJointController.cpp:155
armarx::GetTypeString
std::string GetTypeString(const std::type_info &tinf, bool withoutNamespaceSpecifier=false)
Definition: GetTypeString.h:36
armarx::AsynchronousNJointController::rtRunIterationEnd
virtual void rtRunIterationEnd(const IceUtil::Time &sensorValuesTimestamp, const IceUtil::Time &timeSinceLastIteration)=0
armarx::WidgetDescription::WidgetPtr
::IceInternal::Handle<::armarx::WidgetDescription::Widget > WidgetPtr
Definition: NJointControllerBase.h:66
ExpressionException.h
armarx::NJointControllerBase::GenerateConfigDescriptionFunctionSignature
WidgetDescription::WidgetPtr(*)(const VirtualRobot::RobotPtr &, const std::map< std::string, ConstControlDevicePtr > &controlDevices, const std::map< std::string, ConstSensorDevicePtr > &sensorDevices) GenerateConfigDescriptionFunctionSignature
Definition: NJointControllerBase.h:590
armarx::ManagedIceObject
The ManagedIceObject is the base class for all ArmarX objects.
Definition: ManagedIceObject.h:163
armarx::NJointControllerBase::rtPreActivateController
virtual void rtPreActivateController()
This function is called before the controller is activated.
Definition: NJointControllerBase.h:932
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::NJointControllerPtr
SynchronousNJointControllerPtr NJointControllerPtr
Definition: NJointControllerBase.h:1169
armarx::NJointControllerBase
A high level controller writing its results into ControlTargets.
Definition: NJointControllerBase.h:578
armarx::RobotUnit
The RobotUnit class manages a robot and its controllers.
Definition: RobotUnit.h:180
armarx::NJointControllerBase::rtSetErrorState
void rtSetErrorState()
Sets the error state to true.
Definition: NJointControllerBase.h:949
armarx::NJointControllerBase::rtGetControlDeviceUsedIndices
const std::vector< std::size_t > & rtGetControlDeviceUsedIndices() const
Returns the indices of all ControlDevice's this NJointControllerBase calculates a ControlTarget for.
Definition: NJointControllerBase.h:882
armarx::NJointControllerBase::onInitNJointController
virtual void onInitNJointController()
Definition: NJointControllerBase.h:698
armarx::ConstSensorDevicePtr
std::shared_ptr< const class SensorDevice > ConstSensorDevicePtr
Definition: NJointControllerBase.h:77
armarx::RobotUnitInterfacePrx
::IceInternal::ProxyHandle<::IceProxy::armarx::RobotUnitInterface > RobotUnitInterfacePrx
Definition: NJointControllerBase.h:84
armarx::NJointControllerBase::hasControllerError
bool hasControllerError(const Ice::Current &=Ice::emptyCurrent) const final override
Definition: NJointControllerBase.h:795
T
float T
Definition: UnscentedKalmanFilterTest.cpp:35
armarx::DebugDrawerInterfacePrx
::IceInternal::ProxyHandle<::IceProxy::armarx::DebugDrawerInterface > DebugDrawerInterfacePrx
Definition: JointController.h:40
armarx::NJointControllerBase::AreNotInConflict
static std::optional< std::vector< char > > AreNotInConflict(ItT first, ItT last)
Definition: NJointControllerBase.h:1036
armarx::NJointControllerBase::getControlDeviceUsedIndices
const std::vector< std::size_t > & getControlDeviceUsedIndices() const
Definition: NJointControllerBase.h:1014
armarx::ConstControlDevicePtr
std::shared_ptr< const class ControlDevice > ConstControlDevicePtr
Definition: NJointControllerBase.h:76
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28
armarx::NJointControllerBase::useSensorValue
const SensorValueBase * useSensorValue(const std::string &sensorDeviceName) const
Get a const ptr to the given SensorDevice's SensorValue.
Definition: NJointController.cpp:383
armarx::NJointControllerBase::getDefaultName
std::string getDefaultName() const override
Definition: NJointControllerBase.h:683
armarx::NJointControllerBase::isControllerRequested
bool isControllerRequested(const Ice::Current &=Ice::emptyCurrent) const final override
Definition: NJointControllerBase.h:783
armarx::NJointControllerBase::getControlDeviceUsedBitmap
const std::vector< char > & getControlDeviceUsedBitmap() const
Definition: NJointControllerBase.h:1008