Go to the documentation of this file.00001
00002
00003
00004
00005
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
00054 dc1394video_mode_t videoMode = DC1394_VIDEO_MODE_FORMAT7_6;
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
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
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 }