AdmittanceVec.h
Go to the documentation of this file.
1 /*
2  * Copyright 2012-2020 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 #include "EigenTypedef.h"
8 #include "fwd.h"
9 #include <type_traits>
10 
11 namespace sva
12 {
13 
25 template<typename T>
27 {
28 public:
31 
32 public:
35  {
36  return AdmittanceVec<T>(vector3_t::Zero(), vector3_t::Zero());
37  }
38 
39 public:
41  AdmittanceVec() : angular_(), linear_() {}
42 
47  AdmittanceVec(const vector6_t & vec) : angular_(vec.template head<3>()), linear_(vec.template tail<3>()) {}
48 
53  AdmittanceVec(const vector3_t & angular, const vector3_t & linear) : angular_(angular), linear_(linear) {}
54 
59  AdmittanceVec(T angular, T linear) : angular_(angular, angular, angular), linear_(linear, linear, linear) {}
60 
61  // Accessor
63  const vector3_t & angular() const
64  {
65  return angular_;
66  }
67 
70  {
71  return angular_;
72  }
73 
75  const vector3_t & linear() const
76  {
77  return linear_;
78  }
79 
82  {
83  return linear_;
84  }
85 
87  vector6_t vector() const
88  {
89  return ((vector6_t() << angular_, linear_).finished());
90  }
91 
92  template<typename T2>
94  {
95  return AdmittanceVec<T2>(angular_.template cast<T2>(), linear_.template cast<T2>());
96  }
97 
98  // Operators
100  {
101  return AdmittanceVec<T>(angular_ + av.angular_, linear_ + av.linear_);
102  }
103 
105  {
106  angular_ += av.angular_;
107  linear_ += av.linear_;
108  return *this;
109  }
110 
111  template<typename T2, typename std::enable_if<std::is_arithmetic<T2>::value, int>::type = 0>
112  AdmittanceVec<T> operator*(T2 scalar) const
113  {
114  return AdmittanceVec<T>(scalar * angular_, scalar * linear_);
115  }
116 
117  template<typename T2>
119  {
120  angular_ *= scalar;
121  linear_ *= scalar;
122  return *this;
123  }
124 
125  template<typename T2>
126  AdmittanceVec<T> operator/(T2 scalar) const
127  {
128  return AdmittanceVec<T>(angular_ / scalar, linear_ / scalar);
129  }
130 
131  template<typename T2>
133  {
134  angular_ /= scalar;
135  linear_ /= scalar;
136  return *this;
137  }
138 
139  bool operator==(const AdmittanceVec<T> & av) const
140  {
141  return (angular_ == av.angular_) && (linear_ == av.linear_);
142  }
143 
144  bool operator!=(const AdmittanceVec<T> & av) const
145  {
146  return !(*this == av);
147  }
148 
149 private:
150  vector3_t angular_;
151  vector3_t linear_;
152 };
153 
154 template<typename T, typename T2>
155 inline AdmittanceVec<T> operator*(T2 scalar, const AdmittanceVec<T> & av)
156 {
157  return av * scalar;
158 }
159 
160 template<typename T>
161 inline MotionVec<T> operator*(const AdmittanceVec<T> & av, const ForceVec<T> & fv)
162 {
163  return MotionVec<T>(av.angular().cwiseProduct(fv.couple()), av.linear().cwiseProduct(fv.force()));
164 }
165 
166 template<typename T>
167 inline MotionVec<T> operator*(const ForceVec<T> & fv, const AdmittanceVec<T> & av)
168 {
169  return av * fv;
170 }
171 
172 template<typename T>
173 inline std::ostream & operator<<(std::ostream & out, const AdmittanceVec<T> & av)
174 {
175  out << av.vector().transpose();
176  return out;
177 }
178 
179 } // namespace sva
sva::MotionVec
Definition: fwd.h:11
sva::AdmittanceVec::operator*
AdmittanceVec< T > operator*(T2 scalar) const
Definition: AdmittanceVec.h:112
sva::AdmittanceVec::vector
vector6_t vector() const
Definition: AdmittanceVec.h:87
sva::operator<<
std::ostream & operator<<(std::ostream &out, const ABInertia< T > &abI)
Definition: ABInertia.h:183
sva::AdmittanceVec::operator*=
AdmittanceVec< T > & operator*=(T2 scalar)
Definition: AdmittanceVec.h:118
sva::AdmittanceVec::Zero
static AdmittanceVec< T > Zero()
Zero admittance vector.
Definition: AdmittanceVec.h:34
sva::AdmittanceVec::linear
vector3_t & linear()
Definition: AdmittanceVec.h:81
sva::ForceVec
Definition: ForceVec.h:19
sva::AdmittanceVec::AdmittanceVec
AdmittanceVec()
Definition: AdmittanceVec.h:41
sva::AdmittanceVec::AdmittanceVec
AdmittanceVec(T angular, T linear)
Definition: AdmittanceVec.h:59
sva::AdmittanceVec::operator/
AdmittanceVec< T > operator/(T2 scalar) const
Definition: AdmittanceVec.h:126
sva
Definition: ABInertia.h:10
fwd.h
sva::AdmittanceVec::cast
AdmittanceVec< T2 > cast() const
Definition: AdmittanceVec.h:93
sva::ForceVec::couple
vector3_t & couple()
Definition: ForceVec.h:55
sva::AdmittanceVec::operator+=
AdmittanceVec< T > & operator+=(const AdmittanceVec< T > &av)
Definition: AdmittanceVec.h:104
sva::AdmittanceVec::angular
const vector3_t & angular() const
Definition: AdmittanceVec.h:63
sva::AdmittanceVec::angular
vector3_t & angular()
Definition: AdmittanceVec.h:69
Eigen::Vector3
Matrix< T, 3, 1 > Vector3
Definition: EigenTypedef.h:18
sva::AdmittanceVec::operator/=
AdmittanceVec< T > & operator/=(T2 scalar)
Definition: AdmittanceVec.h:132
sva::AdmittanceVec
Definition: AdmittanceVec.h:26
sva::operator*
ABInertia< T > operator*(T2 scalar, const ABInertia< T > &abI)
Definition: ABInertia.h:177
sva::ForceVec::force
vector3_t & force()
Definition: ForceVec.h:77
Eigen::Vector6
Matrix< T, 6, 1 > Vector6
Definition: EigenTypedef.h:13
sva::AdmittanceVec::AdmittanceVec
AdmittanceVec(const vector6_t &vec)
Definition: AdmittanceVec.h:47
EigenTypedef.h
sva::AdmittanceVec::linear
const vector3_t & linear() const
Definition: AdmittanceVec.h:75
sva::AdmittanceVec::vector6_t
Eigen::Vector6< T > vector6_t
Definition: AdmittanceVec.h:30
sva::AdmittanceVec::operator==
bool operator==(const AdmittanceVec< T > &av) const
Definition: AdmittanceVec.h:139
sva::AdmittanceVec::AdmittanceVec
AdmittanceVec(const vector3_t &angular, const vector3_t &linear)
Definition: AdmittanceVec.h:53
sva::AdmittanceVec::vector3_t
Eigen::Vector3< T > vector3_t
Definition: AdmittanceVec.h:29
sva::AdmittanceVec::operator!=
bool operator!=(const AdmittanceVec< T > &av) const
Definition: AdmittanceVec.h:144
sva::AdmittanceVec::operator+
AdmittanceVec< T > operator+(const AdmittanceVec< T > &av) const
Definition: AdmittanceVec.h:99