Velocity-aware clustering#

rsp.dbscan implements deterministic DBSCAN for radar points. It accepts either 2D (x, y) or 3D (x, y, z) geometry and appends scaled radial velocity to the distance feature:

\[ \mathbf{q}_i= \begin{bmatrix} \mathbf{p}_i & s_v v_{r,i} \end{bmatrix}^{\mathsf T}. \]

Two points are neighbours when \(\lVert\mathbf{q}_i-\mathbf{q}_j\rVert_2\leq\varepsilon\). velocityScale \(s_v\) converts metres per second into the spatial distance used by eps.

clusters = rsp.dbscan(
    pointCloud,
    eps=0.8,
    minSamples=3,
    velocityScale=0.5,
    dimensions=3,
)

The algorithm visits points in input order and uses stable neighbourhood order, so identical input yields identical labels. Noise points receive label -1.

For every cluster, ClusterSet reports:

  • centroid in FLU coordinates;

  • axis-aligned size;

  • spatial covariance;

  • mean radial velocity and total/aggregate power;

  • per-point labels and stable cluster ids.

DBSCAN parameters are sensor- and range-dependent. Angular resolution creates larger lateral spacing at long range, so one global eps may be insufficient for a very wide operating envelope. Range-adaptive clustering is a future extension, not an implicit behavior in v1.