Raspberry Pi + Камера + Шаговые Двигатели + Открыть CV - PullRequest
1 голос
/ 06 апреля 2019

Я написал программу, которая в основном приносит лоток под камеру, последовательно подключенную к Raspberry Pi, используя шаговый двигатель + драйвер 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()

1 Ответ

0 голосов
/ 06 апреля 2019

Решил это благодаря Марку и Мэтту. Спасибо за вашу помощь. Была решена путем вызова захвата видео на каждом шаге двигателя и последующего его отпускания.

Вот код:

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

... и т. Д. И т. Д.

Таким образом, для каждого шага вызывается и отпускается камера, которая, кажется, решает эту проблему

Спасибо всем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...