大家好啊。今天终于把摄像头云台颜色追踪实现了。过来写一下经验。
我用的是亚博的扩展板,usb 摄像头,摄像头云台。树莓派4b(不知道为什么我的3b连接扩展板就报警,蜂鸣器响个不停,后来问了他们家的技术人员说是不是他家的树莓派,也挺无语的,这还分谁家的),后来终于在我的不懈努力下,终于搞明白了,原来是我的树莓派相关引脚出了问题,接触不良。所以报警,所以也提醒一下您,找不到问题时,可能是树莓派引脚出现的问题。
一、镜像
这里我用的是亚博自家的镜像,因为里面有自带的opencv库,至于装opencv的过程,你懂的,很麻烦,以前翻墙装的清华源的,以后有机会再总结吧,考虑到版权问题,这里暂时不能提供链接,有需要的,下面滴滴。树莓派官网的下载地址:http://www.raspberrypi.org/downloads
可在官网上下载最新的Raspbian树莓派系统。
二、代码
import RPi.GPIO as GPIO
import time
#bgr8转jpeg格式
import enum
import cv2
def bgr8_to_jpeg(value, quality=75):
return bytes(cv2.imencode(’.jpg’, value)[1])
#显示摄像头组件
import cv2
import traitlets
import ipywidgets.widgets as widgets
from IPython.display import display
import time
线程功能操作库
import threading
import inspect
import ctypes
image_widget = widgets.Image(format=‘jpeg’, width=300, height=300)
display(image_widget)
#舵机引脚定义
ServoPin = 11 #S2
ServoPinB = 9 #S3
#设置GPIO口为BCM编码方式
GPIO.setmode(GPIO.BCM)
#舵机引脚设置为输出模式
def init():
GPIO.setup(ServoPin, GPIO.OUT)
GPIO.setup(ServoPinB, GPIO.OUT)
#定义一个脉冲函数,用来模拟方式产生pwm值
#时基脉冲为20ms,该脉冲高电平部分在0.5-2.5ms控制0-180度
def servo_pulse(myangleA, myangleB):
pulsewidth = myangleA
GPIO.output(ServoPin, GPIO.HIGH)
time.sleep(pulsewidth/1000000.0)
GPIO.output(ServoPin, GPIO.LOW)
time.sleep(20.0/1000-pulsewidth/1000000.0)
pulsewidthB = myangleB
GPIO.output(ServoPinB, GPIO.HIGH)
time.sleep(pulsewidthB/1000000.0)
GPIO.output(ServoPinB, GPIO.LOW)
time.sleep(20.0/1000-pulsewidthB/1000000.0)
#根据舵机脉冲控制范围为500-2500usec内:
def Servo_control(angle_1, angle_2):
init()
if angle_1 < 500:
angle_1 = 500
elif angle_1 > 2500:
angle_1 = 2500
if angle_2 < 500:
angle_2 = 500
elif angl