Moved ostream and print to cpp to not pollute includes
							parent
							
								
									8333172ee6
								
							
						
					
					
						commit
						da9a5e2746
					
				| 
						 | 
				
			
			@ -0,0 +1,82 @@
 | 
			
		|||
/* ----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 * GTSAM Copyright 2010, Georgia Tech Research Corporation,
 | 
			
		||||
 * Atlanta, Georgia 30332-0415
 | 
			
		||||
 * All Rights Reserved
 | 
			
		||||
 * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
 | 
			
		||||
 | 
			
		||||
 * See LICENSE for the license information
 | 
			
		||||
 | 
			
		||||
 * -------------------------------------------------------------------------- */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file ImuBias.cpp
 | 
			
		||||
 * @date  Feb 2, 2012
 | 
			
		||||
 * @author Vadim Indelman, Stephen Williams
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "ImuBias.h"
 | 
			
		||||
 | 
			
		||||
#include <gtsam/geometry/Point3.h>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
 | 
			
		||||
namespace gtsam {
 | 
			
		||||
 | 
			
		||||
/// All bias models live in the imuBias namespace
 | 
			
		||||
namespace imuBias {
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * NOTES:
 | 
			
		||||
 * - Earth-rate correction:
 | 
			
		||||
 *     + Currently the user should supply R_ECEF_to_G, which is the rotation from ECEF to Local-Level system (NED or ENU as defined by the user).
 | 
			
		||||
 *     + R_ECEF_to_G can be calculated by approximated values of latitude and longitude of the system.
 | 
			
		||||
 *     + A relatively small distance is traveled w.r.t. to initial pose is assumed, since R_ECEF_to_G is constant.
 | 
			
		||||
 *        Otherwise, R_ECEF_to_G should be updated each time using the current lat-lon.
 | 
			
		||||
 *
 | 
			
		||||
 *  - Currently, an empty constructed is not enabled so that the user is forced to specify R_ECEF_to_G.
 | 
			
		||||
 */
 | 
			
		||||
//    // H1: Jacobian w.r.t. IMUBias
 | 
			
		||||
//    // H2: Jacobian w.r.t. pose
 | 
			
		||||
//    Vector CorrectGyroWithEarthRotRate(Vector measurement, const Pose3& pose, const Vector& w_earth_rate_G,
 | 
			
		||||
//        boost::optional<Matrix&> H1=boost::none, boost::optional<Matrix&> H2=boost::none) const {
 | 
			
		||||
//
 | 
			
		||||
//      Matrix R_G_to_I( pose.rotation().matrix().transpose() );
 | 
			
		||||
//      Vector w_earth_rate_I = R_G_to_I * w_earth_rate_G;
 | 
			
		||||
//
 | 
			
		||||
//      if (H1){
 | 
			
		||||
//        Matrix zeros3_3(zeros(3,3));
 | 
			
		||||
//        Matrix m_eye3(-eye(3));
 | 
			
		||||
//
 | 
			
		||||
//        *H1 = collect(2, &zeros3_3, &m_eye3);
 | 
			
		||||
//      }
 | 
			
		||||
//
 | 
			
		||||
//      if (H2){
 | 
			
		||||
//        Matrix zeros3_3(zeros(3,3));
 | 
			
		||||
//        Matrix H = -skewSymmetric(w_earth_rate_I);
 | 
			
		||||
//
 | 
			
		||||
//        *H2 = collect(2, &H, &zeros3_3);
 | 
			
		||||
//      }
 | 
			
		||||
//
 | 
			
		||||
//      //TODO: Make sure H2 is correct.
 | 
			
		||||
//
 | 
			
		||||
//      return measurement - biasGyro_ - w_earth_rate_I;
 | 
			
		||||
//
 | 
			
		||||
////      Vector bias_gyro_temp((Vector(3) << -bias_gyro_(0), bias_gyro_(1), bias_gyro_(2)));
 | 
			
		||||
////      return measurement - bias_gyro_temp - R_G_to_I * w_earth_rate_G;
 | 
			
		||||
//    }
 | 
			
		||||
/// ostream operator
 | 
			
		||||
std::ostream& operator<<(std::ostream& os, const ConstantBias& bias) {
 | 
			
		||||
  os << "acc = " << Point3(bias.accelerometer());
 | 
			
		||||
  os << " gyro = " << Point3(bias.gyroscope());
 | 
			
		||||
  return os;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// print with optional string
 | 
			
		||||
void ConstantBias::print(const std::string& s) const {
 | 
			
		||||
  std::cout << s << *this << std::endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} // namespace imuBias
 | 
			
		||||
 | 
			
		||||
} // namespace gtsam
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -17,22 +17,11 @@
 | 
			
