我如何返回正确的值?

时间:2012-10-06 12:26:37

标签: python loops while-loop

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_ballxyget_robotxya返回相应对象的坐标,turn_tomove_to方法显然使机器人转向对象并移动到该对象。值从服务器返回,并作为后台进程存储在线程中。我的问题是如何确保我的机器人在循环中运行它时不会接受错误值或与之前相同的值?例如:

  • 第一组值:
    • 转向球移动球并踢球;
    • 等到球停止移动然后只重新读取机器人的值,然后循环运行。

我该怎么做?我试着睡觉它time.sleep(seconds)它有时会起作用,过了一段时间它会发疯。

1 个答案:

答案 0 :(得分: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()