From b87ffd644b48b8eb5558254bab3dbac78b60fc81 Mon Sep 17 00:00:00 2001 From: asantamaria <asantamaria@iri.upc.edu> Date: Tue, 13 Dec 2016 10:12:58 +0100 Subject: [PATCH] minor modifications. after verif. with ros and opencv --- CMakeLists.txt | 12 +++- include/mvbluefox3_camera_driver.h | 66 ++++++++++++++++++- include/mvbluefox3_camera_driver_node.h | 1 + src/mvbluefox3_camera_driver.cpp | 85 +++++++++++++++++++++++-- 4 files changed, 155 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 95682a5..7624e98 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,9 @@ find_package(catkin REQUIRED) # Add catkin additional components here # ******************************************************************** find_package(catkin REQUIRED COMPONENTS iri_base_driver) +find_package(mvbluefox3 REQUIRED) +find_package(mvIMPACT REQUIRED) +# FIND_PACKAGE(OpenCV 3) ## System dependencies are found with CMake's conventions # find_package(Boost REQUIRED COMPONENTS system) @@ -64,7 +67,8 @@ catkin_package( # ******************************************************************** # Add system and labrobotica run time dependencies here # ******************************************************************** -# DEPENDS + DEPENDS mvbluefox3 mvIMPACT + # DEPENDS mvbluefox3 mvIMPACT OpenCV ) ########### @@ -76,6 +80,9 @@ catkin_package( # ******************************************************************** include_directories(include) include_directories(${catkin_INCLUDE_DIRS}) +include_directories(${mvbluefox3_INCLUDE_DIR}) +include_directories(${mvIMPACT_INCLUDE_DIR}) +# INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS}) # include_directories(${<dependency>_INCLUDE_DIR}) ## Declare a cpp library @@ -88,6 +95,9 @@ add_executable(${PROJECT_NAME} src/mvbluefox3_camera_driver.cpp src/mvbluefox3_c # Add the libraries # ******************************************************************** target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES}) +target_link_libraries(${PROJECT_NAME} ${mvbluefox3_LIBRARY}) +target_link_libraries(${PROJECT_NAME} ${mvIMPACT_LIBRARY}) +# TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${OpenCV_LIBS}) # target_link_libraries(${PROJECT_NAME} ${<dependency>_LIBRARY}) # ******************************************************************** diff --git a/include/mvbluefox3_camera_driver.h b/include/mvbluefox3_camera_driver.h index e3d31dd..7465a46 100644 --- a/include/mvbluefox3_camera_driver.h +++ b/include/mvbluefox3_camera_driver.h @@ -28,7 +28,7 @@ #include <iri_base_driver/iri_base_driver.h> #include <iri_mvbluefox3_camera/Mvbluefox3CameraConfig.h> -//include mvbluefox3_camera_driver main library +#include "mvbluefox3.h" /** * \brief IRI ROS Specific Driver Class @@ -54,6 +54,41 @@ class Mvbluefox3CameraDriver : public iri_base_driver::IriBaseDriver private: // private attributes and methods + CMvbluefox3::CMvbluefox3* cam_ptr; // Camera pointer. + + std::string serial; // Camera serial number. + + CMvbluefox3::CParams params; // Camera parameters. + + /** + * \brief Delete pointer + * + * Function to delete pointers. + */ + template <typename Ptr_t> + void DelPtr(Ptr_t &ptr) + { + if (ptr != NULL) + { + ptr = NULL; + delete [] ptr; + } + } + + /** + * \brief Set Configuration + * + * Set Configuration with params_ object (to be filled externally). + */ + void SetConfig(void); + + /** + * \brief Get Configuration + * + * Get Configuration. + */ + void GetConfig(void); + public: /** * \brief define config type @@ -142,8 +177,33 @@ class Mvbluefox3CameraDriver : public iri_base_driver::IriBaseDriver */ void config_update(Config& new_cfg, uint32_t level=0); - // here define all mvbluefox3_camera_driver interface methods to retrieve and set - // the driver parameters + /** + * \brief Get image channel's depth + * + * Get image channel's depth. + */ + int GetChDepth(void); + + /** + * \brief Get bytes-pixel + * + * Get bytes-pixel. + */ + int GetBytesXPixel(void); + + /** + * \brief Get image + * + * Get image. + */ + void GetImage(char *image); + + /** + * \brief Get real exposure time + * + * Get real exposure time. + */ + int ReqExposeUs(void); /** * \brief Destructor diff --git a/include/mvbluefox3_camera_driver_node.h b/include/mvbluefox3_camera_driver_node.h index 9ba071c..4ecdfdb 100644 --- a/include/mvbluefox3_camera_driver_node.h +++ b/include/mvbluefox3_camera_driver_node.h @@ -54,6 +54,7 @@ class Mvbluefox3CameraDriverNode : public iri_base_driver::IriBaseNodeDriver<Mvbluefox3CameraDriver> { private: + // [publisher attributes] // [subscriber attributes] diff --git a/src/mvbluefox3_camera_driver.cpp b/src/mvbluefox3_camera_driver.cpp index 780f2e4..362420c 100644 --- a/src/mvbluefox3_camera_driver.cpp +++ b/src/mvbluefox3_camera_driver.cpp @@ -1,14 +1,31 @@ #include "mvbluefox3_camera_driver.h" +// #include <opencv2/opencv.hpp> +// #define WINDOW_NAME "mvBlueFOX3 TEST" + Mvbluefox3CameraDriver::Mvbluefox3CameraDriver(void) { - //setDriverId(driver string id); + this->cam_ptr = NULL; + + // TMP: To be substituted by config_update + this->serial = "F0300141"; } -bool Mvbluefox3CameraDriver::openDriver(void) +Mvbluefox3CameraDriver::~Mvbluefox3CameraDriver(void) { - //setDriverId(driver string id); + DelPtr(this->cam_ptr); +} +bool Mvbluefox3CameraDriver::openDriver(void) +{ + std::cout << "open" << std::endl; + try + { + this->cam_ptr = new CMvbluefox3::CMvbluefox3(this->serial); + }catch (CMvbluefox3::CmvBlueFOX3Exception& e) + { + std::cout << e.what() << std::endl; + } return true; } @@ -19,6 +36,21 @@ bool Mvbluefox3CameraDriver::closeDriver(void) bool Mvbluefox3CameraDriver::startDriver(void) { + // std::cout << "[Camera test]: Acquiring images." << std::endl; + + // cv::namedWindow( WINDOW_NAME, cv::WINDOW_NORMAL ); + + // while (true) + // { + // cv::Mat image; + // this->cam_ptr->GetImageCV(image); + // cv::imshow( WINDOW_NAME, image ); + // if(cv::waitKey(30) >= 0) break; + // } + // cv::destroyAllWindows(); + + std::cout << "[ROS mvBlueFOX3]: Driver started." << std::endl; + return true; } @@ -35,13 +67,29 @@ void Mvbluefox3CameraDriver::config_update(Config& new_cfg, uint32_t level) // update driver with new_cfg data switch(this->getState()) { - case Mvbluefox3CameraDriver::CLOSED: + case Mvbluefox3CameraDriver::CLOSED: break; case Mvbluefox3CameraDriver::OPENED: + this->lock(); + // Fill parameters + // this->serial = new_cfg.serial; + // this->dyn_rec_to_camera(new_cfg,this->desired_conf); + // update the frame identifier + // this->frame_id = new_cfg.frame_id; + SetConfig(); + this->unlock(); break; case Mvbluefox3CameraDriver::RUNNING: + this->lock(); + // Fill parameters + // this->serial = new_cfg.serial; + // this->dyn_rec_to_camera(new_cfg,this->desired_conf); + // update the frame identifier + // this->frame_id = new_cfg.frame_id; + SetConfig(); + this->unlock(); break; } @@ -51,6 +99,33 @@ void Mvbluefox3CameraDriver::config_update(Config& new_cfg, uint32_t level) this->unlock(); } -Mvbluefox3CameraDriver::~Mvbluefox3CameraDriver(void) +void Mvbluefox3CameraDriver::SetConfig(void) { + this->cam_ptr->SetConfig(this->params); } + +void Mvbluefox3CameraDriver::GetConfig(void) +{ + this->params = this->cam_ptr->GetConfig(); +} + +int Mvbluefox3CameraDriver::GetChDepth(void) +{ + return this->cam_ptr->GetChDepth(); +} + +int Mvbluefox3CameraDriver::GetBytesXPixel(void) +{ + return this->cam_ptr->GetBytesXPixel(); +} + +void Mvbluefox3CameraDriver::GetImage(char *image) +{ + this->cam_ptr->GetImage(&image); +} + +int Mvbluefox3CameraDriver::ReqExposeUs(void) +{ + return this->cam_ptr->ReqExposeUs(); +} + -- GitLab