资源简介
通过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简易jpeg编码
- 树莓派利用python、opencv、PyALPR识别车
- 人脸识别UI Pythone+pyq5+opencv 多线程模式
- 基于Python的双路视频传输及双显示系
- python调用opencv实现人脸识别的简单D
- Honeywell树莓派读取扫枪扫码数据
- 树莓派小车物体追踪
- 基于树莓派监控小车源码
- OpenCV动作识别
- 基于OpenCV的python颜色提取
- 火焰检测代码python
- python,Opencv实现的车牌识别定位及分
- python+opencv实现初步手势识别源码(本
- opencv实时识别指定物体
- OpenCV 3.x with Python By Example 2nd .txt
- 基于Python-opencv的车牌识别
- 基于OpenCV SIFT的指纹识别算法 python实
- Python+OpenCV实现Selective Search算法
- python opencv 图片去噪
- Python+OpenCV实现行人检测含配置说明
- python+opencv识别出物体颜色红白黑蓝绿
- opencv_python-3.4.3.18-cp37-cp37m-linux_armv7l
- 基于OpenCV的人脸识别-python3.zip
- pyinstaller打包OpenCV错误解决
- Python OpenCV 图像使用-
- Python OpenCV 类型转换-
- 树莓派JQC-3FF继电器:四行代码控制家
- Python给照片换底色(基于opencv模块)
- 树莓派控制舵机(RPi.GPIO)源码
- 基于树莓派的动态图像对比(py3_ob<
评论
共有 条评论