From: <mor...@us...> - 2008-05-19 00:41:36
|
Revision: 463 http://personalrobots.svn.sourceforge.net/personalrobots/?rev=463&view=rev Author: morgan_quigley Date: 2008-05-18 17:41:43 -0700 (Sun, 18 May 2008) Log Message: ----------- cv_cam works now. grabs whatever video source it finds (using opencv) and blasts it on the 'image' topic. works great on my laptop. Modified Paths: -------------- pkg/trunk/drivers/cam/cv_cam/Makefile pkg/trunk/drivers/cam/cv_cam/cv_cam.cpp pkg/trunk/drivers/cam/cv_cam/manifest.xml Modified: pkg/trunk/drivers/cam/cv_cam/Makefile =================================================================== --- pkg/trunk/drivers/cam/cv_cam/Makefile 2008-05-19 00:29:26 UTC (rev 462) +++ pkg/trunk/drivers/cam/cv_cam/Makefile 2008-05-19 00:41:43 UTC (rev 463) @@ -1,5 +1,4 @@ SRC = cv_cam.cpp -OUT = ../../nodes/cv_cam +OUT = cv_cam PKG = cv_cam -LFLAGS = -lhighgui -include $(shell $(ROS_ROOT)/rospack find roscpp)/make_include/node.mk +include $(shell rospack find mk)/node.mk Modified: pkg/trunk/drivers/cam/cv_cam/cv_cam.cpp =================================================================== --- pkg/trunk/drivers/cam/cv_cam/cv_cam.cpp 2008-05-19 00:29:26 UTC (rev 462) +++ pkg/trunk/drivers/cam/cv_cam/cv_cam.cpp 2008-05-19 00:41:43 UTC (rev 463) @@ -27,31 +27,30 @@ // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. -#include "ros/ros_slave.h" -#include "common_flows/FlowImage.h" -#include "common_flows/ImageCvBridge.h" +#include "ros/node.h" +#include "std_msgs/MsgImage.h" +#include "image_utils/cv_bridge.h" #include "opencv/highgui.h" -class CVCam : public ROS_Slave +using namespace ros; + +class CVCam : public node { public: - FlowImage *image_f; - ImageCvBridge<FlowImage> *cv_bridge; + MsgImage image_msg; + CvBridge<MsgImage> cv_bridge; CvCapture *capture; IplImage *cam_image; double last_image_time; int show_image; - CVCam() : ROS_Slave(), last_image_time(0), show_image(0) + CVCam() : node("cv_cam"), cv_bridge(&image_msg), last_image_time(0), + show_image(0) { - register_source(image_f = new FlowImage("image")); - image_f->frame_id = 0; // frame is zero unless specified - get_int_param(".frame_id", &image_f->frame_id); - get_int_param(".show_image", &show_image); - cv_bridge = new ImageCvBridge<FlowImage>(image_f); + advertise<MsgImage>("image"); capture = cvCaptureFromCAM(CV_CAP_ANY); if (!capture) - log(ROS::ERROR,"woah! couldn't open a camera. is one connected?\n"); + log(FATAL, "woah! couldn't open a camera. is one connected?\n"); } virtual ~CVCam() { @@ -63,34 +62,34 @@ if (!capture) return false; cam_image = cvQueryFrame(capture); - double t = runtime(); + double t = clock.time(); double dt = t - last_image_time; printf("dt = %f\t(%f fps)\n", dt, 1.0 / dt); last_image_time = t; - if (show_image) - cvShowImage("CV Cam", cam_image); - image_f->compression = "raw"; - cv_bridge->from_cv(cam_image); - cv_bridge->set_flow_data(); - image_f->publish(); +// if (show_image) + cvShowImage("cvcam", cam_image); + cv_bridge.from_cv(cam_image); + publish("image", image_msg); return true; } }; int main(int argc, char **argv) { - CVCam a; - if (a.show_image) - cvNamedWindow("CV Cam", CV_WINDOW_AUTOSIZE); - while (a.happy()) + ros::init(argc, argv); + CVCam cvcam; +// if (cvcam.show_image) + cvNamedWindow("cvcam", CV_WINDOW_AUTOSIZE); + while (cvcam.ok()) { - if (a.show_image) +// if (cvcam.show_image) cvWaitKey(5); - if (!a.take_and_send_picture()) + if (!cvcam.take_and_send_picture()) usleep(100000); } - if (a.show_image) - cvDestroyWindow("CV Cam"); +// if (a.show_image) + cvDestroyWindow("cvcam"); + ros::fini(); return 0; } Modified: pkg/trunk/drivers/cam/cv_cam/manifest.xml =================================================================== --- pkg/trunk/drivers/cam/cv_cam/manifest.xml 2008-05-19 00:29:26 UTC (rev 462) +++ pkg/trunk/drivers/cam/cv_cam/manifest.xml 2008-05-19 00:41:43 UTC (rev 463) @@ -1,13 +1,14 @@ <package> <description brief="Simple OpenCV-based camera grabber"> -This is a simple program which grabs frames from a V4L device using OpenCV and publishes them. +This is a simple program which grabs frames from a V4L device using OpenCV and +publishes them. </description> <author>Morgan Quigley (email: mqu...@cs...)</author> <license>BSD</license> <url>http://stair.stanford.edu</url> -<depend package="common_flows"/> -<depend package="opencv"/> +<depend package="image_utils"/> +<depend package="roscpp"/> </package> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |