CtcConstell: \(\mathbf{x}\in\mathbb{M}\)

The constellation contractor, denoted by \(\mathcal{C}_\textrm{constell}\), is used to solve the data association problem. Given a list of vectors \(\mathbf{m}_{1}\), \(\dots\), \(\mathbf{m}_{\ell}\) forming a constellation, the contractor reduces a box \([\mathbf{x}]\) to perfectly wrap the vectors previously enclosed inside of it.


In robotics, when several landmarks \(\mathbf{m}_{1}\), \(\dots\), \(\mathbf{m}_{\ell}\) exist, the observation data may not be associated: we do not know to which landmark a given measurement \(\mathbf{y}\) refers. In other words it may be difficult, from the perception of a landmark, to find its identity only from the measurement data. However, data fusion can be done (for instance, by merging information coming from robot’s evolution). From fusion, we can obtain that the perceived landmark belongs to a reduced set of landmarks \([\mathbf{x}]\). The contractor presented here simply aims at reducing optimally this prior set \([\mathbf{x}]\) to finally perfectly wrap the vectors inside of it, thus allowing further contractions.

See more in the related paper: Set-membership state estimation by solving data association.


Let us consider a constellation of \(\ell\) points \(\mathbb{M}=\{[\mathbf{m}_{1}],\dots,[\mathbf{m}_{\ell}]\}\) of \(\mathbb{IR}^{d}\) and a box \(\left[\mathbf{x}\right]\in\mathbb{IR}^d\). We want to compute the smallest box \(\mathcal{C}_\textrm{constell}\left(\left[\mathbf{x}\right]\right)\) containing \(\mathbb{M}\cap\left[\mathbf{x}\right]\), or equivalently:

\[\begin{equation} \mathcal{C}_\textrm{constell}\left(\left[\mathbf{x}\right]\right)=\bigsqcup_{j}\big(\left[\mathbf{x}\right]\cap[\mathbf{m}_{j}]\big), \end{equation}\]

where \(\bigsqcup\), called squared union, returns the smallest box enclosing the union of its arguments.


\[\mathbf{m}\in\mathbb{M}=\big\{[\mathbf{m}_1],\dots,[\mathbf{m}_\ell]\big\} \longrightarrow \mathcal{C}_{\textrm{constell}}\big([\mathbf{x}]\big)\]
ctc_constell = CtcConstell(v_b) # with v_b, the vector defining
                                # the constellation of points
#include <tubex-rob.h>
CtcConstell ctc_constell(v_b); // with v_b, the vector<IntervalVector> defining
                               // the constellation of points


Let us consider the following constellation:


Fig. 18 A given constellation of points \(\big\{[\mathbf{m}_1],\dots,[\mathbf{m}_\ell]\big\}\).

The \(\mathcal{C}_\textrm{constell}\) can be instantiated with

v_b = [...  // vector defining the constellation of points

ctc_constell = CtcConstell(v_b)
#include <tubex-rob.h>

// ...

vector<IntervalVector> v_b; // vector defining the constellation of points
v_b.push_back( // ...

CtcConstell ctc_constell(v_b);

Now, if we define three boxes:

v_x = [IntervalVector([[1.25,3],[1.6,2.75]]), \
       IntervalVector([[2.,3.5],[0.6,1.2]]), \
vector<IntervalVector> v_x;

we can use the \(\mathcal{C}_\textrm{constell}\) to contract them according to the constellation.

for x in v_x:
for(auto& x : v_x)

Fig. 19 Filled boxes are the \([\mathbf{x}]\) after contraction.