3 #ifndef THREED_ODOMETRY_TASK_TASK_HPP 4 #define THREED_ODOMETRY_TASK_TASK_HPP 6 #include "threed_odometry/TaskBase.hpp" 9 #include <boost/shared_ptr.hpp> 14 #include <Eigen/Dense> 15 #include <Eigen/StdVector> 18 #include <threed_odometry/KinematicKDL.hpp> 19 #include <threed_odometry/MotionModel.hpp> 20 #include <threed_odometry/IIR.hpp> 29 template<
class scalar>
inline scalar
tolerance();
34 static const unsigned int NORDER_BESSEL_FILTER = 8;
60 class Task :
public TaskBase
119 boost::shared_ptr< threed_odometry::MotionModel<double> >
motionModel;
128 Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic >
modelVelCov;
135 boost::shared_ptr< threed_odometry::IIR<NORDER_BESSEL_FILTER, 3> >
bessel;
166 Task(std::string
const& name =
"exoter_odometry::Task");
173 Task(std::string
const& name, RTT::ExecutionEngine* engine);
249 const std::vector<std::string> &order_names,
250 Eigen::Matrix< double, Eigen::Dynamic, 1 > &joint_positions,
251 Eigen::Matrix< double, Eigen::Dynamic, 1 > &joint_velocities);
254 const std::vector<std::string> &joint_names,
255 const std::vector<std::string> &slip_names,
256 const std::vector<std::string> &contact_names);
261 void outputPortPose(
const Eigen::Matrix< double, 6, 1 > &cartesian_velocities);
269 template <
typename _MatrixType>
274 s.resize(A.rows(), 1);
279 Eigen::JacobiSVD <Eigen::MatrixXd > svdOfA (A, Eigen::ComputeThinU | Eigen::ComputeThinV);
281 s = svdOfA.singularValues();
284 std::cout<<
"[SPD-SVD] s: \n"<<s<<
"\n";
285 std::cout<<
"[SPD-SVD] svdOfA.matrixU():\n"<<svdOfA.matrixU()<<
"\n";
286 std::cout<<
"[SPD-SVD] svdOfA.matrixV():\n"<<svdOfA.matrixV()<<
"\n";
288 Eigen::EigenSolver<_MatrixType> eig(A);
289 std::cout <<
"[SPD-SVD] BEFORE: eigen values: " << eig.eigenvalues().transpose() << std::endl;
292 for (
register int i=0; i<s.size(); ++i)
295 std::cout<<
"[SPD-SVD] i["<<i<<
"]\n";
301 spdA = svdOfA.matrixU() * s.matrix().asDiagonal() * svdOfA.matrixV().transpose();
304 Eigen::EigenSolver<_MatrixType> eigSPD(spdA);
305 if (eig.eigenvalues() == eigSPD.eigenvalues())
306 std::cout<<
"[SPD-SVD] EQUAL!!\n";
308 std::cout <<
"[SPD-SVD] AFTER: eigen values: " << eigSPD.eigenvalues().transpose() << std::endl;
323 Eigen::Vector3d
boxminus(
const double &w,
const Eigen::Vector3d& vec,
const double &scale,
bool plus_minus_periodicity)
325 Eigen::Vector3d result;
327 double nv = vec.norm();
330 if(!plus_minus_periodicity)
335 result = scale * std::atan2(0, w) * Eigen::Vector3d::Unit(i);
340 double s = scale / nv * (plus_minus_periodicity ? std::atan(nv / w) : std::atan2(nv, w) );
348 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
boost::shared_ptr< threed_odometry::MotionModel< double > > motionModel
Definition: Task.hpp:119
std::vector< std::string > motion_model_joint_names
Definition: Task.hpp:101
void updateHook()
Definition: Task.cpp:344
boost::shared_ptr< threed_odometry::IIR< NORDER_BESSEL_FILTER, 3 > > bessel
Definition: Task.hpp:135
std::vector< base::Matrix6d > fkRobotCov
Definition: Task.hpp:125
~Task()
Definition: Task.cpp:47
The task context provides and requires services. It uses an ExecutionEngine to perform its functions...
Definition: Task.hpp:60
ModelType kinematic_model_type
Definition: Task.hpp:88
Eigen::Matrix< double, Eigen::Dynamic, 1 > joint_positions
Definition: Task.hpp:104
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > modelVelCov
Definition: Task.hpp:128
virtual void orientation_samplesTransformerCallback(const base::Time &ts, const ::base::samples::RigidBodyState &orientation_samples_sample)
Definition: Task.cpp:89
double tolerance< double >()
Definition: Task.hpp:32
std::vector< std::string > all_joint_names
Definition: Task.hpp:82
int number_robot_joints
Definition: Task.hpp:98
::base::samples::RigidBodyState delta_pose
Definition: Task.hpp:141
std::vector< std::string > contact_joint_names
Definition: Task.hpp:86
Eigen::Matrix< double, 6, 6 > cartesianVelCov
Definition: Task.hpp:131
bool joints_samplesMotionModel(std::vector< std::string > &order_names, const std::vector< std::string > &joint_names, const std::vector< std::string > &slip_names, const std::vector< std::string > &contact_names)
Definition: Task.cpp:513
Eigen::Vector3d boxminus(const double &w, const Eigen::Vector3d &vec, const double &scale, bool plus_minus_periodicity)
Definition: Task.hpp:323
void motionVelocities()
Computes the velocities using the motion model.
Definition: Task.cpp:361
float tolerance< float >()
Definition: Task.hpp:31
std::vector< std::string > contact_angle_segments
Definition: Task.hpp:79
void cleanupHook()
Definition: Task.cpp:356
Eigen::Matrix< double, 6, 6 > poseCov
Definition: Task.hpp:158
Task(std::string const &name="exoter_odometry::Task")
Definition: Task.cpp:16
Eigen::Matrix< double, Eigen::Dynamic, 1 > joint_velocities
Definition: Task.hpp:107
Eigen::Affine3d pose
Definition: Task.hpp:157
Eigen::Matrix< double, 6, 1 > cartesian_velocities
Definition: Task.hpp:110
::base::samples::Joints joints_samples
Definition: Task.hpp:147
void deadReckoning(const double &delta_t)
Performs the odometry update.
Definition: Task.cpp:443
std::string urdfFile
Definition: Task.hpp:75
std::vector< std::string > slip_joint_names
Definition: Task.hpp:84
friend class TaskBase
Definition: Task.hpp:62
static _MatrixType guaranteeSPD(const _MatrixType &A)
Definition: Task.hpp:270
boost::shared_ptr< threed_odometry::KinematicKDL > robotKinematics
Definition: Task.hpp:116
void outputPortPose(const Eigen::Matrix< double, 6, 1 > &cartesian_velocities)
Store the variables in the Output ports.
Definition: Task.cpp:567
Definition: ThreedOdometryTypes.hpp:26
IIRCoefficients iirConfig
Definition: Task.hpp:91
void outputPortContactPoints()
Contact point information.
Definition: Task.cpp:646
void errorHook()
Definition: Task.cpp:348
bool startHook()
Definition: Task.cpp:338
bool configureHook()
The following lines are template definitions for the various state machine.
Definition: Task.cpp:170
std::vector< std::string > contact_point_segments
Definition: Task.hpp:77
std::vector< Eigen::Matrix< double, 6, 1 >, Eigen::aligned_allocator< Eigen::Matrix< double, 6, 1 > > > vector_cartesian_velocities
Definition: Task.hpp:113
std::vector< Eigen::Affine3d > fkRobotTrans
Definition: Task.hpp:122
WeightingMatrix weight_matrix
Definition: Task.hpp:138
::base::samples::RigidBodyState orientation_samples
Definition: Task.hpp:149
void stopHook()
Definition: Task.cpp:352
ModelType
Definition: ThreedOdometryTypes.hpp:11
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > WeightingMatrix
Definition: Task.hpp:27
virtual void joints_samplesTransformerCallback(const base::Time &ts, const ::base::samples::Joints &joints_samples_sample)
Definition: Task.cpp:51
void joints_samplesUnpack(const ::base::samples::Joints &original_joints, const std::vector< std::string > &order_names, Eigen::Matrix< double, Eigen::Dynamic, 1 > &joint_positions, Eigen::Matrix< double, Eigen::Dynamic, 1 > &joint_velocities)
Definition: Task.cpp:475