Changelog
Important: as of 0.13.0, the SDK is no longer compatible with firmware versions older than 2.1.0.
[20241017] [0.13.1]
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.cpp
example.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_major
parameter from thedewarp
function. (dewarp
now infers the array type.)[BREAKING] Renamed
DEFAULT_HTTP_REQUEST_TIMEOUT_SECONDS
toLONG_HTTP_REQUEST_TIMEOUT_SECONDS
.[BREAKING] Changed the default value of
LidarScanVizAccumulatorsConfig.accum_min_dist_num
from1
to0
.[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_SECOND
mode 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
PointViz
event handers occasionally causes a crash or unexpected results.
[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
SensorInfo
in anOsfScanSource
.[BUGFIX] Fix an issue loading extrinsics from OSF metadata into a
SensorInfo
inOsfScanSource
.[BREAKING] Remove
ChunksLayout
andChunkRef
from Python API.
ouster_client/Python SDK
Add support for reading and writing ROS1 and ROS2 bag files.
Add new sensor client interface
ouster::sensor::SensorClient
which supports multiple sensors as well as multiple sensors and IMU data on the same portAdd higher level sensor client interface
`ouster::sensor::SensorScanSource
which producesLidarScan
s from multiple sensorsAdd
ouster.sdk.client.SensorPacketSource
which receives packets from multiple sensorsAdd 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_names
argument to each scan source and toopen_source
to specify which fields to decodeAdd metadata validation functionality
Add vendored json library
Improved multi sensor pcap reading
Improve
ScanBatcher
to releaseLidarScan
as soon as they are completedScanBatcher
now 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
source
commandAdd
LidarScan.get_first_valid_column_timestamp()
Add
crc
andcalculate_crc
methods toouster::sensor::packet_format
for obtaining or calculating (respectively) the CRC64 of a packet.scan_to_packets
now creates packets with alert flags, thermal countdown and status, shot limiting countdown and status, and CRC64.Add
ouster::pose_util::dewarp
C++ function to de-warp aLidarScan
(similar toouster.sdk.pose_util
in the Python API.)Add a constructor
LidarScan(const ouster::sensor::sensor_info&)
.Always use
nonstd::optional
instead of drop-instd::optional
from https://github.com/martinmoene/optional-lite.git to reduce issues associated with mixing C++14 and C++17.Add
w()
andh()
methods tosensor_info
in C++ andw
andh
properties toSensorInfo
in 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.)
[BREAKING] Removed
UDPPacketSource
andBufferedUDPSource
.[BREAKING] Removed
ouster.sdk.util.firmware_version(hostname)
please useouster.sdk.client.SensorHttp.create(hostname).firmware_version()
instead[BREAKING]
open_source
no longer automatically finds and applies extrinsics fromsensor_extrinsics.json
files. Use theextrinsics
argument 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::Value
from the public C++ API methods in favor ofstd::string
.
ouster_viz
LidarScanViz
now 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
, andEventModifierKeys
enums.Add methods
aspect_ratio
,normalized_coordinates
, andwindow_coordinates
toviz::WindowCtx
.Add method
window_coordinates_to_image_pixel
toviz::Image
. (Seeviz_events_example.cpp
for an example.)Add
current_camera()
method toPointViz
.[BREAKING]
SimpleViz
no longer accepts aScansAccumulator
instance and now accepts scan/map accumulation parameters as keyword args in its constructor.[BREAKING]
ScansAccumulator
is split into several different classes:ScansAccumulator
,MapAccumulator
,TracksAccumulator
, andLidarScanVizAccumulators
.[BREAKING] changed
PointViz
mouse button callback to fire for both mouse button press and release events.[BREAKING] changed
PointViz
mouse 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
--fields
argument toouster-cli source
to 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]
source
no longer automatically finds and applies extrinsics fromsensor_extrinsics.json
files. Use the-E
argument 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_raw
command.[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
LidarScan
s withadd_field
anddel_field
Added per-request timeout arguments to
SensorHttp
Added sensor user_data to
sensor_info/SensorInfo
and metadata filesRemoved
updated_metadata_string()
andoriginal_string()
fromsensor_info
Added
to_json_string()
tosensor_info
to convert asensor_info
to a non-legacy metadata JSON stringUnified Python and C++
Packet
andPacketFormat
classesAdded
validate
function toLidarPacket
andImuPacket
to 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_version
tosensor_info/SensorInfo
to retrieve parsed version informationAdd
get_product_info
tosensor_info/SensorInfo
to 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
hostname
in PythonSensorInfo
andname
from C++sensor_info
[BREAKING] Removed
udp_port_lidar
,udp_port_imu
andmode
from C++sensor_info
[BREAKING] Deprecated
udp_port_lidar
,udp_port_imu
andmode
in PythonSensorInfo
. These fields now point to the equivalent fields inside ofSensorInfo::config
.[BREAKING] Removed
cols
andfrequency
fromLidarMode
in Python[BREAKING] Deprecated
`data`
andcapture_timestamp
from PythonPacket
[BREAKING] Removed methods from Python
ImuPacket
andLidarPacket
classes that simply wrappedPacketFormat
[BREAKING] Removed
begin()
andend()
iterators ofLidarScan
in C++[BREAKING] Remove deprecated package stubs added in previous 0.11 release.
[BREAKING] Replaced integer backed
ChanField
enumerations with strings.[BREAKING] Removed
CUSTOM0
throughCUSTOM9
ChanField 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
LidarScan
fields in vizSupport viewing custom
LidarScan
3 channel fields in viz as RGB[BUGFIX] Prevent OpenBLAS from using high amounts of CPU spin waiting
ouster_osf
Support saving custom
LidarScan
fields 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 ... userdata
command to set and retrieve userdata on a sensorAdd chainable
ouster-cli source ... stats
commandAdd chainable
ouster-cli source ... clip
command to discard points outside a provided rangeAdd
--rate max
option toouster-cli source ... viz`
Improve argument naming and descriptions for
ouster-cli source ... viz
map and accum options:--accum-map
is now called--map
and--accum-map-ratio
is now called--map-ratio
.New
--map-size
argument to set the maximum number of points used when--map
is 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.mapping
Better 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_source
method now returns aScanSource
by default, not aMultiScanSource
.
Python SDK
Updated the
open_source
documentation.Fixed an issue that caused the viz to redraw when the mouse cursor is moved.
[BREAKING] The python slice
[::]
operator now returns aMultiScanSource
/ScanSource
instead 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.pcap
ouster.osf
. So the new access name will beouster.sdk.client
,ouster.sdk.pcap
and so on[BREAKING] many of the
ouster-cli
commands and arguments have changed (see below.)[BREAKING] moved
configure_sensor
method toouster.sdk.sensor.util
module[BREAKING] removed the
pcap_to_osf
method.
examples
Added a new
async_client_example.cpp
C++ example.
Python SDK
Add support for python 3.12, including wheels on pypi
Updated VCPKG libraries to 2023.10.19
New
ScanSource
API:Added new
MultiScanSource
that supports streaming and manipulating LidarScan frames from multiple concurrent LidarScan sourcesFor non-live sources the
MultiScanSource
has the option to choose LidarScan(s) by index or choose a subset of scans using slicing operationThe
MultiScanSource
interface has the ability to fallback toScanSource
using thesingle_source(sensor_idx)
,ScanSource
interface yield a single LidarScan on iteration rather than a ListThe
ScanSource
interface obtained viasingle_source
method supports same indexing and and slicing operations as theMultiScanSource
Added a generic
open_source
that accepts sensor urls, or a path to a pcap recording or an osf fileAdd explicit flag
index
to index unindexed osf files, if flag is set toTrue
the 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_metadata
method 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_source
command is now part ofouster.sdk
moduleThe
FLAGS
field is always added to the list fields of any source type by default. In case of a dual return lidar profile then a secondFLAGS2
will also be added.
mapping
Updated SLAM API and examples.
Added real time frame dropping capability to SLAM API.
The
ouster-mapping
package now usespoint-cloud-utils
instead 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
save
command can output the result in a variety of formats.Added
--ts
option 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 discover
to 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-magic
package from required dependencies.Made the output of
ouster-cli source <osf> info
much more user-friendly. (ouster-cli source <osf> dump
gives old output.)[breaking] changed the argument format of the
slice
command.[breaking] removed the
--legacy
and--non-legacy
flags.[breaking] removed the
ouster-cli mapping
,ouster-cli osf
,ouster-cli pcap
, andouster-cli sensor
commands.[bugfix] return a nonzero exit code on error.
[bugfix] fix an error that occurred when setting the IMU port using the
-i
option.
ouster_client
Added a new buffered UDP source implementation
BufferedUDPSource
.The method
version_of_string
is marked as deprecated, useversion_from_string
instead.Added a new method
firmware_version_from_metadata
which works across firmwares.Added support for return order configuration parameter.
Added support for gyro and accelerometer FSR configuration parameters.
[bugfix]
mtp_init_client
throws a bad optional access.[bugfix] properly handle 32-bit frame IDs from the
FUSA_RNG15_RFL8_NIR8_DUAL
sensor UDP profile.
ouster_osf
[breaking] Greatly simplified OSF writer API with examples.
[breaking] removed the
to_native
andfrom_native
methods.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_metadata
that 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
slice
command withviz
the program will exit once iterate over the selected range of scans even when the--on-eof
option is set toloop
.workaround: to have
viz
loop over the selected range, first perform aslice
withsave
, 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_info
include: new fields added:
build_date
,image_rev
,prod_pn
,status
,cal
(representing the value stored in thecalibration_status
metadata JSON key),config
(representing the value of thesensor_config
metadata 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_info
to_string
is 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 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
ScanBatcher
performance by roughly 3x (depending on hardware)Receive buffer size increased from 256KB to 1MB
[bugfix] Fixed an issue that caused incorrect Cartesian point computation in the
viz.Cloud
Python class[bugfix] Fixed an issue that resulted in some
packet_format
methods returning an uninitialized value[bugfix] Fixed a libpcap-related linking issue
[bugfix] Fixed an eigen 3.3-related linking issue
[bugfix] Fixed a zero beam angle calculation issue
[bugfix] Fixed dropped columns issue with 4096x5 and 2048x10
ouster-cli
Added
source <FILE> slam
andsource <FILE> slam viz
commandsAll metadata CLI options are changed to
-m/--metadata
Added discovery for FW 3.1+ sensors
Set signal multiplier by default in sensor/SOURCE sensor config
use
PYBIND11_MODULE
instead of deprecated module 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-mapping
is now a required dependency[BREAKING] change the
ouster.sdk.viz
location to theouster.viz
package, please update the references if you usedouster.sdk.viz
module[bugfix] Fixed Windows pcap support for files larger than 2GB
[bugfix] Fixed the order of
LidarScan
’sw
andh
keyword arguments[bugfix] Fixed an issue with
LidarPacket
when using data recorded with older versions of Ouster Studio
Known issues
The dependency specifier for
scipy
is invalid per PEP-440get_config
always 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.pose
with poses per columnAdd
_client.IndexedPcapReader
and_client.PcapIndex
to enable random pcap file access by frame number[BREAKING] remove
ouster::Imu
object[BREAKING] change the return type of
ouster::packet_format::frame_id
fromuint16_t
touint32_t
[BREAKING] remove methods
px_range
,px_reflectivity
,px_signal
, andpx_ambient
fromouster::packet_format
Add
get_field_types
function forLidarScan
, fromsensor_info
bugfix: return metadata regardless of
sensor_info
status 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.pose
handling toviz.LidarScanViz
, and newT
keyboard binding to toggle column poses usage
ouster_pcap
bugfix: Use unordered map to store stream_keys to avoid comparison operators on map
Python SDK
Add Python 3.11 wheels
Retire simple-viz for ouster-cli utility
Add default ? key binding to LidarScanViz and consolidate bindings into stored definition
Remove pcap-to-csv for ouster-cli utility
Add validator class for LidarPacket
ouster-cli
This release also marks the introduction of the ouster-cli utility which includes, among many features: * Visualization from a connected sensor with automatic configuration * Recording from a connected sensor * Simultaneous record and viz from a connected sensor * Obtaining metadata from a connected sensor * Visualization from a specified PCAP * Slice, info, and conversion for a specificed PCAP * Utilities for benchmarking system, printing system-info * Discovery which indicates all connected sensors on network * Automatic logging to .ouster-cli * Mapping utilities
[20230403]
Default metadata output across all functionality has been switched to the non-legacy format
ouster_client
Added a new method
mtp_init_client
to init the client with multicast support (experimental).the class
SensorHttp
which provides easy access to REST APIs of the sensor has been made public under theouster::sensor::util
namespace.breaking change: get_metadata defaults to outputting non-legacy metadata
add debug five_word profile which will be removed later
breaking change: remove deprecations on LidarScan
ouster_viz
update viz camera with other objects in draw
ouster_pcap
add seek method to PcapReader
add port guessing logic
python
introduce utility to convert nonlegacy metadata to legacy
use resolve_metadata to find unspecified metadata for simple-viz
remove port guessing logic in favor of using new C++ ouster_pcap port guessing functionality
add soft-id-check to skip the init_id/sn check for lidar_packets with metadata
Numerous changes to SimpleViz and LidarScanViz including: * expose visible in viz to Python * introduce ImageMode and CloudMode * bugfix: remove spurious sqrt application to autoleveled images
[20230114]
ouster_client
breaking change: signal multiplier type changed to double to support new FW values of signal multiplier.
breaking change: make_xyz_lut takes mat4d beam_to_lidar_transform instead of lidar_origin_to_beam_origin_mm double to accomodate new FWs. Old reference Python implementation was kept, but new reference was also added.
address an issue that could cause the processed frame being dropped in favor or the previous frame when the frame_id wraps-around.
added a new flag
CONFIG_FORCE_REINIT
forset_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_test
which shows achieved speed up gains by the number of valid returns in lidar scan.add
RAW_HEADERS
ChanField to LidarScan for packing headers and footer (alpha version, may be changed/removed without notice in the future)
python
breaking change: drop defaults parameters of
client.Sensor
constructor.breaking change: change Scans interface Timeout to default to 1 second instead of None
added a new method
init_logger()
to provide control over the logs emitted byclient.Sensor
.add
client.LidarScan
methods__repr__()
and__str__()
.changed default timeout from 1 seconds to 2 seconds
ouster_viz
add
SimpleViz.screenshot()
function and a key handlerSHIFT-Z
to save a screenshot. Can be called from a client thread, and executes asyncronously (i.e. returns immediately and pushes a one off callback to frame buffer handlers)add
PointViz.viewport_width()
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-X
key to SimpleViz to start continuous saving of screenshots on every draw operation. (good for making videos)expose
Camera.set_target
function through pybind
ouster-sdk
Moved ouster_ros to its own repo
pin
openssl
Conan package dependency toopenssl/1.1.1s
due tolibtins
andlibcurl
conflictingopenssl
versions
[20220927]
ouster_client
fix a bug in longform
init_client()
which was not setting timestamp_mode and lidar_mode correctly
[20220826]
drop support for buliding C++ libraries and Python bindings on Ubuntu 16.04
drop support for buliding C++ libraries and Python bindings on Mac 10.13, Mac 10.14
Python 3.6 wheels are no longer built and published
drop support for sensors running FW < 2.0
require C++ 14 to build
ouster_client
add
`CUSTOM0-9
ChanFields to LidarScan 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-sdk
wheelsOuster SDK documentation overhaul with C++/Python APIs in one place
sample data updated to firmware 2.3
ouster_client
fix the behavior of
BeamUniformityCorrector
on azimuth-windowed data by ignoring zeroed out columnsadd overloads in
image_processing.h
to work with single-precision floatsadd support for new
RNG19_RFL8_SIG16_NIR16
single-return andRNG15_RFL8_NIR8
low-bandwidth lidar UDP profiles introduced in firmware 2.3
ouster_viz
switch to glad for OpenGL loading. GLEW is still supported for developer builds
breaking change: significant API update of the
PointViz
library. See documentation for detailsthe
simple_viz
example app andLidarScanViz
utility 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.Scans
not raising a timeout when using thecomplete
flag and receiving only incomplete scans. This could cause readings scans to hang in rare situationsadded bindings for the new
PointViz
API and a new module for higher-level visualizer utilities inouster.sdk.viz
. See API documentation for detailsthe
ouster-sdk
package now includes an example visualizer,simple-viz
, which will be installed on that path for the Python environment
ouster_ros
support new fw 2.3 profiles by checking for inclusion of fields when creating point cloud. Missing fields are filled with zeroes
[20220107]
add support for arm64 macos and linux. Releases are now built and tested on these platforms
add support for Python 3.10
update supported vcpkg tag to 2021.05.12
add preliminary cpack and install support. It should be possible to use a pre-built SDK package instead of including the SDK in the build tree of your project
ouster_client
update cmake package version to 0.3.0
avoid unnecessary DNS lookup when using numeric addresses with
init_client()
disable collecting metadata when sensor is in STANDBY mode
breaking change:
set_config()
will now produce more informative errors by throwingstd::invalid_argument
with an error message when config parameters fail validationuse
SO_REUSEPORT
for UDP sockets on non-windows platformsthe set of fields available on
LidarScan
is now configurable. See the newLidarScan
constructors for detailsadded
RANGE2
,SIGNAL2
andREFLECTIVITY2
channel fields to support handling data from the second returnScanBatcher
will now parse and populate only the channel fields configured on theLidarScan
passed tooperator()()
add support for new configuration parameters:
udp_profile_lidar
,udp_profile_imu
andcolumns_per_packet
add udp ports, the new initialization id field, and udp profiles to the metadata stored in the
sensor_info
structsensor_info::name
is now deprecated and will stop being populated in the futureadd methods to query and iterate over available
LidarScan
fields and field typesbreaking change: removed
LidarScan::block
andLidarScan::data
members. These can’t be supported for different packet profilesthe
LidarScan::Field
defniition has been moved tosensor::ChanField
and 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_format
as these will not be reported by the sensor in some future configurationsadd
packet_frame_id
member function topacket_format
add
col_field
member function topacket_format
for parsing channel field values for an entire measurement blockadd new accessors for measurement headers to
LidarScan
, deprecating the existingheader
member functionrepresent empty sensor config with an empty object instead of null in json representation of the
sensor_config
datatypeupdate cmake package version to 0.2.1
add a conservative socket read timeout so
init_client()
will fail with an error message when another client fails to close a TCP connection (addresses #258)when passed an empty string for the
udp_dest_host
parameter,init_client()
will now configure the sensor 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_info
struct and remove separatestream_info
APIswitch the default pcap encapsulation to ethernet for Ouster Studio compatibility (addresses #265)
ouster_ros
update ROS package version to 0.3.0
allow setting the packet profile in ouster.launch with the
udp_profile_lidar
parameterpublish additional cloud and image topics for the second return when running in dual returns mode
fix
os_node
crash on shutdown due to Eigen alignment flag not being propogated by catkinupdate ROS package version to 0.2.1
the
udp_dest
parameter to ouster.launch is now optional when connecting to a sensor
ouster_viz
the second CLI argument of simple_viz specifying the UDP data destination is now optional
fixed bug in AutoExposure causing more points to be mapped to near-zero values
add functionality to display text over cuboids
python
update ouster-sdk version to 0.3.0
improve heuristics for identifying sensor data in pcaps, including new packet formats
release builds for wheels on Windows now use the VS 2017 toolchain and runtime (previously 2019)
fix potential use-after-free in
LidarScan.fields
update ouster-sdk version to 0.3.0b1
return an error when attempting to initialize
client.Sensor
in STANDBY modecheck for errors while reading from a
Sensor
packet source and waiting for a timeout. This should make stopping a process withSIGINT
more reliableadd PoC bindings for the
ouster_viz
library with a simple example driver. See theouster.sdk.examples.viz
moduleadd bindings for new configuration and metadata supported by the client library
breaking change: the
ChanField
enum is now implemented as a native binding for easier interop with C++. Unlike Python enums, the bound class itself is no longer sized or iterable. UseChanField.values
to iterate over allChanField
values orLidarScan.fields
for fields available on a particular scan instancebreaking change: arrays returned by
LidarPacket.field
andLidarPacket.header
are now immutable. Modifying the underlying packet buffer through these views was never fully supporteddeprecate
ColHeader
,LidarPacket.header
, andLidarScan.header
in favor of new properties:timestamp
,measurement_id
,status
, andframe_id
replace
LidarScan
with native bindings implementing the same APIxyzlut
can now accept a range image as an ndarray, not just aLidarScan
update ouster-sdk version to 0.2.2
fix open3d example crash on exit when replaying pcaps on macos (addresses #267)
change open3d normalization to use bound AutoExposure
[20210608]
ouster_client
update cmake package version to 0.2.0
add support for new signal multiplier config parameter
add early version of a C++ API covering the full sensor configuration interface
increase default initialization timeout to 60 seconds to account for the worst case: waking up from STANDBY mode
ouster_pcap
record_packet()
now requires passing in a capture timestamp instead of using current 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_node
now outputs 16-bit images, which should be more useful. Range image output is now in units of 4mm instead of arbitrary scaling (addresses #249)img_node
now outputs reflectivity images as well on thereflec_image
topicchange
img_node
topics to match terminology in sensor documentation:ambient_image
is nownearir_image
andintensity_image
is nowsignal_image
update 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
viz
flag on the launch file now runs rviz (addresses #236)clean up package.xml and ensure that dependencies are installable with rosdep (PR #219)
the
metadata
argument to ouster_ros launch file is now required. No longer defaults to a name based on the hostname of the sensor
ouster_viz
update reflectivity visualization for changes in the upcoming 2.1 firmware. Add new colormap and handle 8-bit reflectivity values
move most of the visualizer code out of public headers and hide some implementation details
fix visualizer bug causing a small viewport when resizing the window on macos with a retina display
python
update ouster-sdk version to 0.2.1
fix bug in determining if a scan is complete with single-column azimuth windows
closed PacketSource iterators will now raise an exception on read
add examples for visualization using open3d (see:
ouster.sdk.examples.open3d
)add support for the new signal multiplier config parameter
preserve capture timestamps on packets read from pcaps
first release: version 0.2.0 of ouster-sdk. See the README under the
python
directory for details and links to documentation
[20201209]
Changed
switched to date-based version scheme. No longer tracking firmware versions
added a top-level
CMakeLists.txt
. Client and visualizer should no longer be built separately. See the README for updated build instructionscmake cleanup, including using custom “find modules” to provide better compatibility between different versions of cmake
respect standard cmake
BUILD_SHARED_LIBS
andCMAKE_POSITION_INDEPENDENT_CODE
flagsmake
ouster_ros
easier to use as a dependency by bundling the client and viz libraries together into a single library that can be used through catkinupdated client example code. Now uses more of the client APIs to capture data and write to a CSV. See
ouster_client/src/example.cpp
replace callback-based
batch_to_scan
function withScanBatcher
. Seelidar_scan.h
for API docs and the new client example codeupdate
LidarScan
API. Now includes accessors for measurement blocks as well as channel data fields. Seelidar_scan.h
for 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_info
for conveniently passing around an extra user-supplied transforma utility function to convert
lidar_scan
data 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_ros
now requires C++14 to support building against noetic librariesreplaced
batch_to_iter
withbatch_to_scan
, a simplified function that writes directly to alidar_scan
instead 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_ros
is 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_viz
andouster_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_origin
parameter reported by sensorsclient and
os_node
andsimple_viz
now 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_node
output 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_viz
andviz_node
. Toggle display usingg
key. 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_traits
to makebatch_to_iter
work 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_ros
build (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_prefix
parameter
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_node
now queries and uses calibrated beam angles from the sensoros1_node
now queries and uses imu / lidar frames from the sensoros1_node
reads 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
metadata
parameter toos1.launch
to override location of metadataadded
viz
parameter toos1.launch
to run the example visualizer with ROSadded
image
parameter toos1.launch
to publish image topics to rviz (addresses #21)added range field to
PointOS1
Changed
split point-cloud publishing out of
os1_node
intoos1_cloud_node
example visualizer controls:
press
m
to cycle through color modes instead ofi
,z
,Z
,r
r
now 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_client
now depends on thejsoncpp
libraryswitched order of fields in
PointOS1
to 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