39 #include <geometry_msgs/Vector3Stamped.h>
46 ConnectionBasedNodelet::onInit();
50 pnh_->param(
"vital_rate", vital_rate, 1.0);
52 new jsk_topic_tools::VitalChecker(1 / vital_rate));
68 std::vector<double> reference_axis;
69 if (!jsk_topic_tools::readVectorParameter(
70 *pnh_,
"reference_axis", reference_axis)) {
74 else if (reference_axis.size() != 3){
83 srv_ = boost::make_shared <dynamic_reconfigure::Server<Config> > (*pnh_);
84 dynamic_reconfigure::Server<Config>::CallbackType
f =
86 srv_->setCallback (f);
88 polygons_pub_ = advertise<jsk_recognition_msgs::PolygonArray>(
89 *pnh_,
"output_polygons", 1);
91 *pnh_,
"output_coefficients", 1);
93 inliers_pub_ = advertise<jsk_recognition_msgs::ClusterPointIndices>(*pnh_,
"output_inliers", 1);
120 sync_inlier_ = boost::make_shared<message_filters::Synchronizer<SyncInlierPolicy> >(100);
128 sync_ = boost::make_shared<message_filters::Synchronizer<SyncPolicy> >(100);
149 stat.
summary(diagnostic_msgs::DiagnosticStatus::OK,
150 "PlaneRejector running");
153 stat.
summary(diagnostic_msgs::DiagnosticStatus::ERROR,
154 "failed to tf transform");
160 stat.
add(
"Reference Axis",
161 (boost::format(
"[%f, %f, %f]")
168 stat.
summary(diagnostic_msgs::DiagnosticStatus::ERROR,
169 "PlaneRejector not running");
188 const jsk_recognition_msgs::PolygonArray::ConstPtr& polygons,
189 const jsk_recognition_msgs::ModelCoefficientsArray::ConstPtr& coefficients)
191 reject(polygons, coefficients, jsk_recognition_msgs::ClusterPointIndices::ConstPtr());
195 const jsk_recognition_msgs::PolygonArray::ConstPtr& polygons,
196 const jsk_recognition_msgs::ModelCoefficientsArray::ConstPtr& coefficients,
197 const jsk_recognition_msgs::ClusterPointIndices::ConstPtr& inliers)
201 jsk_recognition_msgs::PolygonArray result_polygons;
202 jsk_recognition_msgs::ModelCoefficientsArray result_coefficients;
203 jsk_recognition_msgs::ClusterPointIndices result_inliers;
204 result_polygons.header =
polygons->header;
208 int rejected_plane_counter = 0;
209 int passed_plane_counter = 0;
210 for (
size_t i = 0;
i <
polygons->polygons.size();
i++) {
211 geometry_msgs::PolygonStamped polygon =
polygons->polygons[
i];
216 coefficient.header.stamp)) {
218 geometry_msgs::Vector3Stamped plane_axis;
219 plane_axis.header = coefficient.header;
220 plane_axis.vector.x = coefficient.values[0];
221 plane_axis.vector.y = coefficient.values[1];
222 plane_axis.vector.z = coefficient.values[2];
223 geometry_msgs::Vector3Stamped transformed_plane_axis;
226 transformed_plane_axis);
227 Eigen::Vector3d eigen_transformed_plane_axis;
229 eigen_transformed_plane_axis);
232 eigen_transformed_plane_axis = -eigen_transformed_plane_axis;
234 double ang = std::abs(acos(eigen_transformed_plane_axis.normalized().dot(
reference_axis_)) -
angle_);
236 ++passed_plane_counter;
237 result_polygons.polygons.push_back(
polygons->polygons[i]);
238 result_coefficients.coefficients.push_back(coefficient);
240 result_inliers.cluster_indices.push_back(inliers->cluster_indices[i]);
244 ++rejected_plane_counter;