Skip to content

Commit 8d678b4

Browse files
adding markers
1 parent 8bcf242 commit 8d678b4

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

src/extended_object_detection_node/eod_node.cpp

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <geometry_msgs/Vector3.h>
55
//#include <geometry_msgs/Point.h>
66
#include <math.h>
7+
#include <visualization_msgs/MarkerArray.h>
78

89
geometry_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+
253285
int 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

261293
bool 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();

src/extended_object_detection_node/eod_node.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <std_msgs/Header.h>
1414
#include <sensor_msgs/Image.h>
1515
#include <sensor_msgs/CameraInfo.h>
16+
#include <visualization_msgs/Marker.h>
1617

1718
#include "extended_object_detection/BaseObject.h"
1819
#include "extended_object_detection/SimpleObjectArray.h"
@@ -50,6 +51,7 @@ class EOD_ROS{
5051
boost::shared_ptr<RGBDSynchronizer> rgbd_sync_;
5152

5253
ros::Publisher simple_objects_pub_;
54+
ros::Publisher simple_objects_markers_pub_;
5355
image_transport::ImageTransport *private_it_;
5456
image_transport::Publisher output_image_pub_;
5557

@@ -60,6 +62,7 @@ class EOD_ROS{
6062
double rate_limit_sec;
6163
bool publish_output;
6264
bool use_actual_time;
65+
bool publish_markers;
6366

6467
// vars
6568
int frame_sequence;
@@ -77,9 +80,13 @@ class EOD_ROS{
7780
void detect(const eod::InfoImage& rgb, const eod::InfoImage& depth, std_msgs::Header header);
7881
bool check_time(ros::Time stamp);
7982
void add_data_to_simple_msg( eod::SimpleObject*, extended_object_detection::SimpleObjectArray& msg, const cv::Mat& K);
80-
extended_object_detection::BaseObject eoi_to_base_object( eod::SimpleObject* so, eod::ExtendedObjectInfo* eoi, const cv::Mat& K);
83+
extended_object_detection::BaseObject eoi_to_base_object(eod::SimpleObject* so, eod::ExtendedObjectInfo* eoi, const cv::Mat& K);
8184
cv::Mat getK(const sensor_msgs::CameraInfoConstPtr& info_msg);
8285
cv::Mat getD(const sensor_msgs::CameraInfoConstPtr& info_msg);
86+
void publish_simple_as_markers(const cv::Mat& K, std_msgs::Header header);
87+
88+
visualization_msgs::Marker eoi_to_marker(eod::SimpleObject* so, eod::ExtendedObjectInfo* eoi, const cv::Mat& K, std_msgs::Header header, cv::Scalar color, int id);
89+
8390

8491
int find_simple_obj_index_by_id(int id);
8592

0 commit comments

Comments
 (0)