47 CameraManager::~CameraManager()
69 template <
typename CameraType>
70 bool CameraManager::createAndConnectCamera(
const cam_info &config)
72 auto camera = std::make_shared<CameraType>(config);
73 cameras_[config.
cam_id] = camera;
77 std::cout <<
"Created camera: " << config.
name
78 <<
" in " << camera_mode_as_string(config.
mode) <<
" mode" << std::endl;
81 if (!camera->connect())
83 std::cerr <<
"Failed to connect camera: " << config.
name << std::endl;
114 std::lock_guard<std::mutex> lock(mutex_);
118 std::cerr <<
"CameraManager already initialized" << std::endl;
122 if (camera_configs.empty())
124 std::cerr <<
"No camera configurations provided" << std::endl;
129 std::vector<cam_info> cameras;
130 for (
const auto &config : camera_configs)
134 if (!createAndConnectCamera<MonoCamera>(config))
142 if (!createAndConnectCamera<StereoCamera>(config))
150 std::cerr <<
"Unsupported or disabled camera mode: " << camera_mode_as_string(config.
mode)
151 <<
" for camera: " << config.
name << std::endl;
155 if (cameras_.empty())
157 std::cerr <<
"No valid mono cameras found." << std::endl;
164 std::cout <<
"Successfully initialized " << cameras_.size() <<
" cameras" << std::endl;
193 std::lock_guard<std::mutex> lock(mutex_);
198 std::cout <<
"Shutting down CameraManager..." << std::endl;
202 for (
auto &[
id, camera] : cameras_)
204 std::cout <<
"Disconnecting Camera " <<
id << std::endl;
205 bool success =
false;
207 std::thread disconnect_thread([&camera, &success]()
210 camera->disconnect();
212 }
catch (
const std::exception& e) {
213 std::cerr <<
"Error disconnecting camera: " << e.what() << std::endl;
216 disconnect_thread.detach();
218 for (
int i = 0; i < 10 && !success; i++)
225 std::cerr <<
"Camera disconnect timeout" << std::endl;
229 catch (
const std::exception &e)
231 std::cerr <<
"Shutdown exception: " << e.what() << std::endl;
235 initialized_ =
false;
236 std::cout <<
"CameraManager shutdown complete" << std::endl;
250 std::lock_guard<std::mutex> lock(mutex_);
251 std::vector<std::shared_ptr<CameraBase>> result;
252 for (
const auto &[
id, cam] : cameras_)
254 result.push_back(cam);
269 std::lock_guard<std::mutex> lock(mutex_);
270 return cameras_.size();
284 std::lock_guard<std::mutex> lock(mutex_);
Camera management system for VOXL OpenVINS.
@ MONO
Single camera mode.
@ STEREO
Stereo camera mode (both cameras active)
std::atomic< uint32_t > vio_error_codes
VIO error codes.
static CameraQueueFusion & getInstance()
Get singleton instance.
void start(size_t num_cams)
Start the fusion system.
Manages all camera instances in the system.
void shutdown()
Shut down all cameras and clean up resources.
size_t getCameraCount() const
Get the number of cameras.
bool isInitialized() const
Check if the camera manager is initialized.
std::vector< std::shared_ptr< CameraBase > > getAllCameras()
Get all cameras.
bool initialize(const std::vector< cam_info > &camera_configs)
Initialize the camera manager with camera configurations.
static CameraManager & getInstance()
Get the singleton instance of the CameraManager.
Main namespace for VOXL OpenVINS server components.
Camera information and calibration data.
char name[128]
Camera name identifier.
camera_mode mode
Camera operation mode.
size_t cam_id
Unique camera identifier.