detect_obstacles — DRIVE walkterrain op

• Data kinds: depth → mask

• Call: import fullseye as fs; fs.ledger.detect_obstacles(grid, cell: 'float' = 0.05, clearance: 'float' = 0.12, ground: 'str' = 'plane', ground_radius: 'float' = 0.4, trim: 'float' = 0.3, min_area: 'float' = 0.01, extent=None) (to call the implementation directly, import terrain; terrain.detect_obstacles(grid, cell: 'float' = 0.05, clearance: 'float' = 0.12, ground: 'str' = 'plane', ground_radius: 'float' = 0.4, trim: 'float' = 0.3, min_area: 'float' = 0.01, extent=None); from the registry, opsdrive.get("detect_obstacles"))

• Return value through the ledger: fullseye.ledger.detect_obstacles(...) returns only the declared out type mask (the underlying function also returns auxiliary values). When you need what was dropped, use fullseye.ledger.detect_obstacles.raw(...) or call terrain.detect_obstacles directly.

• GPU: none (CPU reference implementation only)

Usage

Segment cells rising more than *clearance* above the walkable ground.

> The detailed description below is the original text — the summary and the headings are translated.

The ground model isolates obstacles from a sloped surface: ground='plane' (default) fits a robust ground_plane (best when the ground is planar — flat or ramp); ground='opening' uses the morphological ground_surface envelope (best for rough/curved terrain); or pass a precomputed ground height array. So a ramp is not an obstacle but a box, curb, or rock on it is. Returns (mask, obstacles): a boolean obstacle mask and a list of per-obstacle dicts sorted largest-first, each with area_cells / area (m²) / height (peak rise above ground) / centroid_cell (row, col) / bbox_cells (i0, j0, i1, j1), plus centroid_xy in world units when *extent* (from elevation_map) is given. Blobs smaller than *min_area* (m²) are dropped as noise.

★ground_radius は ground='opening' のときだけ読まれ、trim は 'plane' のときだけ。空の入力(grid が 0 要素)は空の mask と空の listを返す(理由: 観測の無い地図には障害物も無く、形だけを保つ)。

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• walking_ops_tour — py -3.11 examples/walking_ops_tour.py

Ops the type connects to (they accept mask as input)

spin_from_marker_sequence · carla_transform_matrix · carla_pose_to_world · carla_camera_pose · carla_xy_yaw · carla_scene_load · town_chain · osm_parse

Same category (walkterrain)

elevation_map · fill_gaps · elevation_traversability · foothold_score · ground_surface · ground_plane · fuse_elevation · roughness_map


*Provenance: terrain.py — DRIVE operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.