Upgrade Notes¶
This topic lists noteworthy changes that can cause compile-time or runtime issues when upgrading Ensenso SDK or uEye driver versions in an existing application.
See this page for a list of known issues in the current version of the SDK.
Upgrade of Ensenso SDK¶
≥ 4.1.x¶
The default stereo matching method changed to
PatchMatch2
.The new ImageEnhancement feature is enabled by default for monocular cameras and for stereo camera texture images.
ComputeTexture: When texture mode is enabled, the
ComputeTexture
command now rectifies raw texture images instead of computing a texture image from rectified images.RenderView: The default point cloud RenderingMode was changed from
Points
toCircles
.
B- and C-Series Firmware
Require an update to firmware version 1.4.
Changes to the handling of gain and blacklevel can affect the average image brightness. Review your target brightness and exposure/gain settings after updating the firmware.
≥ 4.0.x¶
System Requirements
Using CUDA now requires a device with compute capability 5.0 or newer.
Using CUDA now requires at least version 452.39 of the Nvidia driver on Windows.
Support for Windows 7 was removed.
Default Parameters
The following parameters can change behavior of the API in the new version if you don’t set them explicitly.
The default value of CorrespondenceThreshold and SpeckleRemoval/RegionSize changed to the same values that were already used in NxView parameter presets.
The parameter Filling/RegionSize is now disabled by default, since it doesn’t have much effect when using the default PatchMatch stereo matching algorithm. It is still enabled in NxView parameter presets using other matching methods.
The BandwidthLimit/Automatic parameter for the Open command now defaults to true.
For cameras with color image sensors WhiteBalance/Automatic is now enabled by default.
Auto exposure now uses some amount of gain before increasing the exposure time to more than 5ms for X- and XR-series cameras. This is the same behavior that was already used for C-series and newer N-series cameras.
The default value of Gain and Automatic changed for S-series cameras. Gain now starts at the normal default value of 1 and gets adjusted automatically. Auto exposure uses some gain before increasing the exposure time.
Virtual cameras now have FlexView enabled by default to assimilate their default parameters to those of hardware cameras.
File cameras now preserve the position from which the data was originally captured by default. This can change the position of their data. See this topic for details.
Functional Changes
The ImageBuffer properties for stereo cameras are changed to refer to entire image sets. [#5118] (00204276)
The command EthernetConfiguration enables DHCP on devices that support DHCP and are connected to a host adapter that has obtained its IP address via DHCP when using the Auto method. [#3107]
The command ReprojectPoints now returns right rays that originate in the right camera and intersect the left rays in the corresponding 3D points.
The command GenerateCalibrationPattern reports an error if an unknown format is specified through the file extension of the Filename parameter instead of generating a PDF file with the wrong extension.
The Time node for commands was moved outside of the command’s result node. There is no link for backwards compatibility, accessing the node at its old location will fail. This resolves some edge cases where the Time node could overwrite command results.
If you use the C++ API, you can replacecommand.result()[itmTime]
withcommand.status()[itmTime]
.The camera matrix node of a monocular camera now always contains the camera matrix for the full image. The actually used camera matrix with modifications due to binning can be found underneath the new Dynamic node. [#5210]
NxLib: The PartFinder command has a new parameter TexturePenalty which changes the matching behaviour compared to previous versions. Set TexturePenalty equal to Texture to obtain the behaviour of previous versions. [#5233]
NxLib: Bugfixes in the 2D edge layer of PartFinder will lead to improved, but different results, even with identical parameters, when Texture is enabled. [#5220]
NxLib: Presets for PartFinder updated.
modelGeneration/medium
now uses Texture.search/medium
now uses RefineCombined. Lowered Score for all search presets. [#5220]
Removed Functionality
The command
ClearImages
was removed. If you used it to load images into an existing camera node, please use file cameras instead.The parameter
Operation
for theCapture
andRetrieve
commands was removed.Compatibility nodes for an old version of the profiler were removed from the Debug node.
Unused string constants with no valid use cases were removed from the C headers and other interfaces.
List of Removed String Constants
Add
BufferSize
CalibrateInBackground
CalibrateUpdatePatterns
Destination
InfoTimeout
MarkFilterRegions
New
Operation
StaticBufferCount
TimeExecute
TimeFinalize
TimePrepare
Changes to JSON API Functions
The set of forbidden characters in JSON node names has been extended with the space and the double quote character as well as further special characters. See the full list here.
nxLibGetInt
now clips the value to the minimum or maximum possibleint
value if the underlyingdouble
value is outside of the range of anint
.nxLibGetBinary
now returnsNxLibBufferTooSmall
if the provided buffer is too small.nxLibGetName
now returns""
if the item is the root node.
JSON API Return Codes
Introduced a new return code
NxLibItemPathInvalid
, which is returned by all API functions when the specified path to the item is invalid.Introduced a new return code
ǸxLibInvalidParameters
, which is returned by all API functions when a parameters given by the user is invalid, e.g. when passing aNULL
pointer asNXLIBSTR
.The return code
NxLibCannotCreateItem
was replaced byNxLibItemProtected
to better describe its meaning. The old constant still exists as an alias.
The return codes of the API were adjusted in some cases to describe errors better and make return codes consistent between NxLib and NxLibRemote. These changes will probably not affect your program unless you check for specific error codes.
Complete List of Changed Return Codes
nxLibErase
:Now returns
NxLibItemProtected
if the item to be deleted is the root node or protected.Now returns
NxLibItemInexistent
if the item to be deleted is not existing.
nxLibSetNull
,nxLibSetBool
,nxLibSetDouble
,nxLibSetInt
,nxLibSetString
:Now returns
NxLibItemProtected
if the item to be set is the root node or protected.NxLib: Now returns
NxLibItemTypeNotCompatible
if the protection of item to be set isStructureLocked
and the given value would modify the structure.NxLibRemote: Now returns
NxLibItemProtected
if the item to be set is the root node.
nxLibSetJson
:Now returns
NxLibItemProtected
if the item to be set is the root node or protected andonlyWriteableNodes
is set tofalse
.Now returns
NxLibItemTypeNotCompatible
only in the situations described in the updated documentation.
nxLibSetBinary
:Now returns
NxLibItemProtected
if the item to be set is the root node or protected.Now returns
NxLibItemInexistent
if the item to be set is not existing.
nxLibSetBinaryFormatted
:Now returns
NxLibItemProtected
if the item to be set is the root node or protected.Now returns
NxLibItemTypeNotCompatible
if the protection of item to be set isStructureLocked
and the given value would modify the structure.
nxLibGetBinary
:Now returns
NxLibItemInexistent
if the item is not existing.Now returns
NxLibBufferTooSmall
if the provided buffer is too small.
nxLibGetBinaryInfo
:Now returns
NxLibItemInexistent
if the item is not existing.
nxLibWaitForChange
,nxLibWaitForType
,nxLibWaitForBoolValue
,nxLibWaitForDoubleValue
,nxLibWaitForIntValue
,nxLibWaitForStringValue
:Now returns
NxLibItemTypeNotCompatible
also if the item is not a leaf node.
nxLibMakeUniqueItem
:Now returns
NxLibItemProtected
if the parent of the item to be created is protected.Now returns the new return code
NxLibItemMaximumUniqueCountReached
if the item could not be created, because the maximum number of unique sub items has been reached.Now works with both arrays and objects as well with their index notation.
Now returns a cleaned version of the created item’s path that does not contain double slashes.
nxLibGetDebugMessages
:NxLib:Now returns
NxLibNoDebugData
if no debug messages are available.
nxLibGetDebugBuffer
:NxLibRemote: Now returns
NxLibDebugMessageOverflow
if the message buffer has overflown and older messages had to be dropped.
nxLibOpenTcpPort
:Now returns
NxLibCouldNotOpenPort
if the port value is out of range.Now returns
NxLibCouldNotOpenPort
on Linux if the port is < 1024 and the user does not have permissions to use those ports.
C/C++ Headers
C++ headers now require C++11. The compatibility mode for older versions using the
NXLIB_CPP_COMPATIBILITY_MODE
macro was removed. Note that the library is still binary compatible, so you can continue to compile using the C++ classes from an older version of the NxLib as a workaround.NxLib: The constant headers were restructured. The following unintended use cases no longer work:
Including the headers
nxLibApiErrors.h
,nxLibCommonNodeNames.h
ornxLibSymbols.h
directly.Using the macros
NXLIB_ITEM
,NXLIB_VALUE
,NXLIB_COMMAND
,NXLIB_ERROR
,NXLIB_INT_CONST
orNXLIB_APIERROR
to define additional constants outside of the NxLib header. The macros are now undefined after usage in the NxLib header.
NxLibItem::as<char const*>()
was removed because the returned pointer was unsafe to use under certain circumstances.
.NET Interface
The deprecated Common Language Infrastructure (CLI) interface no longer ships with the Ensenso SDK. Use the new .NET interface instead.
As described in the deprecation notice, the C API is still binary compatible, so you can continue to use the DLL files from older versions except that they don’t contain new string constants.The instantiated template functions
NxLib.SetBinaryByte()
,NxLib.SetBinaryShort()
andNxLib.SetBinaryFloat()
have been removed. UseNxLib.SetBinary<T>()
instead.The instantiated template functions
NxLib.SetBinaryFormattedByte()
,NxLib.SetBinaryFormattedShort()
andNxLib.SetBinaryFormattedFloat()
have been removed. UseNxLib.SetBinaryFormatted<T>()
instead.
≥ 3.6.x¶
The Common Language Infrastructure (CLI) interface is now deprecated and will be removed in a future version of the SDK. Use the new .NET interface instead, which provides a backwards compatible C# API that runs on all platforms where .NET is available.
To simplify transition to the new interface, the Windows installers will continue to install the CLI DLL files. They are frozen to version 3.5.1394, though. Due to the stable binary interface of the NxLib these DLLs will continue to work for the forseeable future, except that new string constants and API functions will not be available. If you want to use new NxLib functionality with the CLI interface, you can use string literals or define the necessary constants for the new node names and values yourself.Instead of using the NxLib internal default values NxView now always loads the ‘PatchMatchFlexView4’ preset (or ‘PatchMatchSingleShot’ for cameras without FlexView) when no local settings file is available or ‘Load cached settings’ is unchecked.
The CreateCamera command enforces stricter rules on the serial number of newly created file and virtual cameras. They are now limited to alphanumeric characters and the symbols
.,-+_~
.Improvements in PartFinder might require adjustments of score thresholds.
≥ 3.5.x¶
Changes to the nxLibGetJson API function:
The parameter
scientificNumberFormat
was renamed toallowScientificFormat
.When
allowScientificFormat
is false, the function will never output numbers in scientific format even if they require more characters than specified by thenumberPrecision
parameter.When
allowScientificFormat
is true, the function will still output numbers in non-scientific format if it is shorter than the output in scientific format would be.Note that the function is binary compatible to the old version, but might return different results now.
Initialization of the OpenGL context in the NxLib on Linux now uses EGL instead of X11. This allows rendering without running an X server, but might require some changes on headless systems. See this guide for more information.
On Windows, the NxLib uses a dynamic C runtime library (CRT) now and requires an installation of the Microsoft Visual C++ Redistributable. The installer will install this automatically for you. You can use the NxLib DLL on a system where the installer did not run if you install the CRT manually.
The profiler now uses a different binary format. Log files generated by an NxLib with version ≥ 3.5 cannot be opened in earlier versions of the NxProfiler.
PartFinder’s filtering of the points sampled from the CAD model and used for coverage estimation is relaxed, so an estimated relative coverage may have significantly lower values. It is recommended that you adjust the thresholds for the combined score and the coverage score.
≥ 3.3.x¶
This version ships with version 2.9 of the IDS GigE Vision firmware. Any GigE Vision devices should be updated as suggested by NxView.
Functions that require a separate license (e.g. PartFinder) now require the presence of
NxLibCmBridge64.dll
(Windows) orlibNxLibCmBridge64.so
(Linux), which gets loaded dynamically. The installers automatically install the library in the system’s library directory. You don’t have to do anything if you use NxLib from there.Due to a large number of internal changes and improvements the PartFinder command will yield different results compared to earlier versions. It is recommended to verify parametrization and results again when using PartFinder.
≥ 3.2.x¶
This version adds support for EEPROM on IDS GigE Vision cameras instead of saving it to a local file (requires at least firmware 2.4). For backwards compatibility, the camera will still use the local file if it exists. Remove it manually to switch to the EEPROM on the device. Note that the SDK only ships the new firmware 2.8 for the GV-5040ACP-M, which is used in S-series cameras. For other camera model this version still ships an older firmware version due to known problems with the new firmware versions.
This versions adds the new EEPROM calibration format 11/12. This format is only required for S-series cameras, the calibration of any other stereo camera can always be downgraded and saved in the previous format.
The
IgnoreEnsensoPatternEncoding
parameter for CollectPattern was removed, because the resulting undecoded patterns were not usable for position estimation. CollectPattern in projector mode now always performs a basic decoding of Ensenso patterns.The
AbsoluteBlackLevelOffset
node in the camera parameters was removed, because it was not used and its value was always zero.
≥ 3.1.x¶
Handling of multi-exposure images in the correlation matcher has been improved to increase data coverage for extreme lighting situations. This can change the matching result with these settings (SDK-2139) [062688].
NxLibItem::as<char const*>()
could return a dangling pointer in previous versions of the NxLib. To make it slightly safer, it now returns a pointer to which the C-API string usage restrictions apply. The method will be removed in the next major version. If you use it, you should replace it withNxLibItem::asString()
orNxLibItem::as<std::string>()
.The bugfix SDK-2351 for RenderPointMap changed the shadowing behaviour of the projection. Please verify that your application is not affected when using this command.
≥ 3.0.x¶
The new PatchMatch stereo matching method as been adopted as default method and therefore the default values for the following parameters have been changed: FlexView, stereo matching Method, UniquenessRatio, TargetBrightness, ShadowingThreshold.
In order to benefit from the unlimited measurement range of PatchMatch the new flag FullWidth has been introduced which always enforces rectified images to have maximal width, regardless of the width of the stereo matching AOI.
The RenderPointMap parameters Near and Far did not work correctly in previous releases. If these are in use in your application please verify that they still produce the intended result with the repaired behaviour.
≥ 2.3.860¶
Changed tree structure
Removed /Parameters node and moved to / (see CUDA, Calibration, DefaultParameters, Physics, uEye)
Moved pattern parameters and pattern buffer information to /Calibration/Pattern
Placed camera nodes directly in /Cameras instead of /Camera/BySerialNo. /Cameras/ByEepromId is still present.
Changed default values of FlexView, stereo matching Method, UniquenessRatio for N35, X36 and XR36 camera models.
Changed default value of PixelClock for N20, N30, N35 models.
Changed default value of TargetBrightness.
Reduced single-flash time limit on X-series to 120ms for faster recovery of hardware limiting circuit
≥ 2.3.691¶
The NxLibCommand now creates a temporary execution slot on construction. Code that directly accesses nodes below the Execute node will no longer work. You can use the new slot member method of the NxLibCommand class to get a reference to a command’s execution slot.
The NxLib headers now require C++11 by default. Define the macro
NXLIB_CPP_COMPATIBILITY_MODE
for compatibility with older versions.
≥ 2.3.600¶
Calibration format has been upgraded to 9/10 to support an additional rotation offset in recalibration (see this topic for more information). Modifying the calibration of a camera with this version or newer will render a camera unusable in earlier SDK versions. The device then needs to be recalibrated with an earlier SDK if necessary.
Upgrading may result in slight changes in the active calibration data, because the new eeprom format will cast the values into 32 bit floating point values, which results in lower precision. The internal stored calibration on the camera’s eeprom however will not change. It only changes when the active calibration is stored via the command StoreCalibration.
≥ 2.3.31¶
Delayed pattern point refinement was removed and replaced with a new method that works without a camera calibration. Therefore the interface of the Refinement parameter for CollectPattern was changed and the parameter value “Delayed” will no longer work.
≥ 2.3.30¶
By default, CollectPattern now uses full resolution images in order to be able to detect small patterns in high resolution images. This can degrade performance. The old behavior can be restored with the Downsample parameter.
≥ 2.2.147¶
NxView now shows update notifications. To get information on available versions, it makes an HTTP request to http://update.ensenso.com. This request contains the content of the Version node as JSON. For more details on the request and the data that is sent, you can inspect the source code of NxView that is delivered with the SDK.
≥ 2.2.135¶
This is an important firmware update for X-series cameras.
This update introduces stricter flash time limits for X-series projectors which will prevent damage to the projection electronics in certain operation modes. This is an important update for the projector firmware. It can cause your application to run slower when using software triggered operation or cause frames without projection pattern when using hardware trigger when triggering faster than the reduced flash limit. Please review the reduced flash time limits under the X-series Illumination topic and contact the technical support if you are unsure if this affects your application.
≥ 2.2¶
CollectPattern now updates the global pattern data by default, when DecodeData is enabled. You can explicitly disable this with the UpdateGlobalPatternData parameter.
The Parameters/Pattern/GridSize node was removed, because it was never used in any command.
≥ 2.1¶
Removed the dependency on the Wibu CodeMeter runtime for NxLib on Linux.
The structure of the Debug node was changed which might lead to runtime errors when accessing nodes only present in versions 2.0 and earlier.
The text format of the debug messages returned by nxLibGetDebugMessages changed.
The MeasurementVolume node has been split into MeasurementVolume and ScaledMeasurementVolume nodes, which leads to slightly narrower volume outputs in the existing MeasurementVolume node.
The Calibrate command was changed. The Cameras parameter is now required and used to specify the type of the calibration that is performed.
The optimization goal of CalibrateHandEye was changed from reprojection error to euclidean distances of the pattern pose estimates. Therefore the output node ReprojectionError has been renamed to Residual. This will usually yield lower euclidean errors than the previous version and result in an overall better calibration result.
The output format of camera distortion coefficients has been changed from an array to named parameters. Writing the old array parameter is still supported, but the output is generated in the new format which is incompatible with older NxLib versions when transferring calibration data e.g. in json files.
The structure of the NxLib setting files changed. In particular, NxView will lose any cached settings after upgrading. If you want to recover these settings, you can copy them from the cache directory in the installation directory of the SDK and apply them in NxView.
≥ 2.0¶
The structure of the camera Status node was changed.
The structure of the Sensor node was changed for N10 cameras. It now contains separate nodes for the left and right sensor.
The structure of the Output node was changed to allow more flexible configurations.
The EthernetConfiguration command now requires the Configuration parameter.
The StoreCalibration command now requires the specification of either the Link or the Calibration parameter.
The NxLibRemote TCP protocol changed. It is therefore not possible to connect a version 1.x NxLibRemote to a version 2.x NxLib or vice versa. This also means that a version 2.x NxTreeEdit cannot connect to older versions of the NxLib.
≥ 1.9.153¶
Wibu CodeMeter runtime is needed for loading the NxLib library; the EnsensoSDK installer will automatically install a minimal version of the CodeMeter runtime.
Refinement parameter needs to be specified when using CollectPattern to collect patterns for camera calibration.
Restructured pattern buffer API:
Return format of GetPatternBuffers was changed (note that SetPatternBuffers still accepts the earlier format of GetPatternBuffers)
ReducePatterns has been dropped and should be replaced by using a Filter with the Reduce parameter, e.g. in FilterPatternBuffer or VisualizePatternBuffer.
Global PatternCount and MonocularPatternCount nodes have been dropped and need to be replaced by PatternCount and StereoPatternCount nodes in the respective buffer view.
CollectPattern Result node structure changed.
≥ 1.9.0¶
Support for Debian 6 (Squeeze) and older has been dropped.
Support for Windows XP has been dropped.
Pipelining of stereo geometry: Scaling, Binning and AOI parameters are internally stored on the Rectified and DisparityMap binary nodes. This guarantees that multi threaded processing and parameter modifications always deliver correct depth data. Changes to Scaling, Binning and AOI parameters will only take effect when the affected processing steps have been repeated.
≥ 1.3.167¶
A bug fix in the communication interface between NxLib and NxLibRemote required us to make an incompatible change in the TCP protocol. You thus cannot establish TCP connections between NxLib versions ≥1.3.167 and NxLibRemote versions ≤1.3.166.
≥ 1.3.146¶
When using the Recalibrate parameter of EstimatePatternPose the eeprom format of the calibration data will be upgraded. The respective camera will then not be compatible anymore with SDK versions prior to 1.3.146.
≥ 1.3.0¶
NxLibItem class operator[] now returns const objects with immutable path. This will avoid accidentally setting the path instead of the item value on temporary objects. Trying to set the path on temporaries will now generate compile-time errors. You will encounter compile-time errors where the assignment with operator= changed the path of the left hand side temporary object.
Upgrade of uEye Driver¶
To Version
≥ 4.80¶
uEye driver 4.80 contains improved blacklevel parametrization of the image sensors. The saved exposure and blacklevel values might therefore need to be updated.
≥ 4.72¶
uEye driver 4.72 fixes communication issues on internal camera buses. This reduces the number of reported image transfer failures. The release also fixes an issue causing error UEyeApiError -1 when opening the camera the first time on certain system configurations.
≥ 4.70¶
Due to a change in GPIO parametrization in uEye Driver 4.70 N10 cameras will not work with EnsensoSDK versions 1.3.167 and below when running uEye drivers 4.70 and newer. Please upgrade to EnsensoSDK version 1.3.170 or higher to run N10 cameras on uEye driver releases 4.70 or newer.
≥ 4.62¶
uEye driver 4.62 fixes a bug which could cause the sensor FPGA to enter a bad state making a camera reboot necessary.
≥ 4.61¶
uEye Driver 4.61 fixed an important issue with black level parametrization on the GigE camera image sensors. This yields huge improvements in image brightness at the same exposure times. You should therefore check and revise exposure times if you have been using fixed exposure settings in your application.
Update Checks¶
In order to provide upgrade information to users a simple and fully open source update checking mechanism is integrated in the GUI application NxView only. The source code of NxView is installed alongside the EnsensoSDK. Note that no other binary except for the NxView GUI will contact external servers. NxView sends the content of the Version node to the server at update.ensenso.com, and the server answers with a json struct of available updates. The update server can keep track of the version requests and IP addresses in order to keep simple anonymous statistics about the distribution of installed versions across the EnsensoSDK user base.
Note
Please be aware that the update communication, firmware and calibration downloading functions in NxView are implemented over unencrypted HTTP connections in order to simplify the library dependencies of NxView and allow for easier self-compilation of NxView.
Disabling Update Checks
If you do not want NxView to perform the update checks due to privacy concerns or to prevent upgrade information popups at your customer site you can disable updates either from the NxView GUI (Help->Check for Updates) or by creating/modifying the NxView configuration file directly. The NxView configuration file is located at <Installation directory>/settings/NxView/settings.json and should provide the node /Update/Prohibited with value true, e.g. {“Update”:{“Prohibited”:true}}.
Note
Note that disabling the update notifications in NxView will prevent the popup of notifications only, whereas the /Update/Prohibited setting in the NxView configuration file will prevent update checking itself.