【问题标题】:use distance between two points to determine relative location使用两点之间的距离来确定相对位置
【发布时间】:2014-03-23 12:45:26
【问题描述】:

我有一对固定位置传感器(红外线),它们将信号从反射器反射到固定接收器(所有 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轴,我想知道正方形沿着这条线的位置。但请注意,在任何给定点,这条线可能离传感器更近或更远。

【问题讨论】:

  • 你会画画吗?这将帮助我可视化您的设置。
  • 当您说relative X position 时,X 位置相对于什么?给接收者?到PCB?我认为 couchand 的建议会有所帮助,这听起来像几何形状会很有用。
  • 感谢您的回复,我已经更新了问题
  • 只是一个简短的点 - 报告的范围是到两个传感器的距离,因此在此设置中它可能会报告类似 (60, 50)(底部,顶部)的内容。如果正方形在 Z 轴上更远 - 但仍位于沿 X 轴的相同位置,则范围可能会报告为 (150, 140)

标签: javascript distance triangulation


【解决方案1】:

我认为这可以通过查看三角形来解决...

使用图表...

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

哒哒!

我在纸上进行了快速检查,我认为它是正确的。另一个快速检查是 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 的前面,我们可以有值:

位置= (100*100 - 140*140 + 10000)/200; // 答案 = 2

或直接在B前面:

位置= (140*140 - 100*100 + 10000)/200; // 答案 = 98

沿着你的“x”轴进一步显然会在一个方向上得到更大的值,而在另一个方向上去 -ve。 我希望这能让它更清楚。

【讨论】:

  • 不错的尝试 - 但这假设我知道 R 的值,但我不知道。我仅有的值是 A 和 B(我可能可以从设备规格中计算出 S,或者尝试不同的值)
  • 不,再看一遍……最终公式不使用 R 来计算 x。仅在最初的术语中演示了我们如何定义三角形 A/\R 和 B/\R。如果您愿意,可以重新排列公式来计算 R。
  • 这主要是成功了,我发现其他因素导致了我的问题(范围实际上不是与目标的距离,而是与目标的接近程度,并且它们对光敏感,并且颜色反射器) - 但是您的代码运行良好。谢谢
猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多