Appendix: Convergence of the Next-Best-View Stopping Criterion
Test entry for checking how long-form markdown, math and tables render.
- robotics
- nbv
- test
This appendix analyzes the criterion by which the next-best-view (NBV) inspection loop
decides that a target has been sufficiently reconstructed and halts. The treatment is
grounded in the implementation (the nbv_cpp scorer and the sample_nbv_behaviors
behaviors SetViews, GetBestView, GetBestViewWithCost, and CheckScoreSaturation);
each claim is scoped to what that implementation guarantees rather than to an idealized
model. Code references are given as file:line.
Notation
| symbol | meaning |
|---|---|
| NBV cycle index (0-based) | |
| vector of candidate fractional scores at cycle , | |
| fractional score of candidate at cycle | |
| number of surviving candidates at cycle | |
| sum-norm and max-norm | |
| sum decrement (§6) | |
| index of the view the policy executes at cycle | |
| score of the executed view; (greedy), (CI-NBV) | |
| running peak (capital P; the normalizer) | |
| convergence ratio | |
| per-step factor | |
| convergence tolerance (fraction of peak): applied to , and to the peak-normalized §6 rules | |
| patience: consecutive sub-threshold cycles to declare convergence (crossing included) | |
| crossing cycle: first with (a cycle index, not a cost) | |
| CI-NBV cost weight in ( recovers pure greedy) | |
| Dubins path cost of view at cycle (always subscripted; distinct from crossing ) | |
| feasible set | |
| CI-NBV utility |
1. The Information-Gain Score
For each candidate view , the server ray-casts the view frustum into the TSDF and counts
voxels (next_best_view.cpp:374):
Each ray is walked (Amanatides-Woo) until the first surface crossing
(next_best_view.cpp:456); a voxel is counted if and only if it lies inside the ROI and
(next_best_view.cpp:470) is either
- unknown (
weight_ == 0, never integrated), or - rear-side (
tsdf_ < 0, behind a surface or interior).
Voxels are de-duplicated across rays, so measures distinct still-uninformed volume the view can see rather than a ray count. It is a visibility-coverage proxy: how much unseen or interior volume the view can reach before being occluded.
The blackboard score is the fraction, normalized by the constant total grid size
(nbv_server.cpp:451):
Since is fixed for a given target, this normalization is a pure rescaling and affects no
monotonicity argument. After each executed view, SetViews re-scores all surviving
candidates against the updated TSDF.
2. Monotonicity: An Idealization, Not a Guarantee
The clean contraction picture requires to be a monotone submodular set function. This holds only in an idealized model, namely coverage of a fixed unknown volume under known visibility, in which a survivor's score never rises between cycles:
The implemented scorer satisfies this only approximately. Decomposing the count:
- The unknown term (
weight_ == 0) is monotone: an observed voxel never reverts to unknown, and the per-view de-duplication (§1) prevents one voxel from inflating the count across rays (the multi-counting that classically breaks submodularity). - The surface-termination term is not provably monotone. The truncating zero-crossing is a running weighted average, so in principle an early phantom surface can erode under later measurements, allowing a survivor's rays to penetrate farther and re-count, i.e. . This requires a transient mis-estimate to reverse, so it is unlikely to materially move in practice, but it cannot be excluded.
Consequently (hence and the per-cycle maximum ) is dominantly, and almost always in practice, monotone, but not provably so. The clean contraction is an idealization on which the system does not rely.
The implemented criterion reflects this. The convergence node uses a running maximum
(peak_ = std::max(peak_, curr_max), check_score_saturation.cpp:50) and a patience
debounce (check_score_saturation.cpp:60-66). Were guaranteed monotone, peak_ would
always equal (making the running maximum redundant) and a single dip below
would be permanent (making patience unnecessary). Both mechanisms exist precisely because
can be exceeded by a later value.
3. The Score Vector and Its Norms
At cycle the surviving candidates form the vector . Two candidate stopping functionals arise:
- Sum ():
- Max ():
By norm equivalence, , where the relating constant is the candidate count . Oversampling the viewpoint manifold (for example a dense helix or cone) inflates , so the sum grows with discretization density while the maximum is invariant to it. The functional is therefore the scale- and density-invariant progress measure; the functional is not.
4. Greedy Selection Realizes the Infinity Norm
In pure NBV, GetBestView (get_best_view.cpp:39) selects and executes the IG-maximizing
candidate:
Evaluating the greedy step is thus identical to evaluating the norm: the objective and the stopping functional are the same quantity, so monitoring tracks exactly the value the policy captures each cycle. This self-consistency is a property of pure greedy selection, and is precisely what the cost-informed variant breaks (§7).
5. The Convergence Metric
The loop monitors the peak remaining gain , normalized by the running peak (rather than by the initial value ):
Here is a relative tolerance, interpreted as a fraction of peak informativeness, and is the patience parameter.
Why the peak gain decays. Each cycle applies two operations to the score vector, on different footing:
- Prune (unconditional). The executed view is removed, and removing an element cannot raise a maximum (the maximum over a subset is at most the maximum over the superset), for any removed index. This step is always monotone.
- Re-score (reliable but not provable). The survivors are re-scored against the enlarged observed set. Under submodularity (diminishing returns) no view's marginal gain rises, so . The TSDF recompute can in principle violate this (§2, surface revision), but only through a transient mis-estimate, so in practice it almost never raises a survivor.
Combining the two,
so decays. The prune half is guaranteed; the re-score half holds in all but pathological TSDF transients. The running peak and the patience window (§5.1) absorb those rare excursions, and pool exhaustion (§5.2) supplies the one guarantee that needs no assumption at all.
Analytical character. The metric is a debounced approximate non-expansion rather than a Banach contraction. The per-step factor is geometry-dependent, not a uniform modulus below 1. The telescoping identity holds only while is non-increasing; a rare re-score excursion can drive , which absorbs ( resets to 1 at a new peak), so throughout but is not itself monotone.
5.1 Patience
Saturation requires on consecutive cycles, the crossing cycle
included (check_score_saturation.cpp:60-66; the patience port, default 2; lowercase ,
distinct from the running peak ). Let be the first cycle with .
Because below_count_ is incremented on cycle itself, the crossing is confirmation 1, and
the stop occurs at
The cycles beyond the crossing are the debounce overhead; setting recovers the
eager rule that stops at . This count assumes remains below
throughout the window. Under the non-strictly-monotone signal of §2, an upward excursion
resets below_count_ to 0 (check_score_saturation.cpp:62-63) and the count restarts, so
is the minimum overhead and the patience window performs genuine noise rejection.
5.2 The Assumption-Free Guarantee: Pool Exhaustion
Each cycle removes exactly one candidate (), so the loop halts within cycles irrespective of monotonicity, and no sequence of patience resets (§5.1) can prevent termination. Saturation is therefore an early-stop layered on this hard bound, never a prerequisite for halting. The practical payoff of the normalization is portability: expresses a fraction of peak informativeness that carries the same meaning across targets and pool sizes.
6. The Infinity-Norm Rule Stops No Later Than the Sum Rule
This section assumes pure greedy selection and the submodular regime of §2.
Marginal progress of each rule. Let be the decrement of the sum produced by cycle 's observation, with . It splits into the removed view plus the re-scoring of the survivors:
For pure greedy, , so the removed view is the maximum, , giving .
Two stopping rules at a common tolerance. Normalizing both marginal-progress measures by the running peak (the §5 normalizer) lets serve as a single relative tolerance. Each rule fires at the first cycle its peak-normalized measure drops below :
The rule is exactly the convergence test of §5.
Ordering by set inclusion. Since , dividing by gives , hence . The stop-set is therefore contained in the stop-set, and the minimum over a subset is no smaller than the minimum over its superset:
The difference is a wasted tail: cycles spent waiting for to bleed off after the best remaining view has already collapsed. The sum rule is worst in over-sampled scenes, where this drift is largest, while the max rule incurs no such penalty.
The result carries the usual caveats: the bound is weak (); strictness requires ; both rules require submodularity, which a rare re-score excursion can locally violate (§2); and the identity holds only for pure greedy, since under CI-NBV the removed view is sub-maximal (§7).
7. The Cost-Informed Case (CI-NBV)
GetBestViewWithCost (get_best_view_with_cost.cpp:64-99) replaces the IG-maximizing
selection with a utility maximization over the feasible set
(the views with finite Dubins cost from the live pose), with each
objective min-max normalized over :
falling back to when .
7.1 The self-consistency is lost. For , is the utility maximizer, in general not the IG maximizer, so the identity of §4 degrades to
The executed view's gain is no longer the monitored quantity: the objective (utility) and the stopping functional (maximum IG) are now distinct functionals on the same vector.
7.2 The metric is policy-agnostic; the full-set maximum stays monotone. Selection is upstream: is fixed first, after which the survivor set is re-scored. Monotonicity then follows in two stages:
The prune inequality is where care is needed; the survivor maximum relates to by two cases:
- Case A (utility pick IG-max, the general case): the highest-IG view remains in the survivor set, so (equality).
- Case B (utility pick IG-max, the coincidence): the peak entry is the one removed, so (strict).
Writing would silently assume Case A, i.e. that the cost-aware policy never selects the IG-max, which CI-NBV does not guarantee; the inequality covers both. The re-score inequality is the submodular drift of §5 (survivors fall, barring the rare transient of §2).
Monotonicity therefore arises from a shrinking set together with submodular re-scoring, not from the policy removing the maximum, and holds identically for NBV and CI-NBV. The convergence metric of §5 transfers to CI-NBV unchanged.
7.3 What changes is the rate, not the validity. Pure greedy removes the top component each step (an active contraction). CI-NBV removes a sub-maximal view, so decays only through passive submodular drift until the expensive view eventually becomes utility-best, or until empties and the fallback fires. Convergence reaches the same place and remains monotone, but generically takes more cycles; the "stops no later" advantage of §6 is a property of the case.
7.4 No repair is needed, and reachability is rejected as a metric. Termination remains a pure-information question over the full candidate set; cost enters only the selection. A reachable-set variant is rejected because feasibility is pose-dependent and re-evaluated every cycle, so changes continually. Such a variant would (i) destroy monotonicity, since a high-IG view re-entering raises the maximum over a changing index set, and (ii) couple termination to transient kinematics, risking false convergence when informative views are momentarily unreachable. Convergence is a statement about the information state, which is pose-independent; reachability and cost govern routing, never sufficiency.
7.5 The lingering-view effect is correct conservatism, not a defect. An expensive or
unreachable high-IG view keeps high and defers the early stop, which is appropriate: if
substantial information remains anywhere, the target has not converged. The effect is bounded
() and self-resolving, since such a view's gain usually decays through incidental
observation, and once empties the fallback selects it and DubinsClient
(ForceSuccess-wrapped) drives through. The only residual cost is a drift toward exhaustive
coverage on pathological targets.
8. Summary
The information gain is a visibility-coverage proxy that is dominantly, but not provably, monotone. The convergence metric is correspondingly a running-peak-normalized, patience-debounced approximate non-expansion, with pool exhaustion as its only assumption-free guarantee. Under pure greedy selection the maximum-based rule is self-consistent with the policy and stops no later than a sum-based rule. The cost-informed variant leaves the metric valid and monotone but no longer policy-driven: cost reshapes which view is visited, never whether the target is complete.