@page "/map/{MapName}" @rendermode InteractiveWebAssemblyNoPrerender @implements IAsyncDisposable @using MudBlazor @using RobotNet10.RobotApp.Client.Shared.SLAM @using Microsoft.JSInterop @inject IJSRuntime JSRuntime @inject ISnackbar Snackbar Map: @MapName
@* Control Bar *@
@* Processing Overlay *@ Processing map... @* Info Bar *@
Map Information
Name: @MapInfo.Name
Created: @MapInfo.CreatedDate.ToString("yyyy-MM-dd HH:mm")
Resolution: @MapInfo.Resolution.ToString("F3") m/p
Size: @MapInfo.Width.ToString("F1") x @MapInfo.Height.ToString("F1") m
Nodes: @MapInfo.TrajectoryNodeCount
Origin: (@MapInfo.OriginX.ToString("F3"), @MapInfo.OriginY.ToString("F3"))
Rerender Map
@* Map View - structure similar to MapLocalization *@
@* Map image with Y-flip (like map-canvas in MapLocalization) *@ Map @* SVG overlay for origin marker (like map-editor in MapLocalization) *@ @* Robot goal pose component *@ @* Grid origin marker *@
@* Edit Origin Dialog *@ Edit Map Origin Set the new origin position from the selected goal pose on the map. Cancel Confirm @* Rerender Map Dialog *@ Rerender Map with Custom Config Configure occupancy grid settings and rerender map image files (PNG, JPG, PGM). @* Merge Strategy *@ Merge Strategy Log-Odds Sum (Bayesian) Max Probability (Conservative) Porter-Duff (Cairo-style) Submap merge strategy:
Log-Odds Sum: Sum Bayesian log-odds — clearer walls, less noise
Max Probability: Take max probability — safer for navigation, thicker walls
Porter-Duff: Cairo-style blending — matches the original C++ behavior; may blur in overlap areas
Log-odds clamp:
• Low (1-5): smoother image, lower contrast
• High (10-20): sharper walls, higher contrast
• Default: 10 — balance between clarity and noise
Use log-odds average:
On: Divide log-odds by observation count — more uniform in overlap areas
Off: Sum directly — areas scanned more often become darker/lighter
@* Threshold Configuration *@ Threshold Configuration Free-space threshold:
Pixels with texture value >= this threshold are marked as FREE (white).
• Low (50-80): more areas become free
• High (150-200): only very certain areas become free
• Default: 100
Occupied-space threshold:
Pixels with alpha value > this threshold are marked as OCCUPIED (black).
• Low (1-10): thicker walls, more sensitive to obstacles
• High (50-100): only strong walls are drawn
• Default: 1 (most sensitive)
@* Output Mode *@ Output Mode Binary output mode:
On: Only 3 values: 0 (white/free), 100 (black/wall), -1 (gray/unknown). Suitable for MCL/Navigation.
Off: Gradient 0-100 values. Shows detailed occupancy probability.
@* Wall Thinning *@ Wall Thinning (Post-processing) Wall thinning:
Applies morphological erosion to reduce wall thickness.
On: Thinner walls; the robot can pass narrow corridors more easily
Off: Keep original wall thickness
Thinning iterations:
Each iteration erodes ~1 pixel from the wall boundary.
• 1 iteration: slightly thinner (~1 pixel)
• 3-5 iterations: significantly thinner; walls may break/disconnect
Minimum wall thickness:
Do not erode if the wall is thinner than this value.
• 1 pixel: allows very thin walls (may break)
• 2-3 pixels: safer, preserves wall structure
• With 0.05 m resolution: 2 pixels ≈ 10 cm real wall thickness
@* Ambiguous Cell Handling *@ Ambiguous Cell Handling Unknown (-1) Free (0) Occupied (100) Ambiguous cell value:
Cells with probability in the ambiguous range are assigned this value.
Unknown (-1): Gray; ignored by MCL — safest
Free (0): White; robot may pass — riskier
Occupied (100): Black; robot avoids — conservative
Ambiguous range lower:
Probabilities below this value are considered FREE.
• 0.35 (default): 0–35% is free
• Lower to 0.2: stricter, fewer free areas
• Raise to 0.45: more areas become free
Ambiguous range upper:
Probabilities above this value are considered OCCUPIED.
• 0.65 (default): 65–100% is wall
• Lower to 0.55: more walls (safer)
• Raise to 0.8: only very certain areas become walls
@* Advanced Options *@ Advanced Options Median filter:
Reduces salt-and-pepper noise.
On: Smoother image, removes isolated noisy pixels
Off: Keeps original details, may contain noise
Filter kernel size:
Neighborhood used to compute the median.
• 3x3: light filtering, preserves details
• 5x5: medium filtering
• 7x7: strong filtering, may blur wall edges
Cancel Rerender