Go to the documentation of this file.00001 #include "transform_graph/orientation.h"
00002
00003 #include "Eigen/Dense"
00004 #include "Eigen/Geometry"
00005 #include "geometry_msgs/Quaternion.h"
00006 #include "tf/transform_datatypes.h"
00007 #include "tf_conversions/tf_eigen.h"
00008
00009 namespace transform_graph {
00010 Orientation::Orientation() : matrix_() {
00011 Eigen::Quaterniond q(Eigen::Quaterniond::Identity());
00012 matrix_ = q.matrix();
00013 }
00014
00015 Orientation::Orientation(double w, double x, double y, double z) : matrix_() {
00016 Eigen::Quaterniond q(w, x, y, z);
00017 matrix_ = q.matrix();
00018 }
00019
00020 Orientation::Orientation(const Eigen::Matrix3d& m) : matrix_() { matrix_ = m; }
00021
00022 Orientation::Orientation(const Eigen::Quaterniond& q) : matrix_() {
00023 matrix_ = q.matrix();
00024 }
00025
00026 Orientation::Orientation(const geometry_msgs::Quaternion& q) : matrix_() {
00027 Eigen::Quaterniond eq(q.w, q.x, q.y, q.z);
00028 matrix_ = eq.matrix();
00029 }
00030
00031 Orientation::Orientation(const tf::Quaternion& q) : matrix_() {
00032 Eigen::Quaterniond eq(q.w(), q.x(), q.y(), q.z());
00033 matrix_ = eq.matrix();
00034 }
00035
00036 Orientation::Orientation(const tf::Matrix3x3& m) : matrix_() {
00037 const tf::Vector3& row0 = m.getRow(0);
00038 const tf::Vector3& row1 = m.getRow(1);
00039 const tf::Vector3& row2 = m.getRow(2);
00040
00041 matrix_ << row0.x(), row0.y(), row0.z(),
00042 row1.x(), row1.y(), row1.z(),
00043 row2.x(), row2.y(), row2.z();
00044
00045 }
00046
00047 Eigen::Matrix3d Orientation::matrix() const { return matrix_; }
00048
00049 Eigen::Quaterniond Orientation::quaternion() const {
00050 return Eigen::Quaterniond(matrix_);
00051 }
00052
00053 geometry_msgs::Quaternion Orientation::quaternion_msg() const {
00054 Eigen::Quaterniond q(matrix_);
00055 geometry_msgs::Quaternion out;
00056 out.w = q.w();
00057 out.x = q.x();
00058 out.y = q.y();
00059 out.z = q.z();
00060 return out;
00061 }
00062
00063 tf::Quaternion Orientation::tf_quaternion() const {
00064 Eigen::Quaterniond q(matrix_);
00065 tf::Quaternion out(q.x(), q.y(), q.z(), q.w());
00066 return out;
00067 }
00068
00069 tf::Matrix3x3 Orientation::tf_matrix() const {
00070 tf::Matrix3x3 tf_matrix;
00071 tf::matrixEigenToTF(matrix_, tf_matrix);
00072 return tf_matrix;
00073 }
00074 }