Releases: ouster-lidar/ouster-sdk
OusterSDK Release 0.16.2
- Add support for RGB lidar packet profiles
RNG19_RFL8_SIG16_NIR16_RGB16andRNG19_RFL8_SIG16_NIR16_RGB16_DUAL, including new chan fieldsR,G,B,RGBandChanFieldType::FLOAT16support. - Add HDR RGB visualization path for float16 RGB fields in viz, update default image/cloud mode selection to prefer RGB when present.
- Add color-aware PLY/PCD loading for map visualization, so
ouster-cli source <pointcloud> viznow displays colored point clouds. - Improve zone emulation workflow: add
--keep-live-idsand--keep-sensor-to-bodytoemulate_zones, add--extrinsics zoneto source extrinsics handling, and fix zone mesh transform usage for BODY-frame rendering. - Apply autoexposure to exported float16 RGB point cloud data during mapping point cloud conversion to produce properly normalized RGB output.
- [BREAKING] Python image processing correctors now use
update()instead of being called directly.
Contributors
@chrisbayruns, Chris Bayruns
@diego-guridi , Diego Guridi
@yhao10, Hao Yuan
@kairenw, Kai Wong
@kkaly, Karthik Kalyanaraman
@matt-attack, Matthew Bries
@celentes, Tim Talashok
@twslankard, Tom Slankard
@Samahu, Ussama Naal
@spartanhaden, Haden Wasserbaech
@akatumalla-ouster, Alekhya Katumalla
@mtswisher, Michael Swisher
@bexcite, Pavlo Bashmakov
@boscosiu, Bosco Siu
@uilianries, Uilian Ries
@sleitch-ouster made their first contribution in #691
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 @diego-guridi , who will try to keep this list up to date.
By Diego Delso - CC-BY-SA 4.0 - https://commons.wikimedia.org/wiki/File:Lama,_Ipiales,_Colombia,_2015-07-21,_DD_04.JPGOusterSDK + Ouster CLI Release 0.16.1
- [BUGFIX] Add --coord-frame (SENSOR|BODY|WORLD) to ouster-cli source ... filter for XYZ filtering. WORLD now applies dewarp(points, scan.pose) before thresholding, BODY remains the default for backward compatibility, and SENSOR uses XYZ without extrinsics.
- [BUGFIX] Fix crash in LidarScan.str when scans contain non-pixel fields (IMU, GNSS, ZONE, or CHAR fields). The to_string() function now properly handles these field types, with special formatting for CHAR fields to display NMEA sentences.
- [BUGFIX] Avoid divide-by-zero in IMU visualization when IMU magnitudes are zero.
- [BUGFIX] Fix AOI picker showing normalized values for unknown fields in the viz.
- [BREAKING] Renamed -F flag to -f in ouster-cli source command (short for --filter flag), which drops scans with missing data.
- [BUGFIX] PLY maker minor change (e.g. support for no valid key field, --field NONE).
- [BUGFIX] Use stderr instead of stdout for logging in ouster-cli.
- [BUGFIX] Fix filter, clip, and mask bugs: correct filter_xyz semantics (points inside bounds zeroed), restrict operations to PIXEL_FIELD only to avoid crashes with IMU/GNSS fields, and use RANGE2 coordinates for second-return fields.
- [BUGFIX] Handle unsupported ChanFieldTypes when reading OSF files: skip unsupported fields with a warning instead of crashing (forward compatibility with newer OSF files).
- Add --legacy flag for OSF export (PNG compression + drop CHAR/ZONE_STATE for SDK 0.12–0.15 compatibility), separate from --png (PNG compression only).
- [BUGFIX] Update TUM format in trajectory saving as per official specification.
- [BUGFIX] Fix viz GL buffer cleanup leaks: add missing glDeleteBuffers() for GLCuboid, GLRings, and GLImage to prevent GPU memory growth on repeated create/destroy.
- [BUGFIX] Fix ValueError in viz when resizing before scans received.
- [BUGFIX] Fix crash when saving a GIF when frame duration is negative (e.g. source has looped); fix viz deadlock when saving image recording.
- [BUGFIX] Fix improper handling of sensors with lidar data disabled.
- [BUGFIX] SLAM crashes when at least one sensor doesn't have imu data in a multi-sensor setup with the Synchronous IMU feature enabled.
- [BUGFIX] SLAM uses un-corrected timestamps when using the the inertial integration deskew method with multi-sensor unsynchronized setups.
- Pose Optimizer: constraint ID counter moved to constraint base class; constraint IDs are now logged when adding/processing constraints, and reassign constraint id when conflict instead of throwing.
- [BUGFIX] Remove the skipping on single scans in SLAM and localize pipelines for multi-sensor datasets.
- [BUGFIX] PNGs from the viz now embed the Display P3 profile so their colors match the viz window.
- Add --http-addr option to sensor_replay plugin (e.g. for use with Ouster Detect).
- Update README with community forum and support info.
- Normalize license files for GitHub detection.
Important announcements
This will be the last release that supports macOS 11.x, 12.x and 13.x.
Contributors
@chrisbayruns, Chris Bayruns
@diego-guridi , Diego Guridi
@yhao10, Hao Yuan
@kairenw, Kai Wong
@kkaly, Karthik Kalyanaraman
@matt-attack, Matthew Bries
@celentes, Tim Talashok
@twslankard, Tom Slankard
@Samahu, Ussama Naal
@spartanhaden, Haden Wasserbaech
@akatumalla-ouster, Alekhya Katumalla
@mtswisher, Michael Swisher
@bexcite, Pavlo Bashmakov
@boscosiu, Bosco Siu
@uilianries, Uilian Ries
@sleitch-ouster made their first contribution in #691
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 @diego-guridi , who will try to keep this list up to date.

