Skip to content

Add E57 import and pose write-back to step 2 - #515

Merged
JanuszBedkowski merged 1 commit into
mainfrom
mp/e57
Sep 5, 2026
Merged

Add E57 import and pose write-back to step 2#515
JanuszBedkowski merged 1 commit into
mainfrom
mp/e57

Conversation

@michalpelka

Copy link
Copy Markdown
Contributor

Load E57 point clouds into multi_view_tls_registration (step 2) and write registered poses back into the source .e57 files.

-Added submodules for Xerces and E57.
-Added option to load e57 to step2
-Added option to update e57 header
-Added option to save e57 from step2
-Added option to save e57 from lidar_trajectory_viewer.

Proof:

  • loaded e57 from public test file
  • rotated pose with Lio segment editor
  • updated e57 header
  • Loaded with cloud Compare:
image

Load E57 point clouds into multi_view_tls_registration (step 2) and write
registered poses back into the source .e57 files.

- Vendor Apache Xerces-C (v3.3.0) and libE57Format (v3.2.0) as git
  submodules, built statically from source; cmake/FindXercesC.cmake
  redirects libE57Format's find_package(XercesC) at the in-tree target so
  no system package is needed.
- core/e57_utils: load_e57() decodes every Data3D block (cartesian or
  spherical coords, intensity, RGB, timestamps, embedded pose);
  rewrite_e57_poses() copies a file verbatim (points, all point fields,
  line groups, 2D images) while replacing selected Data3D poses, moving
  attached images by the same delta.
- Step 2 GUI: "Open e57" menu item (pre-session and in File > Open) builds
  one PointCloud per scan using the embedded pose as the initial pose;
  E57 loads never write a session/result folder. "Update e57 poses"
  writes the current registered poses back, either overwriting the
  originals or as <name>_updated.e57.
- PointCloud gains non-serialized e57_source_path / e57_scan_index for the
  write-back; File > Open is also reachable once a session is loaded.

New mandeye::e57io::save_e57() writes a list of scans (borrowed point/
intensity/colour/timestamp buffers + a pose each) to a fresh multi-block
.e57 file, streaming points in 1M-point chunks. Cartesian coordinates are
written as double FloatNodes; intensity as 0..65535, colour as 0..255.

Step 2 gains a File > "Save session as e57" item: one Data3D block per
point cloud, points in scan-local frame, each block carrying
m_pose (+ session offset) as its file-level pose. Round-trips through
load_e57 (geometry, intensity, colour presence and pose verified).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

@mwlasiuk mwlasiuk left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks nice

@JanuszBedkowski
JanuszBedkowski merged commit a400f4c into main Sep 5, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants