turtle_tf_message_filter msgcallback function is never called
Hi, I'm a green hand.And learning tf, but I meet a trouble. Please help me!
I am I'm following from this page tf/Tutorials/Stamped datatypes with tf::MessageFilter ,but meet the msgcallback never called. Here is my code:
#include "ros/ros.h"
#include "tf/transform_listener.h"
#include "tf/message_filter.h"
#include "message_filters/subscriber.h"
class PoseDrawer
{
public:
PoseDrawer() : tf_() , target_frame_("turtle1")
{
ROS_INFO("PoseDrawer construct starting!");
point_sub_.subscribe(nh_, "turtle_point_stamped", 10);
tf_filter_ = new tf::MessageFilter<geometry_msgs::PointStamped>(point_sub_, tf_, target_frame_, 10);
try
{
ROS_INFO("try starting!");
//The wrong, msgCallback is never called!!!! And others ware OK!
tf_filter_->registerCallback( boost::bind(&PoseDrawer::msgCallback, this, _1));
ROS_INFO("try ending!");
}
catch(tf::TransformException &ex)
{
ROS_ERROR("%s",ex.what());
}
ROS_INFO("PoseDrawer construct end");
};
virtual ~PoseDrawer()
{
ROS_INFO("PoseDrawer destory starting!");
};
private:
message_filters::Subscriber<geometry_msgs::PointStamped> point_sub_;
tf::TransformListener tf_;
tf::MessageFilter<geometry_msgs::PointStamped> * tf_filter_;
ros::NodeHandle nh_;
std::string target_frame_;
//Callback to register with tf::MessageFilter to
// be called when transforms are available
void msgCallback(const boost::shared_ptr<const geometry_msgs::PointStamped>& point_ptr)
{
ROS_INFO("msgCallback is listening!");
geometry_msgs::PointStamped point_out;
try
{
tf_.transformPoint(target_frame_, *point_ptr, point_out);
printf("point of turtle 3 in frame of turtle 1 Position(x:%f y:%f z:%f)\n",
point_out.point.x,
point_out.point.y,
point_out.point.z);
}
catch (tf::TransformException &ex)
{
printf("Failure %s\n", ex.what());
}
};
int main(int argc, char ** argv)
{
ros::init(argc, argv, "pose_drawer"); //Init ROS
PoseDrawer pd; //Construct class
ros::spin(); // Run until interupted
};
};
First,launch a launch file when I finished in Writing a tf broadcaster (C++) ,Writing a tf listener (C++), tf/TutorialsAdding a frame (C++)
$ roslaunch learning_tf start_demo.launch
Then ,run the file , it call me that:
$ rosrun learning_tf turtle_tf_message_filte
[ INFO] [1522254522.667447695]: PoseDrawer construct starting!
[ INFO] [1522254522.669954462]: try starting!
[ INFO] [1522254522.669980229]: try ending!
[ INFO] [1522254522.669992621]: PoseDrawer construct end
And I am sure msgCallback function is never called! But I don't know how to solve this trouble. Please help me !