# Coverage Planner Feature Comparison ## slic3r_coverage_planner (current OpenMower) vs Fields2Cover > Reference: current slic3r behaviour as described by the OpenMower community. --- ## Feature-by-feature breakdown ### 1. Outline covered by rounds, inner to outer | | slic3r | Fields2Cover | |---|---|---| | **Status** | ✅ Works well | ⚠️ Partial | | **Notes** | Generates multiple perimeter passes as a native 3D-printing concept — inward offset rings are a first-class feature. | The headland generator creates a single headland band of configurable width (expressed as multiples of robot width). There is currently **only one headland generator** (`ConstHL`), and it does not natively produce multiple inward-offset perimeter passes as separate driving tracks the way slic3r does. You would need to call it repeatedly with shrinking widths to replicate this. | --- ### 2. Rounds around obstacles | | slic3r | Fields2Cover | |---|---|---| | **Status** | ✅ Works well | ⚠️ Requires workaround | | **Notes** | Slic3r treats obstacles as island polygons and naturally generates perimeter passes around them, exactly as it does for the outer border. | F2C v2.0 supports obstacles and non-convex fields via decomposition, but it does not generate dedicated perimeter passes *around obstacles* the way slic3r does. Obstacle areas are excluded from swaths; navigating around them in perimeter-pass style would need to be implemented separately. | --- ### 3. Rounds near outline and obstacle merged into one track | | slic3r | Fields2Cover | |---|---|---| | **Status** | ✅ Works well | ❌ Not supported | | **Notes** | When an obstacle is close enough to the outer boundary, slic3r intelligently merges the perimeter passes into a single combined track, avoiding a tiny gap that would be impractical to mow. | Fields2Cover has no equivalent merging logic. Headland and obstacle exclusion zones are computed independently. A narrow strip between an obstacle's exclusion zone and the field's headland zone would either be included in the fill swaths (possibly poorly) or dropped entirely. This would need custom post-processing. | --- ### 4. Smooth transitions between rounds | | slic3r | Fields2Cover | |---|---|---| | **Status** | ✅ Works well | ✅ Supported, and better | | **Notes** | Slic3r generates smooth spiral-like transitions between perimeter rings. | F2C's path planner supports Dubins curves, Dubins with continuous curvature (CC), Reeds-Shepp curves, and Reeds-Shepp CC. The CC variants explicitly smooth out instantaneous curvature changes, making the result more physically accurate for a real vehicle with a minimum turning radius. This is *more* capable than slic3r's transitions, but applies to swath-to-swath turns rather than ring-to-ring transitions specifically. | --- ### 5. Fill using parallel lines | | slic3r | Fields2Cover | |---|---|---| | **Status** | ✅ Works well | ✅ Fully supported | | **Notes** | Standard infill pattern from 3D printing. | F2C's swath generator produces parallel line fills natively. The `BruteForce` generator finds the optimal angle to minimise number of swaths. Multiple route ordering patterns are available: Boustrophedon (simple sequential), Snake (skip-one-return, reduces sharp turns), Spiral, and a fully optimised order via OR-Tools. This is richer than slic3r's fill ordering. | --- ### 6. Multiple fills for complex/concave shapes | | slic3r | Fields2Cover | |---|---|---| | **Status** | ✅ Works well | ✅ Supported, explicit step required | | **Notes** | Slic3r automatically detects when a single fill region doesn't work and splits into multiple regions — this is implicit and requires no configuration. | F2C v2.0 achieves this via the **cell decomposition** step (Trapezoidal or Boustrophedon decomposition). For an L-shaped field, decomposing first then applying swath generation can reduce swath count dramatically (e.g. from 84 to 26 in the documented example). However, this is an *explicit* pipeline step — the user must decide when to decompose and configure it. It is not automatic. The decomposition also requires a specific two-pass headland workflow to keep the route planner connected across decomposed cells. | --- ### 7. Consistent fill angle across all regions, easily configurable | | slic3r | Fields2Cover | |---|---|---| | **Status** | ✅ Works well | ✅ Fully supported | | **Notes** | One angle parameter applies to all fill regions. | F2C passes the sweep angle directly to the swath generator as a parameter. When using decomposition across multiple cells, all cells can be given the same angle. The `BruteForce` generator can also *find* the optimal angle automatically if you prefer that over a fixed value. | --- ### 8. Half-circle turns between fill lines | | slic3r | Fields2Ford | |---|---|---| | **Status** | ✅ Works well | ✅ Supported, and more flexible | | **Notes** | Fixed half-circle U-turns between parallel swaths. | F2C supports four turn types: straight, Dubins, Dubins-CC, and Reeds-Shepp(-CC). For a non-holonomic mower with a minimum turning radius, Dubins or Dubins-CC produces the shortest valid turn — which may be a half-circle or tighter, depending on the robot parameters. This is physically more correct than a fixed half-circle, but requires setting `robot.setMinTurningRadius()` correctly. | --- ### 9. Inter-path navigation done at runtime via costmap (not pre-planned) | | slic3r | Fields2Cover | |---|---|---| | **Status** | ✅ Deliberate design choice | ✅ Pre-planned, but nav stack still usable | | **Notes** | Transitions between outlines, obstacle rounds, and fill regions are not part of the planned path — the nav stack handles them dynamically using a costmap. This keeps the planner simple and lets obstacle avoidance handle surprises. | F2C's route planner (using OR-Tools or known patterns) generates the full ordered sequence of swaths *and* the headland traversal paths connecting them. The complete path including transitions is output as a single `F2CPath`. This is more deterministic and efficient, but means the pre-planned transitions could conflict with unexpected runtime obstacles — you still need a local planner (e.g. TEB) on top for safety. | --- ### 10. Paths ordered in a sensible way | | slic3r | Fields2Cover | |---|---|---| | **Status** | ✅ Works reasonably | ✅ More principled, and optimisable | | **Notes** | Slic3r uses printing-derived heuristics to order paths in a practical way, but there is no formal optimisation. | F2C offers multiple explicit strategies: Boustrophedon (simple sequential), Snake (fewer sharp turns), Spiral (useful for capacity-limited machines), and a full OR-Tools optimiser that finds the globally shortest route. A defined start/end point can also be enforced. This is strictly more capable, at the cost of needing to choose a strategy. | --- ### 11. Input as polygon with holes; border = mower centre line | | slic3r | Fields2Cover | |---|---|---| | **Status** | ✅ Works well | ✅ Fully supported | | **Notes** | The input polygon represents the area reachable by the mower's centre, with holes for exclusion zones. Slic3r handles this natively. | F2C accepts `F2CCells` (polygons with holes) as input. The headland generator shrinks the field boundary inward by the desired margin, so the border of the input polygon should be the mower's centre-line boundary — exactly the same convention. GeoJSON input is also supported for real GPS-referenced fields. | --- ## Summary matrix | Feature | slic3r (OpenMower) | Fields2Cover | |---|---|---| | Outline perimeter passes (multiple rounds) | ✅ Native | ⚠️ Manual multi-call workaround | | Perimeter passes around obstacles | ✅ Native | ⚠️ Not built-in | | Merge nearby outline/obstacle rounds | ✅ Automatic | ❌ Not supported | | Smooth ring-to-ring transitions | ✅ Spiral-style | ✅ Kinematically correct curves | | Parallel line fill | ✅ | ✅ | | Multiple fills for concave shapes | ✅ Automatic | ✅ Explicit decomposition step | | Consistent configurable fill angle | ✅ | ✅ (plus auto-optimise) | | Half-circle / U-turn between swaths | ✅ Fixed half-circle | ✅ Kinematically optimal turns | | Inter-path navigation pre-planned | ❌ Runtime costmap | ✅ Pre-planned (+ local planner still needed) | | Sensible path ordering | ✅ Heuristic | ✅ Multiple strategies + OR-Tools | | Polygon-with-holes input, centre-line border | ✅ | ✅ | --- ## Bottom line Fields2Cover is **more powerful** on fill ordering, turn geometry, and route optimisation. However, slic3r has two behaviours that Fields2Cover **does not replicate cleanly out of the box**: 1. **Perimeter passes around obstacles** — F2C excludes obstacle areas but doesn't orbit them with offset rings. 2. **Automatic merging of obstacle rounds with outline rounds** — this contextual geometry simplification is unique to slic3r's approach and would require custom logic in F2C. For a migration to F2C, these two features would likely need bespoke implementation on top of the F2C primitives.