0
我正在使用Roomba机器人(清洁机器人),每次机器人撞到某物时我都要打印。感谢Picamera,我还必须每10秒钟拍摄一张照片。我希望能够打印图片n和图片n + 1之间发生碰撞。 拍摄照片时,我会增加拍摄的照片数量,并在发生颠簸时增加相同数量(增加颠簸数量)。 例如,如果图片编号1和2之间出现凹凸1,我的代码将打印“图片1和图片2之间的凹凸1”。 问题是,如果拍摄图片2,我的代码将打印“图片2和图片3之间的凹凸1”。但它是错误的,凹凸1仍然在图片1和图片2之间。 即使已经拍摄了另一张图片,我仍然无法找到能够保留在相同图片之间的解决方案。python - 不同功能的返回值
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
非常感谢您的任何回答!
我试过了,它没有工作。 我想像“如果凹凸计数没有改变,仍然打印最后碰撞发生在图片n和图片n + 1之间,即使已经拍摄了1000张图片”。 –
啊,是的。忽略我写的内容,甚至不修改displayBumpings()中的计数值,对不起。我无法在我的机器上测试你的代码,但我已经多次阅读它,它似乎应该工作?根据你说的你在shell中得到的是正确的,不是吗? 你能指定更确切的问题是什么吗? –
直到拍摄图片2为止,我在外壳中获得的内容都是正确的。正如你所看到的,图片2被拍摄。但是,真正出现在图片1和图片2之间的凹凸1现在出现在图片2和图片3之间。但是它应该是相同的凹凸,它应该打印: '拍摄图片2' '图片1和图片2' –