27#include <SimoxUtility/algorithm/string/string_tools.h>
33#include <Calibration/StereoCalibration.h>
41 std::vector<std::string> serialNumbers = simox::alg::split(value,
"\t ,");
43 visionx::ImageDimension dimensions =
46 unsigned int numCameras;
47 if (busManager.GetNumOfCameras(&numCameras) != FlyCapture2::PGRERROR_OK && !numCameras)
49 ARMARX_FATAL <<
"no cameras found or unable to query bus";
53 ARMARX_INFO <<
"found " << numCameras <<
" cameras";
55 for (std::string& serialNumber : serialNumbers)
57 FlyCapture2::PGRGuid pGuid;
59 if (busManager.GetCameraFromSerialNumber(std::stoi(serialNumber), &pGuid) !=
60 FlyCapture2::PGRERROR_OK)
62 ARMARX_FATAL <<
"invalid serial number or camera not found: " << serialNumber;
65 FlyCapture2::Camera*
c =
new FlyCapture2::Camera();
68 if (
c->Connect(&pGuid) != FlyCapture2::PGRERROR_OK)
73 FlyCapture2::CameraInfo cameraInfo;
74 if (
c->GetCameraInfo(&cameraInfo) != FlyCapture2::PGRERROR_OK)
80 ARMARX_INFO <<
" camera model: " << cameraInfo.modelName <<
" serial number: `"
81 << cameraInfo.serialNumber;
87 colorImages.push_back(
new FlyCapture2::Image(dimensions.height,
89 FlyCapture2::PIXEL_FORMAT_RGB,
90 FlyCapture2::BayerTileFormat::RGGB));
94 cameraImages =
new CByteImage*[cameras.size()];
95 for (
size_t i = 0; i < cameras.size(); i++)
97 cameraImages[i] =
new CByteImage(dimensions.width, dimensions.height, CByteImage::eRGB24);
109 setImageFormat(dimensions, visionx::eRgb, visionx::eBayerPatternRg);
116 for (FlyCapture2::Camera*
c : cameras)
118 if (
c->IsConnected())
126 for (FlyCapture2::Image* i : colorImages)
132 for (
size_t i = 0; i < cameras.size(); i++)
134 delete cameraImages[i];
137 delete[] cameraImages;
145 for (FlyCapture2::Camera*
c : cameras)
147 FlyCapture2::Property p;
151 p.type = FlyCapture2::AUTO_EXPOSURE;
154 if (
c->SetProperty(&p) != FlyCapture2::PGRERROR_OK)
159 p.type = FlyCapture2::SHUTTER;
162 if (
c->SetProperty(&p) != FlyCapture2::PGRERROR_OK)
167 p.type = FlyCapture2::GAIN;
170 if (
c->SetProperty(&p) != FlyCapture2::PGRERROR_OK)
176 FlyCapture2::FrameRate
frameRate = FlyCapture2::FRAMERATE_7_5;
178 if (framesPerSecond >= 60.0)
182 else if (framesPerSecond >= 30.0)
186 else if (framesPerSecond >= 15.0)
190 else if (framesPerSecond >= 7.5)
199 FlyCapture2::VideoMode mode = FlyCapture2::VideoMode::VIDEOMODE_640x480Y8;
203 visionx::ImageDimension(640, 480))
205 mode = FlyCapture2::VideoMode::VIDEOMODE_640x480Y8;
208 visionx::ImageDimension(1600, 1200))
210 mode = FlyCapture2::VideoMode::VIDEOMODE_1600x1200Y8;
217 FlyCapture2::Error error =
c->SetVideoModeAndFrameRate(mode,
frameRate);
219 if (error != FlyCapture2::PGRERROR_OK)
224 if (
c->StartCapture() != FlyCapture2::PGRERROR_OK)
234 for (FlyCapture2::Camera*
c : cameras)
244 const int imageSize =
245 imageFormat.dimension.width * imageFormat.dimension.height * imageFormat.bytesPerPixel;
247 FlyCapture2::Image imageBuffer;
248 for (
size_t i = 0; i < cameras.size(); i++)
251 if (cameras[i]->RetrieveBuffer(&imageBuffer) != FlyCapture2::PGRERROR_OK)
258 if (imageBuffer.Convert(FlyCapture2::PIXEL_FORMAT_RGB, colorImages[i]) !=
259 FlyCapture2::PGRERROR_OK)
268 for (
size_t i = 0; i < cameras.size(); i++)
270 memcpy(cameraImages[i]->pixels, colorImages[i]->GetData(), imageSize);
282 for (
size_t i = 0; i < cameras.size(); i++)
284 memcpy(ppImageBuffers[i], cameraImages[i]->pixels, imageSize);
309 CStereoCalibration ivtStereoCalibration;
static bool getAbsolutePath(const std::string &relativeFilename, std::string &storeAbsoluteFilename, const std::vector< std::string > &additionalSearchPaths={}, bool verbose=true)
std::string getConfigIdentifier()
Retrieve config identifier for this component as set in constructor.
Property< PropertyType > getProperty(const std::string &name)
void onStartCapture(float frameRate) override
This is called when the image provider capturing has been started.
CUndistortion * undistortion
CRectification * rectification
void onStopCapture() override
This is called when the image provider capturing has been stopped.
armarx::PropertyDefinitionsPtr createPropertyDefinitions() override
void onExitCapturingImageProvider() override
This is called when the Component::onExitComponent() setup is called.
void onInitCapturingImageProvider() override
This is called when the Component::onInitComponent() is called.
std::string calibrationFileName
void onInitCapturingImageProvider() override
This is called when the Component::onInitComponent() is called.
float frameRate
Required frame rate.
void setImageSyncMode(ImageSyncMode imageSyncMode)
Sets the image synchronization mode.
armarx::IceSharedMemoryProvider< unsignedchar >::pointer_type sharedMemoryProvider
shared memory provider
ImageFormatInfo getImageFormat(const Ice::Current &c=Ice::emptyCurrent) override
Returns the entire image format info struct via Ice.
void setImageFormat(ImageDimension imageDimension, ImageType imageType, BayerPatternType bayerPatternType=visionx::eBayerPatternRg)
Sets the image basic format data.
void setNumberImages(int numberImages)
Sets the number of images on each capture.
#define ARMARX_INFO
The normal logging level.
#define ARMARX_FATAL
The logging level for unexpected behaviour, that will lead to a seriously malfunctioning program and ...
#define ARMARX_ERROR
The logging level for unexpected behaviour, that must be fixed.
#define ARMARX_WARNING
The logging level for unexpected behaviour, but not a serious problem.
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::shared_ptr< SharedMemoryScopedWriteLock > SharedMemoryScopedWriteLockPtr
IceUtil::Handle< class PropertyDefinitionContainer > PropertyDefinitionsPtr
PropertyDefinitions smart pointer type.