37 #include <jsk_topic_tools/rosparam_utils.h>
44 ConnectionBasedNodelet::onInit();
51 = jsk_topic_tools::readVectorParameter(*pnh_,
"frame_ids",
53 if (!frame_id_read_p) {
59 if (!polygon_read_p) {
65 NODELET_FATAL(
"the size of frame_ids(%lu) does not match the size of polygons(%lu)",
77 NODELET_FATAL(
"~use_periodic, ~use_trigger nor ~use_message is not true");
84 polygon_pub_ = advertise<jsk_recognition_msgs::PolygonArray>(
85 *pnh_,
"output_polygons", 1);
87 *pnh_,
"output_coefficients", 1);
90 polygon_pub_ = pnh_->advertise<jsk_recognition_msgs::PolygonArray>(
91 "output_polygons", 1);
92 coefficients_pub_ = pnh_->advertise<jsk_recognition_msgs::ModelCoefficientsArray>(
93 "output_coefficients", 1);
120 = boost::make_shared<message_filters::Synchronizer<SyncPolicy> >(100);
122 sync_->registerCallback(boost::bind(
140 const sensor_msgs::PointCloud2::ConstPtr& input,
141 const jsk_recognition_msgs::Int32Stamped::ConstPtr& trigger)
148 Eigen::Vector3d
A, B, C;
149 A[0] = polygon.polygon.points[0].x;
150 A[1] = polygon.polygon.points[0].y;
151 A[2] = polygon.polygon.points[0].z;
152 B[0] = polygon.polygon.points[1].x;
153 B[1] = polygon.polygon.points[1].y;
154 B[2] = polygon.polygon.points[1].z;
155 C[0] = polygon.polygon.points[2].x;
156 C[1] = polygon.polygon.points[2].y;
157 C[2] = polygon.polygon.points[2].z;
158 Eigen::Vector3d n = (B -
A).
cross(C -
A).normalized();
162 double d = -(
a *
A[0] +
b *
A[1] + c *
A[2]);
164 coefficient.header = polygon.header;
165 coefficient.values.push_back(a);
166 coefficient.values.push_back(b);
167 coefficient.values.push_back(c);
168 coefficient.values.push_back(d);
178 if (pnh_->hasParam(param_name)) {
180 pnh_->param(param_name, v, v);
182 for (
size_t toplevel_i = 0; toplevel_i < v.
size(); toplevel_i++) {
184 geometry_msgs::PolygonStamped polygon;
186 polygon_v.
size() >= 3) {
187 for (
size_t secondlevel_i = 0; secondlevel_i < polygon_v.
size(); secondlevel_i++) {
190 vertex_v.
size() == 3 ) {
194 geometry_msgs::Point32
point;
198 polygon.polygon.points.push_back(
point);
201 NODELET_FATAL(
"%s[%lu][%lu] is not array or the length is not 3",
202 param_name.c_str(), toplevel_i, secondlevel_i);
211 NODELET_FATAL(
"%s[%lu] is not array or not enough points", param_name.c_str(), toplevel_i);
223 NODELET_FATAL(
"no %s is available on parameter server", param_name.c_str());
232 return (
double)((int)val);
254 for (
size_t i = 0;
i <
polygons_.polygons.size();
i++) {