Cleaned up interpolate
parent
bafcde9ee1
commit
9798bfa815
|
@ -320,28 +320,28 @@ T expm(const Vector& x, int K=7) {
|
|||
}
|
||||
|
||||
/**
|
||||
* Linear interpolation between X and Y by coefficient t (typically t \in [0,1],
|
||||
* but can also be used to extrapolate before pose X or after pose Y), with optional jacobians.
|
||||
* Linear interpolation between X and Y by coefficient t. Typically t \in [0,1],
|
||||
* but can also be used to extrapolate before pose X or after pose Y.
|
||||
*/
|
||||
template <typename T>
|
||||
T interpolate(const T& X, const T& Y, double t,
|
||||
typename MakeOptionalJacobian<T, T>::type Hx = boost::none,
|
||||
typename MakeOptionalJacobian<T, T>::type Hy = boost::none) {
|
||||
|
||||
if (Hx || Hy) {
|
||||
typename traits<T>::TangentVector log_Xinv_Y;
|
||||
typename MakeJacobian<T, T>::type between_H_x, log_H, exp_H, compose_H_x;
|
||||
const T between =
|
||||
traits<T>::Between(X, Y, between_H_x); // between_H_y = identity
|
||||
typename traits<T>::TangentVector delta = traits<T>::Logmap(between, log_H);
|
||||
const T Delta = traits<T>::Expmap(t * delta, exp_H);
|
||||
const T result = traits<T>::Compose(
|
||||
X, Delta, compose_H_x); // compose_H_xinv_y = identity
|
||||
|
||||
T Xinv_Y = traits<T>::Between(X, Y, between_H_x); // between_H_y = identity
|
||||
log_Xinv_Y = traits<T>::Logmap(Xinv_Y, log_H);
|
||||
Xinv_Y = traits<T>::Expmap(t * log_Xinv_Y, exp_H);
|
||||
Xinv_Y = traits<T>::Compose(X, Xinv_Y, compose_H_x); // compose_H_xinv_y = identity
|
||||
|
||||
if(Hx) *Hx = compose_H_x + t * exp_H * log_H * between_H_x;
|
||||
if(Hy) *Hy = t * exp_H * log_H;
|
||||
return Xinv_Y;
|
||||
if (Hx) *Hx = compose_H_x + t * exp_H * log_H * between_H_x;
|
||||
if (Hy) *Hy = t * exp_H * log_H;
|
||||
return result;
|
||||
}
|
||||
return traits<T>::Compose(X, traits<T>::Expmap(t * traits<T>::Logmap(traits<T>::Between(X, Y))));
|
||||
return traits<T>::Compose(
|
||||
X, traits<T>::Expmap(t * traits<T>::Logmap(traits<T>::Between(X, Y))));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue