我正在为自主机器人开发粒子滤波器,并且在生成期望的距离测量值时遇到麻烦,因此无法过滤粒子。我有一张我用作地图的图像。每个像素代表环境中的某个缩放区域。机器人占据的空间是白色的,墙壁是黑色的,环境外部的区域是灰色的。如何在图像python中测量角度距离
如果您不熟悉粒子过滤器是什么,我的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方向上找到黑色像素,然后使用角度的正切值来确定需要向上或向下移动多少个像素,但是存在明显的问题这主要是与角落有关,我无法想象它将会采取多少措施来解决这个问题。还有其他解决方案吗?