I'm trying to get to work with a Basler dart-3840 on an ODROID device.
I've installed the pylon 7.3.0 Camera Software Suite Linux ARM 64 bit - Debian Installer Package
.
I can succesfully compile a project, request device information (like Serialnumber, device name etc) and capture images of the basler camera.
But I'm now trying to set the Framerate (and Height/Widht/OffsetX/OffsetY), but I'm running in some issues. As these values can't be found.
This was my first try:
#include <pylon/PylonIncludes.h>
int main( int /*argc*/, char* /*argv*/[] )
{
PylonInitialize();
CTlFactory& tlFactory = CTlFactory::GetInstance();
CInstantCamera camera( tlFactory.CreateFirstDevice() );
camera.AcquisitionFrameRateEnable.SetValue(true);
camera.AcquisitionFrameRate.SetValue(30.0);
}
But this gives the compiler errors:
error: 'class Pylon::CInstantCamera' has no member named 'AcquisitionFrameRateEnable'
error: 'class Pylon::CInstantCamera' has no member named 'AcquisitionFrameRate'
I've also tried to change these parameters using a nodemap: This was my first try:
#include <pylon/PylonIncludes.h>
int main( int /*argc*/, char* /*argv*/[] )
{ PylonInitialize();
CTlFactory& tlFactory = CTlFactory::GetInstance();
CInstantCamera camera( tlFactory.CreateFirstDevice() );
INodeMap& nodemap = camera.GetNodeMap();
CFloatParameter acquisitionFrameRate(nodemap, "AcquisitionFrameRate");
acquisitionFrameRate.SetValue(30.0);
}
But this gives a runtime Node is not writable.
exception
Finally I've tried searching the libraries for AcquisitionFrameRate
and found out that it is found in the _BaslerUsbCameraParams.h
So my last try was to add a CBaslerUsbInstantCamera
to change the AcquisitionFrameRate
#include <pylon/PylonIncludes.h>
#include <pylon/usb/PylonUsbIncludes.h>
int main( int /*argc*/, char* /*argv*/[] )
{
PylonInitialize();
CTlFactory& tlFactory = CTlFactory::GetInstance();
CInstantCamera camera( tlFactory.CreateFirstDevice() );
CBaslerUsbInstantCamera* usbCamera = (CBaslerUsbInstantCamera*)&camera;
usbCamera->AcquisitionFrameRateEnable = true;
usbCamera->AcquisitionFrameRate = 30;
}
But this gave a runtime Segmentation Fault
crash on the setting of the AcquisitionFrameRateEnable
Hopefully somebody can inform me what I'm doing wrong here.
I'm using:
Device: ODroid, arm
IDE: VSCode - Remote debugging over SSH
Compiling: CMake (I can add CMakeLists.txt when needed)
Pylon 7.3.0 Camera Software Suite Linux ARM 64 bit
The rubber duck debugging did it's work.
The issue is resolved by directly creating an CBaslerUsbInstantCamera
and first opening the camera before trying to change the parameters.
#include <pylon/PylonIncludes.h>
#include <pylon/usb/PylonUsbIncludes.h>
int main( int /*argc*/, char* /*argv*/[] )
{
PylonInitialize();
CTlFactory& tlFactory = CTlFactory::GetInstance();
CBaslerUsbInstantCamera camera( tlFactory.CreateFirstDevice() ); //Create CBaslerUsbInstantCamera instead of CInstantCamera
camera.Open(); //Open camera before changing parameters
usbCamera.AcquisitionFrameRateEnable = true;
usbCamera.AcquisitionFrameRate = 30;
}
The nodemap way does also work using the CBaslerUsbInstantCamera and Opening the camera
#include <pylon/PylonIncludes.h>
#include <pylon/usb/PylonUsbIncludes.h>
int main( int /*argc*/, char* /*argv*/[] )
{
PylonInitialize();
CTlFactory& tlFactory = CTlFactory::GetInstance();
CBaslerUsbInstantCamera camera( tlFactory.CreateFirstDevice() ); //Create CBaslerUsbInstantCamera instead of CInstantCamera
camera.Open(); //Open camera before changing parameters
CFloatParameter acquisitionFrameRate(nodemap, "AcquisitionFrameRate");
acquisitionFrameRate.SetValue(30.0);
}