		|||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <gtsam/base/Matrix.h>
 | 
			
		||||
#include <gtsam/base/Vector.h>
 | 
			
		||||
#include <gtsam/base/OptionalJacobian.h>
 | 
			
		||||
#include <gtsam/base/VectorSpace.h>
 | 
			
		||||
#include <iosfwd>
 | 
			
		||||
#include <boost/serialization/nvp.hpp>
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * NOTES:
 | 
			
		||||
 * - Earth-rate correction:
 | 
			
		||||
 *     + Currently the user should supply R_ECEF_to_G, which is the rotation from ECEF to Local-Level system (NED or ENU as defined by the user).
 | 
			
		||||
 *     + R_ECEF_to_G can be calculated by approximated values of latitude and longitude of the system.
 | 
			
		||||
 *     + A relatively small distance is traveled w.r.t. to initial pose is assumed, since R_ECEF_to_G is constant.
 | 
			
		||||
 *        Otherwise, R_ECEF_to_G should be updated each time using the current lat-lon.
 | 
			
		||||
 *
 | 
			
		||||
 *  - Currently, an empty constructed is not enabled so that the user is forced to specify R_ECEF_to_G.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
namespace gtsam {
 | 
			
		||||
 | 
			
		||||
/// All bias models live in the imuBias namespace
 | 
			
		||||
| 
						 | 
				
			
			@ -94,50 +83,16 @@ public:
 | 
			
		|||
    return measurement - biasGyro_;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
//    // H1: Jacobian w.r.t. IMUBias
 | 
			
		||||
//    // H2: Jacobian w.r.t. pose
 | 
			
		||||
//    Vector CorrectGyroWithEarthRotRate(Vector measurement, const Pose3& pose, const Vector& w_earth_rate_G,
 | 
			
		||||
//        boost::optional<Matrix&> H1=boost::none, boost::optional<Matrix&> H2=boost::none) const {
 | 
			
		||||
//
 | 
			
		||||
//      Matrix R_G_to_I( pose.rotation().matrix().transpose() );
 | 
			
		||||
//      Vector w_earth_rate_I = R_G_to_I * w_earth_rate_G;
 | 
			
		||||
//
 | 
			
		||||
//      if (H1){
 | 
			
		||||
//        Matrix zeros3_3(zeros(3,3));
 | 
			
		||||
//        Matrix m_eye3(-eye(3));
 | 
			
		||||
//
 | 
			
		||||
//        *H1 = collect(2, &zeros3_3, &m_eye3);
 | 
			
		||||
//      }
 | 
			
		||||
//
 | 
			
		||||
//      if (H2){
 | 
			
		||||
//        Matrix zeros3_3(zeros(3,3));
 | 
			
		||||
//        Matrix H = -skewSymmetric(w_earth_rate_I);
 | 
			
		||||
//
 | 
			
		||||
//        *H2 = collect(2, &H, &zeros3_3);
 | 
			
		||||
//      }
 | 
			
		||||
//
 | 
			
		||||
//      //TODO: Make sure H2 is correct.
 | 
			
		||||
//
 | 
			
		||||
//      return measurement - biasGyro_ - w_earth_rate_I;
 | 
			
		||||
//
 | 
			
		||||
////      Vector bias_gyro_temp((Vector(3) << -bias_gyro_(0), bias_gyro_(1), bias_gyro_(2)));
 | 
			
		||||
////      return measurement - bias_gyro_temp - R_G_to_I * w_earth_rate_G;
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
  /// @}
 | 
			
		||||
  /// @name Testable
 | 
			
		||||
  /// @{
 | 
			
		||||
 | 
			
		||||
  /// ostream operator
 | 
			
		||||
  GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os,
 | 
			
		||||
                                               const ConstantBias& bias) {
 | 
			
		||||
    os << "acc = " << Point3(bias.accelerometer());
 | 
			
		||||
    os << " gyro = " << Point3(bias.gyroscope());
 | 
			
		||||
    return os;
 | 
			
		||||
  }
 | 
			
		||||
                                               const ConstantBias& bias);
 | 
			
		||||
 | 
			
		||||
  /// print with optional string
 | 
			
		||||
  void print(const std::string& s = "") const { std::cout << s << *this << std::endl; }
 | 
			
		||||
  void print(const std::string& s = "") const;
 | 
			
		||||
 | 
			
		||||
  /** equality up to tolerance */
 | 
			
		||||
  inline bool equals(const ConstantBias& expected, double tol = 1e-5) const {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue