77#include < visualization_msgs/MarkerArray.h>
88#include " geometry_utils.h"
99
10- geometry_msgs::Vector3 getUnitTranslation (cv::Point point, const cv::Mat& K){
11- geometry_msgs::Vector3 unit_translate;
12- unit_translate.x = (point.x - K.at <double >(0 ,2 )) / K.at <double >(0 ,0 );
13- unit_translate.y = (point.y - K.at <double >(1 ,2 )) / K.at <double >(1 ,1 );
14- unit_translate.z = 1 ;
15- return unit_translate;
16- }
1710
18- geometry_msgs::Vector3 multiplyVectorScalar (geometry_msgs::Vector3 vector, double scalar ){
19- geometry_msgs::Vector3 new_vector ;
20- new_vector .x = vector. x * scalar ;
21- new_vector .y = vector. y * scalar ;
22- new_vector .z = vector. z * scalar ;
23- return new_vector ;
11+ geometry_msgs::Vector3 fromCvVector (cv::Vec3d cv_vector ){
12+ geometry_msgs::Vector3 ros_vector ;
13+ ros_vector .x = cv_vector[ 0 ] ;
14+ ros_vector .y = cv_vector[ 1 ] ;
15+ ros_vector .z = cv_vector[ 2 ] ;
16+ return ros_vector ;
2417}
2518
2619geometry_msgs::Point fromVector (const geometry_msgs::Vector3& vector){
@@ -41,16 +34,14 @@ EOD_ROS::EOD_ROS(ros::NodeHandle nh, ros::NodeHandle nh_p){
4134
4235 sub_rgb_.subscribe (*rgb_it_, " camera/image_raw" , 10 );
4336 sub_info_.subscribe (nh_, " camera/info" , 10 );
44-
45-
37+
4638 // get params
4739 nh_p_.param (" subscribe_depth" , subscribe_depth, false );
4840 nh_p_.param (" rate_limit_sec" , rate_limit_sec, 0.1 );
4941 nh_p_.param (" publish_image_output" , publish_image_output, false );
5042 nh_p_.param (" use_actual_time" , use_actual_time, false );
5143 nh_p_.param (" publish_markers" , publish_markers, false );
52-
53-
44+
5445 std::string object_base_path;
5546 nh_p_.getParam (" object_base" ,object_base_path);
5647
@@ -137,12 +128,12 @@ cv::Mat EOD_ROS::getD(const sensor_msgs::CameraInfoConstPtr& info_msg){
137128void EOD_ROS::rgb_info_cb (const sensor_msgs::ImageConstPtr& rgb_image, const sensor_msgs::CameraInfoConstPtr& rgb_info){
138129 ROS_INFO (" Get Image!" );
139130
140- // CHECK RATE
141- // if( !check_time(rgb_image->header.stamp) ) {
131+ // CHECK RATE
142132 if ( !check_time (ros::Time::now ()) ) {
143133 ROS_WARN (" Skipped frame" );
144134 return ;
145135 }
136+ // TODO add possibility to exclude old stamp images (if detection goes to slow)
146137
147138 cv::Mat rgb;
148139 try {
@@ -154,19 +145,18 @@ void EOD_ROS::rgb_info_cb(const sensor_msgs::ImageConstPtr& rgb_image, const sen
154145 }
155146
156147 eod::InfoImage ii = eod::InfoImage (rgb, getK (rgb_info), getD (rgb_info) );
157- detect (ii, eod::InfoImage (), rgb_image->header );
158- // detect(rgb, cv::Mat(), rgb_image->header);
148+ detect (ii, eod::InfoImage (), rgb_image->header );
159149}
160150
161151void 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){
162152 ROS_INFO (" Got RGBD!" );
163153
164- // CHECK RATE
165- // if( !check_time(rgb_image->header.stamp) ) {
154+ // CHECK RATE
166155 if ( !check_time (ros::Time::now ()) ) {
167156 ROS_WARN (" Skipped frame" );
168157 return ;
169158 }
159+ // TODO add possibility to exclude old stamp images (if detection goes to slow)
170160
171161 cv::Mat rgb;
172162 try {
@@ -186,11 +176,9 @@ void EOD_ROS::rgbd_info_cb(const sensor_msgs::ImageConstPtr& rgb_image, const se
186176 }
187177 else {
188178 ROS_ERROR_THROTTLE (5 , " Depth image has unsupported encoding [%s]" , depth_image->encoding .c_str ());
189- }
190-
179+ }
191180 eod::InfoImage ii_rgb = eod::InfoImage (rgb, getK (rgb_info), getD (rgb_info) );
192- eod::InfoImage ii_depth = eod::InfoImage (depth, getK (depth_info), getD (depth_info) );
193-
181+ eod::InfoImage ii_depth = eod::InfoImage (depth, getK (depth_info), getD (depth_info) );
194182 detect (ii_rgb, ii_depth, rgb_image->header );
195183}
196184
@@ -267,7 +255,7 @@ extended_object_detection::BaseObject EOD_ROS::eoi_to_base_object( eod::SimpleOb
267255 bo.transform .translation .z = eoi->tvec [0 ][2 ];
268256 }
269257 else {
270- bo.transform .translation = getUnitTranslation ( eoi->getCenter (), K);
258+ bo.transform .translation = fromCvVector ( eod::get_translation ( eoi->getCenter (), K, 1 ));
271259 }
272260 // rotation
273261 if (eoi->rvec .size () > 0 ){
@@ -291,15 +279,9 @@ extended_object_detection::BaseObject EOD_ROS::eoi_to_base_object( eod::SimpleOb
291279
292280 // translation to rect's corners
293281 geometry_msgs::Vector3 temp_translation;
294- temp_translation = multiplyVectorScalar (getUnitTranslation (cv::Point (eoi->x , eoi->y ), K),bo.transform .translation .z );
295- bo.rect .cornerTranslates .push_back (temp_translation);
296- temp_translation = multiplyVectorScalar (getUnitTranslation (cv::Point (eoi->x , eoi->y + eoi->height ), K),bo.transform .translation .z );
297- bo.rect .cornerTranslates .push_back (temp_translation);
298- temp_translation = multiplyVectorScalar (getUnitTranslation (cv::Point (eoi->x + eoi->width , eoi->y + eoi->height ), K),bo.transform .translation .z );
299- bo.rect .cornerTranslates .push_back (temp_translation);
300- temp_translation = multiplyVectorScalar (getUnitTranslation (cv::Point (eoi->x + eoi->width , eoi->y ), K),bo.transform .translation .z );
301- bo.rect .cornerTranslates .push_back (temp_translation);
302-
282+ for ( auto & corner_p : eoi->getCorners () ){
283+ bo.rect .cornerTranslates .push_back (fromCvVector (eod::get_translation (eod::float2intPoint (corner_p), K, bo.transform .translation .z )));
284+ }
303285
304286 // TODO tracks
305287 return bo;
0 commit comments