树莓派+相机+步进电机+开放式CV

2024-09-29 01:22:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个程序,基本上把托盘放在一个连接到树莓皮的相机下面,使用步进电机+a4988驱动程序。该代码将托盘带到起始位置,迈出一步,拍照并重复10次。然后托盘返回到起始位置。我应该得到的是10张照片,每个部分的托盘上有任何东西。在

然而,我得到的是7张完全相同的照片,然后3张是不同的,我不知道为什么。在

我认为相机拍摄照片的速度比托盘移动的速度快,但从代码中我看不出为什么会这样。在

我使用openCV来获取照片,因为我计划分析每一张照片。在

谢谢!!在

这是我的代码:

from time import sleep
import RPi.GPIO as GPIO
import cv2

cam = cv2.VideoCapture(0)

DIR = 20   # Direction GPIO Pin
STEP = 21  # Step GPIO Pin
CW = 1     # Clockwise Rotation
CCW = 0    # Counterclockwise Rotation
SPR = 200   # Steps per Revolution (360 / 1.8)

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(DIR, GPIO.OUT)
GPIO.setup(STEP, GPIO.OUT)
GPIO.output(DIR, CW)

MODE = (14, 15, 18)   # Microstep Resolution GPIO Pins
GPIO.setup(MODE, GPIO.OUT)
RESOLUTION = {'Full': (0, 0, 0),
              'Half': (1, 0, 0),
              '1/4': (0, 1, 0),
              '1/8': (1, 1, 0),
              '1/16': (1, 1, 1),}

GPIO.output(MODE, RESOLUTION['1/16'])
delay2 = 0.0208/32
GPIO.output(DIR, CCW)
for x in range (1500): # Brings Tray to level of first photo
    GPIO.output(STEP, GPIO.HIGH)
    sleep(delay2)
    GPIO.output(STEP, GPIO.LOW)
    sleep(delay2)
sleep(.5)
for a in range (0,9): # Begins 10 photos
    for b in range (250): #Motor steps between photos
        GPIO.output(STEP, GPIO.HIGH)
        sleep(delay2)
        GPIO.output(STEP, GPIO.LOW)
        sleep(delay2)
    sleep(.5)

    ret, frame = cam.read() #Sets up cam for photo
    cv2.imwrite("image"+str(a)+".jpg", frame)  #Write photo to file
    sleep(2)

GPIO.output(DIR, CW)
for x in range(3750): # Pushes Tray out to original starting position
    GPIO.output(STEP, GPIO.HIGH)
    sleep(delay2)
    GPIO.output(STEP, GPIO.LOW)
    sleep(delay2)
sleep(.5)

cam.release()
GPIO.cleanup()

Tags: 代码inimportforoutputgpiostepdir
1条回答
网友
1楼 · 发布于 2024-09-29 01:22:26

多亏了马克和马特。谢谢你的帮助。解决方法是在每个马达步骤调用视频捕获,然后每次释放它。在

代码如下:

for a in range(1,10):
cam=cv2.VideoCapture(0)
ret, frame = cam.read()
cv2.imwrite('iamge'+str(a)+"jpg", frame)
cam.release

。。。等等

所以每走一步,相机都会被调用并释放,这似乎能解决问题

谢谢大家

相关问题 更多 >