ROS 內建eigen庫的使用
阿新 • • 發佈:2019-02-20
eigen庫
use it
eigen_msg.h 可用於 ros getmetry_msgs的各種訊息與 Eigen訊息的型別轉換
namespace tf { /// Converts a Point message into an Eigen Vector void pointMsgToEigen(const geometry_msgs::Point &m, Eigen::Vector3d &e); /// Converts an Eigen Vector into a Point message void pointEigenToMsg(const Eigen::Vector3d &e, geometry_msgs::Point &m); /// Converts a Pose message into an Eigen Affine3d void poseMsgToEigen(const geometry_msgs::Pose &m, Eigen::Affine3d &e); /// Converts a Pose message into an Eigen Isometry3d void poseMsgToEigen(const geometry_msgs::Pose &m, Eigen::Isometry3d &e); /// Converts an Eigen Affine3d into a Pose message void poseEigenToMsg(const Eigen::Affine3d &e, geometry_msgs::Pose &m); /// Converts an Eigen Isometry3d into a Pose message void poseEigenToMsg(const Eigen::Isometry3d &e, geometry_msgs::Pose &m); /// Converts a Quaternion message into an Eigen Quaternion void quaternionMsgToEigen(const geometry_msgs::Quaternion &m, Eigen::Quaterniond &e); /// Converts an Eigen Quaternion into a Quaternion message void quaternionEigenToMsg(const Eigen::Quaterniond &e, geometry_msgs::Quaternion &m); /// Converts a Transform message into an Eigen Affine3d void transformMsgToEigen(const geometry_msgs::Transform &m, Eigen::Affine3d &e); /// Converts a Transform message into an Eigen Isometry3d void transformMsgToEigen(const geometry_msgs::Transform &m, Eigen::Isometry3d &e); /// Converts an Eigen Affine3d into a Transform message void transformEigenToMsg(const Eigen::Affine3d &e, geometry_msgs::Transform &m); /// Converts an Eigen Isometry3d into a Transform message void transformEigenToMsg(const Eigen::Isometry3d &e, geometry_msgs::Transform &m); /// Converts a Twist message into an Eigen matrix void twistMsgToEigen(const geometry_msgs::Twist &m, Eigen::Matrix<double,6,1> &e); /// Converts an Eigen matrix into a Twist message void twistEigenToMsg(const Eigen::Matrix<double,6,1> &e, geometry_msgs::Twist &m); /// Converts a Vector message into an Eigen Vector void vectorMsgToEigen(const geometry_msgs::Vector3 &m, Eigen::Vector3d &e); /// Converts an Eigen Vector into a Vector message void vectorEigenToMsg(const Eigen::Vector3d &e, geometry_msgs::Vector3 &m); /// Converts a Wrench message into an Eigen matrix void wrenchMsgToEigen(const geometry_msgs::Wrench &m, Eigen::Matrix<double,6,1> &e); /// Converts an Eigen matrix into a Wrench message void wrenchEigenToMsg(const Eigen::Matrix<double,6,1> &e, geometry_msgs::Wrench &m); /// Converts an Eigen matrix into a Float64MultiArray message template <class Derived> void matrixEigenToMsg(const Eigen::MatrixBase<Derived> &e, std_msgs::Float64MultiArray &m) { if (m.layout.dim.size() != 2) m.layout.dim.resize(2); m.layout.dim[0].stride = e.rows() * e.cols(); m.layout.dim[0].size = e.rows(); m.layout.dim[1].stride = e.cols(); m.layout.dim[1].size = e.cols(); if ((int)m.data.size() != e.size()) m.data.resize(e.size()); int ii = 0; for (int i = 0; i < e.rows(); ++i) for (int j = 0; j < e.cols(); ++j) m.data[ii++] = e.coeff(i, j); } } // namespace
使用的時候
#include <eigen_conversions/eigen_msg.h>
//getmetry_msgs::Quaternion to Eigen::Quaternino
tf::quaternionMsgToEigen(current_pose_.pose.orientation, current_orientation);