pinocchio  3.7.0
A fast and flexible implementation of Rigid Body Dynamics algorithms and their analytical derivatives
 
Loading...
Searching...
No Matches
force-ref.hpp
1//
2// Copyright (c) 2017-2019 CNRS INRIA
3//
4
5#ifndef __pinocchio_spatial_force_ref_hpp__
6#define __pinocchio_spatial_force_ref_hpp__
7
8namespace pinocchio
9{
10
11 template<typename Vector6ArgType>
13 {
14 typedef typename Vector6ArgType::Scalar Scalar;
15 typedef typename PINOCCHIO_EIGEN_PLAIN_TYPE(Vector6ArgType) Vector6;
16 enum
17 {
18 LINEAR = 0,
19 ANGULAR = 3,
20 Options = Vector6::Options
21 };
22 typedef Eigen::Matrix<Scalar, 3, 1, Options> Vector3;
23 typedef Eigen::Matrix<Scalar, 4, 4, Options> Matrix4;
24 typedef Eigen::Matrix<Scalar, 6, 6, Options> Matrix6;
25 typedef Matrix6 ActionMatrixType;
26 typedef Matrix4 HomogeneousMatrixType;
27 typedef typename Vector6ArgType::template FixedSegmentReturnType<3>::Type LinearType;
28 typedef typename Vector6ArgType::template FixedSegmentReturnType<3>::Type AngularType;
29 typedef typename Vector6ArgType::template ConstFixedSegmentReturnType<3>::Type ConstLinearType;
30 typedef typename Vector6ArgType::template ConstFixedSegmentReturnType<3>::Type ConstAngularType;
32 typedef typename PINOCCHIO_EIGEN_REF_TYPE(Vector6ArgType) DataRefType;
33 typedef DataRefType ToVectorReturnType;
34 typedef typename PINOCCHIO_EIGEN_REF_CONST_TYPE(Vector6ArgType) ConstDataRefType;
37
38 }; // traits ForceRef
39
40 template<typename Vector6ArgType>
42 {
43 typedef typename traits<ForceRef<Vector6ArgType>>::ForcePlain ReturnType;
44 };
45
46 template<typename Vector6ArgType, typename MotionDerived>
48 {
49 typedef typename traits<ForceRef<Vector6ArgType>>::ForcePlain ReturnType;
50 };
51
52 template<typename Vector6ArgType>
53 class ForceRef : public ForceDense<ForceRef<Vector6ArgType>>
54 {
55 public:
59 FORCE_TYPEDEF_TPL(ForceRef);
60
61 using Base::operator=;
62 using Base::operator==;
63 using Base::operator!=;
64
66 ForceRef(typename PINOCCHIO_EIGEN_REF_TYPE(Vector6ArgType) f_like)
67 : m_ref(f_like)
68 {
70 Vector6ArgType::ColsAtCompileTime == 1, YOU_TRIED_CALLING_A_VECTOR_METHOD_ON_A_MATRIX);
71 assert(f_like.size() == 6);
72 }
73
76 : m_ref(other.m_ref)
77 {
78 }
79
80 ToVectorConstReturnType toVector_impl() const
81 {
82 return m_ref;
83 }
84 ToVectorReturnType toVector_impl()
85 {
86 return m_ref;
87 }
88
89 // Getters
90 ConstAngularType angular_impl() const
91 {
92 return ConstAngularType(m_ref.derived(), ANGULAR);
93 }
94 ConstLinearType linear_impl() const
95 {
96 return ConstLinearType(m_ref.derived(), LINEAR);
97 }
98 AngularType angular_impl()
99 {
100 return m_ref.template segment<3>(ANGULAR);
101 }
102 LinearType linear_impl()
103 {
104 return m_ref.template segment<3>(LINEAR);
105 }
106
107 template<typename V3>
108 void angular_impl(const Eigen::MatrixBase<V3> & w)
109 {
110 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3, 3);
111 angular_impl() = w;
112 }
113
114 template<typename V3>
115 void linear_impl(const Eigen::MatrixBase<V3> & v)
116 {
117 EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(V3, 3);
118 linear_impl() = v;
119 }
120
121 ForceRef & ref()
122 {
123 return *this;
124 }
125
126 protected:
127 DataRefType m_ref;
128
129 }; // class ForceRef<Vector6Like>
130
131 template<typename Vector6ArgType>
133 {
134 typedef typename Vector6ArgType::Scalar Scalar;
135 typedef typename PINOCCHIO_EIGEN_PLAIN_TYPE(Vector6ArgType) Vector6;
136 enum
137 {
138 LINEAR = 0,
139 ANGULAR = 3,
140 Options = Vector6::Options
141 };
142 typedef Eigen::Matrix<Scalar, 3, 1, Options> Vector3;
143 typedef Eigen::Matrix<Scalar, 6, 6, Options> Matrix6;
144 typedef Matrix6 ActionMatrixType;
145 typedef typename Vector6ArgType::template ConstFixedSegmentReturnType<3>::Type ConstLinearType;
146 typedef typename Vector6ArgType::template ConstFixedSegmentReturnType<3>::Type ConstAngularType;
147 typedef ConstLinearType LinearType;
148 typedef ConstAngularType AngularType;
151 typedef typename PINOCCHIO_EIGEN_REF_CONST_TYPE(Vector6ArgType) ConstDataRefType;
156
157 }; // traits ForceRef<const Vector6ArgType>
158
159 template<typename Vector6ArgType>
160 class ForceRef<const Vector6ArgType> : public ForceDense<ForceRef<const Vector6ArgType>>
161 {
162 public:
166 FORCE_TYPEDEF_TPL(ForceRef);
167
168 ForceRef(typename PINOCCHIO_EIGEN_REF_CONST_TYPE(Vector6ArgType) f_like)
169 : m_ref(f_like)
170 {
172 Vector6ArgType::ColsAtCompileTime == 1, YOU_TRIED_CALLING_A_VECTOR_METHOD_ON_A_MATRIX);
173 assert(f_like.size() == 6);
174 }
175
176 ToVectorConstReturnType toVector_impl() const
177 {
178 return m_ref;
179 }
180
181 // Getters
182 ConstAngularType angular_impl() const
183 {
184 return ConstAngularType(m_ref.derived(), ANGULAR);
185 }
186 ConstLinearType linear_impl() const
187 {
188 return ConstLinearType(m_ref.derived(), LINEAR);
189 }
190
191 const ForceRef & ref() const
192 {
193 return *this;
194 }
195
196 protected:
197 DataRefType m_ref;
198
199 }; // class ForceRef<Vector6Like>
200
201} // namespace pinocchio
202
203#endif // ifndef __pinocchio_spatial_force_ref_hpp__
ForceRef(const ForceRef &other)
Copy constructor from another ForceRef.
Definition force-ref.hpp:75
ForceRef(typename PINOCCHIO_EIGEN_REF_TYPE(Vector6ArgType) f_like)
Default constructor from a 6 dimensional vector.
Definition force-ref.hpp:66
Main pinocchio namespace.
Definition treeview.dox:11
Return type of the ation of a Motion onto an object of type D.
Definition motion.hpp:46
Common traits structure to fully define base classes for CRTP.
Definition fwd.hpp:72