Hi all,
I'm working with the Microsoft Kinect.
I'm using pointcloud_to_laserscan to retrieve a laserscan from kinect.
And there is another node which retrieves the rgb image from kinect for feature extraction and advertises the features using a custom ros message on a topic called "features".
Now I have another node. This node should subscribe to the pointcloud_to_laserscan and to the features topic using message_filters, because I need the laserscan and the features taken at the same time.
I tried to use the tutorial on http://www.ros.org/wiki/message_filters
I defined a sync policy:
typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::LaserScan, myNode::myMsg> SyncLaserNodePolicy;
message_filters::Synchronizer<SyncLaserNodePolicy> sync2_;
message_filters::Subscriber<sensor_msgs::LaserScan> kinectLaser_sub;
message_filters::Subscriber<myNode::myMsg> feature_sub;
In the constructor of the node I initialize:
kinectLaser_sub(n,"kinectLaser",1),
feature_sub(n,"features",1),
sync2_(SyncLaserNodePolicy(10),kinectLaser_sub,feature_sub),
My custom message is defined as:
Header header
surfKeyp2d[] keypoints2d
surfKeyp3d[] keypoints3d
surfDescMsg[] descriptors
uint32 number
sensor_msgs/Image image
geometry_msgs/TransformStamped trans
The code is compiling without errors, but when I try to run my node I get the following error:
myNode: /usr/include/boost/thread/pthread/mutex.hpp:50:
void boost::mutex::lock(): Assertion `!pthread_mutex_lock(&m)' failed.
Aborted
Anybody have an idea whats wrong?
Thanks a lot!
Do you see any warnings while compiling this code? I would expect some warnings about the order in which you are initializing your class members.
In C++ member variables are initialized according the order of declaration, not the order you choose in the constructor. As you have declared the Sychronizer first, it's constructor will be called with uninitialized subscribers. That can cause all kind of nasticities, including the one you observed.
cheers Dariush
Try getting a stack trace for the crashing node either by running it in gdb or setting the ulimit -c unlimited to get the OS to produce a core.
With the stack trace you'll be able to tell exactly where it crashes.
Asked: 2011-07-25 07:02:17 -0500
Seen: 1,058 times
Last updated: Aug 02 '11
Synchronizer and image_transport::Subscriber
Time Synchronizer hangs after few messages
callback for two topics at the same time
Creating a ROS optional Library
visualization_common/ogre links wrong libboost (host version)
how to bind a callback to include a MessageEvent
error compiling pluginlib on a mac?
ROS Answers is licensed under Creative Commons Attribution 3.0 Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.