PlatformUnitDynamicSimulation.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2013-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 ArmarXSimulation::units
19  * @author Manfred Kroehnert (manfred dot kroehnert at kit dot edu)
20  * @date 2013
21  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22  * GNU General Public License
23  */
24 
25 #pragma once
26 
27 #include <cmath>
28 #include <string>
29 
30 #include <IceUtil/Time.h>
31 
34 
37 
38 #include <ArmarXSimulation/interface/simulator/SimulatorInterface.h>
39 
40 #include <MemoryX/interface/components/WorkingMemoryInterface.h>
41 
42 namespace armarx
43 {
44 
45  /**
46  * @class PlatformUnitDynamicSimulation
47  * @brief This unit connects to the physics simulator topic (default: "Simulator") and handles platform movements.
48  *
49  * @ingroup SensorActorUnits
50  * @ingroup ArmarXSimulatorComponents
51  */
53  virtual public PlatformUnit,
54  virtual public PlatformUnitDynamicSimulationInterface
55  {
56  public:
57  // inherited from Component
58  std::string
59  getDefaultName() const override
60  {
61  return "PlatformUnit";
62  }
63 
64  void onInitPlatformUnit() override;
65  void onStartPlatformUnit() override;
66  void onStopPlatformUnit() override;
67  void onExitPlatformUnit() override;
68 
69  void simulationFunction();
70 
71  // proxy implementation
72  void moveTo(Ice::Float targetPlatformPositionX,
73  Ice::Float targetPlatformPositionY,
74  Ice::Float targetPlatformRotation,
77  const Ice::Current& c = Ice::emptyCurrent) override;
78  void move(float targetPlatformVelocityX,
79  float targetPlatformVelocityY,
80  float targetPlatformVelocityRotation,
81  const Ice::Current& c = Ice::emptyCurrent) override;
82  void moveRelative(float targetPlatformOffsetX,
83  float targetPlatformOffsetY,
84  float targetPlatformOffsetRotation,
85  float positionalAccuracy,
87  const Ice::Current& c = Ice::emptyCurrent) override;
88  void setMaxVelocities(float linearVelocity,
89  float angularVelocity,
90  const Ice::Current& c = Ice::emptyCurrent) override;
91 
92  /**
93  * @see PropertyUser::createPropertyDefinitions()
94  */
96 
97  protected:
98  void updateCurrentPose(const PoseBasePtr& newPose);
99  void updateCurrentVelocity(const Vector3BasePtr& translationVel,
100  const Vector3BasePtr& rotationVel);
101 
102  // implement SimulatorRobotListener to receive robot updates from simulator
103  void reportState(SimulatedRobotState const& state, const Ice::Current&) override;
104 
105  //calc acceleration based on distance and current speed
106  Eigen::Vector3f calculateLinearVelocity(Eigen::Vector3f distance, Eigen::Vector3f curV);
107  float calculateAngularVelocity(float source, float target, float curV);
108 
109  float
110  clampf(float x, float min, float max)
111  {
112  return std::max<float>(std::min<float>(x, max), min);
113  }
114 
115  std::mutex currentPoseMutex;
118 
122 
124 
127 
132 
135 
138 
139  std::string referenceFrame;
140  std::string simulatorPrxName;
141  std::string robotName;
142  std::string platformName;
143 
144  ControlMode platformControlMode;
145 
146 
147  SimulatorInterfacePrx simulatorPrx;
148 
150 
151  // PlatformUnitInterface interface
152  public:
153  void stopPlatform(const Ice::Current& current) override;
154  };
155 } // namespace armarx
armarx::PlatformUnitDynamicSimulation::positionalAccuracy
::Ice::Float positionalAccuracy
Definition: PlatformUnitDynamicSimulation.h:136
armarx::PlatformUnitDynamicSimulation::updateCurrentVelocity
void updateCurrentVelocity(const Vector3BasePtr &translationVel, const Vector3BasePtr &rotationVel)
Definition: PlatformUnitDynamicSimulation.cpp:376
armarx::PlatformUnitDynamicSimulation::reportState
void reportState(SimulatedRobotState const &state, const Ice::Current &) override
Definition: PlatformUnitDynamicSimulation.cpp:396
armarx::PlatformUnitDynamicSimulation::referenceFrame
std::string referenceFrame
Definition: PlatformUnitDynamicSimulation.h:139
armarx::VariantType::Float
const VariantTypeId Float
Definition: Variant.h:919
armarx::PlatformUnitDynamicSimulation::currentPoseMutex
std::mutex currentPoseMutex
Definition: PlatformUnitDynamicSimulation.h:115
armarx::PlatformUnitDynamicSimulation::linearAccelerationMax
::Ice::Float linearAccelerationMax
Definition: PlatformUnitDynamicSimulation.h:130
armarx::PlatformUnitDynamicSimulation::simulatorPrxName
std::string simulatorPrxName
Definition: PlatformUnitDynamicSimulation.h:140
armarx::PlatformUnitDynamicSimulation::onStopPlatformUnit
void onStopPlatformUnit() override
Definition: PlatformUnitDynamicSimulation.cpp:88
armarx::PlatformUnitDynamicSimulation::platformOrientationOffset
::Ice::Float platformOrientationOffset
Definition: PlatformUnitDynamicSimulation.h:131
armarx::PlatformUnitDynamicSimulation::simulationFunction
void simulationFunction()
Definition: PlatformUnitDynamicSimulation.cpp:206
armarx::PlatformUnitDynamicSimulation::stopPlatform
void stopPlatform(const Ice::Current &current) override
Definition: PlatformUnitDynamicSimulation.cpp:193
Pose.h
armarx::PlatformUnitDynamicSimulation::updateCurrentPose
void updateCurrentPose(const PoseBasePtr &newPose)
Definition: PlatformUnitDynamicSimulation.cpp:345
armarx::PlatformUnitDynamicSimulation::simulationTask
PeriodicTask< PlatformUnitDynamicSimulation >::pointer_type simulationTask
Definition: PlatformUnitDynamicSimulation.h:149
boost::target
Vertex target(const detail::edge_base< Directed, Vertex > &e, const PCG &)
Definition: point_cloud_graph.h:668
armarx::PlatformUnitDynamicSimulation::calculateAngularVelocity
float calculateAngularVelocity(float source, float target, float curV)
Definition: PlatformUnitDynamicSimulation.cpp:169
armarx::max
std::vector< T > max(const std::vector< T > &v1, const std::vector< T > &v2)
Definition: VectorHelpers.h:297
PeriodicTask.h
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
armarx::PlatformUnitDynamicSimulation::onExitPlatformUnit
void onExitPlatformUnit() override
Definition: PlatformUnitDynamicSimulation.cpp:116
armarx::PlatformUnitDynamicSimulation::currentRotationVelocity
::Ice::Float currentRotationVelocity
Definition: PlatformUnitDynamicSimulation.h:126
armarx::PlatformUnitDynamicSimulation::orientationalAccuracy
::Ice::Float orientationalAccuracy
Definition: PlatformUnitDynamicSimulation.h:137
armarx::PlatformUnitDynamicSimulation
This unit connects to the physics simulator topic (default: "Simulator") and handles platform movemen...
Definition: PlatformUnitDynamicSimulation.h:52
armarx::PlatformUnitDynamicSimulation::angularAccelerationMax
::Ice::Float angularAccelerationMax
Definition: PlatformUnitDynamicSimulation.h:134
armarx::PlatformUnitDynamicSimulation::platformName
std::string platformName
Definition: PlatformUnitDynamicSimulation.h:142
armarx::PlatformUnitDynamicSimulation::move
void move(float targetPlatformVelocityX, float targetPlatformVelocityY, float targetPlatformVelocityRotation, const Ice::Current &c=Ice::emptyCurrent) override
Definition: PlatformUnitDynamicSimulation.cpp:289
armarx::PlatformUnit
The PlatformUnit class.
Definition: PlatformUnit.h:69
armarx::PlatformUnitDynamicSimulation::moveTo
void moveTo(Ice::Float targetPlatformPositionX, Ice::Float targetPlatformPositionY, Ice::Float targetPlatformRotation, Ice::Float positionalAccuracy, Ice::Float orientationalAccuracy, const Ice::Current &c=Ice::emptyCurrent) override
Definition: PlatformUnitDynamicSimulation.cpp:268
armarx::PlatformUnitDynamicSimulation::simulatorPrx
SimulatorInterfacePrx simulatorPrx
Definition: PlatformUnitDynamicSimulation.h:147
armarx::PlatformUnitDynamicSimulation::linearVelocityMax
::Ice::Float linearVelocityMax
Definition: PlatformUnitDynamicSimulation.h:129
armarx::PlatformUnitDynamicSimulation::createPropertyDefinitions
PropertyDefinitionsPtr createPropertyDefinitions() override
Definition: PlatformUnitDynamicSimulation.cpp:431
armarx::PlatformUnitDynamicSimulation::currentVelocity
Vector3 currentVelocity
Definition: PlatformUnitDynamicSimulation.h:125
armarx::Vector3
The Vector3 class.
Definition: Pose.h:112
armarx::PlatformUnitDynamicSimulation::targetRotation
::Ice::Float targetRotation
Definition: PlatformUnitDynamicSimulation.h:123
armarx::PlatformUnitDynamicSimulation::onInitPlatformUnit
void onInitPlatformUnit() override
Definition: PlatformUnitDynamicSimulation.cpp:40
boost::source
Vertex source(const detail::edge_base< Directed, Vertex > &e, const PCG &)
Definition: point_cloud_graph.h:661
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::PlatformUnitDynamicSimulation::intervalMs
int intervalMs
Definition: PlatformUnitDynamicSimulation.h:117
armarx::PlatformUnitDynamicSimulation::currentRotation
::Ice::Float currentRotation
Definition: PlatformUnitDynamicSimulation.h:121
PlatformUnit.h
armarx::PlatformUnitDynamicSimulation::targetPosition
Vector3 targetPosition
Definition: PlatformUnitDynamicSimulation.h:120
IceUtil::Handle
Definition: forward_declarations.h:30
armarx::min
std::vector< T > min(const std::vector< T > &v1, const std::vector< T > &v2)
Definition: VectorHelpers.h:327
armarx::PlatformUnitDynamicSimulation::moveRelative
void moveRelative(float targetPlatformOffsetX, float targetPlatformOffsetY, float targetPlatformOffsetRotation, float positionalAccuracy, float orientationalAccuracy, const Ice::Current &c=Ice::emptyCurrent) override
Definition: PlatformUnitDynamicSimulation.cpp:312
armarx::PlatformUnitDynamicSimulation::currentPosition
Vector3 currentPosition
Definition: PlatformUnitDynamicSimulation.h:119
armarx::PlatformUnitDynamicSimulation::lastExecutionTime
IceUtil::Time lastExecutionTime
Definition: PlatformUnitDynamicSimulation.h:116
armarx::PlatformUnitDynamicSimulation::platformControlMode
ControlMode platformControlMode
Definition: PlatformUnitDynamicSimulation.h:144
armarx::PlatformUnitDynamicSimulation::onStartPlatformUnit
void onStartPlatformUnit() override
Definition: PlatformUnitDynamicSimulation.cpp:97
armarx::PlatformUnitDynamicSimulation::setMaxVelocities
void setMaxVelocities(float linearVelocity, float angularVelocity, const Ice::Current &c=Ice::emptyCurrent) override
Definition: PlatformUnitDynamicSimulation.cpp:336
distance
double distance(const Point &a, const Point &b)
Definition: point.hpp:95
armarx::PlatformUnitDynamicSimulation::calculateLinearVelocity
Eigen::Vector3f calculateLinearVelocity(Eigen::Vector3f distance, Eigen::Vector3f curV)
Definition: PlatformUnitDynamicSimulation.cpp:122
armarx::PlatformUnitDynamicSimulation::linearVelocityMin
::Ice::Float linearVelocityMin
Definition: PlatformUnitDynamicSimulation.h:128
armarx::PlatformUnitDynamicSimulation::getDefaultName
std::string getDefaultName() const override
Retrieve default name of component.
Definition: PlatformUnitDynamicSimulation.h:59
armarx::PlatformUnitDynamicSimulation::angularVelocityMax
::Ice::Float angularVelocityMax
Definition: PlatformUnitDynamicSimulation.h:133
armarx::PlatformUnitDynamicSimulation::clampf
float clampf(float x, float min, float max)
Definition: PlatformUnitDynamicSimulation.h:110
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::PlatformUnitDynamicSimulation::robotName
std::string robotName
Definition: PlatformUnitDynamicSimulation.h:141
ImportExportComponent.h