我现在正在为自主机器人研究粒子过滤器,并且无法生成预期的距离测量值来过滤粒子。我有一张用作地图的图像。每个像素代表环境中的某个缩放区域。机器人可以占据的空间是白色的,墙壁是黑色的,环境外部的区域是灰色的。
如果您不熟悉什么是粒子过滤器,我的 python 代码将创建预定数量的随机猜测,以确定它在空白空间中的位置 (x,y,theta)。然后它将使用超声波传感器以多个角度测量到最近墙壁的距离。该脚本会将这些测量值与每个猜测位置/方向的每个角度预期的测量值进行比较。与实际测量值最接近的那些将幸免于难,而不太可能正确的猜测将被消除。
我的问题是在给定角度找到最近的墙。假设传感器在 60° 处测量。对于每个猜测,我需要调整角度以考虑猜测的机器人方向,然后测量该角度与墙壁的距离。在 x 方向上很容易找到最近的墙:
from PIL import Image
#from matplotlib._png import read_png
from matplotlib.pyplot import *
mapp = Image.open("Map.png")
pixels = mapp.load()
width = mapp.size[0]
height = mapp.size[1]
imshow(mapp)
pixelWidth = 5
for x in range(width):
if mapp.getpixel((x, 100)) == (0,0,0,255): #Identify the first black pixel
distance = x*pixelWidth self.x
问题是我不能告诉脚本以 60°、23° 或任何角度一次搜索一个像素。现在我能想到的最好的办法就是先往x方向走,找到一个黑色像素,然后用角度的切线来确定我需要向上或向下移动多少像素,但是有明显的问题这主要与角落有关,我无法想象需要多少 if 语句来解决它。还有其他解决方案吗?