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 に答える