47 DiagnosticNodelet::onInit();
53 srv_ = boost::make_shared <dynamic_reconfigure::Server<Config> > (*pnh_);
54 dynamic_reconfigure::Server<Config>::CallbackType
f =
57 srv_->setCallback (f);
63 = advertise<jsk_recognition_msgs::ClusterPointIndices>(*pnh_,
"output/vertical/inliers", 1);
65 = advertise<jsk_recognition_msgs::ModelCoefficientsArray>(*pnh_,
"output/vertical/coefficients", 1);
67 = advertise<jsk_recognition_msgs::PolygonArray>(*pnh_,
"output/vertical/polygons", 1);
69 = advertise<jsk_recognition_msgs::ClusterPointIndices>(*pnh_,
"output/horizontal/inliers", 1);
71 = advertise<jsk_recognition_msgs::ModelCoefficientsArray>(*pnh_,
"output/horizontal/coefficients", 1);
73 = advertise<jsk_recognition_msgs::PolygonArray>(*pnh_,
"output/horizontal/polygons", 1);
98 sync_ = boost::make_shared<message_filters::Synchronizer<SyncPolicy> >(100);
102 this, _1, _2, _3, _4));
123 const sensor_msgs::PointCloud2::ConstPtr& cloud_msg,
124 const jsk_recognition_msgs::ClusterPointIndices::ConstPtr& inliers_msg,
125 const jsk_recognition_msgs::ModelCoefficientsArray::ConstPtr& coefficients_msg,
126 const jsk_recognition_msgs::PolygonArray::ConstPtr& polygons_msg)
130 if ((inliers_msg->cluster_indices.size()
131 != coefficients_msg->coefficients.size()) ||
132 (inliers_msg->cluster_indices.size()
133 != polygons_msg->polygons.size())) {
134 NODELET_FATAL(
"the size of inliers, coefficients and polygons are not same");
137 vital_checker_->poke();
138 pcl::PointCloud<PointT>::Ptr input_cloud (
new pcl::PointCloud<PointT>);
142 std::vector<pcl::PointIndices::Ptr> inliers
146 coefficients_msg->coefficients);
148 std::vector<geometry_msgs::PolygonStamped>
polygons = polygons_msg->polygons;
149 std::vector<PlaneInfoContainer> plane_infos
150 =
packInfo(inliers, coefficients, planes, polygons);
151 std::vector<PlaneInfoContainer> horizontal_planes
153 std::vector<PlaneInfoContainer> vertical_planes
170 std::vector<PlaneInfoContainer>& containers,
171 const std_msgs::Header& header,
172 pcl::PointCloud<PointT>::Ptr
cloud,
177 std::vector<pcl::PointIndices::Ptr> inliers;
179 std::vector<geometry_msgs::PolygonStamped>
polygons;
180 for (
size_t i = 0;
i < containers.size();
i++) {
181 inliers.push_back(containers[i].get<0>());
183 polygons.push_back(containers[i].get<3>());
185 jsk_recognition_msgs::ClusterPointIndices ros_indices;
186 jsk_recognition_msgs::ModelCoefficientsArray ros_coefficients;
187 jsk_recognition_msgs::PolygonArray ros_polygons;
188 ros_indices.header =
header;
189 ros_coefficients.header =
header;
190 ros_polygons.header =
header;
193 ros_coefficients.coefficients
195 coefficients, header);
197 pub_inlier.
publish(ros_indices);
198 pub_coefficients.
publish(ros_coefficients);
199 pub_polygons.
publish(ros_polygons);
202 std::vector<PlaneInfoContainer>
204 double reference_angle,
206 std::vector<PlaneInfoContainer>& infos)
209 std::vector<PlaneInfoContainer> ret;
210 for (
size_t i = 0;
i < infos.size();
i++) {
213 plane_info.get<3>().header.frame_id,
214 plane_info.get<3>().header.stamp)) {
218 plane_info.get<3>().header.stamp,
220 Eigen::Affine3d eigen_transform;
222 Eigen::Affine3f eigen_transform_3f;
223 Eigen::Vector3d up_d = (eigen_transform.rotation() * Eigen::Vector3d(0, 0, 1));
225 jsk_recognition_utils::pointFromVectorToVector<Eigen::Vector3d, Eigen::Vector3f>(up_d, up);
227 double angle = plane->angle(up);
231 if (fabs(
angle - reference_angle) < thrshold) {
232 ret.push_back(plane_info);
239 std::vector<PlaneInfoContainer>
241 std::vector<PlaneInfoContainer>& infos)
249 std::vector<PlaneInfoContainer>
251 std::vector<PlaneInfoContainer>& infos)
259 std::vector<PlaneInfoContainer>
261 std::vector<pcl::PointIndices::Ptr>& inliers,
262 std::vector<pcl::ModelCoefficients::Ptr>& coefficients,
263 std::vector<jsk_recognition_utils::Plane::Ptr>& planes,
264 std::vector<geometry_msgs::PolygonStamped>& polygons)
266 std::vector<PlaneInfoContainer> ret;
267 for (
size_t i = 0;
i < inliers.size();
i++) {
268 ret.push_back(boost::make_tuple<pcl::PointIndices::Ptr,
269 pcl::ModelCoefficients::Ptr,
271 planes[i], polygons[i]));