robomaster-oss / rmoss_core

RoboMaster OSS中的基础项目,为RoboMaster提供通用基础功能模块包,如相机模块,弹道运动模块等。
Apache License 2.0
105 stars 17 forks source link

Support TimeSynchronizer for CamClient #13

Open gezp opened 2 years ago

gezp commented 2 years ago

Feature request

Feature description

rmoss_camCamClient 对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 ,而是另起炉灶,如创建CamImuSyncClient,内部集成message_filters::TimeSynchronizer 等方法实现特定消息同步.

gezp commented 8 months ago

消息同步不建议直接使用ros的message_filters,使用buffer自行处理会更加灵活。在rmoss设计模式中,ROS2主要作为消息通讯的中间件,topic数据的读取尽可能保持原生形式,并采用自己的算法进行同步等处理,不依赖于ROS。