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_ballxy
和get_robotxya
返回相应对象的坐标,turn_to
和move_to
方法显然使机器人转向对象并移动到该对象。值从服务器返回,并作为后台进程存储在线程中。我的问题是如何确保我的机器人在循环中运行它时不会接受错误值或与之前相同的值?例如:
我该怎么做?我试着睡觉它time.sleep(seconds)
它有时会起作用,过了一段时间它会发疯。
答案 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()