All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Add
IMUInfoV1deserializer for O3R IMU data.
- Result buffers now auto-mapped to correct IDs on receive
- Add support for Python
3.14.0in Docker builds to avoid platform mis-match issue while installingifm3dpy - Re-enabled NumPy installation and support in the Docker images.
- ifm3d O3D3xx
configCommand now automatically creates missing applications - Fix
.debartifacts names to ensure a consistent naming scheme for releases - Fix missing Schema for the
O3R_RESULT_IMUbuffer_id
- Update build matrix: remove
l4tandubuntu:20.04, keepubuntu:22.04andubuntu:24.04 - Update Python matrix: remove
3.9and add3.14.0for bothlinuxandwindows
- Add a new
--resetNetworkSettingsflag to the CLI, resolving an issue where network settings were not reset as expected. - Add JSON pointer to
get_schema - Add ability to send
PCICcommands (Currently available: f command for sending external ODS egomotion data).
- Fix in device discovery command always tries to access devices at
192.168.0.69 - Resolve issue where ODS application buffers were not received
- [ifm3dpy] Remove
_run_cmdtoolentry point from metadata
- Fix in device discovery, device showing multiple times
- Fixed an issue in the Python bindings where log entry attributes were not exposed correctly due to repeated property names.
- Improve Deserialize usages by adding global
Deserialize - Support for accessing OVP8XX SealedBox
- Add code analysis using
clang-tidy,cppcheck,clang-format
- Parsing of multi-channel data (e.g. UNIT_VECTOR_ALL)
- Fix issue when there was no applications configured in the device
- Add fix to create a static library when
BUILD-SHARED_LIBS=OFF
- Replace
curlandxmlrpc-cwithcpp-httplib,tinyxml2and a customxmlrpcclient
- l4t based .deb packages
- Add struct
ODSExtrinsicCalibrationCorrectionV1in Deserialize module - Support for CMake 4.0
- Retrieval of
Buffers with multiple channels from Python - Fixed Python issues on docker container
- Update the CLI documentation
- Fixed service report download issue
- Fixed the ifm3dpy .deb install location
- Add
timestamp_nstoODSPolarOccupancyGridV1 - Switch from the system Python version to Python 3.13 for all docker images
- Added missing Python binding methods
- Added support for Python 3.13 and dropped support for Python
3.8.10 - Added support for Ubuntu
24.04and dropped support for Ubuntu18.04 - Add Deserialize module
- Add struct
ODSPolarOccupancyGridV1
- Add struct
- Added a fix in the Python binding to retrieve the application list correctly
- Add
set-temporary-ipsubcommand underdiscovercommand to set temporary IP to device which is in wrong sub-net
- Add new subcommands
appanddeviceunder import and export subcommands - The documentation about the different available
buffer_idhas been updated to provide the complete list for each compatible device. - add
O3R_ODS_RENDERED_ZONESbuffer_id - Add
ovp8xx,o3x1xxando3d3xxanddiscovercommands as a primary level subcommands to ifm3d command line interface - Add colored log output support on windows to differentiate between different log levels
- Use CLI11 library instead of cxxopts for ifm3d command line interface
- Added fix for
O3DandO3Rissues - Fixed a potential crash when requesting ALGO_DEBUG buffer on device which don't support it
- Fixed behaviour of CARTESIAL buffers
- Unification of shared libraries into
libifm3d, see the migration guide for details
- Updated
TOFInfoV3structure for exposure time, mode and imager
- Fix receiving frames with default format before PCIC p command has been acknowledged
- add
O3R_RESULT_JSON,O3R_RESULT_ARRAY2D,O3R_RESULT_IMUbuffer_ids
- Fix curl error from
SWUpdate
- release pipeline
- Python 3.12 builds
- Parsing of V3 chunks
- Ability to access V3 chunk metadata (see Frame::Metadata)
- Ability to access multiple chunks with the same id in a frame (see Frame::GetBuffer and Frame::GetBufferCount)
- O3R_RESULT_JSON and O3R_RESULT_ARRAY2D chunk ids
- Use .deb files in Dockerfile instead of building from sources
- Increase timeout for O3R set calls up to 15s
- Fix installation prefix issue from tools
- Add WebSockets++ third-party dependency using FetchContent_Declare
- Fix device discovery issue
- Docker deployment
- Add missing deserialize module to docker containers
- Fix data grabbing from diagnostic port
SWUpdatefix installing O3R updates from stdin- Fix compatibility for O3R devices with Firmware version below 1.1.x
- O3R.resolve_config unable to resolve leaf values
- O3R::Ports and O3R::Port now wrap internal errors in ifm3d::Error
- O3R add support for
SaveInitwith JSON pointers as arguments ifm3d::Errorcodes are now exposed to Python- Python bindings for ifm3d logging
NOTE : O3D and O3X support is currently experimental- Use at your own risk!.
- Add support for O3D3xx and O3X devices
- Extend Ports() to return app port
- Extend Port() to return information of given app port
- Updated cxxopts library to version 3.1.1 and used through
FetchContent
- Fixed the error reporting through
onErrorcallback
- Add environment variable
IFM3D_SWUPDATE_CURL_TIMEOUTfor curl transaction timeout during software update - Add Project description and links to PyPI page
- Add an example on how to use the deserializer module
- Release versions wrongly marked as +dirty
- Replaced glog with ifm3d::Logger, see the migration guide for details
- The JSON module has been moved from
devicetocommon. Update your includes accordingly: use#include <ifm3d/common/json.hppinstead of#include <ifm3d/device/json.hpp.
- Fix state of the FrameGrabber not being reset correctly after Stop() causing receive failures on subsequent Start()s
- Generate and distribute stubs with Python wheel package
- Add MAC address in ifm3d discover command output
- Fixed a crash in
FrameGrabberwhen the p command is called multiple times - Fixed potential crash when waiting for the future returned by
FrameGrabber::WaitForFrame()
- Increase network timeout for the
O3R::Set()call to 10 seconds
- Fixed potential crash during device discovery
- Fixed possible Segmentation fault when calling
FrameGrabber::Stop()directly afterFrameGrabber::Start() - Fixed typo in
RGBInfoV1,TOFInfoV4andTOFInfoV3:extrisic_optic_to_user->extrinsic_optic_to_user
- Fixed segmentation fault when assigning a
AsyncNotificationorAsyncErrorhandler while theFrameGrabberis not running - Added missing alias for
ifm3dpy.Errortoifm3dpy.device.Error - Fix device discovery requiring manual firewall rule on windows
- CI job for release of ifm3d
- Added
Frame::FrameCountto access the frame counter value - Added API to enable disable masking in
FrameGrabber
- Split the Python bindings into submodules, see the migration guide for details. Warning: this requires an update of existing codebases.
- Convert
SWUpdaterPython bindings naming tosnake_case, see the migration guide for details. Warning: this requires an update of existing codebases. FrameGrabber::Startnow returns a future resolving once theFrameGrabberis ready to receiveFrames
- Fix a bug that could cause the update process to fail with a hash mismatch error on certain network configurations
- Fix a bug preventing the
FrameGrabberfrom beingStarted after it was previouslyStopped - Fix a typo in the
transform_cell_center_to_uservariable (previously calledtransfor_cell_center_to_user). - Add missing Python binding for
O3R::ResolveConfig - Fix CMake targets for deserialize module
- Fix a bug that could result in an endless loop when receiving PCIC tickets
- Fix a crash when receiving PCIC data without any chunks
- Upgraded
nlohmann::jsonto version 3.11.2 - Removed JSON from the global namespace and moved
nlohmann::jsonto theifm3d::jsonnamespace
- Missing Python bindings for
O3R::PortandO3R::Ports CONFIDENCE_IMAGEimage is not requested automatically anymore unless it's required for generating the requested chunks
O3R::RebootToRecoveryto reboot supported O3R devices into recovery mode- Support for O3R recovery based updates
- Add
size()interface inifm3d::Buffer - Add Deserialize module
- Add struct
TOFInfoV3 - Add struct
TOFInfoV4 - Add struct
RGBInfoV1 - Add struct
ODSInfoV1 - Add struct
ODSOccupancyGridV1
- Add struct
- Data grabbing issue with ifm3dpy v1.1.0
- Change
FrameGrabber::Stopto non blocking call and now returnsstd::future<void> - Add
onErrorcallback for error reporting in streaming mode ofFramegrabber - Support for retrieving O3R diagnostics over XMLRPC
- Support for Python 3.11
- Support for Ubuntu 22.04
- Python binding:
FrameGrabber.sw_trigger()
XYZ_IMAGEcoordinates were actually ZXY instead of XYZ, this has been corrected.
- Auto closure of stale issue on GitHub
- Support for ODS schema
- Asynchronous notification support
- ifm3d and ifm3dpy documentation update
- Confidence buffer available for user
- Reflectivity buffer support in schema
- Distance noise buffer in float format
- Exception if buffer is not available in frame
- Extrinsic values
- Linux .deb file now depends on local installed libraries
- Example update showing usage of
FrameGrabberAPI - Visibility attribute added for ifm3d API
- Playground example for CMake users
- Python API renamed as per C++ changes
CameraO3D,CameraO3R,CameraO3Xrenamed asO3D,O3R,O3XrespectivelyCamerais renamed asLegacyDeviceCameraBaseis renamed asDeviceimage_idis renamed asbuffer_idImageis renamed asBuffercameramodule name changed todevice- Example list update
- Windows installer support for ifm3d
- ifm3dpy documentation update
- Software trigger support for the
framegrabbermodule - Software trigger error reporting on execution failure
- Asynchronous error support for
framegrabbermodule - Schema support for
framegrabbermodule - OSS compliance added
- Windows build instruction update
- Major architecture changes in the
framegrabbermodule Swupdatersupport for ifm3dpy- File(.swu) streaming for updating firmware through
swupdater - Multiple timestamp support in ifm3dpy
- O3R support for intrinsic calibration model type 2 (fisheye distortion model)
- Error code from 7 digit to 6 digit for
Liberror codes - Discover app for O3R devices
ifm3d::toolscompatibility for O3R devices
- Document for schema
- Document for O3X parameters
- Added functionality to get timestamp at which data is send over Ethernet
- Support for distance noise image for O3X Devices
- Support for latest O3X firmware (1.1.190)
- New Parameters for O3X device:
AbsDistStraylightThreshold,EnableStraylightCorrection,EnableNoiseEstimation,CompensateAmbientLightDrift,DistNoiseThreshold,EnableNoiseEstimation,RelAmpStraylightThreshold - Added the O3X FW 1.1.166 to the compatibility list
- Added compatibility list to software compatibility document
error_t::message()function to retrieve details about exceptions- Custom Python exception type:
ifm3dpy.Error - Added timeout option in
swupdatecommand of tools
- O3R FW detection
- The conversion of the camera frame is now a compile time option (Use
-DUSE_LEGACY_COORDINATES=ONto keep the old behaviour) O3RCamera::Port&O3RCamera::Portsmethods to get information (PCIC port & type) of connected portsO3RCamera::ResolveConfigconvenience method to access specific parts of the configuration
- HTTP 407 Proxy authentication required error detection
- Python 3.10 builds
- Docker image on DockerHub: ifmrobotics/ifm3d
- Docker image on GHCR: ghcr.io/ifm/ifm3d:latest
- Basic usage tutorials
- O3R broken
XYZImage - O3R
getInit()method - Use the correct base image for arm64 based containers
- Docker images now build ifm3d in Release mode
- O3R specific methods
stlImagemodule (Imagecontainer based on STL)- Removed copying of the tools header
- Example to upload docker container to O3R
- Basic C++ tutorials
- Support for the new JSON based XML-RPC interface
- Support for 2D image data
ifm3dpy_viewerPython example- Generate version based on last tag and commits since
- Split
Cameraimplementation into multiple classes IsO3D/IsO3X/IsO3Rreplaced byWhoAmI/AmIfunctions
- Basic O3R support
- Support for the compressed image format introduced for O3R
- Initial IPv4 Discovery in the ifm3d command line tool
- Hardcoded compiler flags for Linux
- Copy of the header files during CMake build
- Added clang format support for formatting
- Changed license headers to SPDX format
- Embedded third-party libraries Asio and cxxopts
- Removed boost from dependency list
- Support user defined port for
camera,fg,swupdatermodule- This enable ifm3d to connect to devices behind NAT router
- Added example for NTP to command line usage
- Added build jobs in GitHub actions
- Windows VS 2019
- Ubuntu 20.04
- Bugfixes
- #284 ifm3d compiling error at
swupdaterapp with VS2019 and Windows - #283 Imported target
ifm3d::imageincludes non-existent path/usr/include/opencv
- #284 ifm3d compiling error at
- Support for latest O3D3XX firmware (1.30.5309)
- Support for latest O3X firmware (1.0.156)
- Deprecated ROS-specific apt repositories
- Deprecated Python2 support
- Support for Ubuntu 20.04 Focal Fossa
- Packaged and released ifm3d as a Snap
- Added support for Ubuntu ARM64
- Added support for L4T (Linux for Tegra) JetPack 4.3 and 4.4
- Improved Windows build instructions
- Created GitHub Actions CI workflows
- Bugfixes:
- #190 - Added missing include for Windows build
- Reverted changes in 0.16.0 (
FrameGrabberUdp-- No viable path to UDP implementation in FW) - Bugfixes
- Issue with libcurl usage on 32bit targets
- Corrected minimum firmware version required for inverse intrinsics
- Corrected handling of spurious wakes in FrameGrabber
- Fixed
ComputeCartesianPython unit test to properly blank out invalid pixels - Changed
buildDockerfiles to use pip for NumPy/pytest - Fixed race condition in
PCICClientunit tests - Changed setup.py to honor the environment variables per the Windows installation instructions
- Updated installation documentation for Windows
- Created new
framegrabberudpmodule for consuming data over UDP interface
- Minor updates to allow for cross-compiling ifm3d for the O3D3XX
- PCIC timeout issue fixed
- Added Interface for getting json_model from O3D3xx devices.
- Fixes to how timeouts are handled in
swupdatemodule - Updated embedded JSON library to 3.6.1, single-header.
- New module:
swupdater-- utilities for updating camera firmware- Ported functionality from
swupdatecommand into its own library for programmatic consumption. - Updated certain semantics of the
swupdatecommand in thetoolsmodule to match those of the other ifm3dtoolscommands- Updated command line switch naming to match other ifm3d tools:
checksubcommand now invoked by-cor--checkrebootsubcommand now invoked by-ror--reboot
filesubcommand will now test for recovery and automatically reboot the device into recovery as needed.
- Updated command line switch naming to match other ifm3d tools:
- Ported functionality from
- Disabled FrameGrabber's
InverseIntrinsicParamSchematest due to suspected false failures. Test case will be investigated and re-opened in a future release. - Fixed issues with unit test scripts on Windows
- Fixed Windows build documentation
- Added
BUILD_SHARED_LIBSdefinition toglogto address issues with logging to STDERR in Windows binaries - Parameterized the CMake generator for easier building when multiple versions of MSVC are installed concurrently
- Added
- Honor semantics of CMake's
BUILD_SHARED_LIBSflag (ON by default). Setting to off will build and link against ifm3d modules as static libraries. - New module:
pybind11-- Python bindings for the C++ API
- Fixes to build infrastructure in support of windows unit tests
- Added support to retrieve the inverse intrinsic parameters from O3D3xx cameras
- Bugfix for #111, moved a log message in
framegrabbertoIFM3D_PROTO_DEBUGto keep noise level low when running an O3X for extended periods of time. - Changed flagging bad pixels to always be
0regardless of data type. Users could always consult the confidence image themselves and discriminate between a true0(not possible) and a bad pixel which they could then transform tonanor whatever other sentinel makes sense for their application.
- Bugfix for #103
header is not in the correct formatwhenmake checkis executed against FW 1.6.2114 - Bugfix for #107 Allows OpenCV module headers to be included in more than one translation unit thus avoiding violation of ODR.
- The
imageandopencvmodules now flags bad pixels at the driver-level
- Added a
jittersubcommand to ifm3d - Added support to retrieve the intrinsic parameters from O3D3xx cameras
- Adds support for setting the
IFM3D_SESSION_IDenvironment variable for establishing edit sessions with the camera using a known ID. - Sessions are now explicitly cancellable if the session ID is known.
- Some session management optimizations in
FromJSONwhich should result in incremental speedups in importing JSON configurations to the camera.
- Added build instructions how to switch between Release and Debug for Windows builds
- Added troubleshoot guide
- Added OpenCV module build instruction for windows
- Added minimum MSVC version requirement
- Added prerequisite packages list for building ifm3d
- Changed warning message in
framegrabberfromWARNINGtoIFM3D_TRACEseverity level - Updated
swupdatecommand with --check (recovery mode check) and -r (reboot to productive mode)
- Added support for the Ubuntu 18.04
- Added glog support in the CMake configuration files
- Removed some additional Boost dependencies
- Version number handling is now done in the CMake
projectcommand in the top-level CMakeLists.txt file - Dropped support for Ubuntu 14.04
- Increased CMake requirements to 3.5
- Increased compiler requirements to C++14
- Moved
examplesmodule into new project ifm3d-examples - Moved
viewersub-command out of the ifm3d project. This is to decrease the PCL dependencies (see Issue #42). A new project will be created in support of this viewer application: ifm3d-pcl-viewer - Updated JSON parsing library to 3.1.2
- By default,
pcicclientmodule is nowOFF. - Pixel-parsing framework has been significantly refactored. Sub-system
specific docs for image container implementers have been provided in the
docfolder. - Updated the
ImageBufferto conform to the new pixel-publishing architecture. - Initial implementation of an OpenCV-only (that is, no PCL) image container. This
is the
opencvmodule of theifm3dproject. - Added a
passwdsubcommand toifm3d
- Fixed a CMake regression regarding
-std=c++11flags passed to the compiler; surfaces on old versions of CMake, that is, in Ubuntu 14.04
- Patch to Windows build
- Better semantic versioning parsing of camera firmware
- Reverted Windows build changes due to how it broke packaging on Linux
- Illumination temperature is registered to frame data
- Added timestamping of image buffers
- Added support for setting/getting time on O3D cameras
- Added support for setting temporary application parameters. Please note, that if the device does not support this, it may "fail silently," so, a closed-loop check by the user is recommended.
- Added the PCIC client feature from
libo3d3xx - Added the ability to dump on-camera tracelogs including an interface to this
capability via the
tracesubcommand to theifm3dcommand-line tool.
- Added
swupdatesubcommand in the tools module - Added image module support to Windows build
- Added modules/tools/contrib with bash completions for ifm3d
- Windows build support (should have been a bump to 0.4.0)
- CMake build scripts now look for OpenCV in tools module since the image buffer header includes an OpenCV header
- Fixed regression on 14.04 - no compiler support for
std::put_time(#3)
- Support for NTP (on O3X)
- Added simple viewer sub-command to the
ifm3dcommand-line program. This viewer will render the point cloud and color each pixel with the normalized amplitude value registered to that point.
- Added software trigger support to O3X
- Added support for ifm Vision Assistant compatible import/export functions for O3X cameras
- Optimization to
ifm3dcommand line tool when passed either--helporversion. It will no longer try to connect to the device first, which makes this much more responsive and convenient for when no h/w is plugged in. - Added the ability to explicitly choose OpenCV 2.4 or OpenCV 3 at CMake/compile time.
- Modifications to enable the library to build under Ubuntu 14.04 (C++11 instead of C++14 and GCC 4.8. Big thanks to @aaronhoy at Fetch Robotics for his work
- Added a new build-time utility
ifm3d-dpkg-deps.py to auto-generate
Debian dependencies for the binary packages. This is needed because, for how
we are building multiple shared libraries across multiple Debian packages,
CMake's standard wrapper to
dpkg-shlibdepsdoes not work for us (for several reasons).
- Initial (alpha) release