44#include < geometry_msgs/Vector3.h>
55// #include <geometry_msgs/Point.h>
66#include < math.h>
7+ #include < visualization_msgs/MarkerArray.h>
78
89geometry_msgs::Vector3 getUnitTranslation (cv::Point point, const cv::Mat& K){
910 geometry_msgs::Vector3 unit_translate;
@@ -30,6 +31,7 @@ EOD_ROS::EOD_ROS(ros::NodeHandle nh, ros::NodeHandle nh_p){
3031 nh_p_.param (" rate_limit_sec" , rate_limit_sec, 0.1 );
3132 nh_p_.param (" publish_output" , publish_output, false );
3233 nh_p_.param (" use_actual_time" , use_actual_time, false );
34+ nh_p_.param (" publish_markers" , publish_markers, false );
3335
3436
3537 std::string object_base_path;
@@ -65,7 +67,9 @@ EOD_ROS::EOD_ROS(ros::NodeHandle nh, ros::NodeHandle nh_p){
6567 set_simple_objects_srv_ = nh_p_.advertiseService (" set_simple_objects" , &EOD_ROS::set_simple_objects_cb, this );
6668
6769 // set up publishers
68- simple_objects_pub_ = nh_p.advertise <extended_object_detection::SimpleObjectArray>(" simple_objects" ,1 );
70+ simple_objects_pub_ = nh_p_.advertise <extended_object_detection::SimpleObjectArray>(" simple_objects" ,1 );
71+ if ( publish_markers)
72+ simple_objects_markers_pub_ = nh_p_.advertise <visualization_msgs::MarkerArray>(" simple_objects_markers" ,1 );
6973
7074 private_it_ = new image_transport::ImageTransport (nh_p_);
7175 output_image_pub_ = private_it_->advertise (" detected_image" , 1 );
@@ -202,6 +206,9 @@ void EOD_ROS::detect(const eod::InfoImage& rgb, const eod::InfoImage& depth, std
202206
203207 simple_objects_pub_.publish (simples_msg);
204208
209+ if (publish_markers){
210+ publish_simple_as_markers (rgb.K , header);
211+ }
205212 if (publish_output){
206213 sensor_msgs::ImagePtr detected_image_msg = cv_bridge::CvImage (std_msgs::Header (), " bgr8" , image_to_draw).toImageMsg ();
207214 output_image_pub_.publish (detected_image_msg);
@@ -250,6 +257,31 @@ extended_object_detection::BaseObject EOD_ROS::eoi_to_base_object( eod::SimpleOb
250257 return bo;
251258}
252259
260+ void EOD_ROS::publish_simple_as_markers (const cv::Mat& K, std_msgs::Header header){
261+ visualization_msgs::MarkerArray mrk_array_msg ();
262+ // mrk_array_msg.header = header;
263+ for (auto & so : selected_simple_objects){
264+ int id_cnt = 0 ;
265+ for (auto & eoi : so->objects ){
266+ mrk_array_msg.markers .append (eoi_to_marker (so, &eoi, K, header, cv::Scalar (0 , 255 , 0 )),id_cnt++);
267+
268+
269+ }
270+ }
271+ simple_objects_markers_pub_.publish (mrk_array_msg);
272+ }
273+
274+ visualization_msgs::Marker EOD_ROS::eoi_to_marker (eod::SimpleObject* so, eod::ExtendedObjectInfo* eoi, const cv::Mat& K, std_msgs::Header header, cv::Scalar color, int id){
275+ visualization_msgs::Marker mrk;
276+ mrk.header = header;
277+
278+ mrk.ns = so->name ;
279+ mrk.id = id;
280+
281+
282+ return mrk;
283+ }
284+
253285int EOD_ROS::find_simple_obj_index_by_id (int id){
254286 for ( int i = 0 ; i < selected_simple_objects.size () ; i++ ){
255287 if ( selected_simple_objects[i]->ID == id )
@@ -260,9 +292,7 @@ int EOD_ROS::find_simple_obj_index_by_id(int id){
260292
261293bool EOD_ROS::set_simple_objects_cb (extended_object_detection::SetObjects::Request &req, extended_object_detection::SetObjects::Response &res){
262294
263- if ( req.remove_all && req.add_all ){
264- // do literally nothing
265- }
295+ if ( req.remove_all && req.add_all ){/* do literally nothing*/ }
266296 else {
267297 if ( req.remove_all ){
268298 selected_simple_objects.clear ();
0 commit comments