CartesianPositionController.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),
5  * Karlsruhe Institute of Technology (KIT), all rights reserved.
6  *
7  * ArmarX is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  *
11  * ArmarX is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  *
19  * @author Simon Ottenhaus (simon dot ottenhaus at kit dot edu)
20  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
21  * GNU General Public License
22  */
23 
24 #pragma once
25 
26 #include <Eigen/Dense>
27 
28 #include <VirtualRobot/IK/IKSolver.h>
29 #include <VirtualRobot/VirtualRobot.h>
30 
33 
34 #include <RobotAPI/interface/core/CartesianPositionControllerConfig.h>
35 
36 namespace armarx
37 {
38  class CartesianPositionController;
39  using CartesianPositionControllerPtr = std::shared_ptr<CartesianPositionController>;
40 
41  // This is a P-controller. In: Target pose, out Cartesian velocity.
43  {
44  public:
45  CartesianPositionController(const VirtualRobot::RobotNodePtr& tcp,
46  const VirtualRobot::RobotNodePtr& referenceFrame = nullptr);
47 
50 
51  Eigen::VectorXf calculate(const Eigen::Matrix4f& targetPose,
53  Eigen::VectorXf calculatePos(const Eigen::Vector3f& targetPos) const;
54 
55  float getPositionError(const Eigen::Matrix4f& targetPose) const;
56  float getOrientationError(const Eigen::Matrix4f& targetPose) const;
57  static float GetPositionError(const Eigen::Matrix4f& targetPose,
58  const VirtualRobot::RobotNodePtr& tcp,
59  const VirtualRobot::RobotNodePtr& referenceFrame = nullptr);
60  static float
61  GetOrientationError(const Eigen::Matrix4f& targetPose,
62  const VirtualRobot::RobotNodePtr& tcp,
63  const VirtualRobot::RobotNodePtr& referenceFrame = nullptr);
64  static bool Reached(const Eigen::Matrix4f& targetPose,
65  const VirtualRobot::RobotNodePtr& tcp,
66  bool checkOri,
67  float thresholdPosReached,
68  float thresholdOriReached,
69  const VirtualRobot::RobotNodePtr& referenceFrame = nullptr);
70  bool reached(const Eigen::Matrix4f& targetPose,
72  float thresholdPosReached,
73  float thresholdOriReached);
74 
75  Eigen::Vector3f getPositionDiff(const Eigen::Matrix4f& targetPose) const;
76  Eigen::Vector3f getPositionDiffVec3(const Eigen::Vector3f& targetPosition) const;
77  Eigen::Vector3f getOrientationDiff(const Eigen::Matrix4f& targetPose) const;
78  VirtualRobot::RobotNodePtr getTcp() const;
79 
80  float KpPos = 1;
81  float KpOri = 1;
82  float maxPosVel = -1;
83  float maxOriVel = -1;
84 
85 
86  private:
87  VirtualRobot::RobotNodePtr tcp;
88  VirtualRobot::RobotNodePtr referenceFrame;
89  };
90 } // namespace armarx
91 
92 namespace armarx::VariantType
93 {
94  // variant types
96  Variant::addTypeName("::armarx::CartesianPositionControllerConfig");
97 } // namespace armarx::VariantType
98 
99 namespace armarx
100 {
101  class CartesianPositionControllerConfig : virtual public CartesianPositionControllerConfigBase
102  {
103  public:
105 
106  // inherited from VariantDataClass
108  ice_clone() const override
109  {
110  return this->clone();
111  }
112 
113  VariantDataClassPtr
114  clone(const Ice::Current& = ::Ice::Current()) const override
115  {
116  return new CartesianPositionControllerConfig(*this);
117  }
118 
119  std::string output(const Ice::Current& c = ::Ice::Current()) const override;
120 
122  getType(const Ice::Current& = ::Ice::Current()) const override
123  {
125  }
126 
127  bool
128  validate(const Ice::Current& = ::Ice::Current()) override
129  {
130  return true;
131  }
132 
133  friend std::ostream&
134  operator<<(std::ostream& stream, const CartesianPositionControllerConfig& rhs)
135  {
136  stream << "CartesianPositionControllerConfig: " << std::endl
137  << rhs.output() << std::endl;
138  return stream;
139  }
140 
141  public: // serialization
142  void serialize(const armarx::ObjectSerializerBasePtr& serializer,
143  const ::Ice::Current& = ::Ice::Current()) const override;
144  void deserialize(const armarx::ObjectSerializerBasePtr& serializer,
145  const ::Ice::Current& = ::Ice::Current()) override;
146  };
147 
150 } // namespace armarx
armarx::CartesianPositionController::CartesianPositionController
CartesianPositionController(const VirtualRobot::RobotNodePtr &tcp, const VirtualRobot::RobotNodePtr &referenceFrame=nullptr)
Definition: CartesianPositionController.cpp:37
armarx::CartesianPositionControllerConfig::validate
bool validate(const Ice::Current &=::Ice::Current()) override
Definition: CartesianPositionController.h:128
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::VariantType::CartesianPositionControllerConfig
const VariantTypeId CartesianPositionControllerConfig
Definition: CartesianPositionController.h:95
armarx::CartesianPositionController::maxPosVel
float maxPosVel
Definition: CartesianPositionController.h:82
armarx::CartesianPositionController::calculatePos
Eigen::VectorXf calculatePos(const Eigen::Vector3f &targetPos) const
Definition: CartesianPositionController.cpp:87
AbstractObjectSerializer.h
armarx::CartesianPositionControllerPtr
std::shared_ptr< CartesianPositionController > CartesianPositionControllerPtr
Definition: CartesianPositionController.h:39
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:46
armarx::CartesianPositionController::GetOrientationError
static float GetOrientationError(const Eigen::Matrix4f &targetPose, const VirtualRobot::RobotNodePtr &tcp, const VirtualRobot::RobotNodePtr &referenceFrame=nullptr)
Definition: CartesianPositionController.cpp:129
armarx::CartesianPositionController::getPositionDiff
Eigen::Vector3f getPositionDiff(const Eigen::Matrix4f &targetPose) const
Definition: CartesianPositionController.cpp:182
armarx::CartesianPositionControllerConfig::operator<<
friend std::ostream & operator<<(std::ostream &stream, const CartesianPositionControllerConfig &rhs)
Definition: CartesianPositionController.h:134
armarx::CartesianPositionController::reached
bool reached(const Eigen::Matrix4f &targetPose, VirtualRobot::IKSolver::CartesianSelection mode, float thresholdPosReached, float thresholdOriReached)
Definition: CartesianPositionController.cpp:158
IceInternal::Handle
Definition: forward_declarations.h:8
armarx::CartesianPositionController::getPositionError
float getPositionError(const Eigen::Matrix4f &targetPose) const
Definition: CartesianPositionController.cpp:104
armarx::CartesianPositionControllerConfig
Definition: CartesianPositionController.h:101
armarx::CartesianPositionController::getPositionDiffVec3
Eigen::Vector3f getPositionDiffVec3(const Eigen::Vector3f &targetPosition) const
Definition: CartesianPositionController.cpp:190
armarx::CartesianPositionControllerConfig::serialize
void serialize(const armarx::ObjectSerializerBasePtr &serializer, const ::Ice::Current &=::Ice::Current()) const override
Definition: CartesianPositionController.cpp:238
armarx::CartesianPositionController::KpOri
float KpOri
Definition: CartesianPositionController.h:81
armarx::CartesianPositionController::GetPositionError
static float GetPositionError(const Eigen::Matrix4f &targetPose, const VirtualRobot::RobotNodePtr &tcp, const VirtualRobot::RobotNodePtr &referenceFrame=nullptr)
Definition: CartesianPositionController.cpp:116
armarx::NJointTaskSpaceDMPControllerMode::CartesianSelection
CartesianSelection
Definition: ControllerInterface.ice:34
armarx::VariantType
Definition: ChannelRef.h:167
armarx::VariantTypeId
Ice::Int VariantTypeId
Definition: Variant.h:43
armarx::CartesianPositionControllerConfig::CartesianPositionControllerConfig
CartesianPositionControllerConfig()
Definition: CartesianPositionController.cpp:216
armarx::CartesianPositionController::getTcp
VirtualRobot::RobotNodePtr getTcp() const
Definition: CartesianPositionController.cpp:207
armarx::CartesianPositionController::operator=
CartesianPositionController & operator=(CartesianPositionController &&)=default
armarx::CartesianPositionControllerConfig::output
std::string output(const Ice::Current &c=::Ice::Current()) const override
Definition: CartesianPositionController.cpp:221
armarx::CartesianPositionControllerConfig::clone
VariantDataClassPtr clone(const Ice::Current &=::Ice::Current()) const override
Definition: CartesianPositionController.h:114
armarx::CartesianPositionController::getOrientationDiff
Eigen::Vector3f getOrientationDiff(const Eigen::Matrix4f &targetPose) const
Definition: CartesianPositionController.cpp:196
armarx::CartesianPositionControllerConfigPtr
IceInternal::Handle< CartesianPositionControllerConfig > CartesianPositionControllerConfigPtr
Definition: CartesianPositionController.h:149
armarx::CartesianPositionController
Definition: CartesianPositionController.h:42
armarx::CartesianPositionController::maxOriVel
float maxOriVel
Definition: CartesianPositionController.h:83
armarx::CartesianPositionController::Reached
static bool Reached(const Eigen::Matrix4f &targetPose, const VirtualRobot::RobotNodePtr &tcp, bool checkOri, float thresholdPosReached, float thresholdOriReached, const VirtualRobot::RobotNodePtr &referenceFrame=nullptr)
Definition: CartesianPositionController.cpp:145
armarx::CartesianPositionControllerConfig::deserialize
void deserialize(const armarx::ObjectSerializerBasePtr &serializer, const ::Ice::Current &=::Ice::Current()) override
Definition: CartesianPositionController.cpp:254
armarx::aron::type::ObjectPtr
std::shared_ptr< Object > ObjectPtr
Definition: Object.h:36
armarx::CartesianPositionController::KpPos
float KpPos
Definition: CartesianPositionController.h:80
armarx::CartesianPositionControllerConfig::getType
VariantTypeId getType(const Ice::Current &=::Ice::Current()) const override
Definition: CartesianPositionController.h:122
armarx::CartesianPositionControllerConfig::ice_clone
Ice::ObjectPtr ice_clone() const override
Definition: CartesianPositionController.h:108
Variant.h
armarx::CartesianPositionController::getOrientationError
float getOrientationError(const Eigen::Matrix4f &targetPose) const
Definition: CartesianPositionController.cpp:110
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::Variant::addTypeName
static VariantTypeId addTypeName(const std::string &typeName)
Register a new type for the use in a Variant.
Definition: Variant.cpp:869
armarx::CartesianPositionController::calculate
Eigen::VectorXf calculate(const Eigen::Matrix4f &targetPose, VirtualRobot::IKSolver::CartesianSelection mode) const
Definition: CartesianPositionController.cpp:45