MIRA
Wrench.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) by
3  * MetraLabs GmbH (MLAB), GERMANY
4  * and
5  * Neuroinformatics and Cognitive Robotics Labs (NICR) at TU Ilmenau, GERMANY
6  * All rights reserved.
7  *
8  * Contact: info@mira-project.org
9  *
10  * Commercial Usage:
11  * Licensees holding valid commercial licenses may use this file in
12  * accordance with the commercial license agreement provided with the
13  * software or, alternatively, in accordance with the terms contained in
14  * a written agreement between you and MLAB or NICR.
15  *
16  * GNU General Public License Usage:
17  * Alternatively, this file may be used under the terms of the GNU
18  * General Public License version 3.0 as published by the Free Software
19  * Foundation and appearing in the file LICENSE.GPL3 included in the
20  * packaging of this file. Please review the following information to
21  * ensure the GNU General Public License version 3.0 requirements will be
22  * met: http://www.gnu.org/copyleft/gpl.html.
23  * Alternatively you may (at your option) use any later version of the GNU
24  * General Public License if such license has been publicly approved by
25  * MLAB and NICR (or its successors, if any).
26  *
27  * IN NO EVENT SHALL "MLAB" OR "NICR" BE LIABLE TO ANY PARTY FOR DIRECT,
28  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
29  * THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF "MLAB" OR
30  * "NICR" HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  * "MLAB" AND "NICR" SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING,
33  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
34  * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
35  * ON AN "AS IS" BASIS, AND "MLAB" AND "NICR" HAVE NO OBLIGATION TO
36  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS.
37  */
38 
47 #ifndef _MIRA_WRENCH_H_
48 #define _MIRA_WRENCH_H_
49 
50 #include <math/Eigen.h>
51 
52 #include <utils/IsCheapToCopy.h>
53 
54 namespace mira { namespace robot {
55 
57 
62 template <typename ScalarType>
63 class Wrench2
64 {
66 
67 public:
68 
69  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
70 
73 
74  Wrench2() {}
75 
81  Wrench2(const VectorType& f, ScalarType t) :
82  force(f),
83  torque(t)
84  {}
85 
86  template<typename Reflector>
87  void reflect(Reflector& r)
88  {
89  r.property("Force", force, "The force");
90  r.property("Torque", torque, "The torque");
91  }
92 
94 
95 public:
99  ScalarType torque;
100 };
101 
103 template <typename ScalarType>
104 class Wrench3
105 {
107 
108 public:
109 
110  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
111 
114 
115  Wrench3() {}
116 
122  Wrench3(const VectorType& f, const VectorType& t) :
123  force(f),
124  torque(t)
125  {}
126 
127  template<typename Reflector>
128  void reflect(Reflector& r)
129  {
130  r.property("Force", force, "The force");
131  r.property("Torque", torque, "The torque");
132  }
133 
135 
136 public:
141 };
142 
149 
153 template<typename ScalarType>
155 {
156  Eigen::Matrix<ScalarType,3,3> rot = trans.r.toRotationMatrix();
157  return Wrench3<ScalarType>(rot*w.force, rot*w.torque);
158 }
159 
165 template<typename ScalarType>
167 {
168  Eigen::Matrix<ScalarType,3,3> rot = trans.r.toRotationMatrix();
169  return Wrench3<ScalarType>(rot*w.force, rot*(w.torque-trans.t.cross(w.torque)));
170 }
171 
173 
177 
181 
183 
184 } // namespace robot
185 
186 template <>
187 class IsCheapToCopy<robot::Wrench2f> : public std::true_type {};
188 
189 template <>
190 class IsCheapToCopy<robot::Wrench2d> : public std::true_type {};
191 
192 template <>
193 class IsCheapToCopy<robot::Wrench3f> : public std::true_type {};
194 
195 template <>
196 class IsCheapToCopy<robot::Wrench3d> : public std::true_type {};
197 
199 
200 } // namespace mira
201 
202 #endif
void reflect(Reflector &r)
Definition: Wrench.h:87
Wrench class.
Definition: Wrench.h:63
Wrench3< float > Wrench3f
3D Wrench
Definition: Wrench.h:179
VectorType torque
The torque.
Definition: Wrench.h:140
VectorType force
The force.
Definition: Wrench.h:138
Wrench2< double > Wrench2d
Definition: Wrench.h:176
Wrench3< ScalarType > operator*(const Pose3 &trans, const Wrench3< ScalarType > &w)
The * operator simply rotates the vectors of force and torque into another frame. ...
Definition: Wrench.h:154
void reflect(Reflector &r)
Definition: Wrench.h:128
Wrench2< float > Wrench2f
2D Wrench
Definition: Wrench.h:175
Wrench3< double > Wrench3d
Definition: Wrench.h:180
Wrench2()
Definition: Wrench.h:74
ScalarType torque
The torque.
Definition: Wrench.h:99
Definition: Wrench.h:104
VectorType force
The force.
Definition: Wrench.h:97
Wrench3< ScalarType > operator^(const Pose3 &trans, const Wrench3< ScalarType > &w)
The ^ operator applies the translation vector of the transform with the given force and computes the ...
Definition: Wrench.h:166
Wrench2(const VectorType &f, ScalarType t)
Construct a new wrench object.
Definition: Wrench.h:81
Wrench3()
Definition: Wrench.h:115
Wrench3(const VectorType &f, const VectorType &t)
Construct a new wrench object.
Definition: Wrench.h:122