如何在不重复其值的情况下更新机器人和对象的位置



我想知道如何解决值被重复传递到activate(valueList)方法的问题。该程序的工作方式是有一个机器人和一个球,主循环连续传递值列表方法。我的目标是让机器人朝着球的方向转动并向它移动。问题是,假设球仍在移动,则值保持不变,直到它停止,从而导致机器人转向之前传递的角度。有没有具体的方法来解决这个问题?请注意,即使机器人和球处于静止状态,向下传递的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

激活方法:Ps 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)

以及这个不断将值传递给valueList 的主循环

screenw = 0
screenh = 0
while 1:
client_socket.send("locn")
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)

所以听起来你只是在尝试改变。在这种情况下,您可能只想保留以前的值并进行比较。然后,仅在检测到更改时调用activate()

last_valueList = []
while True:
client_socket.send("locn")
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])
if valueList != last_valueList
activate(valueList)
last_valueList = valueList[:] # copy list

相关内容

最新更新