19 #ifndef __se3_force_base_hpp__ 20 #define __se3_force_base_hpp__ 39 template<
class Derived>
43 FORCE_TYPEDEF_TPL(Derived);
45 Derived & derived() {
return *
static_cast<Derived*
>(
this); }
46 const Derived& derived()
const {
return *
static_cast<const Derived*
>(
this); }
53 ConstAngularType
angular()
const {
return derived().angular_impl(); }
60 ConstLinearType
linear()
const {
return derived().linear_impl(); }
63 AngularType
angular() {
return derived().angular_impl(); }
66 LinearType
linear() {
return derived().linear_impl(); }
76 template<
typename V3Like>
77 void angular(
const Eigen::MatrixBase<V3Like> & n)
78 { derived().angular_impl(n.derived()); }
87 template<
typename V3Like>
88 void linear(
const Eigen::MatrixBase<V3Like> & f)
89 { derived().linear_impl(f.derived()); }
99 ToVectorConstReturnType
toVector()
const {
return derived().toVector_impl(); }
102 ToVectorReturnType
toVector() {
return derived().toVector_impl(); }
108 operator Vector6()
const {
return toVector(); }
114 template<
typename F2>
119 template<
typename F2>
124 bool isApprox(
const Derived & other,
const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision())
const 125 {
return derived().isApprox_impl(other, prec); }
130 Derived &
operator= (
const Derived & other) {
return derived().__equl__(other); }
136 Derived &
operator+= (
const Derived & phi) {
return derived().__pequ__(phi); }
142 Derived &
operator-= (
const Derived & phi) {
return derived().__mequ__(phi); }
146 Derived
operator+(
const Derived & phi)
const {
return derived().__plus__(phi); }
150 template<
typename OtherScalar>
151 ForcePlain
operator*(
const OtherScalar & alpha)
const {
return derived().__mult__(alpha); }
155 template<
typename OtherScalar>
156 ForcePlain
operator/(
const OtherScalar & alpha)
const {
return derived().__div__(alpha); }
160 Derived
operator-()
const {
return derived().__opposite__(); }
164 Derived
operator-(
const Derived & phi)
const {
return derived().__minus__(phi); }
168 Scalar
dot(
const Motion & m)
const {
return derived().dot(m); }
182 template<
typename S2,
int O2>
183 typename internal::SE3GroupAction<Derived>::ReturnType
185 {
return derived().se3Action_impl(m); }
198 template<
typename S2,
int O2>
199 typename internal::SE3GroupAction<Derived>::ReturnType
201 {
return derived().se3ActionInverse_impl(m); }
203 template<
typename M1>
204 typename internal::MotionAlgebraAction<Derived,M1>::ReturnType
207 return derived().motionAction(v.derived());
210 void disp(std::ostream & os)
const { derived().disp_impl(os); }
211 friend std::ostream & operator << (std::ostream & os, const ForceBase<Derived> & X)
221 #endif // ifndef __se3_force_base_hpp__ ForcePlain operator/(const OtherScalar &alpha) const
bool operator!=(const ForceBase< F2 > &other) const
AngularType angular()
Return the angular part of the force vector.
Derived operator+(const Derived &phi) const
void linear(const Eigen::MatrixBase< V3Like > &f)
Set the linear part of the force vector.
Derived operator-(const Derived &phi) const
internal::SE3GroupAction< Derived >::ReturnType se3Action(const SE3Tpl< S2, O2 > &m) const
Transform from A to B coordinates the Force represented by *this such that .
Derived & operator+=(const Derived &phi)
Replaces *this by *this + other.
ConstAngularType angular() const
Return the angular part of the force vector.
Derived & operator-=(const Derived &phi)
Replaces *this by *this - other.
internal::SE3GroupAction< Derived >::ReturnType se3ActionInverse(const SE3Tpl< S2, O2 > &m) const
Transform from B to A coordinates the Force represented by *this such that .
bool operator==(const ForceBase< F2 > &other) const
ConstLinearType linear() const
Return the linear part of the force vector.
bool isApprox(const Derived &other, const Scalar &prec=Eigen::NumTraits< Scalar >::dummy_precision()) const
void angular(const Eigen::MatrixBase< V3Like > &n)
Set the angular part of the force vector.
Base interface for forces representation.
Scalar dot(const Motion &m) const
ForcePlain operator*(const OtherScalar &alpha) const
ToVectorConstReturnType toVector() const
Return the force as an Eigen vector.
Derived & operator=(const Derived &other)
Copies the Derived Force into *this.
Derived operator-() const
LinearType linear()
Return the linear part of the force vector.
ToVectorReturnType toVector()
Return the force as an Eigen vector.