rmoss_core
rmoss_core copied to clipboard
Support TimeSynchronizer for CamClient
Feature request
Feature description
rmoss_cam
中CamClient
对ROS消息进行了进行了封装,只暴露如下接口:
typedef std::function<void (const cv::Mat &, const rclcpp::Time &)> Callback;
virtual bool connect(const std::string & camera_name, Callback cb);
这种隐藏ROS层细节能够使开发者专心于图像开发,而不用关心ROS消息处理过程,但是这样导致无法使用Message Filter中消息同步等工具,而消息同步在某些RM场景中可能十分有用,比如RM中的相机和IMU的同步。
Implementation considerations
方案一:扩展CamClient
类,适配message_filters接口,只需要继承message_filters::SimpleFilter
即可 (可实现类似message_filters::Subscriber
的效果),然后使用message_filters::TimeSynchronizer
即可。
- 该方法的优点是扩展了
CamClient
功能,缺点是相比于直接使用message_filters::Subscriber
订阅ROS消息方法,显得多余,容易使开发者产生困惑。
方案二:针对特定场景封装特定消息同步类,无需扩展CamClient
,而是另起炉灶,如创建CamImuSyncClient
,内部集成message_filters::TimeSynchronizer
等方法实现特定消息同步.
- 该方法优点是易实现,且意图明确,缺点是可能会引入
CamClient
中重复代码。