[C++] geometry_msgs/Pose to Eigen::Matrix4f
C++๋ก ์ํ์ ํํ์ ๋ค๋ฃจ๋ค๋ณด๋ฉด ํ๋ ฌ ํํ์ ํผํ ์ ์๋ค
๋ณดํต Eigen ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ๋ง์ด๋ค ํํํ๋๋ฐ, ์ด ๋ Rotation๊ณผ Translation์ด ๋ด๊ธด Transformation matrix๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก 4x4 ํ๋ ฌ์ด๋ฉฐ ์ํธ ๋ณํํด์ ์ฌ์ฉํ๋ ๋ฒ์ ์์๋ณด์
๋๋ถ์ด Eigen์ block ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ๊ตฌํํด๋ณธ๋ค
Geometry_msgs/Pose -> Eigen::Matrix4d
// Input : (geometry_msgs::Pose pose)
Eigen::Matrix4d xpose = Eigen::Matrix4d::Identity();
xpose.block<3,3>(0,0) = Eigen::Quaterniond(quat.w(), quat.x(), quat.y(), quat.z()).normalized().toRotationMatrix();
xpose.block<3,1>(0,3) = Eigen::Vector3d(pose.position.x, pose.position.y, pose.position.z);
๋ฐ๋๋ก
Eigen::Matrix4d -> geometry_msgs/Pose
// Input : Eigen::Matrix4d xpose)
geometry_msgs::Pose pose;
Eigen::Quaterniond q(xpose.block<3, 3>(0, 0));
pose.orientation.x = q.x();
pose.orientation.y = q.y();
pose.orientation.z = q.z();
pose.orientation.w = q.w();
pose.position.x = xpose(0,3);
pose.position.y = xpose(1,3);
pose.position.z = xpose(2,3);
Leave a comment