OusterSDK + Ouster CLI Release 0.16.0
- [BUGFIX] Fix issue where reflectivity data is being reported as zero when range data is zero in AOI labels in the viz.
- [BUGFIX] Avoid a crash on the viz while screen recording using SHIFT-X
- Clear AOI selection in the viz when right click is pressed and there is a preexisting selection.
- Extend AOI selection to show 3 axis fields properly when right click in viz images.
- Add support for low bandwidth dual returns lidar profile (PROFILE_RNG15_RFL8_NIR8_DUAL).
- [BREAKING] renamed
data_format::packets_per_frame()tolidar_packets_per_frame() - Add support for saving and reading new ZPNG based OSF files which are several times faster and have better compression ratios.
- [BREAKING] Make ZPNG the default format for saved OSF files. This format cannot be opened by older SDK versions.
- [BREAKING] Change
ouster-cli source <osf> dumpJSON output to return the OSF version as a semver-style string instead of an integer. - Add --png option to
saveinouster-clito save legacy PNG based OSF files. - Add support for storing IMU data in
LidarScanfor theACCEL32_GYRO32_NMEAprofile via new ChanFields:IMU_ACC,IMU_GYRO,IMU_TIMESTAMP,IMU_MEASUREMENT_ID,IMU_STATUS,IMU_PACKET_TIMESTAMP,IMU_ALERT_FLAGS,POSITION_STRING,POSITION_LAT_LONG, andPOSITION_TIMESTAMP. - Add support to
SensorHttpfor setting gateway addresses throughSensorHttp::set_static_ip(static_ip, gateway_address). - Add
--set-gatewayto ouster-clinetworkcommand for setting sensor's gateway addresses. - [BREAKING] Change
ouster::PointsT,ouster::PointsDandouster::PointsFto Row Major layout to improve performance - [BREAKING] Remove deprecated
ScanSource.metadataandPacketSource.metadatain favor of*.sensor_info. - [BREAKING] Remove deprecated
ouster.sdk.util.resolve_extrinsicsfor explicitly passing extrinsic file names to sources. - [BREAKING] Remove deprecated
ouster.sdk.sensor.util.build_sensor_configfor the same functionality already included in SensorScanSource/SensorPacketSource. - [BREAKING] Remove deprecated
PointViz::push_frame_buffer_handler()andPointViz::pop_frame_buffer_handler().
in C++ and Python in favor the new screenshot facilitiesget_screenshot(), save_screenshot(), and toggle_screen_recording(). - [BREAKING] Remove deprecated
ScanSource.sensors_count. Use length ofScanSource.sensor_infoinstead. - [BREAKING] Remove deprecated
core.first_valid_column(),core.last_valid_column(),core.first_valid_column_ts(),core.last_valid_column_ts(),
core.first_valid_packet_ts(),core.last_valid_packet_ts()in favor of their replacements on theLidarScanclass:scan.get_first_valid_column(),
scan.get_last_valid_column(),scan.get_first_valid_column_timestamp(),scan.get_last_valid_column_timestamp(),scan.get_first_valid_packet_timestamp(),
andscan.get_last_valid_packet_timestamp(). - [BREAKING] Remove deprecated
ouster::sensor::parse_config()in favor ofouster::parse_and_validate_config(). - [BREAKING] Remove deprecated
firmware_version_from_metadata()in favor ofouster::sdk::core::SensorInfo::get_version(). - [BREAKING] Remove deprecated
ScanBatcher(size_t, packet_format)in favor ofScanBatcher(sensor_info). - [BUGFIX] The
soft_id_checkforSensorScanSourcewas not in use. - [BREAKING] Remove support for connecting to sensors with firmware versions older than 2.4.0.
- [FUTURE BREAKING] This will be the last release supporting sensor_info, will be deprecated in favor of SensorInfo
- Add
-gor--globtoouster-cli sourcecommand which allows globing file names and reading multiple sources of the same type in time order. - Add
MultiScanSourcewhich can play back multiple ScanSources in time order. - Add
--splittosavecommand which can split saved files by size in megabytes. - Add
PointViz.set_background_color()method to set the background color for PointViz. - Add full screen support to
PointVizand the--fullscreenoption to the ouster-cli viz. - Add borderless option to
PointViz - Add ability to hide/show mouse cursor over
PointVizwithPointViz.cursor_visible(true/false). - Add support for OpenGL ES 3.1 to the viz.
- [BUGFIX] ScanSource reduction no longer crashes reducing LidarScans with non PIXEL_FIELDS.
- Add
ScanSource.size_hintandScanSource.__length_hint__to give estimated length of sources. - Add progress bar to
ouster-cli sourceto show current progression through the input source. Provideouster-cli source --no-progressoption to hide. - Add save command for pointcloud type sources to
ouster-cli. - Add support for new config parameters in FW 3.2 such as
lidar_frame_azimuth_offsetandbloom_reduction_optimization - [BREAKING]
ScanSourceiterators now returnLidarScanSetinstead ofstd::vector<std::shared_ptr<LidarScan>>. - [BUGFIX] Allow integer voxel size in the SLAM/Localization configuration.
- Make SLAM and Localization available using the SDK C++ API.
- PoseOptimizer API Refactor
- [BREAKING] Removed methods:
add_absolute_pose_constraint(),add_pose_to_pose_constraint(),add_point_to_point_constraint() - [BREAKING] Per-axis weights: all constraints now support (x, y, z) arrays for rotation and translation weights
- Add PoseOptimizer new constructor which takes in and loads a constraint JSON file
- Add Direct constraint construction: Use
AbsolutePoseConstraint(),PoseToPoseConstraint(),PointToPointConstraint() - Unified constraint-based interface: single
add_constraint()for all constraint types - Add
save_config()method to save into a JSON file - Add
remove_constraint()method to remove a constraint by the constraint ID - Add
get_constraints()andset_constraints()methods to get and set constraints in the PoseOptimizer
- [BREAKING] Removed methods:
- Support exporting RGB point clouds in PLY and PCD formats.
- Support exporting point cloud normal values in PLY and PCD formats.
- Add
normalscommand which compute and save per pixel normal values to LidarScan. - Add
normals()functions for computing surface normals from point cloud geometry shape and range values. - Support viewing
LidarScan3 axis dual return Normals fields in viz - Enable multi-sensor localization in ouster_mapping.
- Add per scan trajectory visualization to the LidarScanViz.
- Add ChanField::WINDOW available in single return, dual return and low bandwidth dual return profiles with firmware 3.2
- Upgrade to KissICP 1.2.3
- Default Sensor sources to not configuring ports with reuse_addr or reuse_port to prevent socket stealing.
- Add
reuse_ports(--reuse-portsin the CLI) to Sensor sources to enable multiple programs to bind to the same sockets simultaneously for some multicast or broadcast applications. - [BREAKING] Move
ChanFieldandChanFieldTypetoouster/chanfield.h. - [BREAKING] Move
XYZLutT,XYZLut, andmake_xyzluttoouster/xyzlut.h. - [BREAKING] Make C++ namespaces consistent with Python by nesting under
ouster::sdk- Moved ouster_client project into
ouster::sdk::core - Moved ouster_pcap project into
ouster::sdk::pcap - Moved ouster_mapping project into
ouster::sdk::mapping - Moved ouster_sensor project into
ouster::sdk::sensor - Moved ouster_osf project into
ouster::sdk::osf - Move
open_sourceandopen_packet_sourceintoouster::sdkdirectly.
- Moved ouster_client project into
- [FUTURE BREAKING] Deprecated DataFormat and UDPProfileLidar overloads of
get_field_types - [BREAKING] Removed
ouster.sdk.core.default_scan_fields. Useouster.sdk.util.resolve_field_typesinstead. - Changed all core sdk enums to enum classes and removed the prefixes from enum values. The C++ enums naming is now consistent with the Python enums naming.
- e.g.
OPERATING_NORMALis nowOperatingMode::UNSPECIFIED - The older enum identiers are still available for use but are deprecated.
- e.g.
- Utilize imu data when compensating for lidar data distortion during motion in SLAM and Localization.
- Add Zone Monitor:
- Add support for reading and writing Zone Monitor configurations for sensors running firmware 3.2 and above.
- Add zone state data to LidarScans when Zone Monitor is enabled on the sensor.
- Add Zone Monitor visualization to the ouster-cli viz command.
- Add support for emulating Zone Monitor sensor output to the CLI and Python SDK.
Important announcements
- As of 0.16.0, the SDK is no longer compatible with firmware versions older than 2.4.0.
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
@spartanhaden, Haden Wasserbaech
@boscosiu, Bosco Siu
@uilianries, Uilian Ries
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](https://github.com/python-pillow/Pi...
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
