资源简介
通过opencv完成视觉巡线。
在白色地面上利用摄像头检测黑色的车道线,完成巡线任务。
将小车的行驶速度分为四个等级。当小车行驶在直道上会逐渐加速,当加到最高速时保持匀速行驶。当检测到弯道时小车会立即减速,再根据弯道大小调整速度,使得小车在保证行驶速度的同时能够安全转过弯道。
代码片段和文件信息
import RPi.GPIO as GPIO
import time
import cv2
import numpy as np
#小车电机引脚定义(BCM编码)(TB6612FNG驱动芯片)
IN1 = 20
IN2 = 21
IN3 = 19
IN4 = 26
ENA = 16
ENB = 13
#超声波引脚定义
EchoPin = 0
TrigPin = 1
#设置GPIO口为BCM编码方式
GPIO.setmode(GPIO.BCM)
#忽略警告信息
GPIO.setwarnings(False)
#电机引脚初始化操作
global pwm_ENA
global pwm_ENB
global delaytime
GPIO.setup(ENAGPIO.OUTinitial=GPIO.HIGH)
GPIO.setup(IN1GPIO.OUTinitial=GPIO.LOW)
GPIO.setup(IN2GPIO.OUTinitial=GPIO.LOW)
GPIO.setup(ENBGPIO.OUTinitial=GPIO.HIGH)
GPIO.setup(IN3GPIO.OUTinitial=GPIO.LOW)
GPIO.setup(IN4GPIO.OUTinitial=GPIO.LOW)
GPIO.setup(EchoPinGPIO.IN)
GPIO.setup(TrigPinGPIO.OUT)
#设置pwm引脚和频率为500hz
pwm_ENA = GPIO.PWM(ENA 500)
pwm_ENB = GPIO.PWM(ENB 500)
pwm_ENA.start(0)
pwm_ENB.start(0)
speed = 0 # 直道加速的标志
# 打开摄像头,图像尺寸640*480(长*高),opencv存储值为480*640(行*列)
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_frame_WIDTH640)#设置图像宽度
cap.set(cv2.CAP_PROP_frame_HEIGHT480)#设置图像高度
# 超声波测量障碍物距离
def Distance_test():
GPIO.output(TrigPinGPIO.HIGH)
time.sleep(0.000015)
GPIO.output(TrigPinGPIO.LOW)
while not GPIO.input(EchoPin):
pass
t1 = time.time()
while GPIO.input(EchoPin):
pass
t2 = time.time()
# print “distance is %d “ % (((t2 - t1)* 340 / 2) * 100)
time.sleep(0.01)
return ((t2 - t1)* 340 / 2) * 100
def stop():
GPIO.output(IN1 GPIO.LOW)
GPIO.output(IN2 GPIO.LOW)
GPIO.output(IN3 GPIO.LOW)
GPIO.output(IN4 GPIO.LOW)
pwm_ENA.ChangeDutyCycle(0)
pwm_ENB.ChangeDutyCycle(0)
time.sleep(0.1)
# 根据采集信息调整方向
# direction表示小车相对于车道线的距离,direction_line表示前方道路趋势
def run(directiondirection_line):
global speed
if abs(direction) > 30:
stop()
# 右转
elif direction >= 0:
if direction > 25:
direction = 25
if abs(direction_line) < 60 and direction_line!=0 and direction<15:
speed = speed + 1
if speed > 4:
speed = 4
GPIO.output(IN1 GPIO.HIGH)
GPIO.output(IN2 GPIO.LOW)
GPIO.output(IN3 GPIO.HIGH)
GPIO.output(IN4 GPIO.LOW)
pwm_ENA.ChangeDutyCycle(5 + speed)
pwm_ENB.ChangeDutyCycle(7 + speed + direction*0.5)
time.sleep(0.1)
else:
if direction_line < 0:
direction_line = 0
speed = 0
temp = 7 - direction_line*0.03
if temp < 0:
temp = 0
GPIO.output(IN1 GPIO.HIGH)
相关资源
- python人脸识别(opencv)
- 基于PyQt5的视频播放器设计
- 图片智能拼接(opencv)
- 计算机视觉 opencv 数数.ipynb
- python opencv 银行卡识别.ipynb
- python opencv 图片更换背景. ipynb
- 计算机视觉 opencv 答题卡阅卷.ipynb
- 计算机视觉 opencv 检测不合格产品.
- 计算机视觉 opencv 做一个动态时钟.
- 计算机视觉 opencv 哈哈镜
- 计算机视觉 opencv 蒙太奇.ipynb
- 计算机视觉 opencv 超像素分割.ipynb
- 计算机视觉 opencv 医学图片处理.ipy
- 人脸检测和识别(opencv3+python)
- python检测图片是否有人脸
- 以树莓派为基础,连接有毒气体传感
- python语言实现的基于opencv的表针识别
- OpenCV入门教程+OpenCV官方教程中文版
- opencv+Python的教程大全
- 树莓派Python编程入门与实战
- opencv手势识别
- Python+OpenCv项目代码
- python 识别物体跟踪
- 通过python使用opencv计算图像的中心
- 用Pythonopencv提取图像中的红色区域
- 段力辉大神翻译原版OpenCV-Python
- OpenCV-Python 中文教程278991
- OpenCV官方教程中文版Python版带完整书
- dlib18.17 编译好的python-dlib库 不需要
- OpenCV Python 手册
评论
共有 条评论