Our greatest problem here is to find a way to determine, based only on ZigBee exchanges, first approximate distances between our modules, spaced from at least something around one meter, then their positions relative to one another (though it’s perfectly clear that with nothing mor than distances, relative positions will be defined up to any rotation and/or symmetry).
After one week spent rummaging through various studies announcing with more or les enthusiasm their rather disheartening results (mostly a wide error range, the use of many anchors, and often total dysfunction indoors), I finally stumbled upon this one, where inaccuracy is countered by the use of many channels (all channels internationaly offered by IEEE 802.15.4 and ZigBee, in fact). It comes down to an error of less than a meter, and even less than 30cm, for distances ranging up to 5m (if I remember well) between nodes, which is quite exceptional.
If this precision would by itself satisfy our needs (though better would still be appreciated), the method still isn’t perfect, since it uses 2n+1 anchors in a n-dimensional space. In our case no anchor should be used, and I am now trying to understand how all of that works together (while previous studies seemed so simplistic, this one is quite tough), and where anchors intervene, to see if we can make wiithout them and what it would then cost. But right now, I still don’t figure out why the method is presented as based on IEEE 802.15.4 (and even ZigBee, if I’m not mistaken) while all I can see is either pure mathematics or pure RF, so I gather it will take time for me to understand the whole thing.
In parallel, I have found in the appendices of a panorama study an heuristic to derive relative positions of the modules from their relative distances. It seems quite simple (nothing harder than to diagonalize a real symmetric matrix comes into play), and not silly, until the last step, which seems quite dubious to me. Indeed, since the method gives a vector far too wide for what it should mean, we simply throw away its least significant components. Before believing that has any chance to work, I have to implement it and see for myself.
So there’s work to do… Well, that’s what we’re here for !