Skip to content

Commit b0d6e08

Browse files
works with basic InfooImage
1 parent d3b399c commit b0d6e08

File tree

5 files changed

+50
-28
lines changed

5 files changed

+50
-28
lines changed

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ set( EOD_SRC
9090
src/lib/types/Tracker.cpp
9191
src/lib/types/Relationship.cpp
9292
src/lib/types/Filtering.cpp
93-
src/lib/types/Clusterization.cpp
93+
src/lib/types/Clusterization.cpp
94+
src/lib/types/InfoImage.cpp
9495
# lib utils
9596
src/lib/utils/geometry_utils.cpp
9697
src/lib/utils/drawing_utils.cpp

launch/extended_object_detection_oakd_example.launch

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<remap from="depth/image_raw" to="/rgb_stereo_publisher/stereo/depth"/>
2020
<remap from="depth/info" to="/rgb_stereo_publisher/stereo/camera_info"/>
2121

22-
<rosparam param="selectedOnStartSimple">[]</rosparam>
22+
<rosparam param="selectedOnStartSimple">[40]</rosparam>
2323
<rosparam param="selectedOnStartComplex">[-1]</rosparam>
2424

2525
</node>

src/extended_object_detection_node/eod_node.cpp

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
#include <cstdint>
33
#include <sensor_msgs/image_encodings.h>
44
#include <geometry_msgs/Vector3.h>
5-
#include <geometry_msgs/Point.h>
5+
//#include <geometry_msgs/Point.h>
66

7-
geometry_msgs::Vector3 getUnitTranslation(geometry_msgs::Point point){
7+
8+
geometry_msgs::Vector3 getUnitTranslation(cv::Point point, const cv::Mat& K){
89
geometry_msgs::Vector3 unit_translate;
9-
unit_translate.x = (point.x - cx) / fx;
10-
unit_translate.y = (point.y - cy) / fy;
10+
unit_translate.x = (point.x - K.at<double>(0,2)) / K.at<double>(0,0);
11+
unit_translate.y = (point.y - K.at<double>(1,2)) / K.at<double>(1,1);
1112
unit_translate.z = 1;
1213
return unit_translate;
1314
}
@@ -59,10 +60,8 @@ EOD_ROS::EOD_ROS(ros::NodeHandle nh, ros::NodeHandle nh_p){
5960
}
6061
}
6162
}
62-
ROS_INFO("Selected to detect on start %i objects", selected_simple_objects.size());
63-
64-
65-
63+
ROS_INFO("Selected to detect on start %li objects", selected_simple_objects.size());
64+
6665
// set up publishers
6766
simple_objects_pub_ = nh_p.advertise<extended_object_detection::SimpleObjectArray>("simple_objects",1);
6867

@@ -91,6 +90,16 @@ bool EOD_ROS::check_time(ros::Time stamp){
9190
return (stamp - prev_detected_time).toSec() > rate_limit_sec;
9291
}
9392

93+
cv::Mat EOD_ROS::getK(const sensor_msgs::CameraInfoConstPtr& info_msg){
94+
cv::Mat K = cv::Mat::zeros(3, 3, CV_64F);
95+
for (size_t i=0; i<3; i++) {
96+
for (size_t j=0; j<3; j++) {
97+
K.at<double>(i, j) = info_msg->K[i*3+j];
98+
}
99+
}
100+
return K;
101+
}
102+
94103
void EOD_ROS::rgb_info_cb(const sensor_msgs::ImageConstPtr& rgb_image, const sensor_msgs::CameraInfoConstPtr& rgb_info){
95104
ROS_INFO("Get Image!");
96105

@@ -107,9 +116,12 @@ void EOD_ROS::rgb_info_cb(const sensor_msgs::ImageConstPtr& rgb_image, const sen
107116
}
108117
catch (cv_bridge::Exception& e){
109118
ROS_ERROR("Could not convert from '%s' to 'bgr8'.", rgb_image->encoding.c_str());
119+
return;
110120
}
111121

112-
detect(rgb, cv::Mat(), rgb_image->header);
122+
eod::InfoImage ii = eod::InfoImage(rgb, getK(rgb_info), cv::Mat() );
123+
detect(ii, eod::InfoImage(), rgb_image->header);
124+
//detect(rgb, cv::Mat(), rgb_image->header);
113125
}
114126

115127
void EOD_ROS::rgbd_info_cb(const sensor_msgs::ImageConstPtr& rgb_image, const sensor_msgs::CameraInfoConstPtr& rgb_info, const sensor_msgs::ImageConstPtr& depth_image, const sensor_msgs::CameraInfoConstPtr& depth_info){
@@ -128,6 +140,7 @@ void EOD_ROS::rgbd_info_cb(const sensor_msgs::ImageConstPtr& rgb_image, const se
128140
}
129141
catch (cv_bridge::Exception& e){
130142
ROS_ERROR("Could not convert from '%s' to 'bgr8'.", rgb_image->encoding.c_str());
143+
return;
131144
}
132145

133146
cv::Mat depth;
@@ -141,10 +154,15 @@ void EOD_ROS::rgbd_info_cb(const sensor_msgs::ImageConstPtr& rgb_image, const se
141154
ROS_ERROR_THROTTLE(5, "Depth image has unsupported encoding [%s]", depth_image->encoding.c_str());
142155
}
143156

144-
detect(rgb, depth, rgb_image->header);
157+
eod::InfoImage ii_rgb = eod::InfoImage(rgb, getK(rgb_info), cv::Mat() );
158+
eod::InfoImage ii_depth = eod::InfoImage(depth, getK(depth_info), cv::Mat() );
159+
160+
detect(ii_rgb, ii_depth, rgb_image->header);
145161
}
146162

