Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 寻找一种机器人导航算法_Python_Algorithm_Computer Vision_Robotics - Fatal编程技术网

Python 寻找一种机器人导航算法

Python 寻找一种机器人导航算法,python,algorithm,computer-vision,robotics,Python,Algorithm,Computer Vision,Robotics,我有一个移动机器人,它有一个连接到摇摄伺服电机的距离传感器。电机持续旋转,将传感器从0度向后移动180度 距离传感器每隔几毫秒发送一个信号,扫描周围的障碍物。可以将距离传感器生成的数据可视化如下: 我希望创建一个算法,允许机器人在空间最大(或障碍物最少)的方向上移动 更正式地说,我可以表示输入和输出,如: 输入:每个电机旋转角度到最近对象的距离数组 输出:表示最佳角度的单个值 该算法的要求如下: 不应易受数据中异常值的影响(传感器有时会出现不可预测的峰值) 不需要绝对最优,可接受1-2%

我有一个移动机器人,它有一个连接到摇摄伺服电机的距离传感器。电机持续旋转,将传感器从0度向后移动180度

距离传感器每隔几毫秒发送一个信号,扫描周围的障碍物。可以将距离传感器生成的数据可视化如下:

我希望创建一个算法,允许机器人在空间最大(或障碍物最少)的方向上移动

更正式地说,我可以表示输入和输出,如:

  • 输入:每个电机旋转角度到最近对象的距离数组

  • 输出:表示最佳角度的单个值

该算法的要求如下:

  • 不应易受数据中异常值的影响(传感器有时会出现不可预测的峰值)
  • 不需要绝对最优,可接受1-2%的折扣
  • 高效(这将在小型微处理器上运行)
  • 爱好者可以理解(我不是ML专家;)

我不知道您正在使用的语言(我是一个Java和C的家伙),所以我只使用伪代码:

EPSILON : Float = .02f -> this is our margin of error

DIRECTION : Integer = 0 -> the best direction to go

DISTANCE : Float = 0 -> the furthest distance from the robot

DISTANCES : Float[181] -> the values you get from your sensor

DISTANCE = DISTANCES[DIRECTION] // set the first distance

     for(int index = 1; index < size_of(DISTANCES)-1; index++) {
        //we are checking if the value is within 2% of the previous and next values
        if((DISTANCES[index-1] * (1+EPSILON) >= DISTANCES[index] AND
            DISTANCES[index-1] * (1-EPSILON) <= DISTANCES[index]) OR 
           (DISTANCES[index+1] * (1+EPSILON) >= DISTANCES[index] AND
            DISTANCES[index+1] * (1-EPSILON) <= DISTANCES[index])) {
       //if the distance at index is greater than the current max distance,
       //we set that to be the new max distance
        if(DISTANCES[index] > DISTANCE) {
           DISTANCE = DISTANCES[index]
           DIRECTION = index
          }
        }
     }
EPSILON:Float=.02f->这是我们的误差范围
方向:整数=0->最佳前进方向
距离:Float=0->距离机器人的最远距离
距离:浮点[181]->从传感器获得的值
距离=距离[方向]//设置第一个距离
对于(int index=1;index=距离[index]和
距离[index-1]*(1-ε)=距离[index]和
距离[指数+1]*(1-ε)距离){
距离=距离[索引]
方向=索引
}
}
}

您也可以使用传感器进行两次扫描,并比较每个点的距离,以查看是否有任何尖峰,但根据您列出的规格,这应该可以工作。

1-2%的折扣什么?无论是什么,都很难实现。有什么想法吗?您尝试过什么吗?(这被视为获得帮助的要求)