电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
创作
电子发烧友网>电子资料下载>电子资料>使用OpenCV的车道跟随机器人

使用OpenCV的车道跟随机器人

2023-06-26 | zip | 0.00 MB | 次下载 | 免费

资料介绍

描述

Small Intro

在这个项目中,我 使用OpenCVRaspberry pi设计了一个车道跟随机器人

poYBAGNY0PqAAF9QAAFUdW8kQe0964.png
样本输出
 

Step 1 : Importing Libraries

首先我们导入 OpenCV、Numpy、数学和串行库。

import cv2
import numpy as np
import math
import serial

Step 2 : Read Image from your directory

image = cv2.imread(r'C:\Users\aasai\Desktop\new1.jpeg')
 
 
 
pYYBAGNY0P2AJGGRAAHxcoztTiI58.jpeg
 
1 / 2Raspi 相机拍摄的图像
 

Step 3 : Color Conversion

将我们的 BGR 图像转换为灰色。灰度图像仅包含 [0-255] 范围内的值。

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
poYBAGNY0P-AHTVvAAB_RS_taN8837.png
灰度图像
 

Step 4 : Image Smoothing

图像模糊/平滑图像平滑以减少噪点。它是在各种低通滤波器内核的帮助下完成的。这里我们使用了高斯核。了解更多关于不同内核的信息点击这里

# given input image, kernel width =5 height = 5, Gaussian kernel standard deviation
k_width = 5
k_height = 5
blurred = cv2.GaussianBlur(gray, (k_width, k_height), 0)
poYBAGNY0QKAKCNDAABQAuvrJSM575.png
平滑图像
 

Step 5 : Edge Detection

Canny边缘检测算法是一种流行的边缘检测算法,用于检测图像中的边缘。为了保留图像中的高梯度值,我们选择低阈值和高阈值。这将帮助我们保留图像中的强边缘。

# Find the edges in the image using canny detector
threshold1 = 80
threshold2 = 80
edged = cv2.Canny(blurred, threshold1, threshold2)
pYYBAGNY0QSARSBSAABu4rfyowA742.png
边缘检测
 

Step 6 : Find Lines

霍夫变换是一种特征提取方法,用于检测图像中的简单形状,如圆形、线条等。在这里,您可以了解更多相关信息。

# it will return line coordinates,it will return 3darray.
lines = cv2.HoughLinesP(edged,1,np.pi/180,max_slider,minLineLength,maxLineGap)

for x in range(0, len(lines)):
    for x1,y1,x2,y2 in lines[x]:
        # draw line in image using cv2.line function.
        cv2.line(image,(x1,y1),(x2,y2),(255,0,0),3)
        theta=theta+math.atan2((y2-y1),(x2-x1))
        print(theta)

About theta calculation:

atan2() 函数以弧度为单位返回值,表示 -pi 和 pi 之间的值,表示 (x, y) 点与正 x 轴的角度 theta。

poYBAGNY0QeAZZ-aAABGJ1jseAg791.jpg
来源:https://www.learnopencv.com/hough-transform-with-opencv-c-python/
 
 
 
 
poYBAGNY0QmAUARjAACcg2gE_Yg571.png
 
1 / 2
 

您可以使用这行代码获取第一行的坐标。

for x1,y1,x2,y2 in lines[0]:
pYYBAGNY0QyAYoI2AAAHHCf3jU0387.png
行[0]的输出
 

Step 7 : Decision Making Part

现在,我们要设置阈值,根据阈值和θ值之间的差异,我们将向arduino发送命令以驱动特定方向的电机

threshold=5
if(theta>threshold):
    print("Go left")
if(theta<-threshold):
    print("Go right")
if(abs(theta)<threshold):
    print("Go straight")

Step 8 : Integrate

poYBAGNY0Q6AKI8QAAE9vrqsQCU514.png
示意图
 

Arduino Code :

Arduino将从 Raspberry Pi 串行端口接收命令。

// assign pin num
int right_pin = 12;
int left_pin = 13;
int const ENA = 10;  
int const ENB = 11; 


// initial command
int command = 0;

void setup()

{
  pinMode(right_pin, OUTPUT);
  pinMode(left_pin, OUTPUT);
  pinMode(ENA, OUTPUT);   // set all the motor control pins to outputs
  pinMode(ENB, OUTPUT);

  Serial.begin(115200);
  
  while (!Serial);
  
  Serial.println("Opencv Lane Detect Autonomous Robot");

}

void loop() {

if (Serial.available())

{
  //int state = Serial.parseInt();
  int state = Serial.read();

  if (state == 4)
  {
    
    digitalWrite(left_pin, LOW);
    digitalWrite(right_pin, HIGH);
    digitalWrite(ENA, HIGH);
    digitalWrite(ENB, HIGH);
    Serial.println("Left");
  }

  if (state == 2)
  {
    digitalWrite(left_pin, LOW);
    digitalWrite(right_pin, LOW);
    digitalWrite(ENA, HIGH);
    digitalWrite(ENB, HIGH);
    Serial.println("Right");
    Serial.println("Reverse");
  }

  if (state == 3)
  {
    digitalWrite(left_pin, HIGH);
    digitalWrite(right_pin, LOW);
    digitalWrite(ENA, HIGH);
    digitalWrite(ENB, HIGH);

  Serial.println("Right");
  }
  if (state == 1)
  {
    digitalWrite(left_pin, HIGH);
    digitalWrite(right_pin, HIGH);
    digitalWrite(ENA, HIGH);
    digitalWrite(ENB, HIGH);

  Serial.println("Forward");
  }
  if (state == 5)
  {
    digitalWrite(left_pin, LOW);
    digitalWrite(right_pin, LOW);
    digitalWrite(ENA, LOW);
    digitalWrite(ENB, LOW);

  Serial.println("Stop");
  }
}
}
poYBAGNY0RSAfwUpAALj6T63YF027.jpeg
 

 

感谢信

感谢OpenCV Python 文档

Thanks阅读这个项目。希望这个项目能给你一些关于 OpenCV Lane Follow 机器人的见解,你可以按照给定的步骤做同样的事情。

我在沉默中努力工作,我的机器人制造噪音。
poYBAGNY0RaAO5FaAABP1ONlmvo543.jpg
来源:https://www.google.com/url?sa=i&url=https%3A%2F%2Fitaliandirectory.eu%2Fwill-robots-eventually-able-insert-key-lock%2F&psig=AOvVaw0q_aR0pBfINA7scyxOyS4x&ust=1588470268487000&source=images&cd= vfe&ved=0CA0QjhxqFwoTCODb4YaHlOkCFQAAAAAdAAAAABAP
 

 


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费