polygon_array_wrapper_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 namespace jsk_pcl_ros_utils
39 {
41  {
42  ConnectionBasedNodelet::onInit();
43  pub_polygon_array_ = advertise<jsk_recognition_msgs::PolygonArray>(*pnh_,
44  "output_polygons", 1);
46  = advertise<jsk_recognition_msgs::ModelCoefficientsArray>(*pnh_,
47  "output_coefficients", 1);
48  onInitPostProcess();
49  }
50 
52  // message_filters::Synchronizer needs to be called reset
53  // before message_filters::Subscriber is freed.
54  // Calling reset fixes the following error on shutdown of the nodelet:
55  // terminate called after throwing an instance of
56  // 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >'
57  // what(): boost: mutex lock failed in pthread_mutex_lock: Invalid argument
58  // Also see https://github.com/ros/ros_comm/issues/720 .
59  sync_.reset();
60  }
61 
63  {
64  sync_ = boost::make_shared<message_filters::Synchronizer<SyncPolicy> >(100);
65  sub_polygon_.subscribe(*pnh_, "input_polygon", 1);
66  sub_coefficients_.subscribe(*pnh_, "input_coefficients", 1);
67  sync_->connectInput(sub_polygon_, sub_coefficients_);
68  sync_->registerCallback(boost::bind(
70  this, _1, _2));
71  }
72 
74  {
77  }
78 
80  const geometry_msgs::PolygonStamped::ConstPtr& polygon,
81  const pcl_msgs::ModelCoefficients::ConstPtr& coefficients)
82  {
83  jsk_recognition_msgs::PolygonArray array_msg;
84  array_msg.header = polygon->header;
85  geometry_msgs::PolygonStamped new_polygon(*polygon);
86  array_msg.polygons.push_back(new_polygon);
87  pub_polygon_array_.publish(array_msg);
88 
89  jsk_recognition_msgs::ModelCoefficientsArray coefficients_array;
90  coefficients_array.header = coefficients->header;
91  pcl_msgs::ModelCoefficients new_coefficients(*coefficients);
92  coefficients_array.coefficients.push_back(new_coefficients);
93  pub_coefficients_array_.publish(coefficients_array);
94  }
95 
96 }
97 
jsk_pcl_ros_utils
Definition: add_point_indices.h:51
jsk_pcl_ros_utils::PolygonArrayWrapper::wrap
virtual void wrap(const geometry_msgs::PolygonStamped::ConstPtr &polygon, const pcl_msgs::ModelCoefficients::ConstPtr &coefficients)
Definition: polygon_array_wrapper_nodelet.cpp:111
jsk_pcl_ros_utils::PolygonArrayWrapper::pub_polygon_array_
ros::Publisher pub_polygon_array_
Definition: polygon_array_wrapper.h:130
jsk_pcl_ros_utils::PolygonArrayWrapper::unsubscribe
virtual void unsubscribe()
Definition: polygon_array_wrapper_nodelet.cpp:105
jsk_pcl_ros_utils::PolygonArrayWrapper::sub_coefficients_
message_filters::Subscriber< pcl_msgs::ModelCoefficients > sub_coefficients_
Definition: polygon_array_wrapper.h:129
ros::Publisher::publish
void publish(const boost::shared_ptr< M > &message) const
message_filters::Subscriber::unsubscribe
void unsubscribe()
class_list_macros.h
jsk_pcl_ros_utils::PolygonArrayWrapper::subscribe
virtual void subscribe()
Definition: polygon_array_wrapper_nodelet.cpp:94
jsk_pcl_ros_utils::PolygonArrayWrapper::onInit
virtual void onInit()
Definition: polygon_array_wrapper_nodelet.cpp:72
jsk_pcl_ros_utils::PolygonArrayWrapper::sync_
boost::shared_ptr< message_filters::Synchronizer< SyncPolicy > > sync_
Definition: polygon_array_wrapper.h:127
PLUGINLIB_EXPORT_CLASS
PLUGINLIB_EXPORT_CLASS(jsk_pcl_ros_utils::PolygonArrayWrapper, nodelet::Nodelet)
jsk_pcl_ros_utils::PolygonArrayWrapper
Definition: polygon_array_wrapper.h:83
message_filters::Subscriber::subscribe
void subscribe()
nodelet::Nodelet
jsk_pcl_ros_utils::PolygonArrayWrapper::~PolygonArrayWrapper
virtual ~PolygonArrayWrapper()
Definition: polygon_array_wrapper_nodelet.cpp:83
jsk_pcl_ros_utils::PolygonArrayWrapper::pub_coefficients_array_
ros::Publisher pub_coefficients_array_
Definition: polygon_array_wrapper.h:131
coefficients
coefficients
jsk_pcl_ros_utils::PolygonArrayWrapper::sub_polygon_
message_filters::Subscriber< geometry_msgs::PolygonStamped > sub_polygon_
Definition: polygon_array_wrapper.h:128
polygon_array_wrapper.h


jsk_pcl_ros_utils
Author(s): Yohei Kakiuchi
autogenerated on Fri May 16 2025 03:11:43