Кто-то испытал с ROS следующее поведение: как это возможно, что tf.lookupTransform("map", "base_link", ros::Time(0), transform);
говорит вам, что: "base_link" passed to lookupTransform argument target_frame does not exist
, но если я введу:
rosrun tf tf_echo base_link map
At time 1549633095.937
- Translation: [-0.005, 0.020, -0.129]
- Rotation: in Quaternion [0.033, 0.063, 0.002, 0.997]
in RPY (radian) [0.066, 0.127, 0.009]
Я могувидите, что рамка не только существует, но и существует эффективное преобразование, доступное между map
и base_link
?
. Я совершенно не понимаю такого странного поведения.Любая помощь будет очень приветствоваться.Действительно, программа работает на моем ноутбуке, но не на Intel NUC.
Полный фрагмент кода приведен ниже (на самом деле у меня ошибка сегментации при создании costmap_2d :: costmap2DROS и выглядит так, как будто она есть).из-за сбоя tf.transform):
#include <ros/ros.h>
#include <tf/transform_listener.h>
#include <costmap_2d/costmap_2d_ros.h>
int main(int argc, char **argv) {
ros::init(argc, argv, "hector_exploration_node");
ros::NodeHandle nh;
tf::TransformListener tf;
tf::StampedTransform transform;
try{
tf.lookupTransform("/base_link", "/map", ros::Time(0), transform);
std::cout << "transform exist\n";
}
catch (tf::TransformException ex){
ROS_ERROR("%s",ex.what());
ros::Duration(1.0).sleep();
}
std::cout << "before costmap\n";
costmap_2d::Costmap2DROS costmap("global_costmap", tf);
costmap.start();
ros::Rate rate(10);
while (ros::ok())
ros::spin();
return 0;
}