Releases: ouster-lidar/ouster-sdk
OusterSDK + Ouster CLI Release 0.15.0
- The performance of the
destaggermethod has been improved by two folds. - [BUGFIX] Fixed crash in SLAM automatic voxel size detection if the first scans have no valid range reading.
- Add pose optimize option to the ouster-cli command to refine the SLAM output.
- [BREAKING] Deprecate
PointViz::push_frame_buffer_handler()andPointViz::pop_frame_buffer_handler().
in C++ and Pyton in favor the new screenshot facilitiesget_screenshot(), save_screenshot(), and toggle_screen_recording(). - Switch to using
cartesianTas the defaultcartesianmethod implementation for improved performance. - Add roll camera movement to PointViz using 'Q' and 'E' keys.
- Add finer camera movement to PointViz when using SHIFT modifier for keys 'W', 'A','S','D','Q','E' '-' and '='.
- Repurpose the E key in the viz for roll camera motion. The images size can now be adjusted using 'I/SHIFT + I'.
- [BREAKING] Rename
window_coordinates_to_image_pixeltoviewport_coordinates_to_image_pixelin C++ and Python.
ouster_client/Python SDK
- Support opening CDR encoded MCAP files with BagPacketSource and BagScanSource and the CLI.
- [BUGFIX] Fix incorrect range check for LidarScan::complete when start > end.
- Add data_format::packets_per_frame() and data_format::valid_columns_per_frame().
- [BUGFIX] Fix error when decoding OSFs with columns_per_packet != 16.
- Add a new
save_trajectorycommand to dump the slam output to csv file (TUM format). - Add a new method
rotation_matrix_to_quaternionto convert a rotation matrix to a quaternion. - [BREAKING] Rename ouster.sdk.client to ouster.sdk.core.
- [BREAKING] Move get_config, set_config, Sensor, SensorHttp, SensorPacketSource, SensorClient, ClientError,
ClientOverflow, ClientTimeout from ouster.sdk.client to ouster.sdk.sensor. - Propogate
initial_poseto SlamEngine and Localization so the reported poses starts from the initial pose. - Add a new
filteroperation to the SDK API and CLI, which filters points based on their projected coordinates. - Ported
ScanSourceandopen_sourceto C++. - [BREAKING] Remove
MultiScanSourcemigrating functionality toScanSourcewhich yields List[Optional[LidarScan]]. - [BREAKING] Remove
PacketMultiSourcemigrating functionality toPacketSourcewhich yields Tuple[int, Packet]. - [BREAKING] Remove
SensorScanSource.get_sensor_info()in favor ofSensorScanSource.sensor_info. - [BREAKING] Deprecate
ScanSource.metadataandPacketSource.metadatain favor of*.sensor_info. - [BREAKING]
open_sourceor Scan/Packet source constructors throw if unsupported parameters are provided. - [BREAKING] Remove deprecated
pcap.Pcapsensor.Sensorandosf.Osfclasses. - [BREAKING] Deprecated
ScanSource.sensors_count. Use length ofScanSource.sensor_infoinstead. - [BREAKING] Remove
ScanSource.fieldsScanSource.field_typesScanSource.is_seekable - [BREAKING] Remove
completeandcycleoptions fromopen_source. Please check for completeness withLidarScan.complete()or cycle manually instead. - [BREAKING] Separate collation/single sensor streams in
open_sourceinto separatesensor_idx=intandcollate=bool. By default sensor_idx=-1 (all sensors) and collate=True (collate). - Added
open_packet_sourcefunction to open packet sources similar toopen_source. - [BREAKING] Deprecate
ouster.sdk.util.resolve_extrinsicsfor explicitly passing extrinsic file names to sources. - [BREAKING] Deprecate
ouster.sdk.sensor.util.build_sensor_configfor the same functionality already included in SensorScanSource/SensorPacketSource. - Pin
kiss-icpto1.2.2. - Remove
point-cloud-utilsas a dependency. - Add ability to set abitrary parameters via
extra_optionsin theSensorConfig. - Add support for arbitrary number of addresses per sensor in
SensorClient. - Add generic
destaggerto C++ API. - [BREAKING] Remove
ouster.sdk.core.FieldDTypeused in type annotations and replaced withtype. - [BREAKING] Remove
ouster.sdk.core.FieldTypesused in type annotations and replaced withList[ouster.sdk.coreFieldTypes]. - Add a new method
ls_showto view a set of LidarScans to the viz API. - Add python 3.13 support
- [BREAKING] Deprecate
auto_start_flagin favor ofoperating_mode. - [BREAKING] Deprecate
parse_configin favor ofparse_and_validate_config. - [BREAKING] Deprecate
ScanBatcher(size_t w, const sensor::packet_format& pf)in favor ofScanBatcher::ScanBatcher(const sensor_info&). - [BETA] Add
ouster.sdk.core.read_pointcloud()method to load X Y and Z from PLY and PCD files. - [BETA] Add
ouster.sdk.core.voxel_downsample()method to downsample pointclouds using a voxel grid. - Remove dependency on Point Cloud Utils.
- Support opening older ROS 2 bag files that use ouster_msgs/PacketMsg.
- [BUGFIX] Ensure the initial pose matrices are orthonormal before using them in the slam.
- [BREAKING]
open_sourcefield_namesargument now will cause the scan source to load no fields if provided an empty array instead of loading all fields. ProvideNoneto load all fields. - Add the
error_handleroption toopen_sourceandScanSourceOptions, which allows the user to provide a callback to handle error messages for some scan sources.
ouster_cli
- Add additional information on incomplete scans to
ouster-cli source ... stats. - Fix looping behavior of the viz in the CLI when a clip is present.
- The plumb command is now chainable and works with multiple sensors simultaneously.
- Add
--maximizeflag to the viz command to maximize the visualizer when launched. - Modify code to resolve metadata from bag path if
--metais not provided for rosbag files. - Add
--sensor-idxargument to source command to allow selecting a single sensor stream. - Add the ability save LidarScan frames as a series of png images when
.pngis specified as the output file forsavecommand. - Add the
--allow-major-version-mismatchoption to thesourcecommand to allow best-effort loading of OSF files that are not supported by the current SDK version.
ouster_osf
- Improve osf threading model.
- Add version to
infocommand output andReaderfor OSF files. - Add an optional error handler callback as an argument the
Readerclass constructor. - Support an optional error handler callback as an option for
OsfScanSource. OsfScanSourceandReadernow emit an error or warning if the major or minor version is not supported by the current SDK version.- [BREAKING] return an
ouster::util::versionfromOsfFile::version()instead of an integer.
ouster_viz
- [BUGFIX] Fix AOI label position on macOS.
- Update AOI to allow right click and release without mouse dragging to select a single point.
- [BREAKING] Modify
WindowCtx::normalized_coordinatesto operate in viewport coordinates rather than window coordinates. - [BREAKING] Modify
WindowCtx::window_coordinatesto operate in viewport coordinates rather than window coordinates and rename toWindowCtx::viewport_coordinates. - [BREAKING] Modify
Image::image_pixel_to_window_coordinatesto operate in viewport coordinates rather than window coordinates and rename toImage::image_pixel_to_viewport_coordinates. - Add RING coloring mode to
LidarScanViz. - Add rainbow color palette to
LidarScanViz. - Support (K, 3) and (K, 4) forms for RGB/RGBA key data for Clouds.
- Add screenshot and image recording features to PointViz that allow screenshot size independent of the window size.
- Add a new camera mode
LidarScanViz.CameraMode.FOLLOW_ROTATION_LOCKED. - Discard points with 0 range rather than show them at sensor origin.
- Allow flipping 2D images in
LidarScanVizwith CTRL+I. - Add
LidarScanViz.select_img_modeandLidarScanViz.select_cloud_modeto select specific fields to display.
Important announcements
- As of 0.13.0, the SDK is no longer compatible with firmware versions older than 2.1.0.
- Official SDK support for firmware versions 2.2 and 2.3 will end at the end of June, 2025.
- Update vcpkg ref of build to 2025.02.14.
Contributors
@akatumalla-ouster, Alekhya Katumalla
@chrisbayruns, Chris Bayruns
@diego-guridi , Diego Guridi
@yhao10, Hao Yuan
@kairenw, Kai Wong
@kkaly, Karthik Kalyanaraman
@matt-attack, Matthew Bries
@mtswisher, Michael Swisher
@bexcite, Pavlo Bashmakov
@celentes, Tim Talashok
@twslankard, Tom Slankard
@Samahu, Ussama Naal
New Contributors
- @boscosiu made their first contribution in #641
- @uilianries made their first contribution in #656
Acknowledgements
The Ouster SDK team is a small team, and we couldn't do what we do without dozens of tools and libraries produced by the open source community! We'd like to thank the folks contributing to libtins, kiss-icp, zeroconf, numpy, scipy, jsoncpp, eigen3, zlib, libpng, libcurl, Pillow, and the Pallets Project. Ouster SDK is also proudly developed on the Linux kernel with GNU tools. If your open source contribution is not mentioned here and you believe you should be acknowledged, please contact @twslankard, who will try to keep this...
OusterSDK + Ouster CLI Release 0.14.0
ouster_client/C++ SDK
- Jsoncpp fully removed for jsoncons
- [BREAKING] All the HTTP endpoint methods in the
SensorHttpImpclass now return astd::stringinstead of aJson::Valueobject. The result can be parsed with any json parser. - Add CMake logic for packaging c++ sdk in binary format when
-DBUILD_SHARED_LIBRARY=ONis enabled.
ouster_client/Python SDK
- Add a new command
localizeto perform localization and tracking within a SLAM-generated map of a given site. - Add
LidarScan.sensor_infoto store the relevantSensorInfofor each scan - [BREAKING] Deprecated
ScanBatcher::operator()(const uint8_t*, uint64_t, LidarScan&)forScanBatcher::operator()(const LidarPacket&, LidarScan&) - [BREAKING] Disabled
OUSTER_USE_EIGEN_MAX_ALIGN_BYTES_32by default to help avoid ABI mismatches - [BREAKING] Changed
SensorClientget_packetAPI to return packet in theClientEventrather than through reference parameters - Updated to Kiss ICP 1.1.0 version
- [BUGFIX] Fixed OSF failing to load scans saved in 4096 * 5 mode
- [BUGFIX] Fixed Python
client.transformandclient.dewarpmethods returning incorrect results due to ignoring column layout of input data - Refactored logging to remove spdlog API exposure
- Vendored spdlog in third party dependencies
- [BREAKING] Change
sensor_info.sntype from string to uint64_t - Support additional array types and formats for Cloud.set_xyz
- Added new
mask,reduceandclipScanSource operations to the SDK CLI and API - The
clipcommand can now specify which fields to be applied to and accepts unit - Add relevant methods from
packet_formattoLidarPacketandImuPacketclasses - Add
formatto eachPacketobject with the relevant packet format - Tolerate off-by-1-byte for bag files recorded using an older version of the ouster-ros driver
- Fix yaw axis to zero in the get_rot_matrix_to_align_to_gravity function
- [BUGFIX] Fix the
-coption in ouster-cliconfigcommand to set config from file
ouster_cli
- Add
ouster-cli source SENSOR set_static_ipcommand to set sensor static IPs. - Add
ouster-cli source SENSOR diagnosticscommand to download sensor diagnostic dumps. - [BREAKING] Merge the handling of
--extrinsics-fileouster-cli option into--extrinsicsoption. - [BREAKING] ouster-cli
--extrinsicsoption requires adding double qoutes for space separated values. - ouster-cli
--extrinsicsoption now acceptsidentityas a keyword for overrideng sensor extriniscs with identity. - ouster-cli
--extrinsicsoption now accepts the following additional formats besides the16numbers array format:--extrinsics X,Y,Z,R,PYfor position + euler angles.--extrinsics X,Y,Z,QX,QY,QZ,QWfor position + quaternion.
- Add cursor-driven AOI selection feature to 2d images in ouster-cli
vizcommand.
ouster_osf
- Introduce
ouster::osf::AsyncWriterto offload savingLidarScanas OSF to a background thread, improving CLI performance when saving OSF files. - Add the
ouster::osf::Encodertype, which allows parameterizing the OSF compression level. - Change the default OSF PNG encoder compression level to 1 from 4.
- [BREAKING]
ouster.sdk.osfno longer exports lower-level OSF API classes (such asosf.Reader.) ouster::osf::Writer::savenow throws if the resolution of aLidarScanbeing saved doesn't match what is specified in sensor info/metadata.- [BUGFIX] Fix incorrect
OsfScanSourcedata when reading from an OSF file containing empty or missing streams.
ouster_viz
SimpleViznow drops frames when necessary to keep up with a live data source (i.e. sensor.)- Add a map origin axis and label.
- Invoke frame buffer resize handlers added to
PointVizwhen GLFW's window resize event fires. - [BREAKING] Change
PointViz::window_coordinates_to_image_pixelso that it always returns a pixel location (even outside the image), which can be useful in some situations. - [BUGFIX] On screen display frame number starts at zero instead of one.
- [BUGFIX]
LidarScanViznow only creates view modes for PIXEL fields. - [BUGFIX] Use the last valid column pose as a
LidarScan's origin, instead of the first. - [BUGFIX] Limit number of keyboard shortcuts to toggle sensors from CTRL+1 to CTRL+9.
- [BUGFIX] Fix a key shortcut help rendering issue and improve consistency of key shortcut help.
Contributors
@akatumalla-ouster, Alekhya Katumalla
@chrisbayruns, Chris Bayruns
@diego-guridi , Diego Guridi
@yhao10, Hao Yuan
@kairenw, Kai Wong
@kkaly, Karthik Kalyanaraman
@matt-attack, Matthew Bries
@mtswisher, Michael Swisher
@bexcite, Pavlo Bashmakov
@celentes, Tim Talashok
@twslankard, Tom Slankard
@Samahu, Ussama Naal
Acknowledgements
The Ouster SDK team is a small team, and we couldn't do what we do without dozens of tools and libraries produced by the open source community! We'd like to thank the folks contributing to libtins, kiss-icp, zeroconf, numpy, scipy, jsoncpp, eigen3, zlib, libpng, libcurl, Pillow, and the Pallets Project. Ouster SDK is also proudly developed on the Linux kernel with GNU tools. If your open source contribution is not mentioned here and you believe you should be acknowledged, please contact @twslankard, who will try to keep this list up to date.
OusterSDK + Ouster CLI Release 0.13.1
Latest 20241023 / Python Ouster SDK v0.13.1
Important: as of 0.13.0, the SDK is no longer compatible with firmware versions older than 2.1.0.
- Add support for directly using IPv6 addresses for sensors in the CLI and in sensor clients.
- Typing '?' now displays the visualizer keyboard shortcuts in the visualizer window.
- Removed the
async_client_example.cppexample. - Un-deprecated
ScanBatcher::ScanBatcher(size_t, const packet_format&)to remove a warning. (But please useScanBatcher::ScanBatcher(const sensor_info&)instead.) - [BREAKING] Removed the
input_row_majorparameter from thedewarpfunction. (dewarpnow infers the array type.) - [BREAKING] Renamed
DEFAULT_HTTP_REQUEST_TIMEOUT_SECONDStoLONG_HTTP_REQUEST_TIMEOUT_SECONDS. - [BREAKING] Changed the default value of
LidarScanVizAccumulatorsConfig.accum_min_dist_numfrom1to0. - [BUGFIX] Fixed a visualizer glitch causing drawables not to render if added after a call to
PointViz::update()but beforePointViz::run()orPointViz::run_once(). - [BUGFIX] Fixed a visualizer crash when using
HIGHLIGHT_SECONDmode with single-return datasets. - [BUGFIX] Fixed an issue with the 2d images not updating when cycled during pause.
- [BUGFIX] Fixed a bug that the first scan pose it not identity when using slice slam command on a slam output osf file
- [BUGFIX] Re-introduce the RAW field option
Known Issues
- Using an unbounded slice (e.g. with
slice 100:during visualization can cause the source to loop back to the beginning (outside of the slice) when the source is a pcap file or an OSF saved with an earlier version of the SDK. - A race condition in
PointVizevent handers occasionally causes a crash or unexpected results.
Contributors
@akatumalla-ouster, Alekhya Katumalla
@chrisbayruns, Chris Bayruns
@diego-guridi , Diego Guridi
@yhao10, Hao Yuan
@kairenw, Kai Wong
@kkaly, Karthik Kalyanaraman
@matt-attack, Matthew Bries
@mtswisher, Michael Swisher
@bexcite, Pavlo Bashmakov
@celentes, Tim Talashok
@twslankard, Tom Slankard
@Samahu, Ussama Naal
Acknowledgements
The Ouster SDK team is a small team, and we couldn't do what we do without dozens of tools and libraries produced by the open source community! We'd like to thank the folks contributing to libtins, kiss-icp, zeroconf, numpy, scipy, jsoncpp, eigen3, zlib, libpng, libcurl, Pillow, and the Pallets Project. Ouster SDK is also proudly developed on the Linux kernel with GNU tools. If your open source contribution is not mentioned here and you believe you should be acknowledged, please contact @twslankard, who will try to keep this list up to date.

By Marshallhenrie - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=62515315
OusterSDK + Ouster CLI 2024 Q3 Release
Latest 20241004 / Python Ouster SDK v0.13.0
Important: as of 0.13.0, the SDK is no longer compatible with firmware versions older than 2.1.0.
ouster_osf
- Add full index of both receive and sensor timestamps to metadata
- Speed up opening of OSF files with index
- OSF now saves alert flags, thermal countdown and status, shot limiting countdown and status from
LidarScan. - [BUGFIX] Fix OSF being unable to load LidarScans containing only custom fields
- [BUGFIX] Fix OSF not flushed when the user pressed CTRL-C more than once
- [BUGFIX] Fix improper timestamps when saving OSF on MacOS(m-series) and Windows
- [BUGFIX] Fix an issue with destaggering images after modifying
SensorInfoin anOsfScanSource. - [BUGFIX] Fix an issue loading extrinsics from OSF metadata into a
SensorInfoinOsfScanSource. - [BREAKING] Remove
ChunksLayoutandChunkReffrom Python API.
ouster_client/Python SDK
- Add support for reading and writing ROS1 and ROS2 bag files
- Add new sensor client interface
ouster::sensor::SensorClientwhich supports multiple sensors as well as multiple sensors and IMU data on the same port - Add higher level sensor client interface ```ouster::sensor::SensorScanSource
which producesLidarScan`` s from multiple sensors - Add
ouster.sdk.client.SensorPacketSourcewhich receives packets from multiple sensors - Add support for multiple sensors to
ouster.sdk.sensor.SensorScanSource - Greatly reduced redundant HTTP API calls to the sensor during initialization
- Deserialize FLAGS fields in each profile by default
- Add support for IPv6 multicast
- Add
field_namesargument to each scan source and toopen_sourceto specify which fields to decode - Add metadata validation functionality
- Add vendored json library
- Improved multi sensor pcap reading
- Improve
ScanBatcherto releaseLidarScanas soon as they are completed ScanBatchernow adds alert flags, thermal countdown, and shot limiting countdown toLidarScan.- Use index to speed up
ouster-cli source .osf info - Use index to speed up slicing of indexed OSF sources when sliced immediately after the
sourcecommand - Add
LidarScan.get_first_valid_column_timestamp() - Add
crcandcalculate_crcmethods toouster::sensor::packet_formatfor obtaining or calculating (respectively) the CRC64 of a packet. scan_to_packetsnow creates packets with alert flags, thermal countdown and status, shot limiting countdown and status, and CRC64.- Add
ouster::pose_util::dewarpC++ function to de-warp aLidarScan(similar toouster.sdk.pose_utilin the Python API.) - Add a constructor
LidarScan(const ouster::sensor::sensor_info&). - Always use
nonstd::optionalinstead of drop-instd::optionalfrom https://github.com/martinmoene/optional-lite.git to reduce issues associated with mixing C++14 and C++17. - Add
w()andh()methods tosensor_infoin C++ andwandhproperties toSensorInfoin Python. - [BUGFIX] fix automatic UDP dest for FW 2.3 sensors.
- [BREAKING] Remove
ouster::make_xyz_lut(const ouster::sensor::sensor_info&). (Usemake_xyz_lut(const sensor::sensor_info& sensor, bool use_extrinsics)instead.) - [BREAKING] changed REFLECTIVITY channel field size to 8 bits. (Important - this makes the SDK incompatible with FW 2.0 and 2.1.)
- [BREAKING] Removed
UDPPacketSourceandBufferedUDPSource. - [BREAKING] Removed
ouster.sdk.util.firmware_version(hostname)please useouster.sdk.client.SensorHttp.create(hostname).firmware_version()instead - [BREAKING]
open_sourceno longer automatically finds and applies extrinsics fromsensor_extrinsics.jsonfiles. Use theextrinsicsargument instead to specify the path to the relevant extrinsics file instead. - [BREAKING] Deprecated
osf.Scans(...)for ``osf.OsfScanSource(...).single_source(0)```. - [BREAKING] Deprecated
client.Sensor(...)for ``client.SensorPacketSource(...).single_source(0)```. - [BREAKING] Deprecated
pcap.Pcap(...)for ``pcap.PcapMultiPacketReader(...).single_source(0)```. - [BREAKING] Deprecated
ScanBatcher::ScanBatcher(size_t, const packet_format&)forScanBatcher::ScanBatcher(const sensor_info&). - [FUTURE BREAKING] Removing all instances of jsoncpp's
Json::Valuefrom the public C++ API methods in favor ofstd::string.
ouster_viz
LidarScanViznow supports multi-sensor datasets.- Add Python callback registration methods for mouse button and scroll events from
PointViz. - Add Python and C++ callback registration methods for frame buffer resize events.
- Add
MouseButton,MouseButtonEvent, andEventModifierKeysenums. - Add methods
aspect_ratio,normalized_coordinates, andwindow_coordinatestoviz::WindowCtx. - Add method
window_coordinates_to_image_pixeltoviz::Image. (Seeviz_events_example.cppfor an example.) - Add
current_camera()method toPointViz. - [BREAKING]
SimpleVizno longer accepts aScansAccumulatorinstance and now accepts scan/map accumulation parameters as keyword args in its constructor. - [BREAKING]
ScansAccumulatoris split into several different classes:ScansAccumulator,MapAccumulator,TracksAccumulator, andLidarScanVizAccumulators. - [BREAKING] changed
PointVizmouse button callback to fire for both mouse button press and release events. - [BREAKING] changed
PointVizmouse button callback signature to use the new enums. - [BREAKING] removed
bool update_on_input()andupdate_on_input(bool)methods fromPointViz. - [BUGFIX] SimpleViz throws a 'generator already executing' exception.
ouster_cli
- Add support for reading and writing ROS1 and ROS2 bag files.
- Add support for working with multi scan sources.
- Add
--fieldsargument toouster-cli sourceto specify which fields to decode. - Add metadata validation utility.
- [BUGFIX] Program doesn't terminate immediately when pressing CTRL-C the first time when streaming from a live sensor.
- [BUGFIX] Fix some errors that appeared when running
ouster-cli util benchmark - [BREAKING]
sourceno longer automatically finds and applies extrinsics fromsensor_extrinsics.jsonfiles. Use the-Eargument instead to specify the path to the relevant extrinsics file instead. - [BREAKING] Moved raw recording functionality for BAG and PCAP to
ouster-cli source ... record_rawcommand. - [BREAKING] CLI plugins now need to handle a list of Optional[LidarScan] instead of a single LidarScan to support multi sources.
mapping
- Update KissICP version from 0.4.0 to 1.0.0.
- Add multi-sensor support.
Known issues
-
ouster-cli discover may not provide info for sensors using IPv6 link-local
networks on Python 3.8 or with older versions of zeroconf. -
ouster-cli when combining
slicecommand withvizthe program will
exit once iterate over the selected range of scans even when
the--on-eofoption is set toloop.- workaround: to have
vizloop over the selected range, first perform a
slicewithsave, then playback the generated file.
- workaround: to have
Contributors
@akatumalla-ouster, Alekhya Katumalla
@chrisbayruns, Chris Bayruns
@diego-guridi , Diego Guridi
@yhao10, Hao Yuan
@kairenw, Kai Wong
@kkaly, Karthik Kalyanaraman
@matt-attack, Matthew Bries
@mtswisher, Michael Swisher
@bexcite, Pavlo Bashmakov
@celentes, Tim Talashok
@twslankard, Tom Slankard
@Samahu, Ussama Naal
Acknowledgements
The Ouster SDK team is a small team, and we couldn't do what we do without dozens of tools and libraries produced by the open source community! We'd like to thank the folks contributing to libtins, kiss-icp, zeroconf, numpy, scipy, jsoncpp, eigen3, zlib, libpng, libcurl, Pillow, and the Pallets Project. Ouster SDK is also proudly developed on the Linux kernel with GNU tools. If your open source contribution is not mentioned here and you believe you should be acknowledged, please contact @twslankard, who will try to keep this list up to date.

By Marshallhenrie - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=62515315
OusterSDK + Ouster CLI 2024 Q2 Release
Latest 20240703 / Python Ouster SDK v0.12.0
Important: ouster-sdk installed from pypi now requires glibc >= 2.28.
ouster_client/Python SDK
-
Add support for adding custom fields to
LidarScans withadd_fieldanddel_field -
Added per-request timeout arguments to
SensorHttp -
Added sensor user_data to
sensor_info/SensorInfoand metadata files -
Removed
updated_metadata_string()andoriginal_string()fromsensor_info -
Added
to_json_string()tosensor_infoto convert asensor_infoto a non-legacy
metadata JSON string -
Unified Python and C++
PacketandPacketFormatclasses -
Added
validatefunction toLidarPacketandImuPacketto check for ID and size mismatches -
[BREAKING] LidarScan's width and height have been switched to size_t from ptrdiff_t in C++
-
Refactor metadata parsing
-
Add
get_versiontosensor_info/SensorInfoto retrieve parsed version information -
Add
get_product_infotosensor_info/SensorInfoto retrieve parsed lidar model information -
Raise an exception rather than throw an unrelated error when multiple viable metadata files are found for a given PCAP
-
Add ability to slice a scan source, returning a new sliced ScanSource
-
[BREAKING] Removed
hostnamein PythonSensorInfoandnamefrom C++sensor_info -
[BREAKING] Removed
udp_port_lidar,udp_port_imuandmodefrom C++sensor_info -
[BREAKING] Deprecated
udp_port_lidar,udp_port_imuandmodein PythonSensorInfo.
These fields now point to the equivalent fields inside ofSensorInfo::config. -
[BREAKING] Removed
colsandfrequencyfromLidarModein Python -
[BREAKING] Deprecated
dataandcapture_timestampfrom PythonPacket -
[BREAKING] Removed methods from Python
ImuPacketandLidarPacketclasses that simply wrappedPacketFormat -
[BREAKING] Removed
begin()andend()iterators ofLidarScanin C++ -
[BREAKING] Remove deprecated package stubs added in previous 0.11 release.
-
[BREAKING] Replaced integer backed
ChanFieldenumerations with strings. -
[BREAKING] Removed
CUSTOM0throughCUSTOM9ChanField enumerations. -
[BREAKING] Extra fields in sensor metadata are now ignored and discarded if saved from the resulting
sensor_info/SensorInfo -
[BUGFIX] Prevent last scan from being emitted twice for PCAP
-
[BUGFIX] Fix corrupted packets due to poor handling of fragmented packet drop in PCAPs
-
[BUGFIX] Fix possible crash when working with custom UDPProfileLidars
ouster_viz
-
Support viewing custom
LidarScanfields in viz -
Support viewing custom
LidarScan3 channel fields in viz as RGB -
[BUGFIX] Prevent OpenBLAS from using high amounts of CPU spin waiting
ouster_osf
-
Support saving custom
LidarScanfields to OSF files -
[BREAKING] OsfWriter now takes in an optional list of fields to save rather than a list of fields and ChanFieldTypes to cast to
ouster-cli
-
Added support for slicing using time to
ouster-cli source ... slice -
Add sensor
ouster-cli source ... userdatacommand to set and retrieve userdata on a sensor -
Add chainable
ouster-cli source ... statscommand -
Add chainable
ouster-cli source ... clipcommand to discard points outside a provided range -
Add
--rate maxoption to ``ouster-cli source ... viz``` -
Improve argument naming and descriptions for
ouster-cli source ... vizmap and accum options -
[BUGFIX] Prevent dropped frames from live sensors by consuming scans as fast as they come in rather than sleeping
mapping
- Move mapping into the sdk as
ouster.sdk.mapping - Better handle looping while mapping
- Improve automatic downsample voxel size calculation
other
- Updated VCPKG libraries to 2024.04.26
Known issues
- ouster-cli discover may not provide info for sensors using IPv6 link-local
networks on Python 3.8 or with older versions of zeroconf. - ouster-cli when combining
slicecommand withvizthe program will
exit once iterate over the selected range of scans even when
the--on-eofoption is set toloop.- workaround: to have
vizloop over the selected range, first perform a
slicewithsave, then playback the generated file.
- workaround: to have
Contributors
@akatumalla-ouster, Alekhya Katumalla
@chrisbayruns, Chris Bayruns
@yhao10, Hao Yuan
@kairenw, Kai Wong
@kkaly, Karthik Kalyanaraman
@matt-attack, Matthew Bries
@mtswisher, Michael Swisher
@bexcite, Pavlo Bashmakov
@celentes, Tim Talashok
@twslankard, Tom Slankard
@Samahu, Ussama Naal
Acknowledgements
The Ouster SDK team is a small team, and we couldn't do what we do without dozens of tools and libraries produced by the open source community! We'd like to thank the folks contributing to libtins, kiss-icp, zeroconf, numpy, scipy, jsoncpp, eigen3, zlib, libpng, libcurl, Pillow, and the Pallets Project. Ouster SDK is also proudly developed on the Linux kernel with GNU tools. If your open source contribution is not mentioned here and you believe you should be acknowledged, please contact @twslankard, who will try to keep this list up to date.

Public domain photo by Alan Kyker
OusterSDK + Ouster CLI 2024 Q1 Release
20240425 / Python Ouster SDK v0.11.0
Important notes
- Dropped support for python3.7
- Dropped support macOS 10.15
- This will be the last release that supports Ubuntu 18.04.
- Moved all library level modules under
ouster.sdk, this includesouster.client,ouster.pcap
ouster.osf. So the new access name will beouster.sdk.client,ouster.sdk.pcapand so on - [BREAKING] many of the
ouster-clicommands and arguments have changed (see below.) - [BREAKING] moved
configure_sensormethod toouster.sdk.sensor.utilmodule - [BREAKING] removed the
pcap_to_osfmethod.
examples
- Added a new
async_client_example.cppC++ example.
Python SDK
- Add support for python 3.12, including wheels on pypi
- Updated VCPKG libraries to 2023.10.19
- New
ScanSourceAPI:- Added new
MultiScanSourcethat supports streaming and manipulating LidarScan frames
from multiple concurrent LidarScan sources- For non-live sources the
MultiScanSourcehave the option to choose LidarScan(s) by index
or choose a subset of scans using slicing operation - The
MultiScanSourceinterface has the ability to fallback toScanSourceusing the
single_source(sensor_idx),ScanSourceinterface yield a single LidarScan on iteration
rather than a List - The
ScanSourceinterface obtained viasingle_sourcemethod supports same indexing and
and slicing operations as theMultiScanSource
- For non-live sources the
- Added a generic
open_sourcethat accepts sensor urls, or a path to a pcap recording
or an osf file - Add explicit flag
indexto index unindexed osf files, if flag is set toTruethe osf file
will be indexed and the index will be saved to the file on first attempt - Display a progress bar during index of pcap file or osf (if unindexed)
- Added new
- Improved the robustness of the
resolve_metadatamethod used to
automatically identify the sensor metadata associated with a PCAP source. - [bugfix] SimpleViz complains about missing fields
- [bugfix] Gracefully handle failed sensor connection attempts with proper error reporting
- [bugfix] Fix assertion error when using viz stepping on a live sensor
- [bugfix] Scope MultiLidarViz imports to viz commands
- [bugfix] LidarScan yielded with improper header/status
- [bugfix] OSF ScanSource fields property doesn't report the actual fields
- Removed
ouster.sdkx, theopen_sourcecommand is now part ofouster.sdkmodule - The
FLAGSfield is always added to the list fields of any source type by default. In case of a
dual return lidar profile then a secondFLAGS2will also be added.
mapping
- Updated SLAM API and examples.
- Added real time frame dropping capability to SLAM API.
- The
ouster-mappingpackage now usespoint-cloud-utilsinstead ofopen3d. - improved per-column pose accuracy, which is now based on the actual column timestamps
ouster-cli
- Many commands can now be chained together, e.g.
ouster-cli source <src> slam viz. - New
savecommand can output the result in a variety of formats. - Added
--tsoption for specifying the timestamps to use when saving an OSF
file. Host packet receive time is the default, but not all scan sources have
this info. Lidar packet timestamps can be used as an alternative. - Changed the output format of
ouster-cli discoverto include more information. - Added JSON format output option to
ouster-cli discover. - Added a flag to output sensor user data to
ouster-cli discover. - Update the minimum required version of
zeroconf. - Removed
python-magicpackage from required dependencies. - Made the output of
ouster-cli source <osf> infomuch more
user-friendly. (ouster-cli source <osf> dumpgives old output.) - [breaking] changed the argument format of the
slicecommand. - [breaking] removed the
--legacyand--non-legacyflags. - [breaking] removed the
ouster-cli mapping,ouster-cli osf,
ouster-cli pcap, andouster-cli sensorcommands. - [bugfix] return a nonzero exit code on error.
- [bugfix] fix an error that occurred when setting the IMU port using the
-ioption.
ouster_client
- Added a new buffered UDP source implementation
BufferedUDPSource. - The method
version_of_stringis marked as deprecated, useversion_from_string
instead. - Added a new method
firmware_version_from_metadatawhich works across firmwares. - Added support for return order configuration parameter.
- Added support for gyro and accelerometer FSR configuration parameters.
- [bugfix]
mtp_init_clientthrows a bad optional access. - [bugfix] properly handle 32-bit frame IDs from the
FUSA_RNG15_RFL8_NIR8_DUALsensor UDP profile.
ouster_osf
- [breaking] Greatly simplified OSF writer API with examples.
- [breaking] removed the
to_nativeandfrom_nativemethods. - Updated Doxygen API documentation for OSF C++ API.
- Removed support for the deprecated "standard" OSF file format. (The streaming
OSF format is still supported.) - Added
osf_file_modify_metadatathat allows updating the sensor info
associated with each lidar stream in an OSF file. - Warn the user if reading an empty or improperly indexed file.
ouster_viz
- Added scaled palettes for calibrated reflectivity.
- Distance rings can now be hidden by setting their thickness to zero.
- [bugfix] Fix some rendering issues with the distance rings.
- [bugfix] Fix potential flickering in Viz
Known issues
- ouster-cli discover may not provide info for sensors using IPv6 link-local
networks on Python 3.8 or with older versions of zeroconf. - ouster-cli when combining
slicecommand withvizthe program will
exit once iterate over the selected range of scans even when
the--on-eofoption is set toloop.- workaround: to have
vizloop over the selected range, first perform a
slicewithsave, then playback the generated file.
- workaround: to have
Contributors
@akatumalla-ouster, Alekhya Katumalla
@chrisbayruns, Chris Bayruns
@yhao10, Hao Yuan
@kairenw, Kai Wong
@kkaly, Karthik Kalyanaraman
@matt-attack, Matthew Bries
@mtswisher, Michael Swisher
@bexcite, Pavlo Bashmakov
@celentes, Tim Talashok
@twslankard, Tom Slankard
@Samahu, Ussama Naal
Acknowledgements
The Ouster SDK team is a small team, and we couldn't do what we do without dozens of tools and libraries produced by the open source community! We'd like to thank the folks contributing to libtins, kiss-icp, zeroconf, numpy, scipy, jsoncpp, eigen3, zlib, libpng, libcurl, Pillow, and the Pallets Project. Ouster SDK is also proudly developed on the Linux kernel with GNU tools. If your open source contribution is not mentioned here and you believe you should be acknowledged, please contact @twslankard, who will try to keep this list up to date.

Public domain photo by Alan Kyker
OusterSDK + Ouster CLI 2023 Q3 Release
20231031 / Python Ouster SDK v0.10.0
Important notes
- This release does not support Python 3.7 on macOS.
- This will be the last release that supports Python 3.7 for Linux and Windows.
- 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 adouble
ouster_client
- [BREAKING] Updates to
sensor_infoinclude:- new fields added:
build_date,image_rev,prod_pn,status,cal(representing the value stored in thecalibration_statusmetadata JSON key),config(representing the value of thesensor_configmetadata 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 tosensor_info to_stringis now marked as deprecated
- new fields added:
- [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 toLidarScan - 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
ScanBatcherperformance 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.CloudPython class - [bugfix] Fixed an issue that resulted in some
packet_formatmethods 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> slamandsource <FILE> slam vizcommands - 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_MODULEinstead 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-mappingis now a required dependency- [BREAKING] change the
ouster.sdk.vizlocation to theouster.viz
package, please update the references if you usedouster.sdk.vizmodule - [bugfix] Fixed Windows pcap support for files larger than 2GB
- [bugfix] Fixed the order of
LidarScan'swandhkeyword arguments - [bugfix] Fixed an issue with
LidarPacketwhen using data recorded with older versions of Ouster Studio
Known issues
- The dependency specifier for
scipyis invalid per PEP-440 get_configalways returns true- Repeated CTRL-C can cause a segmentation fault while visualizing a point cloud
Contributors
@bexcite, Pavlo Bashmakov
@Samahu, Ussama Naal
@chrisbayruns, Chris Bayruns
@kairenw, Kairen Wong
@mtswisher, Michael Swisher
@celentes, Tim Talashok
@akatumalla-ouster, Alekhya Katumalla
@yhao10, Hao Yuan
@twslankard, Tom Slankard
Acknowledgements
The Ouster SDK team is a small team, and we couldn't do what we do without dozens of tools and libraries produced by the open source community! We'd like to thank the folks contributing to libtins, kiss-icp, zeroconf, numpy, scipy, jsoncpp, eigen3, zlib, libpng, libcurl, Pillow, and the Pallets Project. Ouster SDK is also proudly developed on the Linux kernel with GNU tools. If your open source contribution is not mentioned here and you believe you should be acknowledged, please contact @twslankard, who will try to keep this list up to date.

Public domain photo by Alan Kyker
OusterSDK + Ouster CLI 2023 Q2 Release
20230710 / Python Ouster SDK v0.9.0
With this release we are adding a bunch of things that we've used internally at Ouster for some
time and we hope it will be useful to a broader set of users well.
Major things:
Ouster SDK Lifecycle Policies
Please checkout the details here for C++/Python versions, OSs and platforms future support.
Add Python 3.11 support
On all platforms macOS, Windows, Linux, which should get between ~15-25% performance boost to Ouster Python SDK
Ouster CLI (Python)
Command Line Tools ouster-cli that combines basic and common actions to work with sensors:
- Discover connected sensors (
ouster-cli discover) - Configure sensors (
ouster-cli source <SENSOR> config) - Get sensors metadata (
ouster-cli source <SENSOR> metadata) - Record data to a pcap with metadata json stored along (
ouster-cli source <SENSOR> record) - Visualize data from sensor or pcap (
ouster-cli source [<SENSOR> | <PCAP>] viz) - Pcap slice and conversion operations (
ouster-cli source <PCAP> {info,slice,convert}) - Run slam to get trajectories and registered point clouds (
ouster-cli source [<SENSOR> | <PCAP>] slam)
Ouster Mapping (Python)
Mapping utilities + tools to save registered point clouds from pcap or running sensors that
accounts for sensor motion and deskews the cloud.
Ouster OSF (C++/Python)
C++/Python library to save stream of LidarScans with metadata. Used by mapping module to work with
scans + poses.
For more details please see the CHANGELOG.rst file.
Contributors:
@bexcite, Pavlo Bashmakov
@Samahu, Ussama Naal
@twslankard, Tom Slankard
@chrisbayruns, Chris Bayruns
@kairenw, Kairen Wong
@mtswisher, Michael Swisher
@celentes, Tim Talashok
@akatumalla-ouster, Alekhya Katumalla
@yhao10, Hao Yuan
Thank you to our contributors!
People are telling that image of Alpacas should be included in every release, so here we go:

This photo is taken by Philippe Lavoie and has been released into the public domain
20230403
20230403 / Python SDK v0.8.1
Update to SDK client. This update to the client introduces numerous improvements to the visualizer library and the main Python visualizer. It also changes the default metadata output format. Summary of changes:
- Default metadata output across all functionality switched to non-legacy format. Utility for conversion provided with Python SDK
- New method mtp_init_client to init client with multicast support (experimental). Thank you to @ShepelIlya
- SensorHttp class made public under the
ouster::sensor::utilnamespace - Port guessing logic has been moved from Python to C++
- Addition of a param to skip the init_id/sn check for lidar packets with metadata in Python
- Improve logic for finding metadata files for
simple-vizutility - introduce ImageMode and CloudeMode for viz
- add palettes for viz
- update viz camera with other objects in draw to avoid bugs
bugfix:
- remove spurious sqrt application to autoleveled images
breaking changes:
- As previously discussed,
get_metadatanow defaults to outputting the non-legacy metadata. Please refer to the migration guide for guidance on how to mitigate its effects. You should still be able to read and produce legacy metadata formats. - Many deprecations on LidarScan have been removed. Please refer to the migration guide for how to update your code.
Please be advised that FW 2.5 is compatible with both this release and previous ones. However, the FW 2.5 default lidar profile has switched from LEGACY to RNG19_RFL8_SIG16_NIR16. If you haven't updated your code to specify profile when creating ScanBatcher in C++ or Scans in Python, this may be a convenient time to do so.
Contributors:
@bexcite, Pavlo Bashmakov
@Samahu, Ussama Naal
@twslankard, Tom Slankard
@chrisbayruns, Chris Bayruns
@kairenw, Kairen Wong
@ShepelIlya
@mtswisher, Michael Swisher
@airalcorn2
Thank you to our contributors!

This photo is taken by Philippe Lavoie and has been released into the public domain
20230114
Update for FW 3.0 Release. Summary of changes:
- Adds support for FW 3.0 sensors. Sensors running FW 3.0, including OS-DOME sensors, must use this release or later. Updates to cartesian projection and signal_multiplier in conjunction with this. Access to new FW thermal features such as shot limiting and thermal shutdown statuses.
- Performance improvements to cartesian projection
- RAW_HEADERS for packing headers and footers (alpha version, may be changed/removed without notice)
- ouster_ros moved to its own repo
- Improvements to visualiation library: numerous improvements supporting screenshots, viewport changes, and attaching callbacks
- Control over logging added through
init_logger - Flag for set_config to force reinit in conjunction with slight performance improvement (does not reinit if desired configuration matches sensor's configuration already)
Bugfixes:
- frame drop when frame_id wraps around in C++ fixed
Breaking changes:
- signal multiplier type changed to double
- make_xyz_lut takes mat4d beam_to_lidar
- dropped default parameters from shortform
init_clientand Pythonclient.Sensor()constructor to lessen API confusion - changed default timeout on Python
ScansandSensor
There is a migration guide available discussing these breaking changes for users in the SDK docs.
Upcoming changes:
Please be advised that this is the last release where the SDK will output the legacy metadata format by default. The SDK will continue to read the legacy format, i.e., it will continue to read old recorded data), and it will also be able to produce the legacy format if the parameter legacy=true is specified to the get_metadata function.
Also, the next release will remove a number of deprecated functions and class members in the LidarScan class.
see CHANGELOG.rst for details.
