0

使用连接到检测球和机器人位置的摄像头的服务器。当客户端请求球和机器人的坐标时,由于图像的噪声,向下传递的坐标值在+2/-2 范围内变化。无论如何我想要一个绝对值来解决它,因为我会根据更改的值调用一个方法,并且如果值每次都在变化,它会在我运行它时导致程序中的错误

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('59.191.193.42',5555))

def updateBallx(valueList):
# updates red ball x-axis position
ballx = int(valueList[8])
return ballx

def updateBally(valueList):
    # updates red ball y-axis position
    bally = int(valueList[9])
    return bally

def updateRobotx(valueList):
    # updates robot x-axis position
    robotx = int(valueList[12])
    return robotx

def updateRoboty(valueList):
    # updates robot x-axis position
    roboty = int(valueList[13])
    return roboty

def updateRobota(valueList):
    # updates robot angle position
    robota = int(valueList[14])
    return robota

def activate():

new_x = 413 #updateBallx(valueList)
print new_x
new_y = 351 #updateBally(valueList)
print new_y
old_x = 309 #updateRobotx(valueList)
print old_x 
old_y = 261 #updateRoboty(valueList)
print old_y
angle = 360 #updateRobota(valueList)
print angle

turn_to(brick,new_x, new_y, old_x, old_y, angle)
move_to(brick,new_x, new_y, old_x, old_y)

screenw = 0
screenh = 0
old_valueList = []
while 1:
    client_socket.send("loc\n")
    data = client_socket.recv(8192)
    valueList = data.split()

    if (not(valueList[-1] == "eom" and valueList[0] == "start")):
        #print "continuing.."
            continue

        if(screenw != int(valueList[2])):
            screenw = int(valueList[2])
            screenh = int(valueList[3])
    if valueList != old_valueList:
        activate(valueList)
    old_valueList = valueList[:]
4

1 回答 1

0

所以换个说法:你有一个动态系统,你只有嘈杂的观察,你想在使用状态信息进行进一步处理之前从嘈杂的观察中推断出系统的真实状态?我对你的理解正确吗?

如果我这样做,那么您想要的是某种时间过滤。您可以在服务器端或客户端上执行此操作。

最简单的方法是在多个连续帧上运行移动平均(或者如果您没有对等距帧进行采样,则需要一些短时间窗口)。但是,这仅在您进行平均的时间窗口与系统动力学(例如机器人和球的运动速度)相比要短得多的情况下才有效。如果没有,你会模糊一些实际的动作,这可能是个坏主意。

您可以尝试的更复杂的方法是卡尔曼滤波器。如果你谷歌,你可以找到很多教程。Scipy 有它的图书馆http://www.scipy.org/Cookbook/KalmanFiltering

更复杂的是粒子过滤器。鉴于您的简单 2D 问题,我真的不建议使用它,因为它有太多参数需要调整。

于 2012-09-26T17:34:51.350 回答