===================
Important notes
---------------
* This will be the last release that supports Python 3.7.
* This will be the last release that supports macOS 10.15.
ouster_viz
----------
* Added point cloud accumulation support
* Added an ``PointViz::fps()`` method to return the operating frame rate as a ``double``
ouster_client
-------------
* [BREAKING] Updates to ``sensor_info`` include:
* new fields added: ``build_date``, ``image_rev``, ``prod_pn``, ``status``, ``cal`` (representing the value stored in the ``calibration_status`` metadata JSON key), ``config`` (representing the value of the ``sensor_config`` metadata JSON key)
* the original JSON string is accessible via the ``original_string()`` method
* The ``updated_metadata_string()`` now returns a JSON string reflecting any modifications to ``sensor_info``
* ``to_string`` is now marked as deprecated
* [BREAKING] The RANGE field defined in `parsing.cpp`, for the low data rate profile, is now 32 bits wide (originally 16 bits.)
* Please note this fixes a SDK bug. The underlying UDP format is unchanged.
* [BREAKING] The NEAR_IR field defined in `parsing.cpp`, for the low data rate profile, is now 16 bits wide (originally 8 bits.)
* Plase note this fixes a SDK bug. The underlying UDP format is unchanged.
* [BREAKING] changed frame_id return size to 32 bits from 16 bits
* An array of per-packet timestamps (called ``packet_timestamp``) is added to ``LidarScan``
* The client now retries failed requests to an Ouster sensor's HTTP API
* Increased the default timeout for HTTP requests to 40s
* Added FuSA UDP profile to support Ouster FW 3.1+
* Improved ``ScanBatcher`` performance by roughly 3x (depending on hardware)
* Receive buffer size increased from 256KB to 1MB
* [bugfix] Fixed an issue that caused incorrect Cartesian point computation in the ``viz.Cloud`` Python class
* [bugfix] Fixed an issue that resulted in some ``packet_format`` methods returning an uninitialized value
* [bugfix] Fixed a libpcap-related linking issue
* [bugfix] Fixed an eigen 3.3-related linking issue
* [bugfix] Fixed a zero beam angle calculation issue
* [bugfix] Fixed dropped columns issue with 4096x5 and 2048x10
ouster-cli
----------
* Added ``source <FILE> slam`` and ``source <FILE> slam viz`` commands
* All metadata CLI options are changed to ``-m/--metadata``
* Added discovery for FW 3.1+ sensors
* Set signal multiplier by default in sensor/SOURCE sensor config
* use ``PYBIND11_MODULE`` instead of deprecated module constructor
* remove deprecated == in pybind for ``.is()``
* [bugfix] Fix report of fragmentation for ouster-cli pcap/SOURCE pcap info
* [bugfix] Fixed issue regarding windows mDNS in discovery
* [bugfix] Fixed cli pcap recording timestamp issue
* [BREAKING] CSV output ordering switched
ouster.sdk
----------
* ``ouster-mapping`` is now a required dependency
* [BREAKING] change the ``ouster.sdk.viz`` location to the ``ouster.viz``
package, please update the references if you used ``ouster.sdk.viz`` module
* [bugfix] Fixed Windows pcap support for files larger than 2GB
* [bugfix] Fixed the order of ``LidarScan``'s ``w`` and ``h`` keyword arguments
* [bugfix] Fixed an issue with ``LidarPacket`` when using data recorded with older versions of Ouster Studio
Known issues
------------
* The dependency specifier for ``scipy`` is invalid per PEP-440
* ``get_config`` always returns true
* Repeated CTRL-C can cause a segmentation fault while visualizing a point cloud
20230710
========
* Update vcpkg ref of build to 2023-02-24
ouster_osf
----------
* Add Ouster OSF C++/Python library to save stream of LidarScans with metadata
ouster_client
-------------
* Add ``LidarScan.pose`` with poses per column
* Add ``_client.IndexedPcapReader`` and ``_client.PcapIndex`` to enable random
pcap file access by frame number
* [BREAKING] remove ``ouster::Imu`` object
* [BREAKING] change the return type of ``ouster::packet_format::frame_id`` from ``uint16_t`` to ``uint32_t``
* [BREAKING] remove methods ``px_range``, ``px_reflectivity``, ``px_signal``, and ``px_ambient`` from ``ouster::packet_format``
* Add ``get_field_types`` function for ``LidarScan``, from ``sensor_info``
* bugfix: return metadata regardless of ``sensor_info`` status field
* Make timeout on curl more configurable
* [BREAKING] remove encoder_ticks_per_rev (deprecated)
ouster_viz
----------
* [BREAKING] Changed Python binding for ``Cloud.set_column_poses()`` to accept ``[Wx4x4]`` array
of poses, column-storage order
* bugfix: fix label re-use
* Add ``LidarScan.pose`` handling to ``viz.LidarScanViz``, and new ``T`` keyboard
binding to toggle column poses usage
ouster_pcap
-----------
* bugfix: Use unordered map to store stream_keys to avoid comparison operators on map
Python SDK
----------
* Add Python 3.11 wheels
* Retire simple-viz for ouster-cli utility
* Add default ? key binding to LidarScanViz and consolidate bindings into stored definition
* Remove pcap-to-csv for ouster-cli utility
* Add validator class for LidarPacket
ouster-cli
----------
This release also marks the introduction of the ouster-cli utility which includes, among many features:
* Visualization from a connected sensor with automatic configuration
* Recording from a connected sensor
* Simultaneous record and viz from a connected sensor
* Obtaining metadata from a connected sensor
* Visualization from a specified PCAP
* Slice, info, and conversion for a specificed PCAP
* Utilities for benchmarking system, printing system-info
* Discovery which indicates all connected sensors on network
* Automatic logging to .ouster-cli
* Mapping utilities
[20230403]
==========
* Default metadata output across all functionality has been switched to the non-legacy format
ouster_client
-------------
* Added a new method ``mtp_init_client`` to init the client with multicast support (experimental).
* the class ``SensorHttp`` which provides easy access to REST APIs of the sensor has been made public
under the ``ouster::sensor::util`` namespace.
* breaking change: get_metadata defaults to outputting non-legacy metadata
* add debug five_word profile which will be removed later
* breaking change: remove deprecations on LidarScan
ouster_viz
----------
* update viz camera with other objects in draw
ouster_pcap
-----------
* add seek method to PcapReader
* add port guessing logic
python
------
* introduce utility to convert nonlegacy metadata to legacy
* use resolve_metadata to find unspecified metadata for simple-viz
* remove port guessing logic in favor of using new C++ ouster_pcap port guessing functionality
* add soft-id-check to skip the init_id/sn check for lidar_packets with metadata
Numerous changes to SimpleViz and LidarScanViz including:
* expose visible in viz to Python
* introduce ImageMode and CloudMode
* bugfix: remove spurious sqrt application to autoleveled images
[20230114]
==========
ouster_client
--------------
* breaking change: signal multiplier type changed to double to support new FW values of signal
multiplier.
* breaking change: make_xyz_lut takes mat4d beam_to_lidar_transform instead of
lidar_origin_to_beam_origin_mm double to accomodate new FWs. Old reference Python implementation
was kept, but new reference was also added.
* address an issue that could cause the processed frame being dropped in favor or the previous
frame when the frame_id wraps-around.
* added a new flag ``CONFIG_FORCE_REINIT`` for ``set_config()`` method, to force the sensor to reinit
even when config params have not changed.
* breaking change: drop defaults parameters from the shortform ``init_client()`` method.
* added a new method ``init_logger()`` to provide control over the logs emitted by ``ouster_client``.
* add parsing for new FW 3.0 thermal features shot_limiting and thermal_shutdown statuses and countdowns
* add frame_status to LidarScan
* introduce a new method ``cartesianT()`` which speeds up the computation of point projecion from range
image, the method also can process the cartesian product with single float precision. A new unit test
``cartesian_test`` which shows achieved speed up gains by the number of valid returns in lidar scan.
* add ``RAW_HEADERS`` ChanField to LidarScan for packing headers and footer (alpha version, may be
changed/removed without notice in the future)
python
------
* breaking change: drop defaults parameters of ``client.Sensor`` constructor.
* breaking change: change Scans interface Timeout to default to 1 second instead of None
* added a new method ``init_logger()`` to provide control over the logs emitted by ``client.Sensor``.
* add ``client.LidarScan`` methods ``__repr__()`` and ``__str__()``.
* changed default timeout from 1 seconds to 2 seconds
ouster_viz
----------
* add ``SimpleViz.screenshot()`` function and a key handler ``SHIFT-Z`` to
save a screenshot. Can be called from a client thread, and executes
asyncronously (i.e. returns immediately and pushes a one off callback
to frame buffer handlers)
* add ``PointViz.viewport_width()`` and ``PointViz.viewport_height()`` functions
* add ``PointViz.push/pop_frame_buffer_handler()`` to attach a callbacks on
every frame draw update that calls from the main rendering loop.
* add ``SHIFT-X`` key to SimpleViz to start continuous saving of screenshots
on every draw operation. (good for making videos)
* expose ``Camera.set_target`` function through pybind
ouster-sdk
----------
* Moved ouster_ros to its own repo
* pin ``openssl`` Conan package dependency to ``openssl/1.1.1s`` due to
``libtins`` and ``libcurl`` conflicting ``openssl`` versions
[20220927]
==========
ouster_client
--------------
* fix a bug in longform ``init_client()`` which was not setting timestamp_mode and lidar_mode correctly
[20220826]
==========
* drop support for buliding C++ libraries and Python bindings on Ubuntu 16.04
* drop support for buliding C++ libraries and Python bindings on Mac 10.13, Mac 10.14
* Python 3.6 wheels are no longer built and published
* drop support for sensors running FW < 2.0
* require C++ 14 to build
ouster_client
--------------
* add CUSTOM0-9`` ChanFields to LidarScan object
* fix parsing measurement status from packets: previously, with some UDP profiles, higher order bits
could be randomly set
* add option for EIGEN_MAX_ALIGN_BYTES, ON by default
* use of sensor http interface for comms with sensors for FW 2.1+
* propogate C++ 17 usage requirement in cmake for C++ libraries built as C++17
* allow vcpkg configuration via environment variables
* fix a bug in sensor_config struct equality comparison operator
ouster_viz
----------
* clean up GL context logic to avoid errors on window/intel UHD graphics
python
------
* windows extension modules are now statically linked to avoid potential issues with vendored dlls
ouster_ros
----------
* drop ROS kinetic support
* switch from nodes to nodelets
* update topic names, group under single ros namespace
* separate launch files for play, replay, and recording
* drop FW 1.13 compatibility for sensors and recorded bags
* remove setting of EIGEN_MAX_ALIGN_BYTES
* add two new ros services /ouster/get_config and /ouster/set_config (experimental)
* add new timestamp_mode TIME_FROM_ROS_TIME
* declare PCL_NO_PRECOMPILE ahead of all PCL library includes
[20220608]
==========
ouster_client
-------------
* change single return parsing for FW 2.3.1
python
------
* single return parsing for FW 2.3.1 reflects change from ouster_client
[20220504]
==========
* update supported vcpkg tag to 2022.02.23
* update to manylinux2014 for x64 linux ``ouster-sdk`` wheels
* Ouster SDK documentation overhaul with C++/Python APIs in one place
* sample data updated to firmware 2.3
ouster_client
-------------
* fix the behavior of ``BeamUniformityCorrector`` on azimuth-windowed data by ignoring zeroed out
columns
* add overloads in ``image_processing.h`` to work with single-precision floats
* add support for new ``RNG19_RFL8_SIG16_NIR16`` single-return and ``RNG15_RFL8_NIR8`` low-bandwidth
lidar UDP profiles introduced in firmware 2.3
ouster_viz
----------
* switch to glad for OpenGL loading. GLEW is still supported for developer builds
* breaking change: significant API update of the ``PointViz`` library. See documentation for details
* the ``simple_viz`` example app and ``LidarScanViz`` utility have been removed. Equivalent
functionality is now provided via Python
* add basic support for drawing 2d and 3d text labels
* update to OpenGL 3.3
python
------
* fix a bug where incorrectly sized packets read from the network could cause the client thread to
silently exit, resulting in a timeout
* fix ``client.Scans`` not raising a timeout when using the ``complete`` flag and receiving only
incomplete scans. This could cause readings scans to hang in rare situations
* added bindings for the new ``PointViz`` API and a new module for higher-level visualizer utilities
in ``ouster.sdk.viz``. See API documentation for details
* the ``ouster-sdk`` package now includes an example visualizer, ``simple-viz``, which will be
installed on that path for the Python environment
ouster_ros
-----------
* support new fw 2.3 profiles by checking for inclusion of fields when creating point cloud. Missing
fields are filled with zeroes
[20220107]
==========
* add support for arm64 macos and linux. Releases are now built and tested on these platforms
* add support for Python 3.10
* update supported vcpkg tag to 2021.05.12
* add preliminary cpack and install support. It should be possible to use a pre-built SDK package
instead of including the SDK in the build tree of your project
ouster_client
-------------
* update cmake package version to 0.3.0
* avoid unnecessary DNS lookup when using numeric addresses with ``init_client()``
* disable collecting metadata when sensor is in STANDBY mode
* breaking change: ``set_config()`` will now produce more informative errors by throwing
``std::invalid_argument`` with an error message when config parameters fail validation
* use ``SO_REUSEPORT`` for UDP sockets on non-windows platforms
* the set of fields available on ``LidarScan`` is now configurable. See the new ``LidarScan``
constructors for details
* added ``RANGE2``, ``SIGNAL2`` and ``REFLECTIVITY2`` channel fields to support handling data from
the second return
* ``ScanBatcher`` will now parse and populate only the channel fields configured on the
``LidarScan`` passed to ``operator()()``
* add support for new configuration parameters: ``udp_profile_lidar``, ``udp_profile_imu`` and
``columns_per_packet``
* add udp ports, the new initialization id field, and udp profiles to the metadata stored in
the ``sensor_info`` struct
* ``sensor_info::name`` is now deprecated and will stop being populated in the future
* add methods to query and iterate over available ``LidarScan`` fields and field types
* breaking change: removed ``LidarScan::block`` and ``LidarScan::data`` members. These can't be
supported for different packet profiles
* the ``LidarScan::Field`` defniition has been moved to ``sensor::ChanField`` and enumerators have
been renamed to match the sensor user manual. The old names are still available, but deprecated
* deprecate accessing encoder values and frame ids from measurement blocks using ``packet_format``
as these will not be reported by the sensor in some future configurations
* add ``packet_frame_id`` member function to ``packet_format``
* add ``col_field`` member function to ``packet_format`` for parsing channel field values for an
entire measurement block
* add new accessors for measurement headers to ``LidarScan``, deprecating the existing ``header``
member function
* represent empty sensor config with an empty object instead of null in json representation of the
``sensor_config`` datatype
* update cmake package version to 0.2.1
* add a conservative socket read timeout so ``init_client()`` will fail with an error message when
another client fails to close a TCP connection (addresses 258)
* when passed an empty string for the ``udp_dest_host`` parameter, ``init_client()`` will now
configure the sensor using ``set_udp_dest_auto``. Previously, this would turn off UDP output on
the sensor, so any attempt to read data would time out (PR 255)
* fall back to binding ipv4 UDP sockets when ipv6 is not available (addresses 261)
ouster_pcap
-----------
* report additional information in the ``packet_info`` struct and remove separate ``stream_info``
API
* switch the default pcap encapsulation to ethernet for Ouster Studio compatibility (addresses 265)
ouster_ros
----------
* update ROS package version to 0.3.0
* allow setting the packet profile in ouster.launch with the ``udp_profile_lidar`` parameter
* publish additional cloud and image topics for the second return when running in dual returns mode
* fix ``os_node`` crash on shutdown due to Eigen alignment flag not being propogated by catkin
* update ROS package version to 0.2.1
* the ``udp_dest`` parameter to ouster.launch is now optional when connecting to a sensor
ouster_viz
----------
* the second CLI argument of simple_viz specifying the UDP data destination is now optional
* fixed bug in AutoExposure causing more points to be mapped to near-zero values
* add functionality to display text over cuboids
python
------
* update ouster-sdk version to 0.3.0
* improve heuristics for identifying sensor data in pcaps, including new packet formats
* release builds for wheels on Windows now use the VS 2017 toolchain and runtime (previously 2019)
* fix potential use-after-free in ``LidarScan.fields``
* update ouster-sdk version to 0.3.0b1
* return an error when attempting to initialize ``client.Sensor`` in STANDBY mode
* check for errors while reading from a ``Sensor`` packet source and waiting for a timeout. This
should make stopping a process with ``SIGINT`` more reliable
* add PoC bindings for the ``ouster_viz`` library with a simple example driver. See the
``ouster.sdk.examples.viz`` module
* add bindings for new configuration and metadata supported by the client library
* breaking change: the ``ChanField`` enum is now implemented as a native binding for easier interop
with C++. Unlike Python enums, the bound class itself is no longer sized or iterable. Use
``ChanField.values`` to iterate over all ``ChanField`` values or ``LidarScan.fields`` for fields
available on a particular scan instance
* breaking change: arrays returned by ``LidarPacket.field`` and ``LidarPacket.header`` are now
immutable. Modifying the underlying packet buffer through these views was never fully supported
* deprecate ``ColHeader``, ``LidarPacket.header``, and ``LidarScan.header`` in favor of new
properties: ``timestamp``, ``measurement_id``, ``status``, and ``frame_id``
* replace ``LidarScan`` with native bindings implementing the same API
* ``xyzlut`` can now accept a range image as an ndarray, not just a ``LidarScan``
* update ouster-sdk version to 0.2.2
* fix open3d example crash on exit when replaying pcaps on macos (addresses 267)
* change open3d normalization to use bound AutoExposure
[20210608]
==========
ouster_client
-------------
* update cmake package version to 0.2.0
* add support for new signal multiplier config parameter
* add early version of a C++ API covering the full sensor configuration interface
* increase default initialization timeout to 60 seconds to account for the worst case: waking up
from STANDBY mode
ouster_pcap
-----------
* ``record_packet()`` now requires passing in a capture timestamp instead of using current time
* work around libtins issue where capture timestamps for pcaps recorded on Windows are always zero
* add preliminary C++ API for working with pcap files containing a single sensor packet capture
ouster_ros
----------
* update ROS package version to 0.2.0
* add Dockerfile to easily set up a build environment or run nodes
* ``img_node`` now outputs 16-bit images, which should be more useful. Range image output is now in
units of 4mm instead of arbitrary scaling (addresses 249)
* ``img_node`` now outputs reflectivity images as well on the ``reflec_image`` topic
* change ``img_node`` topics to match terminology in sensor documentation: ``ambient_image`` is now
``nearir_image`` and ``intensity_image`` is now ``signal_image``
* update rviz config to use flat squares by default to work around `a bug on intel systems
<https://github.com/ros-visualization/rviz/issues/1508>`_
* remove viz_node and all graphics stack dependencies from the package. The ``viz`` flag on the
launch file now runs rviz (addresses 236)
* clean up package.xml and ensure that dependencies are installable with rosdep (PR 219)
* the ``metadata`` argument to ouster_ros launch file is now required. No longer defaults to a name
based on the hostname of the sensor
ouster_viz
----------
* update reflectivity visualization for changes in the upcoming 2.1 firmware. Add new colormap and
handle 8-bit reflectivity values
* move most of the visualizer code out of public headers and hide some implementation details
* fix visualizer bug causing a small viewport when resizing the window on macos with a retina
display
python
------
* update ouster-sdk version to 0.2.1
* fix bug in determining if a scan is complete with single-column azimuth windows
* closed PacketSource iterators will now raise an exception on read
* add examples for visualization using open3d (see: ``ouster.sdk.examples.open3d``)
* add support for the new signal multiplier config parameter
* preserve capture timestamps on packets read from pcaps
* first release: version 0.2.0 of ouster-sdk. See the README under the ``python`` directory for
details and links to documentation
[20201209]
==========
Changed
-------
* switched to date-based version scheme. No longer tracking firmware versions
* added a top-level ``CMakeLists.txt``. Client and visualizer should no longer be built
separately. See the README for updated build instructions
* cmake cleanup, including using custom "find modules" to provide better compatibility between
different versions of cmake
* respect standard cmake ``BUILD_SHARED_LIBS`` and ``CMAKE_POSITION_INDEPENDENT_CODE`` flags
* make ``ouster_ros`` easier to use as a dependency by bundling the client and viz libraries
together into a single library that can be used through catkin
* updated client example code. Now uses more of the client APIs to capture data and write to a
CSV. See ``ouster_client/src/example.cpp``
* replace callback-based ``batch_to_scan`` function with ``ScanBatcher``. See ``lidar_scan.h`` for
API docs and the new client example code
* update ``LidarScan`` API. Now includes accessors for measurement blocks as well as channel data
fields. See ``lidar_scan.h`` for API docs
* add client version field to metadata json, logs, and help text
* client API renaming to better reflect the Sensor Software Manual