Python 寻找一种机器人导航算法
我有一个移动机器人,它有一个连接到摇摄伺服电机的距离传感器。电机持续旋转,将传感器从0度向后移动180度 距离传感器每隔几毫秒发送一个信号,扫描周围的障碍物。可以将距离传感器生成的数据可视化如下: 我希望创建一个算法,允许机器人在空间最大(或障碍物最少)的方向上移动 更正式地说,我可以表示输入和输出,如:Python 寻找一种机器人导航算法,python,algorithm,computer-vision,robotics,Python,Algorithm,Computer Vision,Robotics,我有一个移动机器人,它有一个连接到摇摄伺服电机的距离传感器。电机持续旋转,将传感器从0度向后移动180度 距离传感器每隔几毫秒发送一个信号,扫描周围的障碍物。可以将距离传感器生成的数据可视化如下: 我希望创建一个算法,允许机器人在空间最大(或障碍物最少)的方向上移动 更正式地说,我可以表示输入和输出,如: 输入:每个电机旋转角度到最近对象的距离数组 输出:表示最佳角度的单个值 该算法的要求如下: 不应易受数据中异常值的影响(传感器有时会出现不可预测的峰值) 不需要绝对最优,可接受1-2%
- 输入:每个电机旋转角度到最近对象的距离数组
- 输出:表示最佳角度的单个值
- 不应易受数据中异常值的影响(传感器有时会出现不可预测的峰值)
- 不需要绝对最优,可接受1-2%的折扣
- 高效(这将在小型微处理器上运行)
- 爱好者可以理解(我不是ML专家;)
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%的折扣什么?无论是什么,都很难实现。有什么想法吗?您尝试过什么吗?(这被视为获得帮助的要求)