@@ -38,6 +38,8 @@ EOD_ROS::EOD_ROS(ros::NodeHandle nh, ros::NodeHandle nh_p){
3838 sub_rgb_.subscribe (*rgb_it_, " camera/image_raw" , 10 );
3939 sub_info_.subscribe (nh_, " camera/info" , 10 );
4040
41+ detect_rate_values = new boost::circular_buffer<double >(10 );
42+
4143 // get params
4244 nh_p_.param (" subscribe_depth" , subscribe_depth, false );
4345 nh_p_.param (" rate_limit_sec" , rate_limit_sec, 0.1 );
@@ -234,6 +236,9 @@ void EOD_ROS::rgbd_info_cb(const sensor_msgs::ImageConstPtr& rgb_image, const se
234236
235237void EOD_ROS::detect (const eod::InfoImage& rgb, const eod::InfoImage& depth, std_msgs::Header header){
236238 ROS_INFO (" Detecting..." );
239+ if ( frame_sequence != 0 ){
240+ detect_rate_values->push_back ((ros::Time::now () - prev_detected_time).toSec ());
241+ }
237242 prev_detected_time = ros::Time::now ();
238243
239244 cv::Mat image_to_draw;
@@ -397,7 +402,8 @@ visualization_msgs::Marker EOD_ROS::base_object_to_marker_arrow(extended_object_
397402 mrk.header = header;
398403 mrk.ns = base_object.type_name +" _arrow" ;
399404 mrk.id = id;
400- mrk.type = visualization_msgs::Marker::ARROW;
405+ mrk.type = visualization_msgs::Marker::ARROW;
406+ mrk.lifetime = ros::Duration (get_detect_rate ());
401407 mrk.points .push_back (geometry_msgs::Point ());
402408 geometry_msgs::Point end = fromVector (base_object.transform .translation );
403409 mrk.points .push_back (end);
@@ -419,6 +425,7 @@ visualization_msgs::Marker EOD_ROS::base_object_to_marker_frame(extended_object_
419425 mrk.ns = base_object.type_name +" _frame" ;
420426 mrk.id = id;
421427 mrk.type = visualization_msgs::Marker::LINE_STRIP;
428+ mrk.lifetime = ros::Duration (get_detect_rate ());
422429 for ( auto & corner : base_object.rect .cornerTranslates )
423430 mrk.points .push_back (fromVector (corner));
424431 mrk.points .push_back (mrk.points [0 ]);
@@ -439,7 +446,8 @@ visualization_msgs::Marker EOD_ROS::base_object_to_marker_text(extended_object_d
439446 mrk.header = header;
440447 mrk.ns = base_object.type_name +" _text" ;
441448 mrk.id = id;
442- mrk.type = visualization_msgs::Marker::TEXT_VIEW_FACING;
449+ mrk.type = visualization_msgs::Marker::TEXT_VIEW_FACING;
450+ mrk.lifetime = ros::Duration (get_detect_rate ());
443451 mrk.pose .position = fromVector (base_object.transform .translation );
444452 mrk.pose .position .y = base_object.rect .cornerTranslates [0 ].y - 0.14 ; // place text upper top frame part
445453 mrk.text = std::to_string (base_object.type_id )+" :" +base_object.type_name +" [" +std::to_string (base_object.score ).substr (0 ,4 )+" ]" ;
@@ -574,6 +582,17 @@ bool EOD_ROS::set_complex_objects_cb(extended_object_detection::SetObjects::Requ
574582}
575583#endif
576584
585+
586+ double EOD_ROS::get_detect_rate (){
587+ if ( detect_rate_values->empty () )
588+ return 0 ;
589+ double sum_rate = 0 ;
590+ for (auto & rate : *detect_rate_values)
591+ sum_rate += rate;
592+ return sum_rate / detect_rate_values->size ();
593+ }
594+
595+
577596int main (int argc, char **argv)
578597{
579598 ros::init (argc, argv, " extended_object_detection_node" );
0 commit comments