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.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
- 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.
- 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.
- 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 port - Add higher level sensor client interface
`ouster::sensor::SensorScanSource
which producesLidarScan
s from multiple sensors - Add
ouster.sdk.client.SensorPacketSource
which 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_names
argument to each scan source and toopen_source
to specify which fields to decode - Add metadata validation functionality
- Add vendored json library
- Improved multi sensor pcap reading
- Improve
ScanBatcher
to releaseLidarScan
as soon as they are completed ScanBatcher
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
command - Add
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
.
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.
- 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.
- Update KissICP version from 0.4.0 to 1.0.0.
- Add multi-sensor support.
Important: ouster-sdk installed from pypi now requires glibc >= 2.28.
- 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 files - Removed
updated_metadata_string()
andoriginal_string()
fromsensor_info
- Added
to_json_string()
tosensor_info
to convert asensor_info
to a non-legacy metadata JSON string - Unified Python and C++
Packet
andPacketFormat
classes - Added
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 information - Add
get_product_info
tosensor_info/SensorInfo
to 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
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
- Support viewing custom
LidarScan
fields in viz - Support viewing custom
LidarScan
3 channel fields in viz as RGB - [BUGFIX] Prevent OpenBLAS from using high amounts of CPU spin waiting
- 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
- 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 sensor - Add chainable
ouster-cli source ... stats
command - Add chainable
ouster-cli source ... clip
command to discard points outside a provided range - Add
--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
- Move mapping into the sdk as
ouster.sdk.mapping
- Better handle looping while mapping
- Improve automatic downsample voxel size calculation
- Updated VCPKG libraries to 2024.04.26
- [BREAKING] the
open_source
method now returns aScanSource
by default, not aMultiScanSource
.
- 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
- Improved the client initialization latency.
- Fixed several issues with the documentation.
- 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.
- Added a new
async_client_example.cpp
C++ example.
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 sources- For non-live sources the
MultiScanSource
has the option to choose LidarScan(s) by index or choose a subset of scans using slicing operation - The
MultiScanSource
interface has the ability to fallback toScanSource
using thesingle_source(sensor_idx)
,ScanSource
interface yield a single LidarScan on iteration rather than a List - The
ScanSource
interface obtained viasingle_source
method supports same indexing and and slicing operations as theMultiScanSource
- For non-live sources the
- Added a generic
open_source
that accepts sensor urls, or a path to a pcap recording or an osf file - Add 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 attempt - Display a progress bar during index of pcap file or osf (if unindexed)
- Added new
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.
- 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
- 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.
- 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.
- [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.
- 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
- 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.
- workaround: to have
- This will be the last release that supports Python 3.7.
- This will be the last release that supports macOS 10.15.
- Added point cloud accumulation support
- Added an
PointViz::fps()
method to return the operating frame rate as adouble
- [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()
method - The
updated_metadata_string()
now returns a JSON string reflecting any modifications tosensor_info
to_string
is now marked as deprecated
- new fields added:
- [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
- Added
source <FILE> slam
andsource <FILE> slam viz
commands - All metadata CLI options are changed to
-m/--metadata
- Added discovery for FW 3.1+ sensors
- Set signal multiplier by default in sensor/SOURCE sensor config
- use
PYBIND11_MODULE
instead of deprecated module constructor - remove deprecated == in pybind for
.is()
- [bugfix] Fix report of fragmentation for ouster-cli pcap/SOURCE pcap info
- [bugfix] Fixed issue regarding windows mDNS in discovery
- [bugfix] Fixed cli pcap recording timestamp issue
- [BREAKING] CSV output ordering switched
ouster-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
- The dependency specifier for
scipy
is invalid per PEP-440 get_config
always returns true- Repeated CTRL-C can cause a segmentation fault while visualizing a point cloud
- Update vcpkg ref of build to 2023-02-24
- Add Ouster OSF C++/Python library to save stream of LidarScans with metadata
- Add
LidarScan.pose
with poses per column - Add
_client.IndexedPcapReader
and_client.PcapIndex
to enable random pcap file access by frame number - [BREAKING] remove
ouster::Imu
object - [BREAKING] change the return type of
ouster::packet_format::frame_id
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 field - Make timeout on curl more configurable
- [BREAKING] remove encoder_ticks_per_rev (deprecated)
- [BREAKING] Changed Python binding for
Cloud.set_column_poses()
to accept[Wx4x4]
array of poses, column-storage order - bugfix: fix label re-use
- Add
LidarScan.pose
handling toviz.LidarScanViz
, and newT
keyboard binding to toggle column poses usage
- bugfix: Use unordered map to store stream_keys to avoid comparison operators on map
- 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
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
- Default metadata output across all functionality has been switched to the non-legacy format
- 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
- update viz camera with other objects in draw
- add seek method to PcapReader
- add port guessing logic
- 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
- 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)
- 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
- 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()
functions - add
PointViz.push/pop_frame_buffer_handler()
to attach a callbacks on every frame draw update that calls from the main rendering loop. - add
SHIFT-X
key to SimpleViz to start continuous saving of screenshots on every draw operation. (good for making videos) - expose
Camera.set_target
function through pybind
- Moved ouster_ros to its own repo
- pin
openssl
Conan package dependency toopenssl/1.1.1s
due tolibtins
andlibcurl
conflictingopenssl
versions
- fix a bug in longform
init_client()
which was not setting timestamp_mode and lidar_mode correctly
- 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
- add
`CUSTOM0-9
ChanFields to LidarScan object - fix parsing measurement status from packets: previously, with some UDP profiles, higher order bits could be randomly set
- add option for EIGEN_MAX_ALIGN_BYTES, ON by default
- use of sensor http interface for comms with sensors for FW 2.1+
- propogate C++ 17 usage requirement in cmake for C++ libraries built as C++17
- allow vcpkg configuration via environment variables
- fix a bug in sensor_config struct equality comparison operator
- clean up GL context logic to avoid errors on window/intel UHD graphics
- windows extension modules are now statically linked to avoid potential issues with vendored dlls
- 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
- change single return parsing for FW 2.3.1
- single return parsing for FW 2.3.1 reflects change from ouster_client
- update supported vcpkg tag to 2022.02.23
- update to manylinux2014 for x64 linux
ouster-sdk
wheels - Ouster SDK documentation overhaul with C++/Python APIs in one place
- sample data updated to firmware 2.3
- fix the behavior of
BeamUniformityCorrector
on azimuth-windowed data by ignoring zeroed out columns - add overloads in
image_processing.h
to work with single-precision floats - add support for new
RNG19_RFL8_SIG16_NIR16
single-return andRNG15_RFL8_NIR8
low-bandwidth lidar UDP profiles introduced in firmware 2.3
- switch to glad for OpenGL loading. GLEW is still supported for developer builds
- breaking change: significant API update of the
PointViz
library. See documentation for details - the
simple_viz
example app andLidarScanViz
utility have been removed. Equivalent functionality is now provided via Python - add basic support for drawing 2d and 3d text labels
- update to OpenGL 3.3
- 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 situations - added bindings for the new
PointViz
API and a new module for higher-level visualizer utilities inouster.sdk.viz
. See API documentation for details - the
ouster-sdk
package now includes an example visualizer,simple-viz
, which will be installed on that path for the Python environment
- support new fw 2.3 profiles by checking for inclusion of fields when creating point cloud. Missing fields are filled with zeroes
- 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
- 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 validation - use
SO_REUSEPORT
for UDP sockets on non-windows platforms - the set of fields available on
LidarScan
is now configurable. See the newLidarScan
constructors for details - added
RANGE2
,SIGNAL2
andREFLECTIVITY2
channel fields to support handling data from the second return ScanBatcher
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
struct sensor_info::name
is now deprecated and will stop being populated in the future- add methods to query and iterate over available
LidarScan
fields and field types - breaking change: removed
LidarScan::block
andLidarScan::data
members. These can't be supported for different packet profiles - the
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 deprecated - deprecate accessing encoder values and frame ids from measurement blocks using
packet_format
as these will not be reported by the sensor in some future configurations - add
packet_frame_id
member function topacket_format
- add
col_field
member function topacket_format
for parsing channel field values for an entire measurement block - add new accessors for measurement headers to
LidarScan
, deprecating the existingheader
member function - represent empty sensor config with an empty object instead of null in json representation of the
sensor_config
datatype - update cmake package version to 0.2.1
- add a conservative socket read timeout so
init_client()
will fail with an error message when another client fails to close a TCP connection (addresses #258) - when passed an empty string for the
udp_dest_host
parameter,init_client()
will now configure the sensor 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)
- report additional information in the
packet_info
struct and remove separatestream_info
API - switch the default pcap encapsulation to ethernet for Ouster Studio compatibility (addresses #265)
- update ROS package version to 0.3.0
- allow setting the packet profile in ouster.launch with the
udp_profile_lidar
parameter - publish additional cloud and image topics for the second return when running in dual returns mode
- fix
os_node
crash on shutdown due to Eigen alignment flag not being propogated by catkin - update ROS package version to 0.2.1
- the
udp_dest
parameter to ouster.launch is now optional when connecting to a sensor
- 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
- update ouster-sdk version to 0.3.0
- improve heuristics for identifying sensor data in pcaps, including new packet formats
- release builds for wheels on Windows now use the VS 2017 toolchain and runtime (previously 2019)
- fix potential use-after-free in
LidarScan.fields
- update ouster-sdk version to 0.3.0b1
- return an error when attempting to initialize
client.Sensor
in STANDBY mode - check for errors while reading from a
Sensor
packet source and waiting for a timeout. This should make stopping a process withSIGINT
more reliable - add PoC bindings for the
ouster_viz
library with a simple example driver. See theouster.sdk.examples.viz
module - add bindings for new configuration and metadata supported by the client library
- breaking change: the
ChanField
enum is now implemented as a native binding for easier interop with C++. Unlike Python enums, the bound class itself is no longer sized or iterable. UseChanField.values
to iterate over allChanField
values orLidarScan.fields
for fields available on a particular scan instance - breaking change: arrays returned by
LidarPacket.field
andLidarPacket.header
are now immutable. Modifying the underlying packet buffer through these views was never fully supported - deprecate
ColHeader
,LidarPacket.header
, andLidarScan.header
in favor of new properties:timestamp
,measurement_id
,status
, andframe_id
- replace
LidarScan
with native bindings implementing the same API xyzlut
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
- 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
record_packet()
now requires passing in a capture timestamp instead of using current time- work around libtins issue where capture timestamps for pcaps recorded on Windows are always zero
- add preliminary C++ API for working with pcap files containing a single sensor packet capture
- 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
topic- change
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
- 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
- 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
- switched to date-based version scheme. No longer tracking firmware versions
- added a top-level
CMakeLists.txt
. Client and visualizer should no longer be built separately. See the README for updated build instructions - cmake cleanup, including using custom "find modules" to provide better compatibility between different versions of cmake
- respect standard cmake
BUILD_SHARED_LIBS
andCMAKE_POSITION_INDEPENDENT_CODE
flags - make
ouster_ros
easier to use as a dependency by bundling the client and viz libraries together into a single library that can be used through catkin - updated client example code. Now uses more of the client APIs to capture data and write to a
CSV. See
ouster_client/src/example.cpp
- replace callback-based
batch_to_scan
function withScanBatcher
. Seelidar_scan.h
for API docs and the new client example code - update
LidarScan
API. Now includes accessors for measurement blocks as well as channel data fields. Seelidar_scan.h
for API docs - add client version field to metadata json, logs, and help text
- client API renaming to better reflect the Sensor Software Manual
- support for ROS noetic in
ouster_ros
. Note: this may break building on very old platforms without a C++14-capable compiler - an extra extrinsics field in
sensor_info
for conveniently passing around an extra user-supplied transform - a 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 angle - mask support in the visualizer library in
ouster_viz
ouster_ros
now requires C++14 to support building against noetic libraries- replaced
batch_to_iter
withbatch_to_scan
, a simplified function that writes directly to alidar_scan
instead of arbitrary iterator
- 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
no changes
no changes
- preliminary support for Windows and macOS for
ouster_viz
andouster_client
- 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 sensors - client and
os_node
andsimple_viz
now avoid setting the lidar and timestamp modes when connecting to a client unless values are explicitly specicified
- 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 offset- minor regression with destaggering in img_node output in previous beta
- 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
- use random ports for lidar and imu data by default when unspecified
- post-processing to improve ambient image uniformity in visualizer
- make timestamp mode configurable via the client (PR #97)
- 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
- 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
- install directives for
ouster_ros
build (addresses #50)
- flip the sign on IMU acceleration output to follow usual conventions
- increase the update rate in the visualizer to ~60hz
- visualizer issue where the point cloud would occasionally occasionally not be displayed using newer versions of Eigen
- allow renaming tf ids using the
tf_prefix
parameter
- 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
- 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)
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 calibration- ROS example code now publishes tf2 transforms for imu / lidar frames (addresses #12)
- added
metadata
parameter toos1.launch
to override location of metadata - added
viz
parameter toos1.launch
to run the example visualizer with ROS - added
image
parameter toos1.launch
to publish image topics to rviz (addresses #21) - added range field to
PointOS1
- 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 position- range/signal images automatically resized to fit window height
- press
- 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
library- switched 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 keyboard camera controls in example visualizer
- removed panning and rotating of the image panel in example visualizer
- 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