Repository navigation
Conversation
…tion decompensation PoseInterpolator takes typed array-like poses and timestamps (in_range as well), documents the timestamps as microseconds, and keeps its scipy interpolants and the homogeneous row private. The parameters of MotionCompensator and the reference timestamp and anchor frame of its (de)compensation methods are keyword-only, like the optional parameters of the other public APIs. MotionCompensator.motion_decompensate_points returns a MotionCompensator.MotionDecompensationResult that records the decompensated points together with the reference frame, reference timestamp and anchor frame, mirroring motion_compensate_points. The compensation result keeps its start/end point pair, so decompensation gets its own type rather than reusing it. Both result types are documented field by field. The in-repo converters read the points from the result. BREAKING CHANGE: MotionCompensator.motion_decompensate_points returns a MotionCompensator.MotionDecompensationResult instead of an array; read the points from its xyz_pointtime field. PoseInterpolator.slerp, f_t and last_row are private (_slerp, _f_t, _last_row); use interpolate_to_timestamps or extrapolate_to_timestamps instead. MotionCompensator(pose_graph, *, parameters) takes its parameters by keyword, and the reference_timestamp_us and anchor_frame_id arguments of motion_compensate_points and motion_decompensate_points are keyword-only.
janickm
force-pushed
the
stack/v20-rc-cleanup/04-geometry-cleanup
branch
from
November 15, 2026 13:15
c55590a to
e2ca57a
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Small cleanup of the motion compensation and pose interpolation classes in
ncore.geometrybefore the 20.0 freeze. The free functions (se3_inverse,transform_point_cloud,bbox_pose, ...) are unchanged.Stack (merge from the top to land all six at once):
Group/ArrayAPIValueErrorfor user-facing validationChanges
MotionCompensator.motion_decompensate_pointsreturns aMotionCompensator.MotionDecompensationResult(the decompensated pointsxyz_pointtimeplus the reference frame, reference timestamp and anchor frame), mirroringmotion_compensate_points. It is a separate type because the compensation result holds a start / end point pair, while decompensation yields one point set. Both result types are documented field by field. The in-repo converters read the points from the result.MotionCompensator(pose_graph, *, parameters), andreference_timestamp_us/anchor_frame_idof both (de)compensation methods are keyword-only, like the optional parameters of the other public APIs.PoseInterpolatortakes typed array-like poses and timestamps (in_rangetoo) and documents the time domain. Its scipy interpolants and homogeneous row are private (_slerp,_f_t,_last_row).None.Testing
MotionCompensator, covering the converter-facing path (the dataset converter tests need datasets).slerp(True is not false : slerp), recording the unresolved reference timestamp.bazel test //... --config=no-gpugreen on all four interpreters,bazel build //...(ty), docs with warnings as errors,bazel run //:format.checkclean.Upgrading
xyz = mc.motion_decompensate_points(...)->xyz = mc.motion_decompensate_points(...).xyz_pointtime.MotionCompensator(pose_graph, params)->MotionCompensator(pose_graph, parameters=params); passreference_timestamp_us/anchor_frame_idby keyword.PoseInterpolator.slerp,f_tandlast_roware private: useinterpolate_to_timestamps/extrapolate_to_timestamps.Type of Change
Checklist
bazel test //...)bazel run //:format)