add core files
This commit is contained in:
306
Classes/CameraPointGrey.cpp
Normal file
306
Classes/CameraPointGrey.cpp
Normal file
@@ -0,0 +1,306 @@
|
||||
#include "CameraPointGrey.h"
|
||||
#include <cstring>
|
||||
|
||||
void PrintError(FlyCapture2::Error error){
|
||||
error.PrintErrorTrace();
|
||||
}
|
||||
|
||||
vector<CameraInfo> CameraPointGrey::getCameraList(){
|
||||
|
||||
FlyCapture2::Error error;
|
||||
|
||||
FlyCapture2::BusManager busManager;
|
||||
unsigned int numCameras;
|
||||
error = busManager.GetNumOfCameras(&numCameras);
|
||||
|
||||
vector<CameraInfo> ret;
|
||||
|
||||
if (error != FlyCapture2::PGRERROR_OK){
|
||||
PrintError(error);
|
||||
return ret;
|
||||
}
|
||||
|
||||
for (unsigned int i=0; i < numCameras; i++){
|
||||
FlyCapture2::PGRGuid guid;
|
||||
error = busManager.GetCameraFromIndex(i , &guid);
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
|
||||
// Connect to camera
|
||||
FlyCapture2::Camera cam;
|
||||
error = cam.Connect(&guid);
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError( error );
|
||||
|
||||
// Get the camera information
|
||||
FlyCapture2::CameraInfo camInfo;
|
||||
error = cam.GetCameraInfo(&camInfo);
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError( error );
|
||||
|
||||
CameraInfo camera;
|
||||
camera.busID = camInfo.nodeNumber;
|
||||
camera.model = camInfo.modelName;
|
||||
camera.vendor = "Point Grey Research";
|
||||
|
||||
ret.push_back(camera);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
CameraPointGrey::CameraPointGrey(unsigned int camNum , CameraTriggerMode triggerMode) : Camera(triggerMode){
|
||||
|
||||
FlyCapture2::Error error;
|
||||
|
||||
// Connect to camera
|
||||
FlyCapture2::BusManager busManager;
|
||||
FlyCapture2::PGRGuid camGuid;
|
||||
busManager.GetCameraFromIndex(camNum , &camGuid);
|
||||
error = cam.Connect(&camGuid);
|
||||
if (error != FlyCapture2::PGRERROR_OK) {
|
||||
PrintError(error);
|
||||
connecting = false;
|
||||
return ;
|
||||
}
|
||||
|
||||
FlyCapture2::Format7ImageSettings format7Settings;
|
||||
format7Settings.mode = FlyCapture2::MODE_0;
|
||||
format7Settings.pixelFormat = FlyCapture2::PIXEL_FORMAT_RGB8;
|
||||
format7Settings.width = 1280;
|
||||
format7Settings.height = 1024;
|
||||
format7Settings.offsetX = 0;
|
||||
format7Settings.offsetY = 0;
|
||||
|
||||
// Validate and set mode
|
||||
FlyCapture2::Format7PacketInfo packetInfo;
|
||||
bool valid;
|
||||
error = cam.ValidateFormat7Settings(&format7Settings , &valid ,&packetInfo);
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
// packetsize configures maximum frame rate
|
||||
error = cam.SetFormat7Configuration(&format7Settings, packetInfo.recommendedBytesPerPacket);
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
|
||||
// Turn off gamma
|
||||
FlyCapture2::Property property;
|
||||
property.type = FlyCapture2::AUTO_EXPOSURE;
|
||||
property.onOff = false;
|
||||
error = cam.SetProperty(&property);
|
||||
if (error != FlyCapture2::PGRERROR_OK){
|
||||
PrintError(error);
|
||||
connecting = false;
|
||||
return ;
|
||||
}
|
||||
|
||||
property.type = FlyCapture2::GAMMA;
|
||||
property.onOff = true;
|
||||
property.absControl = true;
|
||||
property.absValue = 1.0;
|
||||
error = cam.SetProperty(&property);
|
||||
if (error != FlyCapture2::PGRERROR_OK){
|
||||
PrintError(error);
|
||||
connecting = false;
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
// Get the camera information
|
||||
FlyCapture2::CameraInfo camInfo;
|
||||
error = cam.GetCameraInfo(&camInfo);
|
||||
if (error != FlyCapture2::PGRERROR_OK){
|
||||
PrintError(error);
|
||||
connecting = false;
|
||||
return ;
|
||||
}
|
||||
|
||||
std::cout << camInfo.vendorName << " " << camInfo.modelName << " " << camInfo.serialNumber << std::endl;
|
||||
connecting = true;
|
||||
|
||||
// Set reasonable default settings
|
||||
CameraSettings settings;
|
||||
//settings.shutter = 8.33;
|
||||
settings.shutter = 33.33;
|
||||
settings.gain = 0.0;
|
||||
this->setCameraSettings(settings);
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
CameraSettings CameraPointGrey::getCameraSettings(){
|
||||
|
||||
FlyCapture2::Property property;
|
||||
|
||||
// Get settings:
|
||||
CameraSettings settings;
|
||||
|
||||
property.type = FlyCapture2::SHUTTER;
|
||||
cam.GetProperty(&property);
|
||||
settings.shutter = property.absValue;
|
||||
|
||||
property.type = FlyCapture2::GAIN;
|
||||
cam.GetProperty(&property);
|
||||
settings.gain = property.absValue;
|
||||
|
||||
return settings;
|
||||
}
|
||||
|
||||
void CameraPointGrey::setCameraSettings(CameraSettings settings){
|
||||
/*
|
||||
FlyCapture2::Property property;
|
||||
property.onOff = true;
|
||||
property.absControl = true;
|
||||
|
||||
property.type = FlyCapture2::SHUTTER;
|
||||
property.absValue = settings.shutter;
|
||||
cam.SetProperty(&property);
|
||||
|
||||
property.type = FlyCapture2::GAIN;
|
||||
property.absValue = settings.gain;
|
||||
cam.SetProperty(&property);
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
void CameraPointGrey::startCapture(){
|
||||
|
||||
FlyCapture2::Error error;
|
||||
|
||||
CameraSettings settings = this->getCameraSettings();
|
||||
std::cout << "\tShutter: " << settings.shutter << "ms" << std::endl;
|
||||
std::cout << "\tGain: " << settings.gain << "dB" << std::endl;
|
||||
|
||||
if(triggerMode == triggerModeHardware){
|
||||
// Configure for hardware trigger
|
||||
FlyCapture2::TriggerMode triggerMode;
|
||||
triggerMode.onOff = true;
|
||||
triggerMode.polarity = 0;
|
||||
triggerMode.source = 0;
|
||||
triggerMode.mode = 14;
|
||||
error = cam.SetTriggerMode(&triggerMode);
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
|
||||
error = cam.StartCapture();
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
|
||||
} else if(triggerMode == triggerModeSoftware){
|
||||
// Configure software trigger
|
||||
FlyCapture2::TriggerMode triggerMode;
|
||||
triggerMode.onOff = true;
|
||||
triggerMode.polarity = 0;
|
||||
triggerMode.source = 7; // software
|
||||
triggerMode.mode = 0;
|
||||
error = cam.SetTriggerMode(&triggerMode);
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
}
|
||||
|
||||
// Set the trigger timeout to 1000 ms
|
||||
FlyCapture2::FC2Config config;
|
||||
config.grabTimeout = 1000;
|
||||
error = cam.SetConfiguration(&config);
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
|
||||
error = cam.StartCapture();
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
|
||||
capturing = true;
|
||||
}
|
||||
|
||||
void CameraPointGrey::stopCapture(){
|
||||
|
||||
FlyCapture2::Error error = cam.StopCapture();
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
|
||||
capturing = false;
|
||||
}
|
||||
|
||||
CameraFrame CameraPointGrey::getFrame(){
|
||||
|
||||
FlyCapture2::Error error;
|
||||
|
||||
if(triggerMode == triggerModeSoftware){
|
||||
// Fire software trigger
|
||||
// broadcasting not supported on some platforms
|
||||
cam.FireSoftwareTrigger(false);
|
||||
}
|
||||
|
||||
// Retrieve the image
|
||||
FlyCapture2::Image rawImage;
|
||||
error = cam.RetrieveBuffer(&rawImage);
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
|
||||
CameraFrame frame;
|
||||
|
||||
frame.timeStamp = rawImage.GetTimeStamp().cycleCount;
|
||||
frame.height = rawImage.GetRows();
|
||||
frame.width = rawImage.GetCols();
|
||||
frame.memory = rawImage.GetData();
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
|
||||
size_t CameraPointGrey::getFrameSizeBytes(){
|
||||
|
||||
FlyCapture2::Format7ImageSettings format7Settings;
|
||||
unsigned int dummy1;
|
||||
float dummy2;
|
||||
FlyCapture2::Error error = cam.GetFormat7Configuration(&format7Settings , &dummy1, &dummy2);
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
|
||||
return format7Settings.width*format7Settings.height;
|
||||
}
|
||||
|
||||
size_t CameraPointGrey::getFrameWidth(){
|
||||
|
||||
FlyCapture2::Format7ImageSettings format7Settings;
|
||||
unsigned int dummy1;
|
||||
float dummy2;
|
||||
FlyCapture2::Error error = cam.GetFormat7Configuration(&format7Settings, &dummy1 , &dummy2);
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
|
||||
return format7Settings.width;
|
||||
|
||||
}
|
||||
|
||||
size_t CameraPointGrey::getFrameHeight(){
|
||||
|
||||
FlyCapture2::Format7ImageSettings format7Settings;
|
||||
unsigned int dummy1;
|
||||
float dummy2;
|
||||
FlyCapture2::Error error = cam.GetFormat7Configuration(&format7Settings , &dummy1 , &dummy2);
|
||||
if (error != FlyCapture2::PGRERROR_OK)
|
||||
PrintError(error);
|
||||
|
||||
return format7Settings.height;
|
||||
|
||||
}
|
||||
|
||||
|
||||
CameraPointGrey::~CameraPointGrey(){
|
||||
|
||||
if(capturing){
|
||||
// Stop camera transmission
|
||||
cam.StopCapture();
|
||||
}
|
||||
|
||||
// Gracefulle destruct the camera
|
||||
cam.Disconnect();
|
||||
|
||||
std::cout<<"camera disconnect"<<std::endl;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user