42#include "vpPylonGrabberGigE.h"
46#include <visp3/core/vpException.h>
47#include <visp3/core/vpTime.h>
69 Pylon::CTlFactory &TlFactory = Pylon::CTlFactory::GetInstance();
70 Pylon::DeviceInfoList_t lstDevices;
71 Pylon::DeviceInfoList_t filter;
72 Pylon::CBaslerGigEDeviceInfo gige_devinfo;
73 filter.push_back(gige_devinfo);
74 TlFactory.EnumerateDevices(lstDevices, filter);
76 m_numCameras = lstDevices.size();
89 Pylon::CDeviceInfo deviceInfo = m_camera.GetDeviceInfo();
91 GenApi::INodeMap &control = m_camera.GetNodeMap();
93 GenApi::CIntegerPtr widthMax = control.GetNode(
"WidthMax");
94 GenApi::CIntegerPtr heightMax = control.GetNode(
"HeightMax");
96 os <<
"Camera information: " << std::endl;
97 os <<
" Serial number : " << deviceInfo.GetSerialNumber() << std::endl;
98 os <<
" Camera model : " << deviceInfo.GetModelName() << std::endl;
99 os <<
" Camera vendor : " << deviceInfo.GetVendorName() << std::endl;
100 os <<
" Resolution : " << widthMax->GetValue() <<
"x" << heightMax->GetValue() << std::endl;
101 os <<
" Firmware version : " << deviceInfo.GetDeviceVersion() << std::endl;
116 if (m_connected ==
true) {
134 float frame_rate = m_camera.AcquisitionFrameRateAbs.GetValue();
148 if (GenApi::IsReadable(m_camera.GainAbs))
149 return m_camera.GainAbs.GetValue();
150 else if (GenApi::IsReadable(m_camera.GainRaw))
151 return m_camera.GainRaw.GetValue();
171 if (GenApi::IsReadable(m_camera.BlackLevelAbs))
172 return m_camera.BlackLevelAbs.GetValue();
173 else if (GenApi::IsReadable(m_camera.BlackLevelRaw))
174 return m_camera.BlackLevelRaw.GetValue();
194 if (GenApi::IsReadable(m_camera.ExposureTimeAbs))
195 return m_camera.ExposureTimeAbs.GetValue() * 0.001;
196 else if (GenApi::IsReadable(m_camera.ExposureTimeRaw))
197 return m_camera.ExposureTimeRaw.GetValue();
212 float gamma = m_camera.Gamma.GetValue();
226 if (index >= m_numCameras) {
228 index, m_numCameras));
231 Pylon::CTlFactory &TlFactory = Pylon::CTlFactory::GetInstance();
232 Pylon::DeviceInfoList_t lstDevices;
233 Pylon::DeviceInfoList_t filter;
234 Pylon::CBaslerGigEDeviceInfo gige_devinfo;
235 filter.push_back(gige_devinfo);
236 TlFactory.EnumerateDevices(lstDevices, filter);
238 std::ostringstream os;
239 os << lstDevices[index].GetSerialNumber();
259 m_camera.UserSetLoad.Execute();
261 success = m_camera.UserSetLoad.IsDone();
277 Basler_GigECamera::UserSetDefaultSelectorEnums user_set = m_camera.UserSetDefaultSelector.GetValue();
280 case Basler_GigECamera::UserSetDefaultSelector_Default:
283 case Basler_GigECamera::UserSetDefaultSelector_UserSet1:
286 case Basler_GigECamera::UserSetDefaultSelector_UserSet2:
289 case Basler_GigECamera::UserSetDefaultSelector_UserSet3:
315 if (index >= m_numCameras) {
317 index, m_numCameras));
332 for (
unsigned int i = 0; i < m_numCameras; i++) {
352 m_camera.AcquisitionFrameRateAbs.SetValue(frame_rate);
354 return m_camera.AcquisitionFrameRateAbs.GetValue();
375 m_camera.GainAuto.SetValue(Basler_GigECamera::GainAuto_Continuous);
377 m_camera.GainAuto.SetValue(Basler_GigECamera::GainAuto_Off);
379 if (GenApi::IsWritable(m_camera.GainAbs)) {
380 m_camera.GainAbs.SetValue(gain_value);
381 return m_camera.GainAbs.GetValue();
383 else if (GenApi::IsWritable(m_camera.GainRaw)) {
384 m_camera.GainRaw.SetValue(gain_value);
385 return m_camera.GainRaw.GetValue();
409 if (GenApi::IsWritable(m_camera.BlackLevelAbs)) {
410 m_camera.BlackLevelAbs.SetValue(blacklevel_value);
411 return m_camera.BlackLevelAbs.GetValue();
413 else if (GenApi::IsWritable(m_camera.BlackLevelRaw)) {
414 m_camera.BlackLevelRaw.SetValue(blacklevel_value);
415 return m_camera.BlackLevelRaw.GetValue();
443 m_camera.ExposureMode.SetValue(Basler_GigECamera::ExposureMode_Timed);
445 m_camera.ExposureMode.SetValue(Basler_GigECamera::ExposureMode_Off);
448 m_camera.ExposureAuto.SetValue(Basler_GigECamera::ExposureAuto_Continuous);
450 m_camera.ExposureAuto.SetValue(Basler_GigECamera::ExposureAuto_Off);
452 if (GenApi::IsWritable(m_camera.ExposureTimeAbs)) {
453 m_camera.ExposureTimeAbs.SetValue(exposure_value * 1000);
454 return m_camera.ExposureTimeAbs.GetValue() * 0.001;
456 else if (GenApi::IsWritable(m_camera.ExposureTimeRaw)) {
457 m_camera.ExposureTimeRaw.SetValue(exposure_value);
458 return m_camera.ExposureTimeRaw.GetValue();
480 if (GenApi::IsWritable(m_camera.GammaEnable))
481 m_camera.GammaEnable.SetValue(gamma_on);
483 if (GenApi::IsWritable(m_camera.Gamma)) {
484 m_camera.Gamma.SetValue(gamma_value);
485 return m_camera.Gamma.GetValue();
509 m_camera.UserSetSave.Execute();
511 success = m_camera.UserSetSave.IsDone();
514 if (success && set_default)
535 m_camera.UserSetDefaultSelector.SetValue(Basler_GigECamera::UserSetDefaultSelector_Default);
539 m_camera.UserSetDefaultSelector.SetValue(Basler_GigECamera::UserSetDefaultSelector_UserSet1);
543 m_camera.UserSetDefaultSelector.SetValue(Basler_GigECamera::UserSetDefaultSelector_UserSet2);
547 m_camera.UserSetDefaultSelector.SetValue(Basler_GigECamera::UserSetDefaultSelector_UserSet3);
564 if (!m_camera.IsGrabbing()) {
565 m_camera.StartGrabbing(1);
567 if (m_connected && m_camera.IsGrabbing())
580 if (m_camera.IsGrabbing()) {
581 m_camera.StopGrabbing();
583 if (m_connected && m_camera.IsGrabbing())
596 if (m_connected ==
false) {
598 if (m_numCameras == 0) {
602 if (!m_camera.IsPylonDeviceAttached()) {
603 Pylon::CTlFactory &TlFactory = Pylon::CTlFactory::GetInstance();
604 Pylon::DeviceInfoList_t lstDevices;
605 Pylon::DeviceInfoList_t filter;
606 Pylon::CBaslerGigEDeviceInfo gige_devinfo;
607 filter.push_back(gige_devinfo);
608 TlFactory.EnumerateDevices(lstDevices, filter);
610 m_camera.Attach(TlFactory.CreateDevice(lstDevices[m_index]));
616 if (m_connected && m_camera.IsGrabbing())
629 if (m_connected ==
true) {
633 if (m_connected && m_camera.IsGrabbing())
662 Pylon::CGrabResultPtr grabResult;
664 if (!m_camera.RetrieveResult(2000, grabResult)) {
669 if (grabResult->GrabSucceeded()) {
670 height = grabResult->GetHeight();
671 width = grabResult->GetWidth();
674 Pylon::CImageFormatConverter imageConvert;
675 imageConvert.OutputPixelFormat = Pylon::PixelType_Mono8;
676 imageConvert.OutputPaddingX = 0;
678 imageConvert.Convert(I.bitmap,
sizeof(
unsigned char) *
width *
height, (Pylon::IImage &)grabResult);
691 Pylon::CGrabResultPtr grabResult;
693 if (!m_camera.RetrieveResult(2000, grabResult)) {
698 if (grabResult->GrabSucceeded()) {
699 height = grabResult->GetHeight();
700 width = grabResult->GetWidth();
703 Pylon::CImageFormatConverter imageConvert;
704 imageConvert.OutputPixelFormat = Pylon::PixelType_BGRA8packed;
705 imageConvert.OutputPaddingX = 0;
707 Pylon::CPylonImage destImage;
708 imageConvert.Convert(destImage, (Pylon::IImage &)grabResult);
709 Pylon::SBGRA8Pixel *pixel = (Pylon::SBGRA8Pixel *)destImage.GetBuffer();
710 for (
unsigned int i = 0; i <
height; i++) {
711 for (
unsigned int j = 0; j <
width; j++) {
712 unsigned int p_index = i *
width + j;
713 I[i][j].R = pixel[p_index].R;
714 I[i][j].G = pixel[p_index].G;
715 I[i][j].B = pixel[p_index].B;
716 I[i][j].A = pixel[p_index].A;
773 m_camera.UserSetSelector.SetValue(Basler_GigECamera::UserSetSelector_Default);
777 m_camera.UserSetSelector.SetValue(Basler_GigECamera::UserSetSelector_UserSet1);
781 m_camera.UserSetSelector.SetValue(Basler_GigECamera::UserSetSelector_UserSet2);
785 m_camera.UserSetSelector.SetValue(Basler_GigECamera::UserSetSelector_UserSet3);
816void dummy_vpPylonGrabberGigE() { }
error that can be emitted by ViSP classes.
@ badValue
Used to indicate that a value is not in the allowed range.
@ notImplementedError
Not implemented.
unsigned int height
Number of rows in the image.
bool init
Set to true if the frame grabber has been initialized.
unsigned int width
Number of columns in the image.
Definition of the vpImage class member functions.
void close()
Stop active camera capturing images and disconnect the active camera.
void setCameraIndex(unsigned int index)
bool loadUserSet(UserSetName user_set)
Loads the selected configuration into the camera's volatile memory and makes it the active configurat...
float setBlackLevel(float blacklevel_value=0)
std::string getCameraSerial(unsigned int index)
bool setUserSetDefault(UserSetName user_set)
Sets the configuration set to be used as the default startup set.
virtual ~vpPylonGrabberGigE()
Pylon::CInstantCamera * getCameraHandler()
void acquire(vpImage< unsigned char > &I)
unsigned int getNumCameras()
float setExposure(bool exposure_on, bool exposure_auto, float exposure_value=0)
void setCameraSerial(const std::string &serial)
UserSetName getUserSetDefault()
Gets the configuration set being used as the default startup set.
float setGamma(bool gamma_on, float gamma_value=1)
float setFrameRate(float frame_rate)
bool selectUserSet(UserSetName user_set)
Selects the configuration set to load, save, or configure.
vpPylonGrabber & operator>>(vpImage< unsigned char > &I)
std::ostream & getCameraInfo(std::ostream &os)
float setGain(bool gain_auto, float gain_value=0)
bool saveUserSet(UserSetName user_set, bool set_default=false)
Saves the current active configuration set into the selected user set.
@ USERSET_DEFAULT
The default user set.
@ USERSET_UNKNOWN
User set not supported.
@ USERSET_USERSET1
User set 1.
@ USERSET_USERSET3
User set 3.
@ USERSET_USERSET2
User set 2.
VISP_EXPORT int wait(double t0, double t)