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
Definition: AdmittanceVec.h:27
const vector3_t & linear() const
Definition: AdmittanceVec.h:75
AdmittanceVec< T2 > cast() const
Definition: AdmittanceVec.h:93
AdmittanceVec(const vector3_t &angular, const vector3_t &linear)
Definition: AdmittanceVec.h:53
AdmittanceVec(const vector6_t &vec)
Definition: AdmittanceVec.h:47
AdmittanceVec()
Definition: AdmittanceVec.h:41
bool operator==(const AdmittanceVec< T > &av) const
Definition: AdmittanceVec.h:139
Eigen::Vector6< T > vector6_t
Definition: AdmittanceVec.h:30
vector3_t & angular()
Definition: AdmittanceVec.h:69
AdmittanceVec< T > & operator/=(T2 scalar)
Definition: AdmittanceVec.h:132
AdmittanceVec(T angular, T linear)
Definition: AdmittanceVec.h:59
AdmittanceVec< T > operator/(T2 scalar) const
Definition: AdmittanceVec.h:126
const vector3_t & angular() const
Definition: AdmittanceVec.h:63
AdmittanceVec< T > operator+(const AdmittanceVec< T > &av) const
Definition: AdmittanceVec.h:99
AdmittanceVec< T > operator*(T2 scalar) const
Definition: AdmittanceVec.h:112
AdmittanceVec< T > & operator*=(T2 scalar)
Definition: AdmittanceVec.h:118
static AdmittanceVec< T > Zero()
Zero admittance vector.
Definition: AdmittanceVec.h:34
vector3_t & linear()
Definition: AdmittanceVec.h:81
AdmittanceVec< T > & operator+=(const AdmittanceVec< T > &av)
Definition: AdmittanceVec.h:104
Eigen::Vector3< T > vector3_t
Definition: AdmittanceVec.h:29
vector6_t vector() const
Definition: AdmittanceVec.h:87
bool operator!=(const AdmittanceVec< T > &av) const
Definition: AdmittanceVec.h:144
Definition: ForceVec.h:20
vector3_t & force()
Definition: ForceVec.h:77
vector3_t & couple()
Definition: ForceVec.h:55
Definition: MotionVec.h:20
Matrix< T, 3, 1 > Vector3
Definition: EigenTypedef.h:18
Matrix< T, 6, 1 > Vector6
Definition: EigenTypedef.h:13
Definition: ABInertia.h:11
std::ostream & operator<<(std::ostream &out, const ABInertia< T > &abI)
Definition: ABInertia.h:183
ABInertia< T > operator*(T2 scalar, const ABInertia< T > &abI)
Definition: ABInertia.h:177