39 #include <pcl/io/io.h> 57 NODELET_ERROR (
"[onInit] Need an 'output_frame' parameter to be set before continuing!");
63 NODELET_ERROR (
"[onInit] Need a 'input_topics' parameter to be set before continuing!");
68 NODELET_ERROR (
"[onInit] Invalid 'input_topics' parameter given!");
73 NODELET_ERROR (
"[onInit] Only one topic given. Need at least two topics to continue.");
217 in1_t = boost::make_shared<PointCloud2> (in1);
222 in2_t = boost::make_shared<PointCloud2> (in2);
227 out.header.stamp = in1.header.stamp;
233 const PointCloud2::ConstPtr &in1,
const PointCloud2::ConstPtr &in2,
234 const PointCloud2::ConstPtr &in3,
const PointCloud2::ConstPtr &in4,
235 const PointCloud2::ConstPtr &in5,
const PointCloud2::ConstPtr &in6,
236 const PointCloud2::ConstPtr &in7,
const PointCloud2::ConstPtr &in8)
241 if (in3 && in3->width * in3->height > 0)
245 if (in4 && in4->width * in4->height > 0)
248 if (in5 && in5->width * in5->height > 0)
252 if (in6 && in6->width * in6->height > 0)
255 if (in7 && in7->width * in7->height > 0)
XmlRpc::XmlRpcValue input_topics_
Input point cloud topics.
#define NODELET_ERROR(...)
void publish(const boost::shared_ptr< M > &message) const
sensor_msgs::PointCloud2 PointCloud2
int maximum_queue_size_
The maximum number of messages that we can store in the queue.
bool approximate_sync_
True if we use an approximate time synchronizer versus an exact one (false by default).
Type const & getType() const
std::string output_frame_
Output TF frame the concatenated points should be transformed to.
boost::shared_ptr< message_filters::Synchronizer< sync_policies::ApproximateTime< PointCloud2, PointCloud2, PointCloud2, PointCloud2, PointCloud2, PointCloud2, PointCloud2, PointCloud2 > > > ts_a_
Synchronizer.
message_filters::PassThrough< PointCloud2 > nf_
Null passthrough filter, used for pushing empty elements in the synchronizer.
PointCloudConcatenateDataSynchronizer()
Empty constructor.
PointCloudConcatenateFieldsSynchronizer is a special form of data synchronizer: it listens for a set ...
void input(const PointCloud2::ConstPtr &in1, const PointCloud2::ConstPtr &in2, const PointCloud2::ConstPtr &in3, const PointCloud2::ConstPtr &in4, const PointCloud2::ConstPtr &in5, const PointCloud2::ConstPtr &in6, const PointCloud2::ConstPtr &in7, const PointCloud2::ConstPtr &in8)
Input callback for 8 synchronized topics.
ros::Publisher pub_output_
The output PointCloud publisher.
bool concatenatePointCloud(const sensor_msgs::PointCloud2 &cloud1, const sensor_msgs::PointCloud2 &cloud2, sensor_msgs::PointCloud2 &cloud_out)
void combineClouds(const PointCloud2 &in1, const PointCloud2 &in2, PointCloud2 &out)
#define ROS_INFO_STREAM(args)
void transformPointCloud(const pcl::PointCloud< PointT > &cloud_in, pcl::PointCloud< PointT > &cloud_out, const tf::Transform &transform)
Apply a rigid transform defined by a 3D offset and a quaternion.
std::vector< boost::shared_ptr< message_filters::Subscriber< PointCloud2 > > > filters_
A vector of message filters.
#define NODELET_FATAL(...)
tf::TransformListener tf_
TF listener object.
boost::shared_ptr< message_filters::Synchronizer< sync_policies::ExactTime< PointCloud2, PointCloud2, PointCloud2, PointCloud2, PointCloud2, PointCloud2, PointCloud2, PointCloud2 > > > ts_e_
void input_callback(const PointCloud2ConstPtr &input)
Input point cloud callback. Because we want to use the same synchronizer object, we push back empty e...
PLUGINLIB_EXPORT_CLASS(PointCloudConcatenateDataSynchronizer, nodelet::Nodelet)