43 ConnectionBasedNodelet::onInit();
48 pub_ = advertise<sensor_msgs::PointCloud2>(*
pnh_,
"output", 1);
54 srv_ = boost::make_shared <dynamic_reconfigure::Server<Config> > (*pnh_);
55 dynamic_reconfigure::Server<Config>::CallbackType
f =
57 srv_->setCallback (f);
69 sync_ = boost::make_shared<message_filters::Synchronizer<SyncPolicy> >(100);
71 sync_->registerCallback(boost::bind(
85 const std::vector<jsk_recognition_utils::ConvexPolygon::Ptr>& convexes)
87 Eigen::Vector3f v = p.getVector3fMap();
88 double min_distance = DBL_MAX;
89 for (
size_t i = 0; i < convexes.size(); i++) {
92 double d = convex->distanceToPoint(v);
93 if (d < min_distance) {
115 double b = 1 - ratio;
117 ru = (uint8_t)(r * 255);
118 gu = (uint8_t)(g * 255);
119 bu = (uint8_t)(b * 255);
120 return ((uint32_t)ru<<16 | (uint32_t)gu<<8 | (uint32_t)bu);
124 const sensor_msgs::PointCloud2::ConstPtr& cloud_msg,
125 const jsk_recognition_msgs::ModelCoefficientsArray::ConstPtr& coefficients_msg,
126 const jsk_recognition_msgs::PolygonArray::ConstPtr& polygons)
129 if (coefficients_msg->coefficients.size() == 0) {
133 pcl::PointCloud<PointT>::Ptr
cloud 134 (
new pcl::PointCloud<PointT>);
138 coefficients_msg->coefficients);
141 std::vector<jsk_recognition_utils::ConvexPolygon::Ptr> convexes;
142 for (
size_t i = 0; i < polygons->polygons.size(); i++) {
143 if (polygons->polygons[i].polygon.points.size() > 0) {
147 = boost::make_shared<jsk_recognition_utils::ConvexPolygon>(convex);
148 convexes.push_back(convex_ptr);
155 pcl::PointCloud<pcl::PointXYZRGB>::Ptr output_cloud
156 (
new pcl::PointCloud<pcl::PointXYZRGB>);
158 for (
size_t i = 0; i < cloud->points.size(); i++) {
160 pcl::PointXYZRGB p_output;
161 jsk_recognition_utils::pointFromXYZToXYZ<PointT, pcl::PointXYZRGB>(p, p_output);
165 p_output.rgb = *
reinterpret_cast<float*
>(&color);
166 output_cloud->points.push_back(p_output);
170 sensor_msgs::PointCloud2 ros_output;
172 ros_output.header = cloud_msg->header;
179 if (config.max_distance < config.min_distance) {
181 config.min_distance = config.max_distance;
184 config.max_distance = config.min_distance;
static ConvexPolygon fromROSMsg(const geometry_msgs::Polygon &polygon)
void publish(const boost::shared_ptr< M > &message) const
std::vector< pcl::ModelCoefficients::Ptr > convertToPCLModelCoefficients(const std::vector< PCLModelCoefficientMsg > &coefficients)
message_filters::Subscriber< jsk_recognition_msgs::ModelCoefficientsArray > sub_coefficients_
virtual void configCallback(Config &config, uint32_t level)
virtual void colorize(const sensor_msgs::PointCloud2::ConstPtr &cloud, const jsk_recognition_msgs::ModelCoefficientsArray::ConstPtr &coefficients, const jsk_recognition_msgs::PolygonArray::ConstPtr &polygons)
void fromROSMsg(const sensor_msgs::PointCloud2 &cloud, pcl::PointCloud< T > &pcl_cloud)
message_filters::Subscriber< jsk_recognition_msgs::PolygonArray > sub_polygons_
ColorizeDistanceFromPlaneConfig Config
virtual void unsubscribe()
#define NODELET_ERROR_STREAM(...)
void toROSMsg(const pcl::PointCloud< T > &pcl_cloud, sensor_msgs::PointCloud2 &cloud)
boost::shared_ptr< message_filters::Synchronizer< SyncPolicy > > sync_
void subscribe(ros::NodeHandle &nh, const std::string &topic, uint32_t queue_size, const ros::TransportHints &transport_hints=ros::TransportHints(), ros::CallbackQueueInterface *callback_queue=0)
message_filters::Subscriber< sensor_msgs::PointCloud2 > sub_input_
boost::shared_ptr< dynamic_reconfigure::Server< Config > > srv_
virtual uint32_t colorForDistance(const double d)
virtual double distanceToConvexes(const PointT &p, const std::vector< jsk_recognition_utils::ConvexPolygon::Ptr > &convexes)
PLUGINLIB_EXPORT_CLASS(jsk_pcl_ros_utils::ColorizeDistanceFromPlane, nodelet::Nodelet)