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_ballxyget_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 回答