File tree Expand file tree Collapse file tree 2 files changed +26
-7
lines changed
include/rviz_default_plugins/displays/camera
src/rviz_default_plugins/displays/camera Expand file tree Collapse file tree 2 files changed +26
-7
lines changed Original file line number Diff line number Diff line change 46
46
# include < OgreRenderTargetListener.h>
47
47
# include < OgreSharedPtr.h>
48
48
49
+ #include < message_filters/cache.h>
50
+
49
51
# include " sensor_msgs/msg/camera_info.hpp"
50
52
# include " tf2_ros/message_filter.h"
51
53
@@ -191,6 +193,8 @@ private Q_SLOTS:
191
193
std::unique_ptr<ROSImageTextureIface> texture_;
192
194
std::unique_ptr<rviz_common::RenderPanel> render_panel_;
193
195
196
+ std::shared_ptr<message_filters::Cache<sensor_msgs::msg::Image>> cache_images_;
197
+
194
198
rviz_common::properties::FloatProperty * alpha_property_;
195
199
rviz_common::properties::EnumProperty * image_position_property_;
196
200
rviz_common::properties::FloatProperty * zoom_property_;
Original file line number Diff line number Diff line change @@ -471,13 +471,28 @@ bool CameraDisplay::updateCamera()
471
471
return false ;
472
472
}
473
473
474
- rclcpp::Time rviz_time = context_->getFrameManager ()->getTime ();
475
- if (timeDifferenceInExactSyncMode (image, rviz_time)) {
476
- setStatus (
477
- StatusLevel::Warn, TIME_STATUS,
478
- QString (" Time-syncing active and no image at timestamp " ) +
479
- QString::number (rviz_time.nanoseconds ()) + " ." );
480
- return false ;
474
+ if (context_->getFrameManager ()->getSyncMode () == rviz_common::FrameManagerIface::SyncExact) {
475
+ if (cache_images_ == nullptr ) {
476
+ cache_images_ = std::make_shared<message_filters::Cache<sensor_msgs::msg::Image>>(
477
+ *subscription_, 20 );
478
+ }
479
+ rclcpp::Time rviz_time = context_->getFrameManager ()->getTime ();
480
+ std::vector<sensor_msgs::msg::Image::ConstSharedPtr> interval_data = cache_images_->getInterval (
481
+ rviz_time, rviz_time);
482
+ if (!interval_data.empty ()) {
483
+ image = interval_data[0 ];
484
+ if (timeDifferenceInExactSyncMode (image, rviz_time)) {
485
+ setStatus (
486
+ StatusLevel::Warn, TIME_STATUS,
487
+ QString (" Time-syncing active and no image at timestamp " ) +
488
+ QString::number (rviz_time.nanoseconds ()) + " ." );
489
+ return false ;
490
+ }
491
+ }
492
+ } else {
493
+ if (cache_images_ != nullptr ) {
494
+ cache_images_.reset ();
495
+ }
481
496
}
482
497
483
498
Ogre::Vector3 position;
You can’t perform that action at this time.
0 commit comments