Changelog
Important: as of 0.13.0, the SDK is no longer compatible with firmware versions older than 2.1.0.
[20240702] [0.13.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 portAdd higher level sensor client interface
`ouster::sensor::SensorScanSourcewhich producesLidarScans from multiple sensorsAdd
ouster.sdk.client.SensorPacketSourcewhich receives packets from multiple sensorsAdd support for multiple sensors to
ouster.sdk.sensor.SensorScanSourceGreatly 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 decodeAdd metadata validation functionality
Add vendored json library
Improved multi sensor pcap reading
Improve
ScanBatcherto releaseLidarScanas soon as they are completedScanBatchernow adds alert flags, thermal countdown, and shot limiting countdown toLidarScan.Use index to speed up
ouster-cli source .osf infoUse index to speed up slicing of indexed OSF sources when sliced immediately after the
sourcecommandAdd
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(...)forosf.OsfScanSource(...).single_source(0)`.[BREAKING] Deprecated
client.Sensor(...)forclient.SensorPacketSource(...).single_source(0)`.[BREAKING] Deprecated
pcap.Pcap(...)forpcap.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.
[20240702] [0.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_fieldAdded per-request timeout arguments to
SensorHttpAdded sensor user_data to
sensor_info/SensorInfoand metadata filesRemoved
updated_metadata_string()andoriginal_string()fromsensor_infoAdded
to_json_string()tosensor_infoto convert asensor_infoto a non-legacy metadata JSON stringUnified Python and C++
PacketandPacketFormatclassesAdded
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 informationAdd
get_product_infotosensor_info/SensorInfoto retrieve parsed lidar model informationRaise 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
`data`andcapture_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 vizSupport 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 ... sliceAdd sensor
ouster-cli source ... userdatacommand to set and retrieve userdata on a sensorAdd chainable
ouster-cli source ... statscommandAdd chainable
ouster-cli source ... clipcommand to discard points outside a provided rangeAdd
--rate maxoption toouster-cli source ... viz`Improve argument naming and descriptions for
ouster-cli source ... vizmap and accum options:--accum-mapis now called--mapand--accum-map-ratiois now called--map-ratio.New
--map-sizeargument to set the maximum number of points used when--mapis specified.[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.mappingBetter handle looping while mapping
Improve automatic downsample voxel size calculation
other
Updated VCPKG libraries to 2024.04.26
[20240510] [0.11.1]
Important notes
[BREAKING] the
open_sourcemethod now returns aScanSourceby default, not aMultiScanSource.
Python SDK
Updated the
open_sourcedocumentation.Fixed an issue that caused the viz to redraw when the mouse cursor is moved.
[BREAKING] The python slice
[::]operator now returns aMultiScanSource/ScanSourceinstead of aList. Thus, invoking ascan_source[x:x+n]yields a fully functional scan source that is scoped to the range[x, x+n].[BREAKING] The python slice
[::]operator no longer support negative step
ouster_client
Improved the client initialization latency.
mapping
Fixed several issues with the documentation.
[20240425] [0.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.pcapouster.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 sourcesFor non-live sources the
MultiScanSourcehas the option to choose LidarScan(s) by index or choose a subset of scans using slicing operationThe
MultiScanSourceinterface has the ability to fallback toScanSourceusing thesingle_source(sensor_idx),ScanSourceinterface yield a single LidarScan on iteration rather than a ListThe
ScanSourceinterface obtained viasingle_sourcemethod supports same indexing and and slicing operations as theMultiScanSource
Added a generic
open_sourcethat accepts sensor urls, or a path to a pcap recording or an osf fileAdd 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 attemptDisplay a progress bar during index of pcap file or osf (if unindexed)
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.sdkmoduleThe
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_stringinstead.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 aslicewithsave, then playback the generated file.
[20231031] [0.10.0]
Important notes
This will be the last release that supports Python 3.7.
This will be the last release that supports macOS 10.15.
ouster_viz
Added point cloud accumulation support
Added an
PointViz::fps()method to return the operating frame rate as 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()methodThe
updated_metadata_string()now returns a JSON string reflecting any modifications tosensor_infoto_stringis now marked as deprecated
- [BREAKING] Updates to
- [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 toLidarScanThe 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 vizcommandsAll metadata CLI options are changed to
-m/--metadataAdded discovery for FW 3.1+ sensors
Set signal multiplier by default in sensor/SOURCE sensor config
use
PYBIND11_MODULEinstead of deprecated module constructorremove 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.vizpackage, 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-440get_configalways returns trueRepeated CTRL-C can cause a segmentation fault while visualizing a point cloud
20230710
Update vcpkg ref of build to 2023-02-24
ouster_osf
Add Ouster OSF C++/Python library to save stream of LidarScans with metadata
ouster_client
Add
LidarScan.posewith poses per columnAdd
_client.IndexedPcapReaderand_client.PcapIndexto enable random pcap file access by frame number[BREAKING] remove
ouster::Imuobject[BREAKING] change the return type of
ouster::packet_format::frame_idfromuint16_ttouint32_t[BREAKING] remove methods
px_range,px_reflectivity,px_signal, andpx_ambientfromouster::packet_formatAdd
get_field_typesfunction forLidarScan, fromsensor_infobugfix: return metadata regardless of
sensor_infostatus fieldMake timeout on curl more configurable
[BREAKING] remove encoder_ticks_per_rev (deprecated)
ouster_viz
[BREAKING] Changed Python binding for
Cloud.set_column_poses()to accept[Wx4x4]array of poses, column-storage orderbugfix: fix label re-use
Add
LidarScan.posehandling toviz.LidarScanViz, and newTkeyboard binding to toggle column poses usage
ouster_pcap
bugfix: Use unordered map to store stream_keys to avoid comparison operators on map
Python SDK
Add Python 3.11 wheels
Retire simple-viz for ouster-cli utility
Add default ? key binding to LidarScanViz and consolidate bindings into stored definition
Remove pcap-to-csv for ouster-cli utility
Add validator class for LidarPacket
ouster-cli
This release also marks the introduction of the ouster-cli utility which includes, among many features: * Visualization from a connected sensor with automatic configuration * Recording from a connected sensor * Simultaneous record and viz from a connected sensor * Obtaining metadata from a connected sensor * Visualization from a specified PCAP * Slice, info, and conversion for a specificed PCAP * Utilities for benchmarking system, printing system-info * Discovery which indicates all connected sensors on network * Automatic logging to .ouster-cli * Mapping utilities
[20230403]
Default metadata output across all functionality has been switched to the non-legacy format
ouster_client
Added a new method
mtp_init_clientto init the client with multicast support (experimental).the class
SensorHttpwhich provides easy access to REST APIs of the sensor has been made public under theouster::sensor::utilnamespace.breaking change: get_metadata defaults to outputting non-legacy metadata
add debug five_word profile which will be removed later
breaking change: remove deprecations on LidarScan
ouster_viz
update viz camera with other objects in draw
ouster_pcap
add seek method to PcapReader
add port guessing logic
python
introduce utility to convert nonlegacy metadata to legacy
use resolve_metadata to find unspecified metadata for simple-viz
remove port guessing logic in favor of using new C++ ouster_pcap port guessing functionality
add soft-id-check to skip the init_id/sn check for lidar_packets with metadata
Numerous changes to SimpleViz and LidarScanViz including: * expose visible in viz to Python * introduce ImageMode and CloudMode * bugfix: remove spurious sqrt application to autoleveled images
[20230114]
ouster_client
breaking change: signal multiplier type changed to double to support new FW values of signal multiplier.
breaking change: make_xyz_lut takes mat4d beam_to_lidar_transform instead of lidar_origin_to_beam_origin_mm double to accomodate new FWs. Old reference Python implementation was kept, but new reference was also added.
address an issue that could cause the processed frame being dropped in favor or the previous frame when the frame_id wraps-around.
added a new flag
CONFIG_FORCE_REINITforset_config()method, to force the sensor to reinit even when config params have not changed.breaking change: drop defaults parameters from the shortform
init_client()method.added a new method
init_logger()to provide control over the logs emitted byouster_client.add parsing for new FW 3.0 thermal features shot_limiting and thermal_shutdown statuses and countdowns
add frame_status to LidarScan
introduce a new method
cartesianT()which speeds up the computation of point projecion from range image, the method also can process the cartesian product with single float precision. A new unit testcartesian_testwhich shows achieved speed up gains by the number of valid returns in lidar scan.add
RAW_HEADERSChanField to LidarScan for packing headers and footer (alpha version, may be changed/removed without notice in the future)
python
breaking change: drop defaults parameters of
client.Sensorconstructor.breaking change: change Scans interface Timeout to default to 1 second instead of None
added a new method
init_logger()to provide control over the logs emitted byclient.Sensor.add
client.LidarScanmethods__repr__()and__str__().changed default timeout from 1 seconds to 2 seconds
ouster_viz
add
SimpleViz.screenshot()function and a key handlerSHIFT-Zto save a screenshot. Can be called from a client thread, and executes asyncronously (i.e. returns immediately and pushes a one off callback to frame buffer handlers)add
PointViz.viewport_width()andPointViz.viewport_height()functionsadd
PointViz.push/pop_frame_buffer_handler()to attach a callbacks on every frame draw update that calls from the main rendering loop.add
SHIFT-Xkey to SimpleViz to start continuous saving of screenshots on every draw operation. (good for making videos)expose
Camera.set_targetfunction through pybind
ouster-sdk
Moved ouster_ros to its own repo
pin
opensslConan package dependency toopenssl/1.1.1sdue tolibtinsandlibcurlconflictingopensslversions
[20220927]
ouster_client
fix a bug in longform
init_client()which was not setting timestamp_mode and lidar_mode correctly
[20220826]
drop support for buliding C++ libraries and Python bindings on Ubuntu 16.04
drop support for buliding C++ libraries and Python bindings on Mac 10.13, Mac 10.14
Python 3.6 wheels are no longer built and published
drop support for sensors running FW < 2.0
require C++ 14 to build
ouster_client
add
`CUSTOM0-9ChanFields to LidarScan objectfix parsing measurement status from packets: previously, with some UDP profiles, higher order bits could be randomly set
add option for EIGEN_MAX_ALIGN_BYTES, ON by default
use of sensor http interface for comms with sensors for FW 2.1+
propogate C++ 17 usage requirement in cmake for C++ libraries built as C++17
allow vcpkg configuration via environment variables
fix a bug in sensor_config struct equality comparison operator
ouster_viz
clean up GL context logic to avoid errors on window/intel UHD graphics
python
windows extension modules are now statically linked to avoid potential issues with vendored dlls
ouster_ros
drop ROS kinetic support
switch from nodes to nodelets
update topic names, group under single ros namespace
separate launch files for play, replay, and recording
drop FW 1.13 compatibility for sensors and recorded bags
remove setting of EIGEN_MAX_ALIGN_BYTES
add two new ros services /ouster/get_config and /ouster/set_config (experimental)
add new timestamp_mode TIME_FROM_ROS_TIME
declare PCL_NO_PRECOMPILE ahead of all PCL library includes
[20220608]
ouster_client
change single return parsing for FW 2.3.1
python
single return parsing for FW 2.3.1 reflects change from ouster_client
[20220504]
update supported vcpkg tag to 2022.02.23
update to manylinux2014 for x64 linux
ouster-sdkwheelsOuster SDK documentation overhaul with C++/Python APIs in one place
sample data updated to firmware 2.3
ouster_client
fix the behavior of
BeamUniformityCorrectoron azimuth-windowed data by ignoring zeroed out columnsadd overloads in
image_processing.hto work with single-precision floatsadd support for new
RNG19_RFL8_SIG16_NIR16single-return andRNG15_RFL8_NIR8low-bandwidth lidar UDP profiles introduced in firmware 2.3
ouster_viz
switch to glad for OpenGL loading. GLEW is still supported for developer builds
breaking change: significant API update of the
PointVizlibrary. See documentation for detailsthe
simple_vizexample app andLidarScanVizutility have been removed. Equivalent functionality is now provided via Pythonadd basic support for drawing 2d and 3d text labels
update to OpenGL 3.3
python
fix a bug where incorrectly sized packets read from the network could cause the client thread to silently exit, resulting in a timeout
fix
client.Scansnot raising a timeout when using thecompleteflag and receiving only incomplete scans. This could cause readings scans to hang in rare situationsadded bindings for the new
PointVizAPI and a new module for higher-level visualizer utilities inouster.sdk.viz. See API documentation for detailsthe
ouster-sdkpackage now includes an example visualizer,simple-viz, which will be installed on that path for the Python environment
ouster_ros
support new fw 2.3 profiles by checking for inclusion of fields when creating point cloud. Missing fields are filled with zeroes
[20220107]
add support for arm64 macos and linux. Releases are now built and tested on these platforms
add support for Python 3.10
update supported vcpkg tag to 2021.05.12
add preliminary cpack and install support. It should be possible to use a pre-built SDK package instead of including the SDK in the build tree of your project
ouster_client
update cmake package version to 0.3.0
avoid unnecessary DNS lookup when using numeric addresses with
init_client()disable collecting metadata when sensor is in STANDBY mode
breaking change:
set_config()will now produce more informative errors by throwingstd::invalid_argumentwith an error message when config parameters fail validationuse
SO_REUSEPORTfor UDP sockets on non-windows platformsthe set of fields available on
LidarScanis now configurable. See the newLidarScanconstructors for detailsadded
RANGE2,SIGNAL2andREFLECTIVITY2channel fields to support handling data from the second returnScanBatcherwill now parse and populate only the channel fields configured on theLidarScanpassed tooperator()()add support for new configuration parameters:
udp_profile_lidar,udp_profile_imuandcolumns_per_packetadd udp ports, the new initialization id field, and udp profiles to the metadata stored in the
sensor_infostructsensor_info::nameis now deprecated and will stop being populated in the futureadd methods to query and iterate over available
LidarScanfields and field typesbreaking change: removed
LidarScan::blockandLidarScan::datamembers. These can’t be supported for different packet profilesthe
LidarScan::Fielddefniition has been moved tosensor::ChanFieldand enumerators have been renamed to match the sensor user manual. The old names are still available, but deprecateddeprecate accessing encoder values and frame ids from measurement blocks using
packet_formatas these will not be reported by the sensor in some future configurationsadd
packet_frame_idmember function topacket_formatadd
col_fieldmember function topacket_formatfor parsing channel field values for an entire measurement blockadd new accessors for measurement headers to
LidarScan, deprecating the existingheadermember functionrepresent empty sensor config with an empty object instead of null in json representation of the
sensor_configdatatypeupdate cmake package version to 0.2.1
add a conservative socket read timeout so
init_client()will fail with an error message when another client fails to close a TCP connection (addresses #258)when passed an empty string for the
udp_dest_hostparameter,init_client()will now configure the sensor usingset_udp_dest_auto. Previously, this would turn off UDP output on the sensor, so any attempt to read data would time out (PR #255)fall back to binding ipv4 UDP sockets when ipv6 is not available (addresses #261)
ouster_pcap
report additional information in the
packet_infostruct and remove separatestream_infoAPIswitch the default pcap encapsulation to ethernet for Ouster Studio compatibility (addresses #265)
ouster_ros
update ROS package version to 0.3.0
allow setting the packet profile in ouster.launch with the
udp_profile_lidarparameterpublish additional cloud and image topics for the second return when running in dual returns mode
fix
os_nodecrash on shutdown due to Eigen alignment flag not being propogated by catkinupdate ROS package version to 0.2.1
the
udp_destparameter to ouster.launch is now optional when connecting to a sensor
ouster_viz
the second CLI argument of simple_viz specifying the UDP data destination is now optional
fixed bug in AutoExposure causing more points to be mapped to near-zero values
add functionality to display text over cuboids
python
update ouster-sdk version to 0.3.0
improve heuristics for identifying sensor data in pcaps, including new packet formats
release builds for wheels on Windows now use the VS 2017 toolchain and runtime (previously 2019)
fix potential use-after-free in
LidarScan.fieldsupdate ouster-sdk version to 0.3.0b1
return an error when attempting to initialize
client.Sensorin STANDBY modecheck for errors while reading from a
Sensorpacket source and waiting for a timeout. This should make stopping a process withSIGINTmore reliableadd PoC bindings for the
ouster_vizlibrary with a simple example driver. See theouster.sdk.examples.vizmoduleadd bindings for new configuration and metadata supported by the client library
breaking change: the
ChanFieldenum is now implemented as a native binding for easier interop with C++. Unlike Python enums, the bound class itself is no longer sized or iterable. UseChanField.valuesto iterate over allChanFieldvalues orLidarScan.fieldsfor fields available on a particular scan instancebreaking change: arrays returned by
LidarPacket.fieldandLidarPacket.headerare now immutable. Modifying the underlying packet buffer through these views was never fully supporteddeprecate
ColHeader,LidarPacket.header, andLidarScan.headerin favor of new properties:timestamp,measurement_id,status, andframe_idreplace
LidarScanwith native bindings implementing the same APIxyzlutcan now accept a range image as an ndarray, not just aLidarScanupdate ouster-sdk version to 0.2.2
fix open3d example crash on exit when replaying pcaps on macos (addresses #267)
change open3d normalization to use bound AutoExposure
[20210608]
ouster_client
update cmake package version to 0.2.0
add support for new signal multiplier config parameter
add early version of a C++ API covering the full sensor configuration interface
increase default initialization timeout to 60 seconds to account for the worst case: waking up from STANDBY mode
ouster_pcap
record_packet()now requires passing in a capture timestamp instead of using current timework around libtins issue where capture timestamps for pcaps recorded on Windows are always zero
add preliminary C++ API for working with pcap files containing a single sensor packet capture
ouster_ros
update ROS package version to 0.2.0
add Dockerfile to easily set up a build environment or run nodes
img_nodenow outputs 16-bit images, which should be more useful. Range image output is now in units of 4mm instead of arbitrary scaling (addresses #249)img_nodenow outputs reflectivity images as well on thereflec_imagetopicchange
img_nodetopics to match terminology in sensor documentation:ambient_imageis nownearir_imageandintensity_imageis nowsignal_imageupdate rviz config to use flat squares by default to work around a bug on intel systems
remove viz_node and all graphics stack dependencies from the package. The
vizflag on the launch file now runs rviz (addresses #236)clean up package.xml and ensure that dependencies are installable with rosdep (PR #219)
the
metadataargument to ouster_ros launch file is now required. No longer defaults to a name based on the hostname of the sensor
ouster_viz
update reflectivity visualization for changes in the upcoming 2.1 firmware. Add new colormap and handle 8-bit reflectivity values
move most of the visualizer code out of public headers and hide some implementation details
fix visualizer bug causing a small viewport when resizing the window on macos with a retina display
python
update ouster-sdk version to 0.2.1
fix bug in determining if a scan is complete with single-column azimuth windows
closed PacketSource iterators will now raise an exception on read
add examples for visualization using open3d (see:
ouster.sdk.examples.open3d)add support for the new signal multiplier config parameter
preserve capture timestamps on packets read from pcaps
first release: version 0.2.0 of ouster-sdk. See the README under the
pythondirectory for details and links to documentation
[20201209]
Changed
switched to date-based version scheme. No longer tracking firmware versions
added a top-level
CMakeLists.txt. Client and visualizer should no longer be built separately. See the README for updated build instructionscmake cleanup, including using custom “find modules” to provide better compatibility between different versions of cmake
respect standard cmake
BUILD_SHARED_LIBSandCMAKE_POSITION_INDEPENDENT_CODEflagsmake
ouster_roseasier to use as a dependency by bundling the client and viz libraries together into a single library that can be used through catkinupdated client example code. Now uses more of the client APIs to capture data and write to a CSV. See
ouster_client/src/example.cppreplace callback-based
batch_to_scanfunction withScanBatcher. Seelidar_scan.hfor API docs and the new client example codeupdate
LidarScanAPI. Now includes accessors for measurement blocks as well as channel data fields. Seelidar_scan.hfor API docsadd client version field to metadata json, logs, and help text
client API renaming to better reflect the Sensor Software Manual
[1.14.0-beta.14] - 2020-08-27
Added
support for ROS noetic in
ouster_ros. Note: this may break building on very old platforms without a C++14-capable compileran extra extrinsics field in
sensor_infofor conveniently passing around an extra user-supplied transforma utility function to convert
lidar_scandata between the “staggered” representation where each column has the same timestamp and “de-staggered” representation where each column has the same azimuth anglemask support in the visualizer library in
ouster_viz
Changed
ouster_rosnow requires C++14 to support building against noetic librariesreplaced
batch_to_iterwithbatch_to_scan, a simplified function that writes directly to alidar_scaninstead of arbitrary iterator
Fixed
ipv6 support using dual-stack sockets on all supported platforms. This was broken since the beta.10 release
projection to Cartesian coordinates now takes into account the vertical offset the sensor and lidar frames
the reference frame of point cloud topics in
ouster_rosis now correctly reported as the “sensor frame” defined in the user guide
[1.14.0-beta.12] - 2020-07-10
no changes
[1.14.0-beta.11] - 2020-06-17
no changes
[1.14.0-beta.10] - 2020-05-21
Added
preliminary support for Windows and macOS for
ouster_vizandouster_client
Changed
replaced VTK visualizer library with one based on GLFW
renamed all instances of “OS1” including namespaces, headers, node and topic names, to reflect support for other product lines
updated all xyz point cloud calculations to take into account new
lidar_origin_to_beam_originparameter reported by sensorsclient and
os_nodeandsimple_viznow avoid setting the lidar and timestamp modes when connecting to a client unless values are explicitly specicified
Fixed
increase the UDP receive buffer size in the client to reduce chances of dropping packets on platforms with low defaults
os_cloud_nodeoutput now uses the updated point cloud calculation, taking into account the lidar origin offsetminor regression with destaggering in img_node output in previous beta
[1.14.0-beta.4] - 2020-03-17
Added
support for gen2 hardware in client, visualizer, and ROS sample code
support for updated “packed” lidar UDP data format for 16 and 32-beam devices with firmware 1.14
range markers in
simple_vizandviz_node. Toggle display usinggkey. Distances can be configured fromos1.launch.post-processing to improve ambient image uniformity in visualizer
Changed
use random ports for lidar and imu data by default when unspecified
[1.13.0] - 2020-03-16
Added
post-processing to improve ambient image uniformity in visualizer
make timestamp mode configurable via the client (PR #97)
Changed
turn on position-independent code by default to make using code in libraries easier (PR #65)
use random ports for lidar and imu data by default when unspecified
Fixed
prevent legacy tf prefix from making invalid frame names (PR #56)
use
iterator_traitsto makebatch_to_iterwork with more types (PR #70)use correct name for json dependency in
package.xml(PR #116)handle udp socket creation error gracefully in client
[1.12.0] - 2019-05-02
Added
install directives for
ouster_rosbuild (addresses #50)
Changed
flip the sign on IMU acceleration output to follow usual conventions
increase the update rate in the visualizer to ~60hz
Fixed
visualizer issue where the point cloud would occasionally occasionally not be displayed using newer versions of Eigen
[1.11.0] - 2019-03-26
Added
allow renaming tf ids using the
tf_prefixparameter
Changed
use frame id to batch packets so client code deals with reordered lidar packets without splitting frames
use a uint32_t for PointOS1 timestamps to avoid unnecessary loss of precision
Fixed
bug causing ring and reflectivity to be corrupted in os1_cloud_node output
misplaced sine in azimuth angle calculation (addresses #42)
populate timestamps on image node output (addresses #39)
[1.10.0] - 2019-01-27
Added
os1_nodenow queries and uses calibrated beam angles from the sensoros1_nodenow queries and uses imu / lidar frames from the sensoros1_nodereads and writes metadata to${ROS_HOME}to support replaying data with calibrationROS example code now publishes tf2 transforms for imu / lidar frames (addresses #12)
added
metadataparameter toos1.launchto override location of metadataadded
vizparameter toos1.launchto run the example visualizer with ROSadded
imageparameter toos1.launchto publish image topics to rviz (addresses #21)added range field to
PointOS1
Changed
split point-cloud publishing out of
os1_nodeintoos1_cloud_nodeexample visualizer controls:
press
mto cycle through color modes instead ofi,z,Z,rrnow resets the camera positionrange/signal images automatically resized to fit window height
updated OS-1 client to use newer TCP configuration commands
updated OS-1 client to set the requested lidar mode, reinitialize on connection
changed point cloud batching to be based on angle rather than scan duration
ouster_clientnow depends on thejsoncpplibraryswitched order of fields in
PointOS1to be compatible withPointXYZI(addresses #16)moved example visualizer VTK rendering into the main thread (merged #23)
the timestamp field of PointOS1 now represents time since the start of the scan (the timestamp of the PointCloud2 message) in nanoseconds
Removed
removed keyboard camera controls in example visualizer
removed panning and rotating of the image panel in example visualizer
Fixed
no longer dropping UDP packets in 2048 mode on tested hardware
example visualizer:
point cloud display focus no longer snaps back on rotation
fixed clipping issues with parallel projection
fixed point coloring issues in z-color mode
improved visualizer performance