Skip to content

Commit 8bcf242

Browse files
change objects done
1 parent 5ec7114 commit 8bcf242

File tree

5 files changed

+73
-7
lines changed

5 files changed

+73
-7
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ add_message_files(
6060
## Generate services in the 'srv' folder
6161
add_service_files(
6262
FILES
63-
SetSimpleObjects.srv
63+
SetObjects.srv
6464
)
6565

6666
## Generate added messages and services with any dependencies listed here

src/extended_object_detection_node/eod_node.cpp

Lines changed: 64 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include <sensor_msgs/image_encodings.h>
44
#include <geometry_msgs/Vector3.h>
55
//#include <geometry_msgs/Point.h>
6-
6+
#include <math.h>
77

88
geometry_msgs::Vector3 getUnitTranslation(cv::Point point, const cv::Mat& K){
99
geometry_msgs::Vector3 unit_translate;
@@ -61,6 +61,8 @@ EOD_ROS::EOD_ROS(ros::NodeHandle nh, ros::NodeHandle nh_p){
6161
}
6262
}
6363
ROS_INFO("Selected to detect on start %li objects", selected_simple_objects.size());
64+
65+
set_simple_objects_srv_ = nh_p_.advertiseService("set_simple_objects", &EOD_ROS::set_simple_objects_cb, this);
6466

6567
// set up publishers
6668
simple_objects_pub_ = nh_p.advertise<extended_object_detection::SimpleObjectArray>("simple_objects",1);
@@ -243,13 +245,70 @@ extended_object_detection::BaseObject EOD_ROS::eoi_to_base_object( eod::SimpleOb
243245
else{
244246
bo.transform.translation = getUnitTranslation(eoi->getCenter(), K);
245247
}
246-
247-
248-
//TODO tracks
249-
248+
249+
//TODO tracks
250250
return bo;
251251
}
252252

253+
int EOD_ROS::find_simple_obj_index_by_id(int id){
254+
for( int i = 0 ; i < selected_simple_objects.size() ; i++ ){
255+
if( selected_simple_objects[i]->ID == id )
256+
return i;
257+
}
258+
return -1;
259+
}
260+
261+
bool EOD_ROS::set_simple_objects_cb(extended_object_detection::SetObjects::Request &req, extended_object_detection::SetObjects::Response &res){
262+
263+
if( req.remove_all && req.add_all ){
264+
// do literally nothing
265+
}
266+
else{
267+
if( req.remove_all ){
268+
selected_simple_objects.clear();
269+
}
270+
else if( req.add_all ){
271+
selected_simple_objects.clear();
272+
selected_simple_objects.assign(object_base->simple_objects.begin(), object_base->simple_objects.end());
273+
}
274+
else{
275+
for( auto& change : req.changes ){
276+
int object_id = abs(change);
277+
eod::SimpleObject* so = object_base->getSimpleObjectByID(object_id);
278+
if(so){
279+
// add
280+
if( change > 0 ){
281+
if( find_simple_obj_index_by_id(object_id) != -1 ){
282+
// already selected
283+
ROS_WARN("[set_simple_objects srv] object with id %i is already selected", object_id);
284+
}
285+
else{
286+
selected_simple_objects.push_back(so);
287+
}
288+
}
289+
// remove
290+
else{
291+
int no_in_list = find_simple_obj_index_by_id(object_id);
292+
if( no_in_list != -1 ){
293+
selected_simple_objects.erase(selected_simple_objects.begin()+no_in_list);
294+
}
295+
else{
296+
// already removed
297+
ROS_WARN("[set_simple_objects srv] object with id %i is already removed", object_id);
298+
}
299+
}
300+
}
301+
else{
302+
ROS_ERROR("[set_simple_objects srv] no object in base with id %i",object_id);
303+
}
304+
}
305+
}
306+
}
307+
for(auto& so : selected_simple_objects )
308+
res.result.push_back(so->ID);
309+
return true;
310+
}
311+
253312
int main(int argc, char **argv)
254313
{
255314
ros::init(argc, argv, "extended_object_detection_node");

src/extended_object_detection_node/eod_node.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "extended_object_detection/BaseObject.h"
1818
#include "extended_object_detection/SimpleObjectArray.h"
1919
#include "extended_object_detection/ComplexObjectArray.h"
20+
#include "extended_object_detection/SetObjects.h"
2021

2122
#include "ObjectBase.h"
2223

@@ -52,6 +53,8 @@ class EOD_ROS{
5253
image_transport::ImageTransport *private_it_;
5354
image_transport::Publisher output_image_pub_;
5455

56+
ros::ServiceServer set_simple_objects_srv_;
57+
5558
// params
5659
bool subscribe_depth;
5760
double rate_limit_sec;
@@ -65,6 +68,8 @@ class EOD_ROS{
6568
// callbacks
6669
void rgb_info_cb(const sensor_msgs::ImageConstPtr& image, const sensor_msgs::CameraInfoConstPtr& info);
6770

71+
bool set_simple_objects_cb(extended_object_detection::SetObjects::Request &req, extended_object_detection::SetObjects::Response &res);
72+
6873
void rgbd_info_cb(const sensor_msgs::ImageConstPtr& image, const sensor_msgs::CameraInfoConstPtr& info, const sensor_msgs::ImageConstPtr& depth_image, const sensor_msgs::CameraInfoConstPtr& depth_info);
6974

7075
// functions
@@ -76,6 +81,8 @@ class EOD_ROS{
7681
cv::Mat getK(const sensor_msgs::CameraInfoConstPtr& info_msg);
7782
cv::Mat getD(const sensor_msgs::CameraInfoConstPtr& info_msg);
7883

84+
int find_simple_obj_index_by_id(int id);
85+
7986
// EOD
8087
eod::ObjectBase * object_base;
8188
std::vector<eod::SimpleObject*> selected_simple_objects;

src/lib

0 commit comments

Comments
 (0)