DvsenseDriver  1.1.2-Alpha
The SDK for dvsense products.
载入中...
搜索中...
未找到
DvsApsFusionProccessor.hpp
1#ifndef DVS_APS_FUSION_PROCCESSOR_HPP
2#define DVS_APS_FUSION_PROCCESSOR_HPP
3#include "DvsenseBase/EventBase/EventTypes.hpp"
4#include "DvsenseBase/ApsBase/ApsTypes.h"
5#include "DvsenseBase/Utils/ObjectPool/DsObjectPoolFactory.h"
6#include <queue>
7#include <mutex>
8
9#ifdef _WIN32
10#define DVSENSE_API __declspec(dllexport)
11#else
12#define DVSENSE_API
13#endif // _WIN32
14namespace dvsense
15{
16 class DVSENSE_API DvsApsFusionProccessor
17 {
18 public:
26 {
27 dvs_events_frame_pool_ = DsObjectPoolFactory::createUniqueDsObjectPoolWithArgs<Event2DVector>(10, 3*1024*1024);
28 dvs_events_buffer_ = dvs_events_frame_pool_->acquire();
29 dvs_events_buffer_->clear();
30 fusion_data_callback_ = nullptr;
31 }
32
39 void addFusionDataCallback(DsFusionDataCallback cb)
40 {
41 fusion_data_callback_ = cb;
42 }
48 {
49 fusion_data_callback_ = nullptr;
50 }
51
56 void addDvsData(const Event2D *begin, const Event2D *end)
57 {
58 dvs_events_buffer_->insert(dvs_events_buffer_->end(), begin, end);
59 }
60
65 void addApsData(const ApsFrame &frame)
66 {
67
68 std::unique_lock<std::mutex> fusion_lock(fusion_queue_mutex_);
69 aps_frame_queue_.push(frame.clone());
70 fusionData();
71 }
72
77 void addSyncSignal(const EventTriggerIn &trigger_in)
78 {
79 if (trigger_in.polarity == 1)
80 {
81 std::unique_lock<std::mutex> fusion_lock(fusion_queue_mutex_);
82 dvs_events_frame_queue_.push(dvs_events_buffer_);
83 dvs_events_buffer_ = dvs_events_frame_pool_->acquire();
84 dvs_events_buffer_->clear();
85 fusionData();
86 }
87 }
88
94 {
95 while (!aps_frame_queue_.empty() && !dvs_events_frame_queue_.empty())
96 {
97 ApsFrame frame = aps_frame_queue_.front();
98 aps_frame_queue_.pop();
99 DsObjectPool<Event2DVector>::ptr_type dvs_events = dvs_events_frame_queue_.front();
100 dvs_events_frame_queue_.pop();
101 if (fusion_data_callback_)
102 {
103 fusion_data_callback_(frame, dvs_events->data(), dvs_events->data() + dvs_events->size());
104 }
105 }
106 }
107
108 private:
109 std::unique_ptr<DsObjectPool<Event2DVector>> dvs_events_frame_pool_;
110 std::queue<DsObjectPool<Event2DVector>::ptr_type> dvs_events_frame_queue_;
111 DsObjectPool<Event2DVector>::ptr_type dvs_events_buffer_;
112
113 std::queue<ApsFrame> aps_frame_queue_;
114 DsFusionDataCallback fusion_data_callback_;
115 std::mutex fusion_queue_mutex_;
116 };
117} // namespace dvsense
118
119#endif // DVS_APS_FUSION_PROCCESSOR_HPP
定义 DvsApsFusionProccessor.hpp:17
void addFusionDataCallback(DsFusionDataCallback cb)
添加融合数据回调函数
定义 DvsApsFusionProccessor.hpp:39
void addSyncSignal(const EventTriggerIn &trigger_in)
添加同步信号用于融合
定义 DvsApsFusionProccessor.hpp:77
void addApsData(const ApsFrame &frame)
添加aps数据用于融合
定义 DvsApsFusionProccessor.hpp:65
void fusionData()
对dvs与aps数据进行融合,并调用回调函数
定义 DvsApsFusionProccessor.hpp:93
void addDvsData(const Event2D *begin, const Event2D *end)
添加dvs数据用于融合
定义 DvsApsFusionProccessor.hpp:56
void removeFusionDataCallback()
清除融合数据回调函数
定义 DvsApsFusionProccessor.hpp:47
DvsApsFusionProccessor()
构造函数
定义 DvsApsFusionProccessor.hpp:25
定义 TypeUtils.hpp:7