<observations-summary> does not seem to agree with input data

Steve Champion <[email protected]> Thu, 15 Sep 2016 09:34:42 +0000
Newsgroups gmane.comp.gnu.gama.bugs
Message-ID <5284A67ADE4C0B4FA1373DDB9658705F7E909E23@CAM1MAIL01.ubisense.local>
Hello. I am a new GNU Gama User and I am not sure if this is the right place to discuss my difficulty, so apologies in advance if this posting is inappropriate. As requested, I am erring on the side of giving too much information rather than too little.

I am using GNU Gama 1.15, which is the latest pre-compiled Windows binary that I could find.

My application is as follows.

I work with an indoor radar ranging product which locates transmitting beacons in space by measuring the angles-of-arrival and time-distance-of-arrival of their signals at sensors mounted around the monitored space. The exact locations of the sensors once installed must, of course, be known.

Normally, the positions of the sensors are surveyed using a Total Station in a similar way that it would be used out on a building site - just at a much smaller scale.

I thought that it might be possible (for small projects with only, say, 4 sensors) to survey using distances only (using a laser distance measurer such as Bosch PLR15 instead of a Total Station). This would require coordinates to be calculated with Gama from lots of s-distance measurements and a couple of angles (generally speaking these would be assumed right-angles from reference points on perpendicular walls)

I have generated test data by taking the actual xyz coordinates of four sensors and three reference points. From these I have calculated all the possible horizontal distances and slope distances using Pythagoras. From these distances alone it should be possible to calculate the original xyz coordinates. In practice a subset of all the possible s-distances would be measured. 

When my test file contains all of the possible horizontal distances and slope distances then Gama calculates the xyz coordinates correctly. When I omit some or all of the horizontal distances (which would not normally be available using this technique) then Gama cannot calculate all of the xyz coordinates. Moreover, the <observations-summary> section in the output file does not report the correct number of distances and slope distances in the input file. It seems to me that it should be possible to calculate the xyz coordinates from s-distances alone.

This, with s-distances and horizontal distances, works fine:
----------------------------------------------
<?xml version="1.0" ?>

<gama-local xmlns="http://www.gnu.org/software/gama/gama-local">
<network axes-xy="en"> <!-- x axis is East, y axis is North -->         

<description>
Conference room sensor data for GNU gama, values calculated from positions (i.e. not actually surveyed)
</description>

<!-- parameters are expressed with empty-element tag -->

<parameters sigma-act = "aposteriori" />

<points-observations direction-stdev ="10"
distance-stdev = "5 3 1">          

<!-- fixed point, constrained point -->

<point id="R1" x="0.000" y="0.000" z="1.596" fix="xyz" />
<point id="R2" x="0.000" y="5.243" z="1.558" adj="XYZ" /> 

<!-- computed / adjusted points -->

<point id="R3" adj="xyz" z="1.500" />
<point id="S1" adj="xyz" z="2.385" />
<point id="S2" adj="xyz" z="2.393" />
<point id="S3" adj="xyz" z="2.383" />
<point id="S4" adj="xyz" z="2.387" />

<obs from="R1">
     <!-- North (Y axis) is  0 degrees,   0 gons/grads.
	      East  (X axis) is 90 degrees, 100 gons/grads.
	      Angles _may_ be given is sexagecimal degrees,
          e.g. 90-00-00, but this will give slightly
 		  different results due to rounding          -->	 
     <direction  to="R2" val= "  0"/>
     <direction  to="R3" val= "100"/>
     <!--s-distance to="R2" val= "5.243" /-->
     <s-distance to="R3" val= "5.001" />
     <s-distance to="S1" val= "0.879" />
     <s-distance to="S2" val= "4.443" />
     <s-distance to="S3" val= "5.144" />
     <s-distance to="S4" val= "6.663" />
     <distance to="R2" val= "5.243" />
     <distance to="R3" val= "5.000" />
     <distance to="S1" val= "0.387" />
     <distance to="S2" val= "4.371" />
     <distance to="S3" val= "5.083" />
     <distance to="S4" val= "6.616" />
</obs>

<obs from="R2">
     <!--s-distance to="R3" val= "7.245" /-->
     <s-distance to="S1" val= "4.955" />
     <s-distance to="S2" val= "6.028" />
     <s-distance to="S3" val= "0.855" />
     <s-distance to="S4" val= "4.341" />
     <distance to="R3" val= "7.245" />
     <distance to="S1" val= "4.885" />
     <distance to="S2" val= "5.969" />
     <distance to="S3" val= "0.225" />
     <distance to="S4" val= "4.261" />
</obs>            
                     
<obs from="R3">  
     <s-distance to="S1" val= "4.950" />
     <s-distance to="S2" val= "1.569" />
     <s-distance to="S3" val= "7.075" />
     <s-distance to="S4" val= "5.195" />
     <distance to="S1" val= "4.870" />
     <distance to="S2" val= "1.290" />
     <distance to="S3" val= "7.020" />
     <distance to="S4" val= "5.118" />
</obs>            
                     
<obs from="S1">  
     <!--s-distance to="S2" val= "4.158" />
     <s-distance to="S3" val= "4.721" />
     <s-distance to="S4" val= "6.249" /-->
     <distance to="S2" val= "4.158" />
     <distance to="S3" val= "4.721" />
     <distance to="S4" val= "6.249" />
</obs>            
                     
<obs from="S2">  
     <!--s-distance to="S3" val= "5.745" />
     <s-distance to="S4" val= "4.019" /-->
     <distance to="S3" val= "5.745" />
     <distance to="S4" val= "4.019" />
</obs>            
                     
