Galaxis Codebase  1.0.0
Team Galaxis software stack for the Carolo Cup 2023 - ROS2 based software
AsyncCamera.hpp
Go to the documentation of this file.
1 #ifndef ASYNC_CAMERA_HPP
2 #define ASYNC_CAMERA_HPP
3 
4 #include <thread>
5 #include <mutex>
6 #include <memory>
7 #include <atomic>
8 #include <utility>
9 #include <condition_variable>
10 
11 #include "rclcpp/rclcpp.hpp"
12 #include <opencv2/core/core.hpp>
13 
14 #include <functional>
15 
16 #include <sensor_msgs/msg/image.hpp>
17 #include <image_transport/image_transport.h>
18 #include <cv_bridge/cv_bridge.h>
19 
20 // (new) alvium camera: Vimba Lib
21 #include "VimbaCPP/Include/VimbaCPP.h"
22 using AVT::VmbAPI::VimbaSystem;
23 
24 class CameraFrameObserver : virtual public AVT::VmbAPI::IFrameObserver {
25  private:
26  cv_bridge::CvImage m_bridgeImg;
27  std::shared_ptr<sensor_msgs::msg::Image> m_currentImageSPtr;
29  std::condition_variable m_newImageConditionVar;
30 
31  rclcpp::Clock m_rosClock;
32 
33  AVT::VmbAPI::CameraPtr m_cameraPtr;
34 
35  public:
36  CameraFrameObserver( AVT::VmbAPI::CameraPtr camera );
38  virtual void FrameReceived( const AVT::VmbAPI::FramePtr pFrame );
39 
40  std::shared_ptr<sensor_msgs::msg::Image> PopLastImage(bool blocking);
41 };
42 
44  private:
46 
47  std::atomic<bool> m_runGrabbing;
48 
49  VimbaSystem &m_vimbaSystem; // reference to vimba singleton
50  AVT::VmbAPI::CameraPtr m_camera;
51 
52  public:
55 
58  std::shared_ptr<sensor_msgs::msg::Image> pop_image(bool blocking);
59 };
60 
61 #endif // ASYNC_CAMERA_HPP
AlviumAsyncCamera::stop_grabbing_detached
void stop_grabbing_detached()
Definition: AsyncCamera.cpp:129
CameraFrameObserver::PopLastImage
std::shared_ptr< sensor_msgs::msg::Image > PopLastImage(bool blocking)
Definition: AsyncCamera.cpp:99
CameraFrameObserver::m_currentImageSPtrMutex
std::mutex m_currentImageSPtrMutex
Definition: AsyncCamera.hpp:28
AlviumAsyncCamera::AlviumAsyncCamera
AlviumAsyncCamera()
Definition: AsyncCamera.cpp:116
AlviumAsyncCamera
Definition: AsyncCamera.hpp:43
AlviumAsyncCamera::~AlviumAsyncCamera
~AlviumAsyncCamera()
Definition: AsyncCamera.cpp:124
CameraFrameObserver::CameraFrameObserver
CameraFrameObserver(AVT::VmbAPI::CameraPtr camera)
Definition: AsyncCamera.cpp:22
CameraFrameObserver::FrameReceived
virtual void FrameReceived(const AVT::VmbAPI::FramePtr pFrame)
Definition: AsyncCamera.cpp:34
CameraFrameObserver
Definition: AsyncCamera.hpp:24
CameraFrameObserver::~CameraFrameObserver
~CameraFrameObserver()
Definition: AsyncCamera.cpp:29
AlviumAsyncCamera::pop_image
std::shared_ptr< sensor_msgs::msg::Image > pop_image(bool blocking)
Definition: AsyncCamera.cpp:137
AlviumAsyncCamera::m_runGrabbing
std::atomic< bool > m_runGrabbing
Definition: AsyncCamera.hpp:47
CameraFrameObserver::m_rosClock
rclcpp::Clock m_rosClock
Definition: AsyncCamera.hpp:31
CameraFrameObserver::m_newImageConditionVar
std::condition_variable m_newImageConditionVar
Definition: AsyncCamera.hpp:29
AlviumAsyncCamera::m_frameObserver
CameraFrameObserver * m_frameObserver
Definition: AsyncCamera.hpp:45
AlviumAsyncCamera::m_vimbaSystem
VimbaSystem & m_vimbaSystem
Definition: AsyncCamera.hpp:49
CameraFrameObserver::m_bridgeImg
cv_bridge::CvImage m_bridgeImg
Definition: AsyncCamera.hpp:26
CameraFrameObserver::m_currentImageSPtr
std::shared_ptr< sensor_msgs::msg::Image > m_currentImageSPtr
Definition: AsyncCamera.hpp:27
AlviumAsyncCamera::m_camera
AVT::VmbAPI::CameraPtr m_camera
Definition: AsyncCamera.hpp:50
CameraFrameObserver::m_cameraPtr
AVT::VmbAPI::CameraPtr m_cameraPtr
Definition: AsyncCamera.hpp:33
AlviumAsyncCamera::start_grabbing_detached
bool start_grabbing_detached()
Definition: AsyncCamera.cpp:147