我正在研究Roomba机器人(清洁机器人),每次机器人撞到某物时我都需要打印。由于Picamera,我还必须每隔10秒拍照。我希望能够打印出图片n和图片n + 1之间发生碰撞。 拍摄照片时,我会增加拍摄的照片数量,并在发生碰撞时增加(增加碰撞次数)。 例如,如果在图片编号1和2之间出现凹凸1,则我的代码将打印“图片1和图片2之间的凹凸1”。 问题是如果拍摄了图片2,我的代码将打印“图片2和图片3之间的凹凸1”。但这是假的,Bump 1仍然在图片1和图片2之间。 即使已经拍摄了另一张照片,我找不到能够保持相同照片的解决方案。
count = 0
PicturesNumber = 0
def takePictures():
global PicturesNumber
for i in range(10):
sleep(5)
PicturesNumber += 1
print(("Picture %i taken" % (i + 1,)))
camera.capture(('/home/pi/Project/image%s.jpg') % (i,))
camera.close()
return PicturesNumber
def reactSensors():
global count
threading.Timer(1, reactSensors).start()
array = r.getSensor('BUMPS_AND_WHEEL_DROPS') # get information from the roomba sensors
if array[3] == 1 or array[4] == 1:
count += 1
#print(("Bump %i" % (count,)))
return count
def displayBumpings():
threading.Timer(1, displayBumpings).start()
print(("Bump %i between picture %i and picture %i\n" (count + 1, PicturesNumber, PicturesNumber + 1,)))
if __name__ == '__main__':
r = create.Create(SERIAL_PORT)
settime = time.time()
resp = input("Ready to roll? ")
if resp[0] != 'y':
r.shutdown()
if resp[0] == 'y':
print("Let's go\n")
# I am using threading to run each function at the same time
Thread(target=reactSensors).start()
Thread(target=takePictures).start()
Thread(target=displayBumpings).start()
我知道DisplayBumpings打印行存在问题,因为每次拍摄照片时PicturesNumber更新都是值。
这是我在shell中获得的内容
Picture 1 taken
Bump 1 between picture 1 and picture 2
Picture 2 taken
Bump 1 between picture 2 and picture 3
非常感谢您的回答!
答案 0 :(得分:0)
添加一个仅在count计数时更新的变量? 我的意思是,在reactSensor():
reactSensor():
...
if array[3] == 1 or array[4] == 1:
count +=1
newvariable = PicturesNumber
global newvariable
def displayBumpings():
threading.Timer(1, displayBumpings).start()
print(("Bump %i between picture %i and picture %i\n" (count + 1,newvariable, newvariable+ 1,)))
然后在碰撞时使用newvariable。