147-
void EOD_ROS::detect(const cv::Mat& rgb, const cv::Mat& depth, std_msgs::Header header){
163+
//void EOD_ROS::detect(const cv::Mat& rgb, const cv::Mat& depth, std_msgs::Header header){
164+
void EOD_ROS::detect(const eod::InfoImage& rgb, const eod::InfoImage& depth, std_msgs::Header header){
165+
ROS_INFO("Detecting...");
148166
prev_detected_time = ros::Time::now();
149167

150168
cv::Mat image_to_draw;
@@ -157,10 +175,10 @@ void EOD_ROS::detect(const cv::Mat& rgb, const cv::Mat& depth, std_msgs::Header
157175

158176
// detect simple objects
159177
for (auto& s_it : selected_simple_objects){
160-
s_it->Identify(rgb, depth, frame_sequence);
161-
162-
add_data_to_simple_msg(s_it, simples_msg);
163-
178+
//ROS_INFO("Identifiyng...");
179+
s_it->Identify(rgb, depth, frame_sequence);
180+
//ROS_INFO("Adding...");
181+
add_data_to_simple_msg(&(*s_it), simples_msg, rgb.K);
164182
}
165183

166184
simples_msg.header = header;
@@ -172,29 +190,30 @@ void EOD_ROS::detect(const cv::Mat& rgb, const cv::Mat& depth, std_msgs::Header
172190
frame_sequence++;
173191
}
174192

175-
void EOD_ROS::add_data_to_simple_msg(const eod::SimpleObject* so, extended_object_detection::SimpleObjectArray& msg){
193+
void EOD_ROS::add_data_to_simple_msg( eod::SimpleObject* so, extended_object_detection::SimpleObjectArray& msg, const cv::Mat& K){
176194
for(auto& eoi : so->objects){
177-
msg.objects.push_back(eoi_to_base_object(so, &eoi));
195+
msg.objects.push_back(eoi_to_base_object(so, &eoi, K));
178196
}
179197
}
180198

181-
extended_object_detection::BaseObject EOD_ROS::eoi_to_base_object(const eod::SimpleObject* so, const eod::ExtendedObjectInfo* eoi){
199+
extended_object_detection::BaseObject EOD_ROS::eoi_to_base_object( eod::SimpleObject* so, eod::ExtendedObjectInfo* eoi, const cv::Mat& K){
200+
//ROS_INFO("Forming...");
182201
extended_object_detection::BaseObject bo;
183202
// common
184203
bo.type_id = so->ID;
185204
bo.type_name = so->name;
186205
bo.score = eoi->total_score;
187206

188-
for( auto const& exi : eoi->extracted_info){
207+
for( auto& exi : eoi->extracted_info){
189208
bo.extracted_info.keys.push_back(exi.first);
190209
bo.extracted_info.values.push_back(exi.second);
191210
}
192211

193212
// rect
194213
bo.rect.left_bottom.x = eoi->x;
195214
bo.rect.left_bottom.y = eoi->y;
196-
bo.rect.right_bottom.x = eoi->x + eoi->width;
197-
bo.rect.right_bottom.y = eoi->y + eoi->height;
215+
bo.rect.right_up.x = eoi->x + eoi->width;
216+
bo.rect.right_up.y = eoi->y + eoi->height;
198217

199218
// transform
200219
if( eoi->tvec.size() > 0 ){
@@ -203,7 +222,7 @@ extended_object_detection::BaseObject EOD_ROS::eoi_to_base_object(const eod::Sim
203222
bo.transform.translation.z = eoi->tvec[0][2];
204223
}
205224
else{
206-
bo.transform.translation = getUnitTranslation(ext_obj->getCenter());
225+
bo.transform.translation = getUnitTranslation(eoi->getCenter(), K);
207226
}
208227

209228

src/extended_object_detection_node/eod_node.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,12 @@ class EOD_ROS{
6666
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);
6767

6868
// functions
69-
void detect(const cv::Mat& rgb, const cv::Mat& depth, std_msgs::Header header);
69+
//void detect(const cv::Mat& rgb, const cv::Mat& depth, std_msgs::Header header);
70+
void detect(const eod::InfoImage& rgb, const eod::InfoImage& depth, std_msgs::Header header);
7071
bool check_time(ros::Time stamp);
71-
void add_data_to_simple_msg(const eod::SimpleObject*, extended_object_detection::SimpleObjectArray& msg);
72-
extended_object_detection::BaseObject eoi_to_base_object(const eod::SimpleObject* so, const eod::ExtendedObjectInfo* eoi);
72+
void add_data_to_simple_msg( eod::SimpleObject*, extended_object_detection::SimpleObjectArray& msg, const cv::Mat& K);
73+
extended_object_detection::BaseObject eoi_to_base_object( eod::SimpleObject* so, eod::ExtendedObjectInfo* eoi, const cv::Mat& K);
74+
cv::Mat getK(const sensor_msgs::CameraInfoConstPtr& info_msg);
7375

7476
// EOD
7577
eod::ObjectBase * object_base;

0 commit comments

Comments
 (0)