From da964a2a3da9162092efa5acdafa5a266c1b5d19 Mon Sep 17 00:00:00 2001 From: Ken Tossell <ken@tossell.net> Date: Sat, 11 Feb 2012 19:24:59 -0500 Subject: [PATCH] use camera_info_manager for a real CameraInfo --- libuvc_camera/cfg/UVCCamera.cfg | 3 +++ libuvc_camera/include/libuvc_camera/camera_driver.h | 3 +++ libuvc_camera/manifest.xml | 1 + libuvc_camera/src/camera_driver.cpp | 8 ++++++-- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libuvc_camera/cfg/UVCCamera.cfg b/libuvc_camera/cfg/UVCCamera.cfg index cbcb063..5f02b0b 100755 --- a/libuvc_camera/cfg/UVCCamera.cfg +++ b/libuvc_camera/cfg/UVCCamera.cfg @@ -42,6 +42,9 @@ gen.add("frame_id", str_t, SensorLevels.RECONFIGURE_RUNNING, "ROS tf frame of reference, resolved with tf_prefix unless absolute.", "camera") +gen.add("camera_info_url", str_t, SensorLevels.RECONFIGURE_RUNNING, + "Path to camera calibration file.", "") + # Camera Terminal controls scanning_modes = gen.enum([gen.const("Interlaced", int_t, 0, ""), diff --git a/libuvc_camera/include/libuvc_camera/camera_driver.h b/libuvc_camera/include/libuvc_camera/camera_driver.h index 0a7c624..ea6cb6f 100644 --- a/libuvc_camera/include/libuvc_camera/camera_driver.h +++ b/libuvc_camera/include/libuvc_camera/camera_driver.h @@ -6,6 +6,7 @@ #include <image_transport/image_transport.h> #include <image_transport/camera_publisher.h> #include <dynamic_reconfigure/server.h> +#include <camera_info_manager/camera_info_manager.h> #include <boost/thread/mutex.hpp> #include <libuvc_camera/UVCCameraConfig.h> @@ -64,6 +65,8 @@ private: dynamic_reconfigure::Server<UVCCameraConfig> config_server_; UVCCameraConfig config_; bool config_changed_; + + camera_info_manager::CameraInfoManager cinfo_manager_; }; }; diff --git a/libuvc_camera/manifest.xml b/libuvc_camera/manifest.xml index 8347f73..6bf8c9e 100644 --- a/libuvc_camera/manifest.xml +++ b/libuvc_camera/manifest.xml @@ -9,6 +9,7 @@ <review status="unreviewed" notes=""/> <url>http://ros.org/wiki/libuvc_camera</url> <depend package="roscpp"/> + <depend package="camera_info_manager"/> <depend package="driver_base"/> <depend package="dynamic_reconfigure"/> <depend package="image_transport"/> diff --git a/libuvc_camera/src/camera_driver.cpp b/libuvc_camera/src/camera_driver.cpp index 37610bc..0f89b95 100644 --- a/libuvc_camera/src/camera_driver.cpp +++ b/libuvc_camera/src/camera_driver.cpp @@ -15,7 +15,8 @@ CameraDriver::CameraDriver(ros::NodeHandle nh, ros::NodeHandle priv_nh) ctx_(NULL), dev_(NULL), devh_(NULL), rgb_frame_(NULL), it_(nh_), config_server_(mutex_, priv_nh_), - config_changed_(false) { + config_changed_(false), + cinfo_manager_(nh) { cam_pub_ = it_.advertiseCamera("image_raw", 1, false); } @@ -67,6 +68,9 @@ void CameraDriver::ReconfigureCallback(UVCCameraConfig &new_config, uint32_t lev OpenCamera(new_config); } + if (new_config.camera_info_url != config_.camera_info_url) + cinfo_manager_.loadCameraInfo(new_config.camera_info_url); + if (state_ == kRunning) { // TODO: scanning_mode // TODO: auto_exposure @@ -122,7 +126,7 @@ void CameraDriver::ImageCallback(uvc_frame_t *frame) { image.data.resize(image.step * image.height); memcpy(&(image.data[0]), rgb_frame_->data, rgb_frame_->data_bytes); - cam_pub_.publish(image, sensor_msgs::CameraInfo()); + cam_pub_.publish(image, cinfo_manager_.getCameraInfo()); if (config_changed_) { config_server_.updateConfig(config_); -- GitLab