70 dynamic_recfg_ =
new dynamic_reconfigure::Server<CostmapToPolygonsDBSConcaveHullConfig>(nh);
78 std::vector< std::vector<KeyPoint> > clusters;
86 for (
int i = 1; i <clusters.size(); ++i)
88 polygons->push_back( geometry_msgs::Polygon() );
93 if (!clusters.empty())
95 for (
int i=0; i < clusters.front().size(); ++i)
97 polygons->push_back( geometry_msgs::Polygon() );
112 std::vector<geometry_msgs::Point32>& concave_list = polygon.points;
114 for (
int i = 0; i < (int)concave_list.size() - 1; ++i)
118 const geometry_msgs::Point32& vertex1 = concave_list[i];
119 const geometry_msgs::Point32& vertex2 = concave_list[i+1];
126 double line_length =
norm2d(vertex1, vertex2);
128 double dst1 =
norm2d(cluster[nearest_idx], vertex1);
129 double dst2 =
norm2d(cluster[nearest_idx], vertex2);
130 double dd = std::min(dst1, dst2);
134 if (line_length / dd > depth)
141 geometry_msgs::Point32 new_point;
142 cluster[nearest_idx].toPointMsg(new_point);
143 concave_list.insert(concave_list.begin() + i + 1, new_point);
156 std::vector<geometry_msgs::Point32>& concave_list = polygon.points;
159 double mean_length = 0;
160 for (
int i = 0; i < (int)concave_list.size() - 1; ++i)
162 mean_length +=
norm2d(concave_list[i],concave_list[i+1]);
164 mean_length /= double(concave_list.size());
166 for (
int i = 0; i < (int)concave_list.size() - 1; ++i)
170 const geometry_msgs::Point32& vertex1 = concave_list[i];
171 const geometry_msgs::Point32& vertex2 = concave_list[i+1];
173 double line_length =
norm2d(vertex1, vertex2);
183 double dst1 =
norm2d(cluster[nearest_idx], vertex1);
184 double dst2 =
norm2d(cluster[nearest_idx], vertex2);
185 double dd = std::min(dst1, dst2);
189 if (line_length / dd > depth)
196 geometry_msgs::Point32 new_point;
197 cluster[nearest_idx].toPointMsg(new_point);
198 concave_list.insert(concave_list.begin() + i + 1, new_point);