<obs from="S3">  
     <!--s-distance to="S4" val= "4.101" /-->
     <distance to="S4" val= "4.101" />
</obs>            
                     

</points-observations>

</network>
</gama-local>
----------------------------------------------
The correct xyz coordinates are calculated.

Gama reports:

<observations-summary>
   <distances>21</distances>
   <directions>2</directions>
   <angles>0</angles>
   <xyz-coords>0</xyz-coords>
   <h-diffs>0</h-diffs>
   <z-angles>0</z-angles>
   <s-dists>13</s-dists>
   <vectors>0</vectors>
   <azimuths>0</azimuths>
</observations-summary>

And the <adjusted> report makes total sense:

<adjusted>
   <point> <id>R2</id> <X>0.0000000000000004</X> <Y>5.2429215108132290</Y> <Z>1.5569658859519144</Z> </point>
   <point> <id>R3</id> <x>5.0000239092260212</x> <y>0.0000000106983902</y> <z>1.4997280446580850</z> </point>
   <point> <id>S1</id> <x>0.1432141204543060</x> <y>0.3598494925910169</y> <z>2.3851129372524533</z> </point>
   <point> <id>S2</id> <x>4.2442163812260931</x> <y>1.0451472459281550</y> <z>2.3931803624247823</z> </point>
   <point> <id>S3</id> <x>0.1560066894908164</x> <y>5.0809084785210477</y> <z>2.3818778964535854</z> </point>
   <point> <id>S4</id> <x>4.2570592820385240</x> <y>5.0640669720740412</y> <z>2.3883249051136191</z> </point>
</adjusted> 

But this, with only the s-distances, does not work:
----------------------------------------------
<?xml version="1.0" ?>

<gama-local xmlns="http://www.gnu.org/software/gama/gama-local">
<network axes-xy="en"> <!-- x axis is East, y axis is North -->         

<description>
Conference room sensor data for GNU gama, values calculated from positions (i.e. not actually surveyed)
</description>

<!-- parameters are expressed with empty-element tag -->

<parameters sigma-act = "aposteriori" />

<points-observations>          

<!-- fixed point, constrained point -->

<point id="R1" x="0.000" y="0.000" z="1.596" fix="xyz" />
<point id="R2" x="0.000" y="5.243" z="1.558" adj="XYZ" /> 

<!-- computed / adjusted points -->

<point id="R3" adj="xyz" z="1.500" />
<point id="S1" adj="xyz" z="2.385" />
<point id="S2" adj="xyz" z="2.393" />
<point id="S3" adj="xyz" z="2.383" />
<point id="S4" adj="xyz" z="2.387" />

<obs from="R1">
     <!-- North (Y axis) is  0 degrees,   0 gons/grads.
	      East  (X axis) is 90 degrees, 100 gons/grads.
	      Angles _may_ be given is sexagecimal degrees,
          e.g. 90-00-00, but this will give slightly
 		  different results due to rounding          -->	 
     <direction  to="R2" val= "  0" stdev="10.0" />
     <direction  to="R3" val= "100" stdev="10.0" />
     <s-distance to="R2" val= "5.243" stdev="5.0"  />
     <s-distance to="R3" val= "5.001" stdev="5.0"  />
     <s-distance to="S1" val= "0.879" stdev="5.0"  />
     <s-distance to="S2" val= "4.443" stdev="5.0"  />
     <s-distance to="S3" val= "5.144" stdev="5.0"  />
     <s-distance to="S4" val= "6.663" stdev="5.0"  />
</obs>

<obs from="R2">
     <s-distance to="R3" val= "7.245" stdev="5.0"  />
     <s-distance to="S1" val= "4.955" stdev="5.0"  />
     <s-distance to="S2" val= "6.028" stdev="5.0"  />
     <s-distance to="S3" val= "0.855" stdev="5.0"  />
     <s-distance to="S4" val= "4.341" stdev="5.0"  />
</obs>            
                     
<obs from="R3">  
     <s-distance to="S1" val= "4.950" stdev="5.0"  />
     <s-distance to="S2" val= "1.569" stdev="5.0"  />
     <s-distance to="S3" val= "7.075" stdev="5.0"  />
     <s-distance to="S4" val= "5.195" stdev="5.0"  />
</obs>            
                     
<obs from="S1">  
     <s-distance to="S2" val= "4.158" stdev="5.0"  />
     <s-distance to="S3" val= "4.721" stdev="5.0"  />
     <s-distance to="S4" val= "6.249" stdev="5.0"  />
</obs>            
                     
<obs from="S2">  
     <s-distance to="S3" val= "5.745" stdev="5.0"  />
     <s-distance to="S4" val= "4.019" stdev="5.0"  />
</obs>            
                     
<obs from="S3">  
     <s-distance to="S4" val= "4.101" stdev="5.0"  />
</obs>            
                     

</points-observations>

</network>
</gama-local>
----------------------------------------------

Gama reports:

<observations-summary>
   <distances>0</distances>
   <directions>0</directions>
   <angles>0</angles>
   <xyz-coords>0</xyz-coords>
   <h-diffs>0</h-diffs>
   <z-angles>0</z-angles>
   <s-dists>1</s-dists>
   <vectors>0</vectors>
   <azimuths>0</azimuths>
</observations-summary>

If I start to put the horizontal distances in one by one some of the xyz coordinates get calculated. However, the <observations-summary> report in the output file generally does not agree with the number of observations in the input data. Once there are sufficient horizontal distances, I believe the <observations-summary> report to be correct.

Do you have any idea what is happening here? Also, is a more recent pre-built windows executable than 1.15 available that I could try?

Thanks for any pointers you can give and, again, apologies if this is not the correct place to ask these questions.

Steve Champion