diff --git a/CMakeLists.txt b/CMakeLists.txt index ffb02fcdf3e6aa24fc0368551d390f6d668a085b..4bcc230632728526a023706c3f2c172ddc9d44f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,7 @@ ENDIF (PCL_FOUND) add_message_files( FILES segmented_objects.msg + plane_coefficients.msg ) ## Generate services in the 'srv' folder diff --git a/include/tos_supervoxels_alg.h b/include/tos_supervoxels_alg.h index 56100878e07b2df069b4a9269b43d2ef24add8df..7de74189cad98d4f8aefa6182a9814e4e1f7462d 100644 --- a/include/tos_supervoxels_alg.h +++ b/include/tos_supervoxels_alg.h @@ -255,6 +255,9 @@ class TosSupervoxelsAlgorithm double get_zmin(); double get_zmax(); int get_th_points(); + + pcl::ModelCoefficients get_plane_coefficients(); + }; #endif diff --git a/include/tos_supervoxels_alg_node.h b/include/tos_supervoxels_alg_node.h index 703c6b4ed58cb892f740e786cc86bb2fd28f3cb8..42d9c325d9148a36f7d27a3e8a4fc124134a8c1e 100644 --- a/include/tos_supervoxels_alg_node.h +++ b/include/tos_supervoxels_alg_node.h @@ -30,6 +30,8 @@ #include <pcl_conversions/pcl_conversions.h> #include <iri_tos_supervoxels/object_segmentation.h> #include <iri_tos_supervoxels/segmented_objects.h> +#include <iri_tos_supervoxels/plane_coefficients.h> + // [publisher subscriber headers] diff --git a/msg/plane_coefficients.msg b/msg/plane_coefficients.msg new file mode 100644 index 0000000000000000000000000000000000000000..0c8f8c7950753bd6e92559449db92f55d9da5b38 --- /dev/null +++ b/msg/plane_coefficients.msg @@ -0,0 +1,4 @@ +float32 a +float32 b +float32 c +float32 d \ No newline at end of file diff --git a/msg/segmented_objects.msg b/msg/segmented_objects.msg index 474846f47bf0dd1b299f0a320f0f22a42fd86e4e..ee204779b28d0629c12777104c011112a6ac6a6d 100644 --- a/msg/segmented_objects.msg +++ b/msg/segmented_objects.msg @@ -1 +1 @@ -sensor_msgs/PointCloud2[] objects +sensor_msgs/PointCloud2[] objects \ No newline at end of file diff --git a/src/tos_supervoxels_alg.cpp b/src/tos_supervoxels_alg.cpp index 2bd6a996af54e7ebb6722086cfc24e3e5527e125..7ad95055ac61d9dd1b327f8d429f8d022dd8e594 100644 --- a/src/tos_supervoxels_alg.cpp +++ b/src/tos_supervoxels_alg.cpp @@ -227,4 +227,10 @@ int TosSupervoxelsAlgorithm::get_th_points() return this->obj_segment.get_th_points(); } +pcl::ModelCoefficients TosSupervoxelsAlgorithm::get_plane_coefficients() +{ + return this->obj_segment.get_plane_coefficients(); +} + + // TosSupervoxelsAlgorithm Public API diff --git a/src/tos_supervoxels_alg_client_node.cpp b/src/tos_supervoxels_alg_client_node.cpp index 227d7612ee7fc762df578121c2c0cf8d551b6a94..5e26fee69e2cccc81d91fc9efba33b40089a3327 100644 --- a/src/tos_supervoxels_alg_client_node.cpp +++ b/src/tos_supervoxels_alg_client_node.cpp @@ -13,6 +13,7 @@ // msg #include "iri_tos_supervoxels/segmented_objects.h" +#include "iri_tos_supervoxels/plane_coefficients.h" ros::ServiceClient client; ros::Publisher pub,pub_segmented_objs; diff --git a/src/tos_supervoxels_alg_node.cpp b/src/tos_supervoxels_alg_node.cpp index c0cd3da32cc553dbecf10d1080f933f30ae251db..b6ef3bc16807ab0e2f053d7187a0bbba93d16380 100644 --- a/src/tos_supervoxels_alg_node.cpp +++ b/src/tos_supervoxels_alg_node.cpp @@ -88,6 +88,14 @@ bool TosSupervoxelsAlgNode::object_segmentationCallback(iri_tos_supervoxels::obj std::vector<pcl::PointCloud<pcl::PointXYZRGBA> > objects; objects = alg_.get_segmented_objects_simple(); + //fill the plane coefficients field + pcl::ModelCoefficients plane_coefficients; + plane_coefficients = alg_.get_plane_coefficients(); + res.plane_coeff.a = plane_coefficients.values[0]; + res.plane_coeff.b = plane_coefficients.values[1]; + res.plane_coeff.c = plane_coefficients.values[2]; + res.plane_coeff.d = plane_coefficients.values[3]; + // free the memory of the algorithm alg_.reset(); @@ -104,6 +112,8 @@ bool TosSupervoxelsAlgNode::object_segmentationCallback(iri_tos_supervoxels::obj } res.objects = seg_objs_msg; + + //unlock previously blocked shared variables this->object_segmentation_mutex_exit(); this->alg_.unlock(); diff --git a/srv/object_segmentation.srv b/srv/object_segmentation.srv index 28afd513a7073db8bf0f4adc53ab061a7eac4467..9fb72e453297e7a4c6790cfeb8ea93d52caec7b6 100644 --- a/srv/object_segmentation.srv +++ b/srv/object_segmentation.srv @@ -1,3 +1,4 @@ sensor_msgs/PointCloud2 point_cloud --- iri_tos_supervoxels/segmented_objects objects +iri_tos_supervoxels/plane_coefficients plane_coeff \ No newline at end of file