Я хотел бы знать, как я могу решить проблемы многократной передачи значений моему методу активации (valueList). Программа работает таким образом, что есть робот и мяч, а основной цикл непрерывно передает метод списка значений. Моя цель - повернуть робота в направлении мяча и двигаться к нему. Проблема в том, что, скажем, если мяч все еще движется, значения остаются неизменными до тех пор, пока он не остановится, что заставит робота повернуться на угол, который был ранее прошло вниз. Есть ли какой-то особый способ обойти это? Обратите внимание, что значения в списке значений, которые передаются вниз, различаются между +2 и -2, даже если робот и мяч находятся в стационарном состоянии. PS. я использую lego nxt (nxt-python), который подключен по сети к камере, которая передает значения
Например:
Методы, возвращающие значения:
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
Метод активации: метод turn_to и move_to показывает поворот и движение к объекту.
def activate():
new_x = updateBallx(valueList)
print 'Ball x',new_x
new_y = updateBally(valueList)
print 'Ball y',new_y
old_x = updateRobotx(valueList)
print 'Robot x',old_x
old_y = updateRoboty(valueList)
print 'Robot y',old_y
angle = updateRobota(valueList)
print 'Robot angle',angle
turn_to(brick,new_x, new_y, old_x, old_y, angle)
#time.sleep(2)
#move_to(brick,new_x, new_y, old_x, old_y)
#time.sleep(3)
#kickBall(brick,new_y, old_y)
#time.sleep(3)
и этот основной цикл, который продолжает передавать значения в список значений
screenw = 0
screenh = 0
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])
activate(valueList)