Преобразования между tf и 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&)'

person Johnnylin    schedule 14.10.2015    source источник
comment
Я могу вручную преобразовать это, просто скопировав код tf::matrixEigenToTF(). Но до сих пор не знаю, почему вызов этой функции напрямую не работает.   -  person Johnnylin    schedule 14.10.2015


Ответы (1)


Вы должны настроить CMakeList.txt, как показано в этом ответе правильно включить Eigen в ваш проект.

Кроме того, вам не нужно разделять аффинное преобразование на компоненты вращения и перемещения (посмотрите собственное преобразование в tf).

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

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

person alextoind    schedule 14.10.2015
comment
Я включил файл tf_eigen.h, но моему пакету не нужен package.xml. Мой проект просто зависит от tf. И включая tf_eigen.h, только tf::vectorEigenToTF(translation_part, tra) эта функция проходит компиляцию, но я не знаю, почему tf::matrixEigenToTF получает ошибку. - person Johnnylin; 14.10.2015
comment
Извините, я предположил, что это приложение ROS. Не могли бы вы добавить полный CMakeList.txt? - person alextoind; 15.10.2015