0
def activate():

    if(ultrasonic.get_sample() < 10):
        both.turn(power=-70, tacho_units=400, brake=False)
        time.sleep(1)
        bx,by = get_ballxy()
        rx,ry,a = get_robotxya()
        turn_to(brick,bx,by,rx,ry,a)
        time.sleep(0.5)
        move_to(brick,bx,by,rx,ry)
        kickBall(brick,by)  
    else:
        time.sleep(1)
        bx,by = get_ballxy()
        rx,ry,a = get_robotxya()
        turn_to(brick,bx,by,rx,ry,a)
        time.sleep(0.5)
        move_to(brick,bx,by,rx,ry)
        kickBall(brick,by,ry)

Thread(target=update_coordinates).start()
connect()
update_coordinates()
while True:
    activate()

上記は私のコードの一部です。get_ballxyandget_robotxyaは対応するオブジェクトの座標を返し、turn_toandmove_toメソッドは明らかにロボットをオブジェクトに向けて移動させます。値はサーバーから返され、バックグラウンド プロセスとしてスレッドに格納されます。ここでの私の質問は、ループで実行するときに、ロボットが誤った値または以前と同じ値を取り込まないようにするにはどうすればよいですか? 例えば:

  • 最初の値のセット:
    • ボールに向けてボールに移動し、ボールを蹴ります。
    • ボールの動きが止まるまで待ってから、値をロボットに再読み込みし、これをループで実行します。

どうすればいいですか?私はそれを眠らせてみましtime.sleep(seconds)たが、時々うまくいき、しばらくすると気が狂います。

4

1 に答える 1

0

ボールが動いているときに動かしたり、回転したり、蹴ったりしたくない場合は、これを追加してみてください。

def activate():
    global x1, y1
    if(ultrasonic.get_sample() < 10):
        both.turn(power=-70, tacho_units=400, brake=False)
    bx, by = get_ballxy()
    rx, ry, a = get_robotxya()

    if sqrt((x1-bx)*(x1-bx)+(y1-by)*(y1-by)) <= 4: #This is the distance parameter, change at will
        turn_to(brick, bx, by, rx, ry, a)
        move_to(brick, bx, by, rx, ry)
        kickBall(brick, by, ry)

    x1, y1 = bx, by

Thread(target=update_coordinates).start()
connect()
x1, y1 = 0, 0
update_coordinates()
while True:
    activate()
于 2012-10-08T15:03:52.630 に答える