- 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
- 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