0

好的,我有这个程序,它利用 GPS 坐标来找到到达航点所需的行进方向。我的 GPS 坐标显示在 2 个文本框中(经度、纬度)。我遇到的问题是 GPS 坐标(由于只能精确到 8 英尺,而且它不断变化),让我的航向保持不变。所以我想如果我能以某种方式捕获文本框中显示的数据的平均值(5-10 个读数),并从中获取我的标题,那么我的标题可能会保持更长的时间。除非其他人知道如何做到这一点。

对于代码:

string[] locate=nav.Split(',');// array from a coordinate value recieve from listbox    
float nlat = (float)Math.Round((float.Parse(locate[0])),5);
float nlong = (float)Math.Round((float.Parse(locate[1])),5);
float gpslong = (float)Math.Round((float.Parse(longTxt.Text.ToString())),5);//value from GPS
float gpslat=(float)Math.Round((float.Parse(latTxt.Text.ToString())),5);//value from GPS
double pi = Math.PI;

float diffy = nlong- gpslong;
float diffx = nlat -gpslat;

double heading=(double)(Math.Atan2(diffy,diffx)*180/pi);

while (compassBearing > heading)//compassBearing is current heading, heading is needed
{
     Serialport.Write("l"); //turn left Motorcontroller is designed to keep going in a direction till another order is recieved
    return;
 }
while (compassBearing < heading)
{
     Serialport.Write("r");//turn right
     return;
 }
Serialport.Write("w");//drive forward
 if (nlong == gpslong  && nlat == gpslat)
 {
      Serialport.Write(" ");//stop
  }

由于 gps 坐标不是恒定的,使用我的代码(正在导航机器人),他将向前行驶,然后立即松开方位并左转和右转,然后再走,如果他再走......我的数字罗盘我目前的航向有一点波动,但不如 GPS。无论如何,任何帮助将不胜感激。

4

2 回答 2

0

您可以使用 reduce_accuracy 变量使其更不准确但保持更长时间,这既快速又简单,尽管我不知道每 5-10 次读数取平均值会有多好...这取决于关于你想要达到的目标

...
double reduce_accuracy = 1;

while (compassBearing > heading + reduce_accuracy)//compassBearing is current heading, heading is needed
{
     Serialport.Write("l"); //turn left Motorcontroller is designed to keep going in a direction till another order is recieved
    return;
 }
while (compassBearing < heading - reduce_accuracy)
{
     Serialport.Write("r");//turn right
     return;
}
...
于 2013-08-02T12:50:27.373 回答
0

如果 GPS 仅在 8 英尺范围内准确,这意味着您的目标实际上大致是一个直径为 16 英尺的圆形区域,对吗?因此,您可以在整个区域上设置一个方位,而不是在一个点上创建一个方位。

我的想法是,当您获得更新的机器人位置时,您可以测试您当前的航向是否与目标 8 英尺内的任何点相交。如果是这样,请不要更改您的机器人标题。即使您的位置指示波动,由于您正在驶向更大的区域,您的路线修正应该最小化。

此外,您可能需要考虑到目标的距离。离你的目标越远,你需要的准确度就越低。

于 2013-08-02T12:55:00.817 回答