Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef JSK_PCL_ROS_FIND_OBJECT_ON_PLANE_H_
00038 #define JSK_PCL_ROS_FIND_OBJECT_ON_PLANE_H_
00039
00040 #include <jsk_topic_tools/diagnostic_nodelet.h>
00041 #include <message_filters/subscriber.h>
00042 #include <message_filters/synchronizer.h>
00043 #include <message_filters/sync_policies/exact_time.h>
00044 #include <message_filters/sync_policies/approximate_time.h>
00045 #include <sensor_msgs/Image.h>
00046 #include <sensor_msgs/CameraInfo.h>
00047 #include <pcl_msgs/ModelCoefficients.h>
00048 #include <image_geometry/pinhole_camera_model.h>
00049 #include <pcl_conversions/pcl_conversions.h>
00050 #include <jsk_pcl_ros/geo_util.h>
00051
00052 namespace jsk_pcl_ros
00053 {
00054 class FindObjectOnPlane: public jsk_topic_tools::DiagnosticNodelet
00055 {
00056 public:
00057 typedef message_filters::sync_policies::ApproximateTime<
00058 sensor_msgs::Image,
00059 sensor_msgs::CameraInfo,
00060 pcl_msgs::ModelCoefficients > SyncPolicy;
00061
00062 FindObjectOnPlane(): DiagnosticNodelet("FindObjectOnPlane") {}
00063 protected:
00064 virtual void onInit();
00065 virtual void subscribe();
00066 virtual void unsubscribe();
00067 virtual void find(
00068 const sensor_msgs::Image::ConstPtr& image_msg,
00069 const sensor_msgs::CameraInfo::ConstPtr& info_msg,
00070 const pcl_msgs::ModelCoefficients::ConstPtr& polygon_3d_coefficient_msg);
00071 virtual void generateStartPoints(
00072 const cv::Point2f& point_2d,
00073 const image_geometry::PinholeCameraModel& model,
00074 const pcl::ModelCoefficients::Ptr& coefficients,
00075 std::vector<cv::Point3f>& search_points_3d,
00076 std::vector<cv::Point2f>& search_points_2d);
00077 virtual void generateAngles(
00078 const cv::Mat& blob_image, const cv::Point2f& test_point,
00079 std::vector<double>& angles,
00080 std::vector<double>& max_x,
00081 std::vector<double>& max_y,
00082 const image_geometry::PinholeCameraModel& model,
00083 const jsk_pcl_ros::Plane::Ptr& plane);
00084 virtual double drawAngle(
00085 cv::Mat& out_image, const cv::Point2f& test_point, const double angle,
00086 const double max_x, const double max_y,
00087 const image_geometry::PinholeCameraModel& model,
00088 const jsk_pcl_ros::Plane::Ptr& plane,
00089 cv::Scalar color);
00090 Eigen::Vector3f rayPlaneInteersect(
00091 const cv::Point3d& ray,
00092 const jsk_pcl_ros::Plane::Ptr& plane);
00093
00094 virtual cv::Point2d getUyEnd(
00095 const cv::Point2d& ux_start,
00096 const cv::Point2d& ux_end,
00097 const image_geometry::PinholeCameraModel& model,
00098 const jsk_pcl_ros::Plane::Ptr& plane);
00099
00100 boost::shared_ptr<message_filters::Synchronizer<SyncPolicy> > sync_;
00101 message_filters::Subscriber<sensor_msgs::Image> sub_image_;
00102 message_filters::Subscriber<sensor_msgs::CameraInfo> sub_info_;
00103 message_filters::Subscriber<pcl_msgs::ModelCoefficients> sub_coefficients_;
00104 ros::Publisher pub_min_area_rect_image_;
00105
00106 private:
00107
00108 };
00109 }
00110
00111 #endif