00001 00002 #ifndef OMNICAMERA_PANOLUTVIRTUALCAMERANODELET_H_ 00003 #define OMNICAMERA_PANOLUTVIRTUALCAMERANODELET_H_ 00004 00005 #include <boost/make_shared.hpp> 00006 #include <ros/ros.h> 00007 #include <image_transport/image_transport.h> 00008 #include <nodelet/nodelet.h> 00009 #include <opencv2/opencv.hpp> 00010 #include <sensor_msgs/Image.h> 00011 #include <tf/transform_datatypes.h> 00012 00013 #include <omnicamera_msgs/GetVirtualCameraConfig.h> 00014 #include <omnicamera_msgs/VirtualCameraConfig.h> 00015 00016 #include "omnicamera/LookupStitcher.h" 00017 00018 00019 using omnicamera_msgs::VirtualCameraConfig; 00020 using omnicamera_msgs::GetVirtualCameraConfig; 00021 00022 namespace omnicamera { 00023 00024 class PanolutVirtualCameraNodelet : public nodelet::Nodelet { 00025 public: 00026 PanolutVirtualCameraNodelet(); 00030 void onInit(); 00034 void setup(ros::NodeHandle &nh, ros::NodeHandle &pnh); 00038 void tfPublisherCallback(const ros::TimerEvent& event); 00042 void virtualCameraConfigCallback(const VirtualCameraConfig::ConstPtr& msg); 00046 bool getVirtualCameraConfigService(GetVirtualCameraConfig::Request& request, GetVirtualCameraConfig::Response& response); 00050 void imageCallback(const sensor_msgs::ImageConstPtr& msg); 00051 private: 00052 static const int N_CAMS; 00056 int inWidth; 00060 int inHeight; 00064 int panoWidth; 00068 int panoHeight; 00072 bool alpha; 00076 int radius; 00078 std::string lutPath; 00080 std::string frameId; 00082 std::string parentFrameId; 00084 ros::Timer tfPublisherTimer; 00086 tf::Transform transform; 00087 00089 bool equalizeHist; 00090 00094 omnicamera::LookupStitcher pano; 00098 omnicamera::LookupStitcher vcam; 00102 boost::shared_ptr<image_transport::ImageTransport> it; 00106 image_transport::Subscriber imageSubcriber; 00110 ros::Subscriber virtualCameraConfigSubscriber; 00114 ros::ServiceServer getVirtualCameraConfigServer; 00118 image_transport::Publisher outPub; 00122 ros::Publisher camPub; 00126 VirtualCameraConfig vcamConfig; 00130 sensor_msgs::CameraInfo camMsg; 00134 bool lookupTablesLoaded; 00135 00136 void updateTransform(); 00137 }; 00138 00139 } // namespace omnicamera 00140 00141 #endif /* OMNICAMERA_PANOLUTVIRTUALCAMERANODELET_H_ */