jpeg_subscriber.cpp
Go to the documentation of this file.
00001 /*
00002  * jpeg_subscriber.cpp
00003  *
00004  *  Created on: Mar 18, 2011
00005  *      Author: petrito1
00006  */
00007 
00008 #include <math.h>
00009 
00010 #include <image_transport/image_transport.h>
00011 #include <ros/ros.h>
00012 #include <ros/time.h>
00013 #include <sensor_msgs/CompressedImage.h>
00014 #include <cv_bridge/CvBridge.h>
00015 #include <sensor_msgs/Image.h>
00016 #include <sensor_msgs/image_encodings.h>
00017 #include <sys/param.h>
00018 #include <sys/times.h>
00019 
00020 #include "Camera.h"
00021 #include "CameraContext.h"
00022 #include "CameraException.h"
00023 
00024 using std::string;
00025 
00026 using nifti::dc1394::Camera;
00027 using nifti::dc1394::CameraContext;
00028 using nifti::dc1394::CameraException;
00029 using nifti::dc1394::LadybugCamera;
00030 
00031 namespace {
00032 const std::string jpegIn = "in";
00033 const std::string rgbOut = "out";
00034 }
00035 
00036 int main(int argc, char** argv) {
00037 
00038   ros::init(argc, argv, "jpeg_subscriber");
00039   ros::NodeHandle nodeHandle;
00040 
00041   image_transport::ImageTransport it(nodeHandle);
00042   image_transport::Publisher pub = it.advertise(rgbOut, 2);
00043 
00044   try {
00045 
00046     CameraContext context;
00047 
00048     LadybugCamera camera = context.getLadybugCamera(10095209);
00049     camera.resetBus();
00050     camera.reset();
00051     camera.setOperationMode(DC1394_OPERATION_MODE_1394B);
00052     camera.setIsoSpeed(DC1394_ISO_SPEED_800);
00053 //    dc1394video_mode_t videoMode = DC1394_VIDEO_MODE_FORMAT7_0;
00054     dc1394video_mode_t videoMode = DC1394_VIDEO_MODE_FORMAT7_6; // JPEG
00055     camera.setVideoMode(videoMode);
00056     camera.setSelectedImages(LadybugCamera::ALL_CAMERAS);
00057     camera.setFormat7Roi(videoMode);
00058     camera.setBayerMethod(DC1394_BAYER_METHOD_NEAREST);
00059     camera.setupCapture();
00060     camera.startVideoTransmission();
00061 
00062     sensor_msgs::CvBridge bridge;
00063 
00064     uint32_t seq = 0;
00065     while (nodeHandle.ok()) {
00066       cv::Mat frame;
00067       uint64_t timestamp;
00068       camera.captureColorMat(frame, timestamp, true);
00069 
00070       // Publish decoded image.
00071       if (pub.getNumSubscribers() > 0) {
00072         IplImage iplImage = frame;
00073         sensor_msgs::ImagePtr msg = bridge.cvToImgMsg(&iplImage, "bgr8");
00074         msg->header.frame_id = "tfladylink";
00075         msg->header.seq = seq;
00076         msg->header.stamp = ros::Time::now();
00077         pub.publish(msg);
00078       }
00079     }
00080 
00081     // Clean up.
00082     camera.stopVideoTransmission();
00083     camera.stopCapture();
00084     camera.releaseAll();
00085 
00086   } catch (CameraException& e) {
00087     ROS_ERROR("Camera exception: %s %s", e.what(), e.getErrorString().data());
00088     return 1;
00089   } catch (std::runtime_error& e) {
00090     ROS_ERROR("Runtime error: %s", e.what());
00091     return 2;
00092   } catch (...) {
00093     ROS_ERROR("Unexpected exception occurred.");
00094     return 3;
00095   }
00096 
00097   return 0;
00098 }
 All Classes Namespaces Files Functions Variables Typedefs Defines


omnicamera
Author(s): Tomas Petricek / petrito1@cmp.felk.cvut.cz
autogenerated on Tue Dec 10 2013 14:26:53