使用两点之间的距离来确定相对位置

时间:2014-02-21 19:54:49

标签: javascript distance triangulation

我有一对固定位置传感器(红外线),可以将信号从反射器反射到固定接收器(所有3个设备都在单个PCB上,[发射器,接收器,发射器])。该设备的API给我的数据是从每个传感器到反射器的范围(手,桌子,任何东西)。

我的问题是:使用上述数据,我如何确定反射器的相对X位置。我很确定这是一个微不足道的问题,但我的大脑正在画一个空白。

每个传感器的数据范围为0到240。

var pos = 120 + (ranges.left - ranges.right);
pos = 100/240 * pos;
pos = Math.round(pos);

这是我最初的尝试,这个想法是它给了我一个从0到100的x位置。这种作品,以一种跳跃的方式 - 但我想要一个更精致的方法。

虽然这里有很多关于找到已知点之间距离的问题,但我没有找到一个反向的(这就是我想做的)。

编辑:

两个黑圈是发射器,灯圈是接收器。正方形是反射器。这条线是X轴,我想知道沿着那条线的正方形的位置。但请注意,在任何给定点,线可能离传感器更近或更远。

Bad Drawing

1 个答案:

答案 0 :(得分:1)

我认为这可以通过观察三角形来实现......

使用图表... enter image description here

S是两个发射器的分离,R是目标的距离,A,B是设备测量的距离,'x'是我们想要找到的距离。

毕达哥拉斯:(这里A ^ 2表示A平方)

A^2 = R^2 + x^2       or   A^2 - x^2 =     R^2

B^2 = R^2 + (S+x)^2   or   B^2 - (S+x)^2 = R^2

将其重新排列为

     A^2 - x^2 = B^2 - (S+x)^2
     A^2 - x^2 = B^2 - S^2 - 2Sx - x^2      expand (S+x)^2
     A^2       = B^2 - S^2 - 2Sx            lose x^2 from both sides
A^2 - B^2 +S^2 = -2Sx                        rearrange

最后:

   A^2 - B^2 + S^2
   _______________  =  x
        -2S

ta da!

我在纸上做了快速检查,我认为这是正确的。另一个快速检查是A是否与B相同,在这种情况下,它归结为:

  -S^2 / 2S  == -S/2  == 1/2 way between the transmitters, which is right.

编辑:以下评论......

请注意,最终公式仅涉及A,B和S.我们需要S(发射器之间的距离),因为这样就完成了三角形A / B / S,因此缩放了输出值。您可以为此使用固定值,但输出不会直接与A或B值的比例相关。但是,您可以使用s = 100给...

         A^2 - B^2 + 10000
 x =     _________________  
              -200

或者,在javascript中:

var pos= ((ranges.left*ranges.left)-(ranges.right*ranges.right)+10000)/200;

对于直接位于两个传感器之间的对象,这将给出介于0..100之间的值,例如如果两个传感器值都是42,我们得到:

pos =(42 * 42 - 42 * 42 + 10000)/ 200; //答案= 50

如果物体直接位于传感器A的前面,我们可以有值:

pos =(100 * 100 - 140 * 140 + 10000)/ 200; // answer = 2

或直接在B:

前面

pos =(140 * 140 - 100 * 100 + 10000)/ 200; // answer = 98

进一步沿着'x'轴显然会在一个方向上获得更大的值,然后在另一个方向上获得更大的值。 我希望这更清楚。