# segmentation_params.yaml — SaltyBot sidewalk semantic segmentation
#
# Run with:
#   ros2 launch saltybot_segmentation sidewalk_segmentation.launch.py
#
# Build TRT engine first (run ONCE on the Jetson):
#   python3 /opt/ros/humble/share/saltybot_segmentation/scripts/build_engine.py

# ── Model paths ───────────────────────────────────────────────────────────────
# Priority: TRT engine > ONNX > error (no inference)
#
# Build engine:
#   python3 build_engine.py --model bisenetv2
#   → /mnt/nvme/saltybot/models/bisenetv2_cityscapes_512x256.engine
engine_path: /mnt/nvme/saltybot/models/bisenetv2_cityscapes_512x256.engine
onnx_path:   /mnt/nvme/saltybot/models/bisenetv2_cityscapes_512x256.onnx

# ── Model input size ──────────────────────────────────────────────────────────
# Must match the engine. 512×256 maintains Cityscapes 2:1 aspect ratio.
# RealSense 640×480 is letterboxed to 512×256 (pillarboxed, 32px each side).
input_width:  512
input_height: 256

# ── Processing rate ───────────────────────────────────────────────────────────
# process_every_n: run inference on 1 in N frames.
#   1 = every frame  (~15fps if latency budget allows)
#   2 = every 2nd frame (recommended — RealSense @ 30fps → ~15fps effective)
#   3 = every 3rd frame (9fps — use if GPU is constrained by other tasks)
#
# RealSense color at 15fps → process_every_n:=1 gives ~15fps seg output.
process_every_n: 1

# ── Debug image ───────────────────────────────────────────────────────────────
# Set true to publish /segmentation/debug_image (BGR colour overlay).
# Adds ~1ms/frame overhead. Disable in production.
publish_debug_image: false

# ── Traversability overrides ──────────────────────────────────────────────────
# unknown_as_obstacle: true → sky / unlabelled pixels → lethal (100).
#   Use in dense urban environments where unknowns are likely vertical surfaces.
#   Use false (default) in open spaces to allow exploration.
unknown_as_obstacle: false

# ── Costmap projection ────────────────────────────────────────────────────────
# costmap_resolution: metres per cell in the output OccupancyGrid.
#   Match or exceed Nav2 local_costmap resolution (default 0.05m).
costmap_resolution: 0.05     # metres/cell

# costmap_range_m: forward look-ahead distance for ground projection.
#   5.0m covers 100 cells at 0.05m resolution.
#   Increase for faster outdoor navigation; decrease for tight indoor spaces.
costmap_range_m: 5.0         # metres

# ── Camera geometry ───────────────────────────────────────────────────────────
# These must match the RealSense mount position on the robot.
# Used for inverse-perspective ground projection.
#
# camera_height_m: height of RealSense optical centre above ground (metres).
#   saltybot: D435i mounted at ~0.15m above base_link origin.
camera_height_m: 0.15        # metres

# camera_pitch_deg: downward tilt of the camera (degrees, positive = tilted down).
#   0 = horizontal. Typical outdoor deployment: 5–10° downward.
camera_pitch_deg: 5.0        # degrees
