|
From: <jl...@us...> - 2008-06-18 00:58:40
|
Revision: 840
http://personalrobots.svn.sourceforge.net/personalrobots/?rev=840&view=rev
Author: jleibs
Date: 2008-06-17 17:58:47 -0700 (Tue, 17 Jun 2008)
Log Message:
-----------
Added polled_images as a service, and a polled cv_viewer with which to test it.
Modified Paths:
--------------
pkg/trunk/drivers/cam/axis_cam/manifest.xml
pkg/trunk/drivers/cam/axis_cam/src/axis_cam/axis_cam.cpp
pkg/trunk/vision/cv_view/manifest.xml
pkg/trunk/vision/cv_view/minimal/cv_view.cpp
Added Paths:
-----------
pkg/trunk/vision/cv_view/service/
pkg/trunk/vision/cv_view/service/Makefile
pkg/trunk/vision/cv_view/service/cv_view.cpp
Modified: pkg/trunk/drivers/cam/axis_cam/manifest.xml
===================================================================
--- pkg/trunk/drivers/cam/axis_cam/manifest.xml 2008-06-17 23:54:34 UTC (rev 839)
+++ pkg/trunk/drivers/cam/axis_cam/manifest.xml 2008-06-18 00:58:47 UTC (rev 840)
@@ -13,6 +13,7 @@
<url>http://stair.stanford.edu</url>
<depend package="roscpp"/>
<depend package="std_msgs"/>
+<depend package="std_srvs"/>
<depend package="rosthread"/>
<depend package="string_utils"/>
<depend package="image_utils"/>
Modified: pkg/trunk/drivers/cam/axis_cam/src/axis_cam/axis_cam.cpp
===================================================================
--- pkg/trunk/drivers/cam/axis_cam/src/axis_cam/axis_cam.cpp 2008-06-17 23:54:34 UTC (rev 839)
+++ pkg/trunk/drivers/cam/axis_cam/src/axis_cam/axis_cam.cpp 2008-06-18 00:58:47 UTC (rev 840)
@@ -29,6 +29,7 @@
#include "ros/node.h"
#include "std_msgs/Image.h"
+#include "std_srvs/PolledImage.h"
#include "image_utils/image_codec.h"
#include "axis_cam/axis_cam.h"
@@ -46,6 +47,7 @@
Axis_cam_node() : ros::node("axis_ptz"), codec(&image), cam(NULL), frame_id(0)
{
advertise<std_msgs::Image>("image");
+ advertise_service("polled_image", &Axis_cam_node::polled_image_cb);
param("host", axis_host, string("192.168.0.90"));
printf("axis_cam host set to [%s]\n", axis_host.c_str());
@@ -59,6 +61,15 @@
delete cam;
}
+ bool polled_image_cb(std_srvs::PolledImage::request &req,
+ std_srvs::PolledImage::response &res )
+ {
+ image.lock();
+ res.image = image;
+ image.unlock();
+ return true;
+ }
+
bool take_and_send_image()
{
uint8_t *jpeg;
@@ -76,6 +87,7 @@
image.compression = "jpeg";
codec.inflate_header();
+
publish("image", image);
return true;
@@ -97,4 +109,3 @@
ros::fini();
return 0;
}
-
Modified: pkg/trunk/vision/cv_view/manifest.xml
===================================================================
--- pkg/trunk/vision/cv_view/manifest.xml 2008-06-17 23:54:34 UTC (rev 839)
+++ pkg/trunk/vision/cv_view/manifest.xml 2008-06-18 00:58:47 UTC (rev 840)
@@ -7,6 +7,7 @@
<license>BSD</license>
<depend package="opencv"/>
<depend package="std_msgs"/>
+ <depend package="std_srvs"/>
<depend package="image_utils"/>
<depend package="roscpp"/>
</package>
Modified: pkg/trunk/vision/cv_view/minimal/cv_view.cpp
===================================================================
--- pkg/trunk/vision/cv_view/minimal/cv_view.cpp 2008-06-17 23:54:34 UTC (rev 839)
+++ pkg/trunk/vision/cv_view/minimal/cv_view.cpp 2008-06-18 00:58:47 UTC (rev 840)
@@ -16,7 +16,7 @@
std_msgs::Image image_msg;
CvBridge<std_msgs::Image> cv_bridge;
- CvView() : node("cv_view"), cv_bridge(&image_msg)
+ CvView() : node("cv_view"), cv_bridge(&image_msg, CvBridge<std_msgs::Image>::CORRECT_BGR)
{
cvNamedWindow("cv_view", CV_WINDOW_AUTOSIZE);
subscribe("image", image_msg, &CvView::image_cb);
Added: pkg/trunk/vision/cv_view/service/Makefile
===================================================================
--- pkg/trunk/vision/cv_view/service/Makefile (rev 0)
+++ pkg/trunk/vision/cv_view/service/Makefile 2008-06-18 00:58:47 UTC (rev 840)
@@ -0,0 +1,4 @@
+SRC = cv_view.cpp
+OUT = cv_view
+PKG = cv_view
+include $(shell rospack find mk)/node.mk
Added: pkg/trunk/vision/cv_view/service/cv_view.cpp
===================================================================
--- pkg/trunk/vision/cv_view/service/cv_view.cpp (rev 0)
+++ pkg/trunk/vision/cv_view/service/cv_view.cpp 2008-06-18 00:58:47 UTC (rev 840)
@@ -0,0 +1,73 @@
+#include <cstdio>
+#include <vector>
+#include "opencv/cxcore.h"
+#include "opencv/cv.h"
+#include "opencv/highgui.h"
+#include "ros/node.h"
+#include "std_msgs/Image.h"
+#include "std_srvs/PolledImage.h"
+#include "image_utils/cv_bridge.h"
+
+#include <sys/stat.h>
+
+using namespace std;
+
+class CvView : public ros::node
+{
+public:
+ CvBridge<std_msgs::Image> cv_bridge;
+
+ std_srvs::PolledImage::request req;
+ std_srvs::PolledImage::response res;
+
+ ros::thread::mutex cv_mutex;
+
+ IplImage *cv_image;
+
+ CvView() : node("cv_view"), cv_bridge(&(res.image), CvBridge<std_msgs::Image>::CORRECT_BGR | CvBridge<std_msgs::Image>::MAXDEPTH_8U),
+ cv_image(0)
+ {
+ cvNamedWindow("cv_view", CV_WINDOW_AUTOSIZE);
+ }
+
+ ~CvView()
+ {
+ if (cv_image)
+ cvReleaseImage(&cv_image);
+ }
+
+ void check_keys()
+ {
+ cv_mutex.lock();
+ if (cvWaitKey(3) == 10)
+ {
+ if (cv_image)
+ cvReleaseImage(&cv_image);
+
+ if (ros::service::call("polled_image", req, res))
+ {
+ if (cv_bridge.to_cv(&cv_image))
+ {
+ cvShowImage("cv_view", cv_image);
+ }
+ }
+ else
+ printf("error calling the polled_image service\n");
+ }
+ cv_mutex.unlock();
+ }
+};
+
+int main(int argc, char **argv)
+{
+ ros::init(argc, argv);
+ CvView view;
+ while (view.ok())
+ {
+ usleep(10000);
+ view.check_keys();
+ }
+ ros::fini();
+ return 0;
+}
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|