2015-10-14 2 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 и собственными

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); 

EDIT: я вдруг подумал о библиотеке Эйгеном и не о том, что может быть на самом деле проблема. Вы добавили зависимость tf_conversions в файл package.xml? Вы не упомянули об этом. Кроме того, вы должны включить библиотеку: #include <tf_conversions/tf_eigen.h>

+0

У меня есть файл tf_eigen.h, но моему пакету не нужен package.xml. Мой проект зависит от tf. И включая tf_eigen.h только make tf :: vectorEigenToTF (translation_part, tra), эта функция передает компиляцию, но я не знаю, почему tf :: matrixEigenToTF получает ошибку. – Johnnylin

+1

Извините, я предположил, что это приложение ROS. Можете ли вы добавить полный CMakeList.txt? – alextoind