tf 和 eigen 之间的转换
Conversions between tf and eigen
Eigen::Affine3f transform_temp = (Affine3f)transforms[i];
const Eigen::Matrix3d rotation_part = transform_temp.rotation().cast<double>();
const Eigen::Vector3d translation_part = transform_temp.translation().cast<double>();
tf::Matrix3x3 rot;
tf::Vector3 tra;
tf::matrixEigenToTF(rotation_part, rot);
tf::vectorEigenToTF(translation_part, tra);
tf::Transform temp_transform(rot, tra);
listener->lookupTransform (link, msg_in->header.frame_id, ros::Time(0), tfTransform);
broadcaster->sendTransform(tf::StampedTransform(tfTransform * temp_transform.inverse(), ros::Time::now(), link, "chess_board"));
我收到以下错误。不知道为什么,我有find_package(catkin REQUIRED COMPONENTS tf tf_conversions)
还有target_link_libraries(${catkin_LIBRARIES})
undefined reference to `tf::matrixEigenToTF(Eigen::Matrix<double, 3, 3, 1, 3, 3> const&, tf::Matrix3x3&)'
您必须按照 this answer 中所示进行设置 CMakeList.txt
才能在您的项目中正确包含 Eigen。
此外,您不需要在旋转和平移分量中拆分仿射变换(查看 Eigen-tf conversion)。
Eigen::Affine3f transform_eigen = (Affine3f)transforms[i];
tf::Transform transform_tf;
tf::transformEigenToTF(transform_eigen, transform_tf);
编辑:
我突然想到了 Eigen 库,而不是真正的问题所在。 package.xml
文件中是否添加了 tf_conversions
依赖项?你没有提到它。此外,您必须包含库:#include <tf_conversions/tf_eigen.h>
Eigen::Affine3f transform_temp = (Affine3f)transforms[i];
const Eigen::Matrix3d rotation_part = transform_temp.rotation().cast<double>();
const Eigen::Vector3d translation_part = transform_temp.translation().cast<double>();
tf::Matrix3x3 rot;
tf::Vector3 tra;
tf::matrixEigenToTF(rotation_part, rot);
tf::vectorEigenToTF(translation_part, tra);
tf::Transform temp_transform(rot, tra);
listener->lookupTransform (link, msg_in->header.frame_id, ros::Time(0), tfTransform);
broadcaster->sendTransform(tf::StampedTransform(tfTransform * temp_transform.inverse(), ros::Time::now(), link, "chess_board"));
我收到以下错误。不知道为什么,我有find_package(catkin REQUIRED COMPONENTS tf tf_conversions)
还有target_link_libraries(${catkin_LIBRARIES})
undefined reference to `tf::matrixEigenToTF(Eigen::Matrix<double, 3, 3, 1, 3, 3> const&, tf::Matrix3x3&)'
您必须按照 this answer 中所示进行设置 CMakeList.txt
才能在您的项目中正确包含 Eigen。
此外,您不需要在旋转和平移分量中拆分仿射变换(查看 Eigen-tf conversion)。
Eigen::Affine3f transform_eigen = (Affine3f)transforms[i];
tf::Transform transform_tf;
tf::transformEigenToTF(transform_eigen, transform_tf);
编辑:
我突然想到了 Eigen 库,而不是真正的问题所在。 package.xml
文件中是否添加了 tf_conversions
依赖项?你没有提到它。此外,您必须包含库:#include <tf_conversions/tf_eigen.h>