KinematicUnitSimulation.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5  *
6  * ArmarX is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * ArmarX is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * @package ArmarXCore::units
19  * @author Christian Boege (boege dot at kit dot edu)
20  * @date 2011
21  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22  * GNU General Public License
23  */
24 
25 #pragma once
26 
27 #include <mutex>
28 #include <random>
29 
30 #include <IceUtil/Time.h>
31 
34 
36 
37 #include "KinematicUnit.h"
38 
39 namespace armarx
40 {
41  /**
42  * \class KinematicUnitSimulationJointState.
43  * \brief State of a joint.
44  * \ingroup RobotAPI-SensorActorUnits-util
45  *
46  * Includes the control mode, the joint angle, velocity, torque, and motor temperature.
47  * Controlmode defaults to ePositionControl, all other values default to zero.
48  */
50  {
51  public:
53  {
54  init();
55  }
56 
57  void
58  init()
59  {
60  controlMode = eDisabled;
61  angle = 0.0f;
62  velocity = 0.0f;
63  velocityActual = 0.0f;
64  torque = 0.0f;
65  temperature = 0.0f;
66  }
67 
68  ControlMode controlMode;
69  float angle;
70  float velocity;
72  float torque;
73  float temperature;
74  };
75 
77  std::map<std::string, KinematicUnitSimulationJointState>;
78 
79  /**
80  * \class JointInfo.
81  * \brief Additional information about a joint.
82  * \ingroup RobotAPI-SensorActorUnits-util
83  *
84  * Joint info including lower and upper joint limits (rad).
85  * No limits are set by default (lo = hi).
86  */
88  {
89  public:
91  {
92  reset();
93  }
94 
95  void
97  {
98  limitLo = 0.0f;
99  limitHi = 0.0f;
100  }
101 
102  bool
103  hasLimits() const
104  {
105  return (limitLo != limitHi);
106  }
107 
108  bool
110  {
111  return !hasLimits() || limitLo - limitHi >= 360.0f;
112  }
113 
114  float limitLo;
115  float limitHi;
116  };
117 
119  std::map<std::string, KinematicUnitSimulationJointInfo>;
120 
121  /**
122  * \class KinematicUnitSimulationPropertyDefinitions
123  * \brief
124  */
126  {
127  public:
129  };
130 
131  /**
132  * \class KinematicUnitSimulation
133  * \brief Simulates robot kinematics
134  * \ingroup RobotAPI-SensorActorUnits-simulation
135  */
136  class KinematicUnitSimulation : virtual public KinematicUnit
137  {
138  public:
139  // inherited from Component
140  std::string
141  getDefaultName() const override
142  {
143  return "KinematicUnitSimulation";
144  }
145 
146  void onInitKinematicUnit() override;
147  void onStartKinematicUnit() override;
148  void onExitKinematicUnit() override;
149 
150  void simulationFunction();
151 
152  // proxy implementation
153  void requestJoints(const Ice::StringSeq& joints,
154  const Ice::Current& c = Ice::emptyCurrent) override;
155  void releaseJoints(const Ice::StringSeq& joints,
156  const Ice::Current& c = Ice::emptyCurrent) override;
157  void switchControlMode(const NameControlModeMap& targetJointModes,
158  const Ice::Current& c = Ice::emptyCurrent) override;
159  void setJointAngles(const NameValueMap& targetJointAngles,
160  const Ice::Current& c = Ice::emptyCurrent) override;
161  void setJointVelocities(const NameValueMap& targetJointVelocities,
162  const Ice::Current& c = Ice::emptyCurrent) override;
163  void setJointTorques(const NameValueMap& targetJointTorques,
164  const Ice::Current& c = Ice::emptyCurrent) override;
165 
166  NameControlModeMap getControlModes(const Ice::Current& c = Ice::emptyCurrent) override;
167 
168  /// @warning Not implemented yet!
169  void setJointAccelerations(const NameValueMap& targetJointAccelerations,
170  const Ice::Current& c = Ice::emptyCurrent) override;
171 
172  /// @warning Not implemented yet!
173  void setJointDecelerations(const NameValueMap& targetJointDecelerations,
174  const Ice::Current& c = Ice::emptyCurrent) override;
175 
176  void stop(const Ice::Current& c = Ice::emptyCurrent) override;
177 
178  armarx::NameValueMap getJointAngles(const Ice::Current& c) const override;
179  armarx::NameValueMap getJointVelocities(const Ice::Current& c) const override;
180  Ice::StringSeq getJoints(const Ice::Current& c) const override;
181 
182  DebugInfo getDebugInfo(const Ice::Current& c = Ice::emptyCurrent) const override;
183 
184  /// @see PropertyUser::createPropertyDefinitions()
186 
187  protected:
191  mutable std::mutex jointStatesMutex;
193  float noise;
195  std::normal_distribution<double> distribution;
196  std::default_random_engine generator;
198  std::map<std::string, PIDControllerPtr> positionControlPIDController;
200 
201  mutable std::mutex sensorDataMutex;
204  };
205 } // namespace armarx
armarx::KinematicUnitSimulationJointState::velocityActual
float velocityActual
Definition: KinematicUnitSimulation.h:71
armarx::KinematicUnitSimulation::switchControlMode
void switchControlMode(const NameControlModeMap &targetJointModes, const Ice::Current &c=Ice::emptyCurrent) override
Definition: KinematicUnitSimulation.cpp:266
armarx::KinematicUnitSimulationJointInfo::KinematicUnitSimulationJointInfo
KinematicUnitSimulationJointInfo()
Definition: KinematicUnitSimulation.h:90
armarx::KinematicUnitSimulationJointState::velocity
float velocity
Definition: KinematicUnitSimulation.h:70
armarx::KinematicUnitSimulation::requestJoints
void requestJoints(const Ice::StringSeq &joints, const Ice::Current &c=Ice::emptyCurrent) override
Definition: KinematicUnitSimulation.cpp:552
armarx::KinematicUnitSimulation::setJointDecelerations
void setJointDecelerations(const NameValueMap &targetJointDecelerations, const Ice::Current &c=Ice::emptyCurrent) override
Definition: KinematicUnitSimulation.cpp:474
armarx::KinematicUnitSimulationJointState::torque
float torque
Definition: KinematicUnitSimulation.h:72
armarx::KinematicUnit
The KinematicUnit class.
Definition: KinematicUnit.h:82
armarx::KinematicUnitSimulationJointState::temperature
float temperature
Definition: KinematicUnitSimulation.h:73
armarx::KinematicUnitSimulation::getJoints
Ice::StringSeq getJoints(const Ice::Current &c) const override
Definition: KinematicUnitSimulation.cpp:518
armarx::KinematicUnitSimulation::getDefaultName
std::string getDefaultName() const override
Retrieve default name of component.
Definition: KinematicUnitSimulation.h:141
armarx::KinematicUnitSimulation::createPropertyDefinitions
PropertyDefinitionsPtr createPropertyDefinitions() override
Definition: KinematicUnitSimulation.cpp:497
armarx::PropertyDefinitionContainer::prefix
std::string prefix
Prefix of the properties such as namespace, domain, component name, etc.
Definition: PropertyDefinitionContainer.h:345
PeriodicTask.h
armarx::KinematicUnitSimulation::releaseJoints
void releaseJoints(const Ice::StringSeq &joints, const Ice::Current &c=Ice::emptyCurrent) override
Definition: KinematicUnitSimulation.cpp:565
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
armarx::KinematicUnitSimulation
Simulates robot kinematics.
Definition: KinematicUnitSimulation.h:136
KinematicUnit.h
armarx::KinematicUnitSimulation::setJointAccelerations
void setJointAccelerations(const NameValueMap &targetJointAccelerations, const Ice::Current &c=Ice::emptyCurrent) override
Definition: KinematicUnitSimulation.cpp:467
armarx::KinematicUnitSimulation::getDebugInfo
DebugInfo getDebugInfo(const Ice::Current &c=Ice::emptyCurrent) const override
Definition: KinematicUnitSimulation.cpp:525
armarx::KinematicUnitSimulation::stop
void stop(const Ice::Current &c=Ice::emptyCurrent) override
Definition: KinematicUnitSimulation.cpp:481
armarx::KinematicUnitSimulation::sensorAngles
NameValueMap sensorAngles
Definition: KinematicUnitSimulation.h:202
armarx::KinematicUnitSimulation::jointStatesMutex
std::mutex jointStatesMutex
Definition: KinematicUnitSimulation.h:191
armarx::KinematicUnitSimulationJointInfo::limitHi
float limitHi
Definition: KinematicUnitSimulation.h:115
armarx::KinematicUnitSimulation::onStartKinematicUnit
void onStartKinematicUnit() override
Definition: KinematicUnitSimulation.cpp:123
armarx::KinematicUnitSimulationJointInfos
std::map< std::string, KinematicUnitSimulationJointInfo > KinematicUnitSimulationJointInfos
Definition: KinematicUnitSimulation.h:119
armarx::KinematicUnitSimulationJointInfo::limitLo
float limitLo
Definition: KinematicUnitSimulation.h:114
armarx::KinematicUnitSimulation::setJointTorques
void setJointTorques(const NameValueMap &targetJointTorques, const Ice::Current &c=Ice::emptyCurrent) override
Definition: KinematicUnitSimulation.cpp:414
armarx::KinematicUnitSimulationJointState::angle
float angle
Definition: KinematicUnitSimulation.h:69
armarx::KinematicUnitSimulationJointState::KinematicUnitSimulationJointState
KinematicUnitSimulationJointState()
Definition: KinematicUnitSimulation.h:52
armarx::KinematicUnitSimulation::simulationFunction
void simulationFunction()
Definition: KinematicUnitSimulation.cpp:136
armarx::KinematicUnitSimulation::getControlModes
NameControlModeMap getControlModes(const Ice::Current &c=Ice::emptyCurrent) override
Definition: KinematicUnitSimulation.cpp:452
armarx::KinematicUnitSimulation::sensorDataMutex
std::mutex sensorDataMutex
Definition: KinematicUnitSimulation.h:201
armarx::KinematicUnitSimulationJointStates
std::map< std::string, KinematicUnitSimulationJointState > KinematicUnitSimulationJointStates
Definition: KinematicUnitSimulation.h:77
armarx::KinematicUnitSimulation::usePDControllerForPosMode
bool usePDControllerForPosMode
Definition: KinematicUnitSimulation.h:197
armarx::KinematicUnitSimulationJointState
State of a joint.
Definition: KinematicUnitSimulation.h:49
armarx::KinematicUnitPropertyDefinitions
Definition: KinematicUnit.h:44
armarx::KinematicUnitSimulation::simulationTask
PeriodicTask< KinematicUnitSimulation >::pointer_type simulationTask
Definition: KinematicUnitSimulation.h:199
armarx::KinematicUnitSimulation::setJointVelocities
void setJointVelocities(const NameValueMap &targetJointVelocities, const Ice::Current &c=Ice::emptyCurrent) override
Definition: KinematicUnitSimulation.cpp:376
armarx::KinematicUnitSimulation::intervalMs
int intervalMs
Definition: KinematicUnitSimulation.h:194
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::KinematicUnitSimulationJointState::init
void init()
Definition: KinematicUnitSimulation.h:58
armarx::KinematicUnitSimulation::sensorVelocities
NameValueMap sensorVelocities
Definition: KinematicUnitSimulation.h:203
PIDController.h
armarx::control::njoint_controller::platform::platform_follower_controller::NameValueMap
std::map< std::string, float > NameValueMap
Definition: PlatformFollowerController.h:88
armarx::KinematicUnitSimulationPropertyDefinitions::KinematicUnitSimulationPropertyDefinitions
KinematicUnitSimulationPropertyDefinitions(std::string prefix)
Definition: KinematicUnitSimulation.cpp:44
armarx::KinematicUnitSimulation::onInitKinematicUnit
void onInitKinematicUnit() override
Definition: KinematicUnitSimulation.cpp:62
armarx::KinematicUnitSimulation::distribution
std::normal_distribution< double > distribution
Definition: KinematicUnitSimulation.h:195
armarx::KinematicUnitSimulation::getJointAngles
armarx::NameValueMap getJointAngles(const Ice::Current &c) const override
Definition: KinematicUnitSimulation.cpp:504
armarx::KinematicUnitSimulationJointInfo::reset
void reset()
Definition: KinematicUnitSimulation.h:96
IceUtil::Handle
Definition: forward_declarations.h:30
armarx::KinematicUnitSimulationJointInfo::continuousJoint
bool continuousJoint() const
Definition: KinematicUnitSimulation.h:109
armarx::KinematicUnitSimulationJointState::controlMode
ControlMode controlMode
Definition: KinematicUnitSimulation.h:68
armarx::KinematicUnitSimulation::noise
float noise
Definition: KinematicUnitSimulation.h:193
armarx::KinematicUnitSimulationPropertyDefinitions
Definition: KinematicUnitSimulation.h:125
armarx::KinematicUnitSimulation::jointStates
KinematicUnitSimulationJointStates jointStates
Definition: KinematicUnitSimulation.h:188
armarx::KinematicUnitSimulation::onExitKinematicUnit
void onExitKinematicUnit() override
Definition: KinematicUnitSimulation.cpp:130
armarx::KinematicUnitSimulation::jointInfos
KinematicUnitSimulationJointInfos jointInfos
Definition: KinematicUnitSimulation.h:190
armarx::KinematicUnitSimulation::lastExecutionTime
IceUtil::Time lastExecutionTime
Definition: KinematicUnitSimulation.h:192
armarx::KinematicUnitSimulation::generator
std::default_random_engine generator
Definition: KinematicUnitSimulation.h:196
armarx::KinematicUnitSimulationJointInfo
Definition: KinematicUnitSimulation.h:87
armarx::KinematicUnitSimulation::positionControlPIDController
std::map< std::string, PIDControllerPtr > positionControlPIDController
Definition: KinematicUnitSimulation.h:198
armarx::KinematicUnitSimulationJointInfo::hasLimits
bool hasLimits() const
Definition: KinematicUnitSimulation.h:103
armarx::KinematicUnitSimulation::getJointVelocities
armarx::NameValueMap getJointVelocities(const Ice::Current &c) const override
Definition: KinematicUnitSimulation.cpp:511
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::KinematicUnitSimulation::setJointAngles
void setJointAngles(const NameValueMap &targetJointAngles, const Ice::Current &c=Ice::emptyCurrent) override
Definition: KinematicUnitSimulation.cpp:308
armarx::KinematicUnitSimulation::previousJointStates
KinematicUnitSimulationJointStates previousJointStates
Definition: KinematicUnitSimulation.h:189
ImportExportComponent.h