ROS C++中nh.subscribe正常但message_filters::Subscriber无响应求助
ROS message_filters::Subscriber 无法触发回调的问题解答
两段代码功能不一致,出现差异的核心原因是对象生命周期和订阅机制的细节差异:
原代码里的
mSubCam是类成员变量,它的生命周期和ClientHandler实例绑定,只要实例存活,订阅关系就会持续有效,ros::Subscriber会和NodeHandle保持关联,正常接收消息触发回调。改用
message_filters::Subscriber时,你定义的rgb_sub是局部变量——当这段代码所在的函数执行完毕,rgb_sub会被自动销毁,对应的订阅关系也会被终止,自然收不到任何图像消息,程序就会阻塞等待。
message_filters::Subscriber本质是对普通ros::Subscriber的封装,但它同样遵循C++对象生命周期规则:局部对象销毁时会自动取消订阅。
解决方法很简单:把rgb_sub改成ClientHandler的类成员变量,让它的生命周期和类实例保持一致,就能正常接收消息触发回调了。
内容的提问来源于stack exchange,提问作者Janebek
相关产品推荐
相关产品推荐

