2015-10-14 133 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