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.
- Updated Cxxopts library to version 3.1.1 and used through FetchContent
- Add support for O3D3xx and O3X devices
- Fixed the error reporting through onError callback
- Add env variable IFM3D_SWUPDATE_CURL_TIMEOUT for curl transaction timeout during swupdate
- 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
- 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 FrameGrabber when 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 after FrameGrabber::Start()
- Fixed typo in RGBInfoV1, TOFInfoV4 and TOFInfoV3: extrisic_optic_to_user -> extrinsic_optic_to_user
- Fixed Segmentation fault when assigning a AsyncNotification or AsyncError Handler while the FrameGrabber is not running
- Added Missing alias for ifm3dpy.Error to ifm3dpy.device.Error
- Fix device discovery requiring manual firewall rule on windows
- CI job for release of ifm3d
- Added Frame::FrameCount to 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 SWUpdater python bindings naming to snake_case, see the migration guide for details. Warning: this requires an update of existing codebases.
FrameGrabber::Start
now returns a future resolving once the FrameGrabber is ready to receive Frames
- 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 FrameGrabber from being
Start
ed after it was previouslyStop
ped - Fix a typo in the
transform_cell_center_to_user
variable (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::json to version 3.11.2
- Removed json from the global namespace and moved nlohmann::json to the ifm3d::json namespace
- Missing python bindings for
O3R::Port
andO3R::Ports
- CONFIDENCE_IMAGE image is not requested automatically anymore unless it's required for generating the requested chunks
O3R::RebootToRecovery
to reboot supported O3R devices into recovery mode- Support for O3R recovery based updates
- Add size() interface in ifm3d::Buffer
- Add Deserialize module
- Add struct TOFInfoV3
- Add struct TOFInfoV4
- Add struct RGBInfoV1
- Add struct ODSInfoV1
- Add struct ODSOccupancyGridV1
- Data grabbing issue with ifm3dpy-v1.1.0
- Change
FrameGrabber::Stop
to non blocking call and now returnsstd::future<void>
- Add onError callback for error reporting in streaming mode of Framegrabber
- Support for retrieving O3R Diagnostics over XMLRPC
- Support for Python 3.11
- Support for Ubuntu 22.04
- Python binding: FrameGrabber.sw_trigger()
- XYZ_IMAGE coordinates 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 libs
- Example update showing usage of fg API
- Visibility attribute added for ifm3d API
- Playground example for cmake users
- Python API renamed as per C++ changes
- CameraO3D, CameraO3R, CameraO3X renamed as O3D,O3R,O3X respectively
- Camera is renamed as LegacyDevice
- CameraBase is renamed as Device
- image_id is renamed as buffer_id
- Image is renamed as Buffer
- Camera module name changed to Device
- Example list update
- Windows installer support for ifm3d
- ifm3dpy documentation update
- Software trigger support for the FrameGrabber module
- Software trigger Error Reporting on execution failure
- Async Error support for FrameGrabber module
- Schema support for FrameGrabber module
- OSS compliance added
- Windows build instruction update
- Major architecture changes in the FrameGrabber module
- Swupdater support 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 Lib error codes
- Discover app for O3R devices
- ifm3d::tools compatibility 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 swupdate document
- error_t::message() function to retrieve details about exceptions
- custom python exception type: ifm3dpy.Error
- Added timeout option in swupdate command of tools
- O3R FW detection
- The conversion of the camera frame is now a compile time option (Use
-DUSE_LEGACY_COORDINATES=ON
to keep the old behaviour) - O3RCamera::Port & O3RCamera::Ports methods to get information (pcic port & type) of connected ports
- O3RCamera::ResolveConfig convencience 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
- stlImage module (Image container 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_viewer python example
- Generate version based on last tag and commits since
- Split Camera implementation into multiple classes
- IsO3D/IsO3X/IsO3R replaced by WhoAmI/AmI functions
- 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 libs asio and cxxopt
- Removed boost from dependency list
- Support user defined port for camera, fg, swupdater module
- 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 swupdater app with VS2019 and Windows
- #283 Imported target "ifm3d::image" includes non-existent path "/usr/include/opencv"
- 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 F/W)
- Bugfixes
- Issue with libcurl usage on 32bit targets
- Corrected minimum firmware version required for inverse intrinsics
- Corrected handling of spurious wakes in FrameGrabber
- Fixed ComputeCartesian python unit test to properly blank out invalid pixels
- Changed
build
Dockerfiles to use pip for numpy/pytest - Fixed race condition in PCICClient unit tests
- Changed setup.py to honor the environment variables per the Windows installation instructions
- Updated installation documentation for Windows
- Created new
framegrabberudp
module 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
swupdate
module - Updated embedded JSON library to 3.6.1, single-header.
- New module: swupdater -- utilities for updating camera firmware
- Ported functionality from
swupdate
command into its own library for programmatic consumption. - Updated certain semantics of the
swupdate
command in thetools
module to match those of the other ifm3dtools
commands- Updated command line switch naming to match other ifm3d tools:
check
subcommand now invoked by-c
or--check
reboot
subcommand now invoked by-r
or--reboot
file
subcommand 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 InverseIntrinsicParamSchema test 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_LIBS
definition toglog
to 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_LIBS flag (ON by default). Setting to off will build and link against ifm3d modules as static libraries.
- New module: pybind11 -- Python bindings for the 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 framegrabber to IFM3D_PROTO_DEBUG to keep noise level low when running an O3X for extended periods of time.
- Changed flagging bad pixels to always be
0
regardless 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 tonan
or whatever other sentinel makes sense for their application.
- Bugfix for #103
header is not in the correct format
whenmake check
is executed against FW 1.6.2114 - Bugifx for #107 Allows OpenCV module headers to be included in more than one translation unit thus avoiding violation of ODR.
- The
image
andopencv
modules now flags bad pixels at the driver-level
- Added a
jitter
subcommand to ifm3d - Added support to retrieve the intrinsic parameters from O3D3xx cameras
- Adds support for setting the
IFM3D_SESSION_ID
environment 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
FromJSON
which 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 framegrabber from
WARNING
toIFM3D_TRACE
severity level - Updated swupdate command with --check (recovery mode check) and -r (reboot to productive mode)
- Added Support for the Ubuntu 18.04
- Added glog support in the cmake config files
- Removed some additional Boost dependencies
- Version number handling is now done in the cmake
project
command in the top-level CMakeLists.txt file - Dropped support for Ubuntu 14.04
- Increased cmake requirements to 3.5
- Increaded compiler requirements to C++14
- Moved
examples
module into new project ifm3d-examples - Moved
viewer
sub-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, pcicclient module is now
OFF
. - Pixel-parsing framework has been significantly refactored. Sub-system
specific docs for image container implementers have been provided in the
doc
folder. - Updated the
ImageBuffer
to conform to the new pixel-publishing architecture. - Initial implementation of an OpenCV-only (i.e., no PCL) image container. This
is the
opencv
module of theifm3d
project. - Added a
passwd
subcommand toifm3d
- Fixed a cmake regression regarding -std=c++11 flags passed to the compiler; surfaces on old versions of cmake, i.e., in Ubuntu 14.04
- Patch to windows build
- Better semver 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
trace
subcommand to theifm3d
command-line tool.
- Added
swupdate
subcommand 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
ifm3d
command-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
ifm3d
cmd line tool when passed either--help
orversion
. 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 stanard wrapper to
dpkg-shlibdeps
does not work for us (for several reasons).
- Initial (alpha) release