28 #ifndef TOON_FADBAD_INTEGATION_H 29 #define TOON_FADBAD_INTEGATION_H 33 #include <TooN/TooN.h> 37 #include <FADBAD++/fadiff.h> 41 template <
typename P,
unsigned int N>
42 inline std::ostream & operator<<( std::ostream & out, const F<P, N> & val ){
43 return out << val.val();
46 template <
typename P,
unsigned int N>
47 inline F<P, N> abs(
const F<P, N> & val ){
48 return (val.val() < 0) ? -val : val;
57 static const int value = numeric_limits<C>::is_specialized;
60 template <
int N,
typename T,
typename A,
unsigned D>
63 for(
int i = 0; i < result.size(); ++i)
64 result[i] = v[i].val();
68 template <
typename P,
int N,
typename A>
71 for(
unsigned i = 0, d = start; i < val.size() && d < size; ++i, ++d)
72 result[i].diff(d,size);
76 template <
unsigned D,
typename P,
int N,
typename A>
79 for(
unsigned i = 0, d = start; i < unsigned(val.size()) && d < D; ++i, ++d)
84 template <
unsigned D,
typename P,
int N,
typename A>
85 inline Vector<N, P> get_derivative(
const Vector<N, fadbad::F<P,D>, A> & val,
const int dim ){
87 for(
int i = 0; i < N; ++i)
88 r[i] = val[i].deriv(dim);
92 template <
unsigned D,
typename P,
int N,
typename A>
95 for(
unsigned i = 0; i < val[0].size(); ++i)
96 result.T()[i] = get_derivative( val, i );
100 template <
int R,
int C,
typename P,
unsigned D,
typename A>
103 for(
int r = 0; r < R; ++r)
104 for(
int c = 0; c < C; ++c)
105 result[r][c] = val[r][c].deriv(dim);
109 template <
typename P>
116 m(2,1).diff(start, size);
117 m(1,2) = m(2,1) * -1;
119 m(0,2).diff(start+1, size);
120 m(2,0) = m(0,2) * -1;
122 m(1,0).diff(start+2, size);
123 m(0,1) = m(1,0) * -1;
128 template <
typename P,
unsigned D>
136 m(1,2) = m(2,1) * -1;
138 m(0,2).diff(start+1);
139 m(2,0) = m(0,2) * -1;
141 m(1,0).diff(start+2);
142 m(0,1) = m(1,0) * -1;
147 template <
typename P>
149 return SE3<fadbad::F<P> >(make_fad_so3<P>( start+3, size ), make_fad_vector(makeVector<P>(0.0, 0, 0), start, size));
152 template <
typename P,
unsigned D>
154 return SE3<fadbad::F<P, D> >(make_fad_so3<P, D>( start+3 ), make_fad_vector<D>(makeVector<P>(0.0, 0, 0), start));
157 template <
typename P>
159 return SE2<fadbad::F<P> >(make_fad_vector(makeVector<P>(0.0, 0, 0), start, size));
162 template <
typename P,
unsigned D>
167 template <
typename P>
170 r.diff(start,size) = 1;
174 template <
typename P,
unsigned D>
176 fadbad::F<P, D> r = 0;
181 template <
typename P>
183 return make_fad_so3<P>(start, size) * r;
186 template <
typename P,
unsigned D>
188 return make_fad_so3<P, D>(start) * r;
191 template <
typename P>
193 return make_fad_se3<P>(start, size) * t;
196 template <
typename P,
unsigned D>
198 return make_fad_se3<P, D>(start) * t;
201 template <
typename P>
203 return make_fad_so2<P>(start, size) * r;
206 template <
typename P,
unsigned D>
208 return make_fad_so2<P, D>(start) * r;
211 template <
typename P>
213 return make_fad_se2<P>(start, size) * t;
216 template <
typename P,
unsigned D>
218 return make_fad_se2<P, D>(start) * t;
223 #endif // TOON_FADBAD_INTEGATION_H Represent a three-dimensional Euclidean transformation (a rotation and a translation).
Definition: se3.h:48
Pretty generic SFINAE introspection generator.
Definition: vec_test.cc:21
A vector.
Definition: vector.hh:126
Is a number a field? i.e., +, -, *, / defined.
Definition: TooN.h:113
A matrix.
Definition: matrix.hh:105
Class to represent a two-dimensional rotation matrix.
Definition: so2.h:37
Class to represent a three-dimensional rotation matrix.
Definition: so3.h:37
Represent a two-dimensional Euclidean transformation (a rotation and a translation).
Definition: se2.h:50
const Matrix< 3, 3, Precision > & get_matrix() const
Returns the SO3 as a Matrix<3>
Definition: so3.h:146