Cannot receive messages from bag file with different kinds of message inside it [closed]
Hello everyone.
I simulated my robot using Stage and recorded into a bag file messages sent to topics /odom, /base_scan, /tf.
This is what I got:
ubisum@biagioPC:~/fuerte_workspace/thesis_pack/bags$ rosbag info tf_bag.bag
path: tf_bag.bag
version: 2.0
duration: 34.2s
start: Jan 01 1970 01:00:52.10 (52.10)
end: Jan 01 1970 01:01:26.30 (86.30)
size: 3.3 MB
messages: 1712
compression: none [5/5 chunks]
types: nav_msgs/Odometry [cd5e73d190d741a2f92e81eda573aca7]
sensor_msgs/LaserScan [90c7ef2dc6895d81024acba2ac42f369]
tf/tfMessage [94810edda583a504dfda3829e70d7eec]
topics: /base_scan 342 msgs : sensor_msgs/LaserScan
/odom 343 msgs : nav_msgs/Odometry
/tf 1027 msgs : tf/tfMessage
After that, I subscribed my application to /base_scan topic and wrote a function that, every time a new LaserScan message is received, asks tf for the associated odometry data, in such a way I can converge all information from a robot's pose into a pos_node object.
void messageListener::laserCallback(const sensor_msgs::LaserScan msg){
//std::string frame_id = msg->header.frame_id;
ros::Time t = msg.header.stamp;
tf::StampedTransform laserPose;
std::string error;
if (listener->waitForTransform ("/odom", "/base_scan", t, ros::Duration(0.5), ros::Duration(0.01), &error)){
listener->lookupTransform("/odom", "/base_scan", t, laserPose);
double yaw,pitch,roll;
tf::Matrix3x3 mat = laserPose.getBasis();
mat.getRPY(roll, pitch, yaw);
pos_node pn;
pn.x = laserPose.getOrigin().x();
pn.y = laserPose.getOrigin().y();
pn.angle = yaw;
const vector<float>& ranges = msg.ranges;
scan_node temp_sn;
temp_sn.cartesian = polar2cart(ranges, msg.angle_min, msg.angle_increment, msg.range_min, msg.range_max);
vector<scan_node> tempScanVec;
tempScanVec.push_back(temp_sn);
extractCorners(&tempScanVec, 0.1, 0.1, 0.3);
line2angle(&tempScanVec);
pn.corn_vec = tempScanVec[0].corners_list;
nodeInfo.push_back(pn);
printf("Error: %s\n", error.c_str());
}
else
printf("Nothing to do\n");
}
Anyway, even if message is correctly played, it seems that no LaserScan message is received and my function is never executed.
This is how I subscribe:
ros::Subscriber sub_n = n.subscribe("/base_scan", 1000, &messageListener::laserCallback, this);
ros::Subscriber sub_end = n_end.subscribe("/end", 1000, &messageListener::end_loop, this);
printf("Subscription complete\n");
Do you know the reason? Thanks.