56 NODELET_ERROR (
"[onInit] Need an 'output_frame' parameter to be set before continuing!");
62 NODELET_ERROR (
"[onInit] Need a 'input_topics' parameter to be set before continuing!");
67 NODELET_ERROR (
"[onInit] Invalid 'input_topics' parameter given!");
72 NODELET_ERROR (
"[onInit] Only one topic given. Need at least two topics to continue.");
217 NODELET_ERROR (
"[%s::combineClouds] Error converting first input dataset from %s to %s.",
getName ().c_str (), in1.header.frame_id.c_str (),
output_frame_.c_str ());
223 in1_t = boost::make_shared<PointCloud2> (in1);
230 NODELET_ERROR (
"[%s::combineClouds] Error converting second input dataset from %s to %s.",
getName ().c_str (), in2.header.frame_id.c_str (),
output_frame_.c_str ());
236 in2_t = boost::make_shared<PointCloud2> (in2);
242 out.header.stamp = in1.header.stamp;
248 const PointCloud2::ConstPtr &in1,
const PointCloud2::ConstPtr &in2,
249 const PointCloud2::ConstPtr &in3,
const PointCloud2::ConstPtr &in4,
250 const PointCloud2::ConstPtr &in5,
const PointCloud2::ConstPtr &in6,
251 const PointCloud2::ConstPtr &in7,
const PointCloud2::ConstPtr &in8)
256 if (in3 && in3->width * in3->height > 0)
260 if (in4 && in4->width * in4->height > 0)
263 if (in5 && in5->width * in5->height > 0)
267 if (in6 && in6->width * in6->height > 0)
270 if (in7 && in7->width * in7->height > 0)
274 if (in8 && in8->width * in8->height > 0)
XmlRpc::XmlRpcValue input_topics_
Input point cloud topics.
#define NODELET_ERROR(...)
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).
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.
const std::string & getName() const
Type const & getType() const
void publish(const boost::shared_ptr< M > &message) const
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_
#define PLUGINLIB_EXPORT_CLASS(class_type, base_class_type)
void input_callback(const PointCloud2ConstPtr &input)
Input point cloud callback. Because we want to use the same synchronizer object, we push back empty e...