- 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