add Lie group operations
							parent
							
								
									9eff71ea8e
								
							
						
					
					
						commit
						7a56473d8f
					
				| 
						 | 
				
			
			@ -12,7 +12,7 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @file   Similarity2.cpp
 | 
			
		||||
 * @brief  Implementation of Similarity2 transform
 | 
			
		||||
 * @author John Lambert
 | 
			
		||||
 * @author John Lambert, Varun Agrawal
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <gtsam/base/Manifold.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -198,6 +198,30 @@ Similarity2 Similarity2::Align(const Pose2Pairs& abPosePairs) {
 | 
			
		|||
  return internal::AlignGivenR(abPointPairs, aRb_estimate);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Vector4 Similarity2::Logmap(const Similarity2& S,  //
 | 
			
		||||
                            OptionalJacobian<4, 4> Hm) {
 | 
			
		||||
  const Vector2 u = S.t_;
 | 
			
		||||
  const Vector1 w = Rot2::Logmap(S.R_);
 | 
			
		||||
  const double s = log(S.s_);
 | 
			
		||||
  Vector4 result;
 | 
			
		||||
  result << u, w, s;
 | 
			
		||||
  if (Hm) {
 | 
			
		||||
    throw std::runtime_error("Similarity2::Logmap: derivative not implemented");
 | 
			
		||||
  }
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Similarity2 Similarity2::Expmap(const Vector4& v,  //
 | 
			
		||||
                                OptionalJacobian<4, 4> Hm) {
 | 
			
		||||
  const Vector2 t = v.head<2>();
 | 
			
		||||
  const Rot2 R = Rot2::Expmap(v.segment<1>(2));
 | 
			
		||||
  const double s = v[3];
 | 
			
		||||
  if (Hm) {
 | 
			
		||||
    throw std::runtime_error("Similarity2::Expmap: derivative not implemented");
 | 
			
		||||
  }
 | 
			
		||||
  return Similarity2(R, t, s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::ostream& operator<<(std::ostream& os, const Similarity2& p) {
 | 
			
		||||
  os << "[" << p.rotation().theta() << " " << p.translation().transpose() << " "
 | 
			
		||||
     << p.scale() << "]\';";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@
 | 
			
		|||
/**
 | 
			
		||||
 * @file   Similarity2.h
 | 
			
		||||
 * @brief  Implementation of Similarity2 transform
 | 
			
		||||
 * @author John Lambert
 | 
			
		||||
 * @author John Lambert, Varun Agrawal
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
| 
						 | 
				
			
			@ -138,6 +138,29 @@ class GTSAM_EXPORT Similarity2 : public LieGroup<Similarity2, 4> {
 | 
			
		|||
  /// @name Lie Group
 | 
			
		||||
  /// @{
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Log map at the identity
 | 
			
		||||
   * \f$ [t_x, t_y, \delta, \lambda] \f$
 | 
			
		||||
   */
 | 
			
		||||
  static Vector4 Logmap(const Similarity2& S,  //
 | 
			
		||||
                        OptionalJacobian<4, 4> Hm = boost::none);
 | 
			
		||||
 | 
			
		||||
  /// Exponential map at the identity
 | 
			
		||||
  static Similarity2 Expmap(const Vector4& v,  //
 | 
			
		||||
                            OptionalJacobian<4, 4> Hm = boost::none);
 | 
			
		||||
 | 
			
		||||
  /// Chart at the origin
 | 
			
		||||
  struct ChartAtOrigin {
 | 
			
		||||
    static Similarity2 Retract(const Vector4& v,
 | 
			
		||||
                               ChartJacobian H = boost::none) {
 | 
			
		||||
      return Similarity2::Expmap(v, H);
 | 
			
		||||
    }
 | 
			
		||||
    static Vector4 Local(const Similarity2& other,
 | 
			
		||||
                         ChartJacobian H = boost::none) {
 | 
			
		||||
      return Similarity2::Logmap(other, H);
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  using LieGroup<Similarity2, 4>::inverse;
 | 
			
		||||
 | 
			
		||||
  /// @}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue