github NVIDIA/ncore v20.0.0-beta.4

pre-release30 minutes ago

Highlights

Fourth beta of NCore 20, adding FTheta tangential distortion and faster motion compensation on top of beta.3: APIs are expected to be stable for 20.0. Install with pip install --pre nvidia-ncore or nvidia-ncore==20.0.0b4. Compared to NCore 19.8, see the beta.3 release notes and the earlier pre-releases they link.

Faster motion compensation (since beta.3)

  • MotionCompensator.Parameters(method, interpolation_tolerance) selects how point clouds are motion (de)compensated, passed as MotionCompensator(pose_graph, parameters), MotionCompensator.from_sensor_rig(..., parameters=...), and SequenceLoaderV4(..., motion_compensator_parameters=...) / SequenceLoaderV4.open_async(...) for the point clouds of a sequence's lidar / radar sensors.
  • MotionCompensator.Parameters.Method.EXACT (default) keeps the results (up to float rounding of the summation order) and is ~1.5x faster: ~59 ms instead of ~89 ms per frame of a spinning lidar (~335k points).
  • MotionCompensator.Parameters.Method.INTERPOLATED evaluates the poses on an adaptive grid of timestamps and linearly interpolates the transformations of the points in between, within interpolation_tolerance of the exact ones (default 1e-5 m, in addition to float32 rounding): ~16 ms per frame (~5.5x faster than beta.3).
  • PoseGraphInterpolator.get_path_timestamps_us(source, target): the pose timestamps of the time-dependent edges between two nodes.

FTheta tangential distortion coefficients (since beta.3, also released for NCore 19 in 19.9.0)

  • FThetaCameraModelParameters.tangential_coeffs ([t0, t1], in pixels, default zeros) holds the tangential distortion of FTheta calibrations, which was previously dropped (up to ~12 px in the image corners of wide-angle cameras). Projection evaluates the term as DriveWorks does, and unprojection inverts it with a fixed number of iterations (FThetaCameraModel.tangential_iterations, worst round trip error ~5e-4 px on a 120 deg FOV camera with strong tangential distortion).
    • Models without tangential coefficients produce bit-identical results.
    • Stored data is unchanged: all-zero coefficients (and an identity linear_cde) are omitted when encoding, and data without the key loads as zeros. Readers older than beta.4 / 19.9 ignore the coefficients and project as if they were zero.
    • Non-zero coefficients require max_angle < pi/2.
  • Faster camera models without distortion terms: FTheta skips the linear term when linear_cde is the identity, and OpenCV pinhole skips tangential / thin-prism terms whose coefficients are all zero (outputs are bit-identical). New parameter properties FThetaCameraModelParameters.has_linear_term / has_tangential_distortion, OpenCVPinholeCameraModelParameters.has_tangential_distortion / has_thin_prism_distortion.

Upgrading from beta.3

  • SequenceLoaderV4.LidarSensor / RadarSensor / RayBundleSensor require a motion_compensator argument when constructed directly (SequenceLoaderV4.get_lidar_sensor / get_radar_sensor pass the loader's). Loader users are not affected.

For upgrading from NCore 19.x, see the beta.3 release notes.

Changes since v20.0.0-beta.3

➕ Added

  • (sensors) add FTheta tangential distortion coefficients (b7a158d) - @janickm

⚡ Performance

  • (geometry) add an interpolated motion compensation method (84d965b) - @janickm
  • (sensors) skip zero tangential and thin-prism terms in OpenCV pinhole (2419967) - @janickm
  • (sensors) skip identity linear term in FTheta camera model (1c0c1bf) - @janickm

📚 Documentation

🔧 Chore

  • map Nick Lucas to his GitHub username in release notes (0a4d576) - @janickm
All changes since v19.8.0

➕ Added

🪲 Fixed

  • (sensors) keep projection valid indices 1-D for single valid points (b47c5a0) - @nlucas-nvidia
  • (sensors) apply the converged Newton step in the bracketed fisheye inverse (16d2f65) - @janickm
  • (sensors) bracket the OpenCV fisheye inverse to the monotonic branch (71a0602) - @janickm
  • (data) read single poses with their stored dtype (1de0192) - @janickm
  • type narrowing in ncore_export_ply and the argoverse2 converter test (348262a) - @janickm
  • (kitti) keep lidar point timestamps integer (5bf8f9f) - @janickm

⚡ Performance

  • (geometry) add an interpolated motion compensation method (84d965b) - @janickm
  • (sensors) skip zero tangential and thin-prism terms in OpenCV pinhole (2419967) - @janickm
  • (sensors) skip identity linear term in FTheta camera model (1c0c1bf) - @janickm
  • (data) release index tail reads of opened archives (10c2609) - @janickm
  • (data) open remote indexed tar archives with a single request (f57784c) - @janickm
  • (data) direct chunk reads with zarr-python 3 (979882a) - @janickm
  • (data) node cache for component readers (0d6c43d) - @janickm
  • (data) cache decoded label types and schemas in CameraLabelDescriptor.from_dict (1813046) - @janickm
  • (data) load label and point-cloud reader data on first use (fe6eaf2) - @janickm

🔄 Changed

  • (sensors) construct sensor return types through their defining class (e7c26c3) - @janickm
  • (data) restructure IndexedTarArchive (fd9a4f0) - @janickm
  • BREAKING (data) implement IndexedTarArchive independently of zarr-python (cd3078f) - @janickm

📚 Documentation

⚙️ CI

🏗️ Build

🎨 Style

🔧 Chore

  • map Nick Lucas to his GitHub username in release notes (0a4d576) - @janickm

🧪 Tests

  • (sensors) check camera ray valid flags in the unprojection tests (22db77d) - @janickm
  • (sensors) share the lidar model between tests of a parameterization (c490c63) - @janickm
  • run tests with a single OpenMP thread (2d4263f) - @janickm
  • make tests independent of scipy / numpy versions (f2d59b0) - @janickm

Changes since v20.0.0-beta.3: v20.0.0-beta.3...v20.0.0-beta.4
Full diff: v19.8.0...v20.0.0-beta.4

Don't miss a new ncore release

NewReleases is sending notifications on new releases.