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 #ifndef TABLE_TRANSFORM
00031 #define TABLE_TRANSFORM
00032
00033 #include <sensor_msgs/Image.h>
00034 #include <sensor_msgs/CameraInfo.h>
00035 #include <sensor_msgs/PointCloud.h>
00036
00037 #include "pcl/ModelCoefficients.h"
00038 #include "tabletop_object_detector/Table.h"
00039
00040 #include <tf/transform_listener.h>
00041
00042 namespace object_segmentation_gui {
00043
00044 class TableTransform
00045 {
00046 public:
00047
00048 TableTransform();
00049 ~TableTransform();
00050
00051 void setParams(const sensor_msgs::CameraInfo &cam_info, float baseline, float up_direction);
00052
00053 tabletop_object_detector::Table get3DTable( float alpha, float beta, float gamma,
00054 sensor_msgs::PointCloud &table_points,
00055 std_msgs::Header table_header);
00056
00057 protected:
00058
00059 private:
00060
00061 pcl::ModelCoefficients convertTo3DPlane(const sensor_msgs::CameraInfo &camera_info,
00062 const float alpha, const float beta, const float gamma );
00063
00064 tf::Transform getPlaneTransform (pcl::ModelCoefficients coeffs, double up_direction);
00065
00066 bool transformPlanePoints ( const tf::Transform& table_plane_trans,
00067 sensor_msgs::PointCloud &table_points );
00068
00069 template <class PointCloudType>
00070 tabletop_object_detector::Table getTable(std_msgs::Header cloud_header,
00071 const tf::Transform &table_plane_trans,
00072 const PointCloudType &table_points);
00073
00074 sensor_msgs::CameraInfo cam_info_;
00075
00076 float baseline_;
00077 float up_direction_;
00078
00080 tf::TransformListener listener_;
00081 };
00082 }
00083
00084 #endif // TABLE_TRANSFORM