2015-10-14 130 views
1
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})tf和eigen之间的转换

undefined reference to `tf::matrixEigenToTF(Eigen::Matrix<double, 3, 3, 1, 3, 3> const&, tf::Matrix3x3&)' 
+0

我可以手动转换这只是复制tf :: matrixEigenToTF()代码。但仍然不知道为什么直接调用这个函数不起作用。 – Johnnylin

回答

2

你必须设置你CMakeList.txt如图this answer正确包括艾根在你的项目。

此外,您不需要在旋转和转换组件中分割仿射变换(查看Eigen-tf conversion)。

Eigen::Affine3f transform_eigen = (Affine3f)transforms[i]; 
tf::Transform transform_tf; 
tf::transformEigenToTF(transform_eigen, transform_tf); 

编辑: 我突然想到征库,而不是什么可能是真正的问题。您是否在package.xml文件中添加了tf_conversions依赖项?你没有提到它。此外,你必须包括库:#include <tf_conversions/tf_eigen.h>

+0

我已经包含文件tf_eigen.h,但我的包不需要package.xml。我的项目只依赖于tf。并且包括tf_eigen.h只能使tf :: vectorEigenToTF(translation_part,tra)这个函数通过编译,但我不知道为什么tf :: matrixEigenToTF会得到一个错误。 – Johnnylin

+1

对不起,我认为这是一个ROS应用程序。你可以添加完整的CMakeList.txt吗? – alextoind