Skip to content

Commit 0450e5b

Browse files
committed
加入新的自定义相机类型
1 parent 9d6a186 commit 0450e5b

File tree

6 files changed

+83
-9
lines changed

6 files changed

+83
-9
lines changed

example/CustomCam/cus_cam.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include "cus_cam.h"
2+
#include "infinite_sense.h"
3+
namespace infinite_sense {
4+
5+
CustomCam::~CustomCam() {
6+
7+
}
8+
9+
bool CustomCam::Initialization() {
10+
return true;
11+
}
12+
13+
void CustomCam::Stop() {
14+
Disable();
15+
std::this_thread::sleep_for(std::chrono::milliseconds{500});
16+
for (auto &cam_thread : cam_threads_) {
17+
while (cam_thread.joinable()) {
18+
cam_thread.join();
19+
}
20+
}
21+
cam_threads_.clear();
22+
cam_threads_.shrink_to_fit();
23+
}
24+
void CustomCam::Receive(void *handle, const std::string &name) {
25+
while (is_running_) {
26+
// 这里的time_stamp_us是相机触发时间,需要加上曝光时间的一半,以获得相机拍摄的时间
27+
if (params_.find(name) == params_.end()) {
28+
LOG(ERROR) << "cam " << name << " not found!";
29+
}
30+
else {
31+
if (uint64_t time; GET_LAST_TRIGGER_STATUS(params_[name], time)) {
32+
cam_data.time_stamp_us = time;
33+
}
34+
else {
35+
LOG(ERROR) << "cam " << name << " not found!";
36+
}
37+
}
38+
39+
cam_data.image = GMat(st_out_frame.stFrameInfo.nHeight, st_out_frame.stFrameInfo.nWidth,
40+
GMatType<uint8_t, 1>::Type, st_out_frame.pBufAddr);
41+
42+
messenger.PubStruct(name,&cam_data,sizeof(cam_data));
43+
std::this_thread::sleep_for(std::chrono::milliseconds{2});
44+
}
45+
}
46+
void CustomCam::Start() {
47+
std::string name = "cam";
48+
cam_threads_.emplace_back(&CustomCam::Receive, this, nullptr, name);
49+
}
50+
} // namespace infinite_sense

example/CustomCam/cus_cam.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#pragma once
2+
#include "infinite_sense.h"
3+
namespace infinite_sense {
4+
class CustomCam final : public Cam {
5+
public:
6+
explicit CustomCam(const std::map<std::string, TriggerDevice>& params) : params_(params) {}
7+
~CustomCam() override;
8+
9+
CustomCam(const CustomCam&) = delete;
10+
CustomCam& operator=(const CustomCam&) = delete;
11+
12+
bool Initialization() override;
13+
void Stop() override;
14+
void Start() override;
15+
16+
private:
17+
void Receive(void* handle, const std::string&) override;
18+
};
19+
} // namespace infinite_sense
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#include "mvcam.h"
1+
#include "mv_cam.h"
22
#include "infinite_sense.h"
33
#include "MvCameraControl.h"
44
namespace infinite_sense {
Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,9 @@ class CamManger final : public Cam {
66
explicit CamManger(const std::map<std::string, TriggerDevice>& params) : params_(params) {}
77
~CamManger() override;
88

9-
CamManger(const CamManger&) = delete;
10-
CamManger& operator=(const CamManger&) = delete;
11-
129
bool Initialization() override;
1310
void Stop() override;
1411
void Start() override;
15-
void Restart() override;
1612

1713
private:
1814
void Receive(void* handle, const std::string&) override;

infinite_sense_core/include/cam.h

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,23 @@ class Cam{
1616
virtual bool Initialization();
1717
virtual void Stop();
1818
virtual void Start();
19-
virtual void Restart();
19+
virtual void Restart() {
20+
Stop();
21+
std::this_thread::sleep_for(std::chrono::milliseconds{500});
22+
if (!Initialization()) {
23+
LOG(INFO) << "Camera initialization failed after restart!";
24+
} else {
25+
Start();
26+
LOG(INFO) << "Cameras successfully restarted!";
27+
}
28+
}
2029
void Enable() { is_running_ = true; }
2130
void Disable() { is_running_ = false; }
2231
private:
2332
virtual void Receive(void* handle, const std::string&);
2433
bool is_running_{false};
25-
std::vector<std::thread> cam_threads_;
26-
std::map<std::string, TriggerDevice> params_;
34+
std::vector<std::thread> cam_threads_{};
35+
std::map<std::string, TriggerDevice> params_{};
2736
};
2837

2938
} // namespace infinite_sense

infinite_sense_core/src/infinite_sense.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include "trigger.h"
44
#include "net.h"
55
#include "usb.h"
6-
#include "../../example/GigeCam/mvcam.h"
6+
#include "../../example/GigeCam/mv_cam.h"
77
#include "messenger.h"
88
#include "log.h"
99

0 commit comments

Comments
 (0)