feat: 3d path planning#2310
Conversation
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
Greptile SummaryThis PR introduces a 3D multi-level surface (MLS) path planner implemented in Rust with a Python wrapper and evaluation harness. The planner voxelizes an incoming point cloud, extracts standable surfaces with morphological closing, places graph nodes via wall-distance Dijkstra + NMS, builds Voronoi-based node edges, and plans paths using A*/Dijkstra on the node graph — achieving ~0.28ms planning on a 2M-voxel map.
Confidence Score: 5/5Safe to merge. The Rust planner core is well-tested and logically sound; the only findings are in the dev-tool evaluator and are cosmetic/timing edge cases. The Rust core handles all correctness-critical paths (surface extraction, Dijkstra, node placement, path assembly) with extensive unit tests and careful edge-case handling. Issues flagged are limited to the Python evaluator: a narrow timing window where a delayed empty-path response from an earlier start_pose could be miscounted as a goal response, and a possible no-op dimos/navigation/nav_3d/evaluator/evaluator.py — state reset ordering and timestamp attribute correctness. Important Files Changed
Sequence DiagramsequenceDiagram
participant PC as PointCloud Source
participant MLS as MLS Planner (Rust)
participant UI as ClickStartGoalRouter
participant Viz as RerunBridge
PC->>MLS: PointCloud2 (global_map)
MLS->>MLS: voxelize → extract_surfaces
MLS->>MLS: place_nodes (wall-dist Dijkstra + NMS)
MLS->>MLS: build_node_edges (Voronoi Dijkstra)
MLS->>Viz: surface_map (PointCloud2)
MLS->>Viz: nodes (PointCloud2)
MLS->>Viz: node_edges (Path / LineSegments3D)
UI->>MLS: PoseStamped (start_pose)
MLS->>Viz: empty path (clears stale display)
UI->>MLS: PoseStamped (goal_pose)
MLS->>MLS: snap poses → Dijkstra path on node graph
MLS->>Viz: path (Path)
Reviews (3): Last reviewed commit: "Merge branch 'main' into andrew/feat/dev..." | Re-trigger Greptile |
Problem
3d multi level path planning
Closes DIM-XXX
Solution
Added the MLS planner (multi level surface). The idea is to place high level nodes on the surfaces of the map and connect neighboring nodes. Then we can do planning on these nodes which is much faster and has cached paths than planning on the surface directly.
Not included yet:
How to Test
cargo testdimos run path-planner-eval, then click start and goal positions on the surfaceArtifact generation on entire input voxel map (2M voxels) takes ~200ms. Planning takes 0.28ms.
Contributor License Agreement