edge_depth_refinement_nodelet.cpp
Go to the documentation of this file.
1 // -*- mode: c++ -*-
2 /*********************************************************************
3  * Software License Agreement (BSD License)
4  *
5  * Copyright (c) 2014, JSK Lab
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * * Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above
15  * copyright notice, this list of conditions and the following
16  * disclaimer in the documentation and/or other materials provided
17  * with the distribution.
18  * * Neither the name of the JSK Lab nor the names of its
19  * contributors may be used to endorse or promote products derived
20  * from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33  * POSSIBILITY OF SUCH DAMAGE.
34  *********************************************************************/
35 
37 
38 #include <pcl/segmentation/sac_segmentation.h>
39 #include <pcl/filters/extract_indices.h>
40 #include <pcl/io/io.h>
42 #include <sstream>
43 
44 namespace jsk_pcl_ros
45 {
47  {
48  ConnectionBasedNodelet::onInit();
49 
51  // publishers
53  pub_indices_ = advertise<jsk_recognition_msgs::ClusterPointIndices>(
54  *pnh_, "output", 1);
55  pub_coefficients_ = advertise<jsk_recognition_msgs::ModelCoefficientsArray>(
56  *pnh_, "output_coefficients", 1);
57  pub_edges_ = advertise<jsk_recognition_msgs::SegmentArray>(
58  *pnh_, "output_edges", 1);
59  pub_outlier_removed_indices_ = advertise<jsk_recognition_msgs::ClusterPointIndices>(
60  *pnh_, "output_outlier_removed", 1);
61  pub_outlier_removed_coefficients_ = advertise<jsk_recognition_msgs::ModelCoefficientsArray>(
62  *pnh_, "output_outlier_removed_coefficients", 1);
63  pub_outlier_removed_edges_= advertise<jsk_recognition_msgs::SegmentArray>(
64  *pnh_, "output_outlier_removed_edges", 1);
66  // dynamic reconfigure
68  srv_ = boost::make_shared <dynamic_reconfigure::Server<Config> > (*pnh_);
69  dynamic_reconfigure::Server<Config>::CallbackType f =
70  boost::bind (&EdgeDepthRefinement::configCallback, this, _1, _2);
71  srv_->setCallback (f);
72 
73  onInitPostProcess();
74  }
75 
77  // message_filters::Synchronizer needs to be called reset
78  // before message_filters::Subscriber is freed.
79  // Calling reset fixes the following error on shutdown of the nodelet:
80  // terminate called after throwing an instance of
81  // 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >'
82  // what(): boost: mutex lock failed in pthread_mutex_lock: Invalid argument
83  // Also see https://github.com/ros/ros_comm/issues/720 .
84  sync_.reset();
85  }
86 
88  {
90  // subscribesrs
92  sub_input_.subscribe(*pnh_, "input", 1);
93  sub_indices_.subscribe(*pnh_, "input_indices", 1);
94  sync_ = boost::make_shared<message_filters::Synchronizer<SyncPolicy> >(100);
95  sync_->connectInput(sub_input_, sub_indices_);
96  sync_->registerCallback(boost::bind(&EdgeDepthRefinement::refine,
97  this, _1, _2));
98  }
99 
101  {
104  }
105 
107  // line coefficients are:
108  // 0: point.x
109  // 1: point.y
110  // 2. point.z
111  // 3. direction.x
112  // 4: direction.y
113  // 5. direction.z
116  const pcl::ModelCoefficients::Ptr coefficients)
117  {
118  Eigen::Vector3f p(coefficients->values[0],
119  coefficients->values[1],
120  coefficients->values[2]);
121  Eigen::Vector3f d(coefficients->values[3],
122  coefficients->values[4],
123  coefficients->values[5]);
125  return ret;
126  }
127 
128  boost::tuple<int, int> EdgeDepthRefinement::findMinMaxIndex(
129  const int width, const int height,
130  const std::vector<int>& indices)
131  {
132 
133  int min_y_index, max_y_index, min_x_index, max_x_index;
134  int min_y = INT_MAX;
135  int min_x = INT_MAX;
136  int max_y = INT_MIN;
137  int max_x = INT_MIN;
138  for (size_t i = 0; i < indices.size(); i++) {
139  int index = indices[i];
140  int x = index % width;
141  int y = index / width;
142 
143  if (x > max_x) {
144  max_x = x;
145  max_x_index = index;
146  }
147  if (x < min_x) {
148  min_x = x;
149  min_x_index = index;
150  }
151  if (y > max_y) {
152  max_y = y;
153  max_y_index = index;
154  }
155  if (y < min_y) {
156  min_y = y;
157  min_y_index = index;
158  }
159  }
160 
161  if (min_x_index != max_x_index) {
162  return boost::make_tuple(
163  min_x_index, max_x_index);
164  }
165  else {
166  return boost::make_tuple(
167  min_y_index, max_y_index);
168  }
169  }
170 
171 
173  const pcl::PointCloud<PointT>::Ptr& cloud,
174  const std::vector<int>& indices,
176  {
177  boost::tuple<int, int> min_max
178  = findMinMaxIndex(cloud->width, cloud->height, indices);
179  PointT min_point = cloud->points[min_max.get<0>()];
180  PointT max_point = cloud->points[min_max.get<1>()];
181  Eigen::Vector3f min_point_f = min_point.getVector3fMap();
182  Eigen::Vector3f max_point_f = max_point.getVector3fMap();
183  Eigen::Vector3f min_foot, max_foot;
184  line->foot(min_point_f, min_foot);
185  line->foot(max_point_f, max_foot);
187  return segment;
188  }
189 
191  const pcl::PointCloud<PointT>::Ptr& cloud,
192  const std::set<int>& duplicated_set,
193  const std::vector<pcl::PointIndices::Ptr> all_inliers,
194  pcl::PointIndices::Ptr& output_indices)
195  {
196  std::vector<int> integrated_indices;
197  for (std::set<int>::iterator it = duplicated_set.begin();
198  it != duplicated_set.end();
199  ++it) {
200  integrated_indices = jsk_recognition_utils::addIndices(all_inliers[*it]->indices,
201  integrated_indices);
202  }
203  output_indices->indices = integrated_indices;
204  }
205 
207  const pcl::PointCloud<PointT>::Ptr& cloud,
208  const std::vector<pcl::PointIndices::Ptr> all_inliers,
209  const std::vector<pcl::ModelCoefficients::Ptr> all_coefficients,
210  std::vector<pcl::PointIndices::Ptr>& output_inliers,
211  std::vector<pcl::ModelCoefficients::Ptr>& output_coefficients)
212  {
213  if (all_inliers.size() == 0) {
214  NODELET_ERROR("no edges are specified");
215  return;
216  }
217 
218  // buildup Lines and Segments
219  std::vector<jsk_recognition_utils::Line::Ptr> lines;
220  std::vector<jsk_recognition_utils::Segment::Ptr> segments;
221 
222  for (size_t i = 0; i < all_inliers.size(); i++) {
223  pcl::PointIndices::Ptr the_inliers = all_inliers[i];
224  pcl::ModelCoefficients::Ptr the_coefficients = all_coefficients[i];
225  jsk_recognition_utils::Line::Ptr the_line = lineFromCoefficients(the_coefficients);
227  = segmentFromIndices(cloud, the_inliers->indices, the_line);
228  lines.push_back(the_line);
229  segments.push_back(the_segment);
230  }
231 
233  // build duplication map
234  // duplication map is a hash map from int to a list of int
236  std::map<int, std::vector<int> > duplication_map;
237  for (size_t i = 0; i < all_inliers.size() - 1; i++) {
238  duplication_map[i] = std::vector<int>(); // add empty map
240  jsk_recognition_utils::Segment::Ptr the_segment = segments[i];
241  for (size_t j = i + 1; j < all_inliers.size(); j++) {
242  jsk_recognition_utils::Line::Ptr candidate_line = lines[j];
243  jsk_recognition_utils::Segment::Ptr candidate_segment = segments[j];
244  Eigen::Vector3f candidate_midpoint;
245  candidate_segment->midpoint(candidate_midpoint);
246 
247  double angle_diff = the_line->angle(*candidate_line);
248  if (duplication_angle_threshold_ > angle_diff) {
249  double distance_diff = the_segment->distance(candidate_midpoint);
250  if (duplication_distance_threshold_ > distance_diff) {
251  duplication_map[i].push_back(j);
252  }
253  }
254  }
255  }
256 
258  // convert duplication map into set
260  std::vector<std::set<int> > duplication_set_list;
261  std::set<int> duplicated_indices;
262  for (size_t i = 0; i < all_inliers.size(); i++) {
263  std::vector<int> duplication_list;
264  if (i < all_inliers.size() - 1) {
265  duplication_list = duplication_map[i];
266  }
267  if (duplicated_indices.find(i) == duplicated_indices.end()) {
268  if (i == all_inliers.size() - 1 || duplication_list.size() == 0) { // no duplication found
269  std::set<int> no_duplication_set;
270  no_duplication_set.insert(i);
271  duplication_set_list.push_back(no_duplication_set);
272  jsk_recognition_utils::addSet<int>(duplicated_indices, no_duplication_set);
273  }
274  else { // some duplication found
275  std::set<int> new_duplication_set;
277  i,
278  duplication_list,
279  new_duplication_set);
280  duplication_set_list.push_back(new_duplication_set);
281  // add new_duplication_set to duplicated_indices
282  jsk_recognition_utils::addSet<int>(duplicated_indices, new_duplication_set);
283  }
284  }
285  }
286 
287 
288  for (size_t i = 0; i < duplication_set_list.size(); i++) {
289  pcl::PointIndices::Ptr integrated_indices (new pcl::PointIndices);
290  integrateDuplicatedIndices(cloud, duplication_set_list[i],
291  all_inliers,
292  integrated_indices);
293  output_inliers.push_back(integrated_indices);
294 
295  // use the first one,,, ok?
296  pcl::ModelCoefficients::Ptr integrated_coefficients
297  = all_coefficients[(*duplication_set_list[i].begin())];
298  output_coefficients.push_back(integrated_coefficients);
299  }
300 
301  // print result for debug
302  // NODELET_INFO("%lu duplication set", duplication_set_list.size());
303  // for (size_t i = 0; i < duplication_set_list.size(); i++) {
304  // std::stringstream ss;
305  // ss << "[";
306  // for (std::set<int>::iterator it = duplication_set_list[i].begin();
307  // it != duplication_set_list[i].end();
308  // ++it)
309  // {
310  // ss << *it << ", ";
311  // }
312  // NODELET_INFO("%s", ss.str().c_str());
313  // }
314 
315  // for (size_t i = 0; i < all_inliers.size() - 1; i++) {
316  // std::stringstream ss;
317  // std::vector<int> similar_indices = duplication_map[i];
318  // ss << i << " -> ";
319  // for (size_t j = 0; j < similar_indices.size(); j++) {
320  // ss << similar_indices[j] << ", ";
321  // }
322  // NODELET_INFO("%s", ss.str().c_str());
323  // }
324  }
325 
327  const pcl::PointCloud<PointT>::Ptr& cloud,
328  const std::vector<PCLIndicesMsg>& indices,
329  std::vector<pcl::PointIndices::Ptr>& output_inliers,
330  std::vector<pcl::ModelCoefficients::Ptr>& output_coefficients)
331  {
332  // output_inliers.resize(indices.size());
333  // output_coefficients.resize(indices.size());
334  for (size_t i = 0; i < indices.size(); i++) {
335  std::vector<int> cluster_indices = indices[i].indices;
336  pcl::PointIndices::Ptr inliers (new pcl::PointIndices);
337  pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients);
338  removeOutliersByLine(cloud, cluster_indices, *inliers, *coefficients);
339  if (inliers->indices.size() > min_inliers_) {
340  output_inliers.push_back(inliers);
341  output_coefficients.push_back(coefficients);
342  }
343  }
344  }
345 
347  const pcl::PointCloud<PointT>::Ptr& cloud,
348  const std::vector<int>& indices,
349  pcl::PointIndices& inliers,
350  pcl::ModelCoefficients& coefficients)
351  {
352  // one line shoud have ONE line at most...?
353  // in that case, we can estimate the true line by RANSAC
354  pcl::SACSegmentation<PointT> seg;
355  seg.setOptimizeCoefficients (true);
356  seg.setModelType (pcl::SACMODEL_LINE);
357  seg.setMethodType (pcl::SAC_RANSAC);
358  seg.setDistanceThreshold (outlier_distance_threshold_);
359  seg.setInputCloud(cloud);
360  pcl::PointIndices::Ptr indices_ptr (new pcl::PointIndices);
361  indices_ptr->indices = indices;
362  seg.setIndices(indices_ptr);
363  seg.segment (inliers, coefficients);
364  }
365 
368  ros::Publisher& pub_coefficients,
369  ros::Publisher& pub_edges,
370  const std::vector<pcl::PointIndices::Ptr> inliers,
371  const std::vector<pcl::ModelCoefficients::Ptr> coefficients,
372  const std_msgs::Header& header)
373  {
374  jsk_recognition_msgs::ClusterPointIndices output_ros_msg;
375  jsk_recognition_msgs::ModelCoefficientsArray output_ros_coefficients_msg;
376  jsk_recognition_msgs::SegmentArray output_ros_edges_msg;
377  output_ros_msg.header = header;
378  output_ros_coefficients_msg.header = header;
379  output_ros_edges_msg.header = header;
380  for (size_t i = 0; i < inliers.size(); i++) {
381  PCLIndicesMsg output_indices_msg;
382  PCLModelCoefficientMsg output_coefficients_msg;
383  jsk_recognition_msgs::Segment output_edge_msg;
384  output_indices_msg.header = header;
385  output_indices_msg.indices = inliers[i]->indices;
386  output_ros_msg.cluster_indices.push_back(output_indices_msg);
387 
388  output_coefficients_msg.header = header;
389  output_coefficients_msg.values = coefficients[i]->values;
390  output_ros_coefficients_msg.coefficients.push_back(output_coefficients_msg);
391 
392  output_edge_msg.start_point.x = coefficients[i]->values[0] - coefficients[i]->values[3];
393  output_edge_msg.start_point.y = coefficients[i]->values[1] - coefficients[i]->values[4];
394  output_edge_msg.start_point.z = coefficients[i]->values[2] - coefficients[i]->values[5];
395  output_edge_msg.end_point.x = coefficients[i]->values[0] + coefficients[i]->values[3];
396  output_edge_msg.end_point.y = coefficients[i]->values[1] + coefficients[i]->values[4];
397  output_edge_msg.end_point.z = coefficients[i]->values[2] + coefficients[i]->values[5];
398  output_ros_edges_msg.segments.push_back(output_edge_msg);
399  }
400  pub.publish(output_ros_msg);
401  pub_coefficients.publish(output_ros_coefficients_msg);
402  pub_edges.publish(output_ros_edges_msg);
403  }
404 
405  void EdgeDepthRefinement::configCallback (Config &config, uint32_t level)
406  {
407  boost::mutex::scoped_lock lock(mutex_);
408  outlier_distance_threshold_ = config.outlier_distance_threshold;
409  min_inliers_ = config.min_inliers;
410  duplication_angle_threshold_ = config.duplication_angle_threshold;
411  duplication_distance_threshold_ = config.duplication_distance_threshold;
412  }
413 
415  const sensor_msgs::PointCloud2ConstPtr &input,
416  const jsk_recognition_msgs::ClusterPointIndicesConstPtr &indices)
417  {
418  boost::mutex::scoped_lock lock(mutex_);
419  pcl::PointCloud<PointT>::Ptr cloud (new pcl::PointCloud<PointT>);
420  pcl::fromROSMsg(*input, *cloud);
421 
422  std::vector<pcl::PointIndices::Ptr> inliers;
423  std::vector<pcl::ModelCoefficients::Ptr> coefficients;
424 
425  removeOutliers(cloud, indices->cluster_indices, inliers, coefficients);
426  std::vector<pcl::PointIndices::Ptr> non_duplicated_inliers;
427  std::vector<pcl::ModelCoefficients::Ptr> non_duplicated_coefficients;
428  removeDuplicatedEdges(cloud, inliers, coefficients,
429  non_duplicated_inliers,
430  non_duplicated_coefficients);
434  inliers, coefficients,
435  input->header);
438  pub_edges_,
439  non_duplicated_inliers,
440  non_duplicated_coefficients,
441  input->header);
442  }
443 
444 }
445 
jsk_pcl_ros::EdgeDepthRefinement::pub_edges_
ros::Publisher pub_edges_
Definition: edge_depth_refinement.h:202
jsk_pcl_ros::EdgeDepthRefinement::segmentFromIndices
virtual jsk_recognition_utils::Segment::Ptr segmentFromIndices(const pcl::PointCloud< PointT >::Ptr &cloud, const std::vector< int > &indices, const jsk_recognition_utils::Line::Ptr &line)
Definition: edge_depth_refinement_nodelet.cpp:204
NODELET_ERROR
#define NODELET_ERROR(...)
depth_error_calibration.lock
lock
Definition: depth_error_calibration.py:32
jsk_pcl_ros::EdgeDepthRefinement::removeOutliers
virtual void removeOutliers(const pcl::PointCloud< PointT >::Ptr &cloud, const std::vector< PCLIndicesMsg > &indices, std::vector< pcl::PointIndices::Ptr > &output_inliers, std::vector< pcl::ModelCoefficients::Ptr > &output_coefficients)
Definition: edge_depth_refinement_nodelet.cpp:358
ros::Publisher
_2
boost::arg< 2 > _2
edge_depth_refinement.h
boost::shared_ptr
i
int i
sample_simulate_tabletop_cloud.header
header
Definition: sample_simulate_tabletop_cloud.py:162
p
p
PCLIndicesMsg
pcl::PointIndices PCLIndicesMsg
jsk_pcl_ros::EdgeDepthRefinement::onInit
virtual void onInit()
Definition: edge_depth_refinement_nodelet.cpp:78
jsk_pcl_ros::EdgeDepthRefinement::pub_coefficients_
ros::Publisher pub_coefficients_
Definition: edge_depth_refinement.h:201
jsk_pcl_ros::EdgeDepthRefinement::mutex_
boost::mutex mutex_
Definition: edge_depth_refinement.h:203
attention_pose_set.pub
pub
Definition: attention_pose_set.py:8
attention_pose_set.x
x
Definition: attention_pose_set.py:18
pcl::fromROSMsg
void fromROSMsg(const sensor_msgs::PointCloud2 &cloud, pcl::PointCloud< T > &pcl_cloud)
jsk_pcl_ros::EdgeDepthRefinement
Definition: edge_depth_refinement.h:92
ros::Publisher::publish
void publish(const boost::shared_ptr< M > &message) const
message_filters::Subscriber::unsubscribe
void unsubscribe()
cloud
cloud
PLUGINLIB_EXPORT_CLASS
PLUGINLIB_EXPORT_CLASS(jsk_pcl_ros::EdgeDepthRefinement, nodelet::Nodelet)
class_list_macros.h
jsk_pcl_ros::EdgeDepthRefinement::refine
virtual void refine(const sensor_msgs::PointCloud2ConstPtr &point, const jsk_recognition_msgs::ClusterPointIndicesConstPtr &indices)
Definition: edge_depth_refinement_nodelet.cpp:446
jsk_pcl_ros::EdgeDepthRefinement::duplication_distance_threshold_
double duplication_distance_threshold_
Definition: edge_depth_refinement.h:213
jsk_pcl_ros::EdgeDepthRefinement::~EdgeDepthRefinement
virtual ~EdgeDepthRefinement()
Definition: edge_depth_refinement_nodelet.cpp:108
PCLModelCoefficientMsg
pcl::ModelCoefficients PCLModelCoefficientMsg
jsk_pcl_ros
Definition: add_color_from_image.h:51
jsk_recognition_utils::buildGroupFromGraphMap
void buildGroupFromGraphMap(IntegerGraphMap graph_map, const int from_index, std::vector< int > &to_indices, std::set< int > &output_set)
jsk_pcl_ros::EdgeDepthRefinement::sub_input_
message_filters::Subscriber< sensor_msgs::PointCloud2 > sub_input_
Definition: edge_depth_refinement.h:197
jsk_pcl_ros::EdgeDepthRefinement::configCallback
virtual void configCallback(Config &config, uint32_t level)
Definition: edge_depth_refinement_nodelet.cpp:437
jsk_pcl_ros::EdgeDepthRefinement::findMinMaxIndex
virtual boost::tuple< int, int > findMinMaxIndex(const int width, const int height, const std::vector< int > &indices)
Definition: edge_depth_refinement_nodelet.cpp:160
PointT
pcl::PointXYZRGB PointT
jsk_pcl_ros::EdgeDepthRefinement::lineFromCoefficients
virtual jsk_recognition_utils::Line::Ptr lineFromCoefficients(const pcl::ModelCoefficients::Ptr coefficients)
Definition: edge_depth_refinement_nodelet.cpp:147
jsk_pcl_ros::EdgeDepthRefinement::publishIndices
virtual void publishIndices(ros::Publisher &pub, ros::Publisher &pub_coefficients, ros::Publisher &pub_edges, const std::vector< pcl::PointIndices::Ptr > inliers, const std::vector< pcl::ModelCoefficients::Ptr > coefficients, const std_msgs::Header &header)
Definition: edge_depth_refinement_nodelet.cpp:398
jsk_pcl_ros::EdgeDepthRefinement::removeOutliersByLine
virtual void removeOutliersByLine(const pcl::PointCloud< PointT >::Ptr &cloud, const std::vector< int > &indices, pcl::PointIndices &inliers, pcl::ModelCoefficients &coefficients)
Definition: edge_depth_refinement_nodelet.cpp:378
_1
boost::arg< 1 > _1
d
d
jsk_pcl_ros::EdgeDepthRefinement::duplication_angle_threshold_
double duplication_angle_threshold_
Definition: edge_depth_refinement.h:212
line
jsk_pcl_ros::EdgeDepthRefinement::subscribe
virtual void subscribe()
Definition: edge_depth_refinement_nodelet.cpp:119
jsk_pcl_ros::EdgeDepthRefinement::pub_outlier_removed_edges_
ros::Publisher pub_outlier_removed_edges_
Definition: edge_depth_refinement.h:202
lines
list lines
jsk_pcl_ros::EdgeDepthRefinement::unsubscribe
virtual void unsubscribe()
Definition: edge_depth_refinement_nodelet.cpp:132
message_filters::Subscriber::subscribe
void subscribe()
jsk_recognition_utils::addIndices
pcl::PointIndices::Ptr addIndices(const pcl::PointIndices &a, const pcl::PointIndices &b)
nodelet::Nodelet
width
width
jsk_pcl_ros::EdgeDepthRefinement::min_inliers_
int min_inliers_
Definition: edge_depth_refinement.h:208
pcl_util.h
dump_depth_error.f
f
Definition: dump_depth_error.py:39
jsk_pcl_ros::EdgeDepthRefinement::srv_
boost::shared_ptr< dynamic_reconfigure::Server< Config > > srv_
Definition: edge_depth_refinement.h:196
coefficients
coefficients
index
unsigned int index
jsk_recognition_utils::Segment
jsk_recognition_utils::Line
jsk_pcl_ros::EdgeDepthRefinement::outlier_distance_threshold_
double outlier_distance_threshold_
Definition: edge_depth_refinement.h:207
jsk_pcl_ros::EdgeDepthRefinement::integrateDuplicatedIndices
virtual void integrateDuplicatedIndices(const pcl::PointCloud< PointT >::Ptr &cloud, const std::set< int > &duplicated_set, const std::vector< pcl::PointIndices::Ptr > all_inliers, pcl::PointIndices::Ptr &output_indices)
Definition: edge_depth_refinement_nodelet.cpp:222
jsk_pcl_ros::EdgeDepthRefinement::removeDuplicatedEdges
virtual void removeDuplicatedEdges(const pcl::PointCloud< PointT >::Ptr &cloud, const std::vector< pcl::PointIndices::Ptr > inliers, const std::vector< pcl::ModelCoefficients::Ptr > coefficients, std::vector< pcl::PointIndices::Ptr > &output_inliers, std::vector< pcl::ModelCoefficients::Ptr > &output_coefficients)
Definition: edge_depth_refinement_nodelet.cpp:238
attention_pose_set.y
y
Definition: attention_pose_set.py:19
jsk_pcl_ros::EdgeDepthRefinement::sub_indices_
message_filters::Subscriber< jsk_recognition_msgs::ClusterPointIndices > sub_indices_
Definition: edge_depth_refinement.h:198
depth_error_calibration.input
input
Definition: depth_error_calibration.py:43
config
config
jsk_pcl_ros::EdgeDepthRefinement::pub_outlier_removed_indices_
ros::Publisher pub_outlier_removed_indices_
Definition: edge_depth_refinement.h:200
jsk_pcl_ros::EdgeDepthRefinement::sync_
boost::shared_ptr< message_filters::Synchronizer< SyncPolicy > > sync_
Definition: edge_depth_refinement.h:199
jsk_pcl_ros::EdgeDepthRefinement::pub_outlier_removed_coefficients_
ros::Publisher pub_outlier_removed_coefficients_
Definition: edge_depth_refinement.h:201
jsk_pcl_ros::EdgeDepthRefinement::pub_indices_
ros::Publisher pub_indices_
Definition: edge_depth_refinement.h:200


jsk_pcl_ros
Author(s): Yohei Kakiuchi
autogenerated on Tue Jan 7 2025 04:05:44