1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【毕业设计】树莓派机器视觉小车设计与实现 - 单片机物联网 嵌入式 stm32

【毕业设计】树莓派机器视觉小车设计与实现 - 单片机物联网 嵌入式 stm32

时间:2019-02-28 01:36:43

相关推荐

【毕业设计】树莓派机器视觉小车设计与实现 - 单片机物联网 嵌入式 stm32

文章目录

0 前言1 简介2 实现效果3 树莓派视觉环境搭建3.1 树莓派安装系统3.2 设置静态网络3.3 更换镜像源3.4 安装中文输入法3.5 电脑控制树莓派3.6 OpenCV3.4.1安装7.设置通用(UART)串口的方法 8 部分核心代码9 最后

0 前言

🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩基于树莓派的机器视觉小车设计与实现

🥇学长这里给一个题目综合评分(每项满分5分)

难度系数:4分工作量:4分创新点:3分

🧿选题指导, 项目分享:

/dancheng-senior/project-sharing-1/blob/master/%E6%AF%95%E8%AE%BE%E6%8C%87%E5%AF%BC/README.md

1 简介

基于树莓派的视觉小车,完成视觉识别和驱动代码

2 实现效果

3 树莓派视觉环境搭建

主要有以下步骤

树莓派安装系统设置静态网络更换镜像源安装中文输入法电脑控制树莓派OpenCV3.4.1安装设置通用(UART)串口

3.1 树莓派安装系统

下载你所要的树莓派系统

/downloads/

RASPBIAN——>RASPBIAN STRETCH WITH DESKTOP

下载格式化磁盘软件,将你的磁盘格式化

/chs/index.html

完成安装并进行U盘格式化操作

将你树莓派的内存卡插在电脑上,打开软件

下载etcher,将系统导入到你的内存卡中

https://etcher.io/

选择好你下载的系统压缩包,你的树莓派内存卡,点击Flash!

etcher提示成功后,就可以将内存卡取下插入树莓派

树莓派Raspbian系统默认密码为raspberry,ubuntu mate默认密码为ubuntu

3.2 设置静态网络

树莓派自带无线网卡,开机后按照提示链接WiFi热点输入密码上网。我们可以在终端查看网络连接情况:

​ ifconfig

默认情况下树莓派的IP是DHCP动态配置的,为了下文使用VNC登录方便,通常做法是将IP改为静态地址。

打开/etc/dhcpcd.conf

sudo vi /etc/dhcpcd.conf

在末尾添加以下内容

interface eth0static ip_address=192.168.0.142/24static routers=192.168.199.1static domain_name_servers=114.114.114.114 8.8.8.8

static ip_address是树莓派的IP地址

static routers是路由器地址

/24表示为子网掩码255.255.255.0

114.114.114.114是国内的较快速的DNS服务器

8.8.8.8 是谷歌的DNS服务器

重启

reboot

3.3 更换镜像源

使用管理员权限(经由sudo),编辑/etc/apt/sources.list文件。参考命令行为:

sudo nano /etc/apt/sources.list

用#注释掉原文件内容,用以下内容取代:

​ deb http://mirrors.tuna./raspbian/raspbian/ stretch main contrib non-free rpi

​ deb-src http://mirrors.tuna./raspbian/raspbian/ stretch main contrib non-free rpi

编辑/etc/apt/sources.list.d/raspi.list文件

sudo nano /etc/apt/sources.list.d/raspi.list

用#注释掉原文件内容,用以下内容取代:

​ deb http://mirror.tuna./raspberrypi/ stretch main ui

​ deb-src http://mirror.tuna./raspberrypi/ stretch main ui

更新文件

sudo apt-get updatesudo apt-get upgrade

3.4 安装中文输入法

安装中文字体

sudo apt-get install ttf-wqy-zenhei

安装中文输入法

sudo apt-get install scim-pinyin

安装好拼音输入法后,可以直接命令行输入scim激活,下次启动是会自动启动的。快捷键是Ctrl+空格。或者直接点击屏幕右上角的输入法图标选择。

配置中文操作系统

sudo raspi-config

进行系统设置。选择Internationalisation Options–>Change

Locale–>zh_CN.UTF-8–>OK,然后重启系统,设置为中文操作系统。

3.5 电脑控制树莓派

SSH只能使用命令行控制树莓派,而VNC可远程登录树莓派图形界面系统。VNC包括服务端(VNC server)和客户端(VNC viewer)。

安装VNC官方参考文档:/en/connect/docs/raspberry-pi.html#raspberry-pi-setup

在树莓派上安装VNC server

sudo apt-get updatesudo apt-get install realvnc-vnc-server

打开VNC service服务

sudo raspi-config

找到 Interfacing Options > VNC and select Yes.

设置完成后,树莓派启动时,VNC service将自动启动。

获取树莓派IP地址

ifconfig

电脑端安装VNC Viewer

下载地址:/en/connect/download/viewer/

安装后打开VNC Viewer

File ——> New connection

红色部分输入树莓派的IP地址,点击OK添加。

选择连接之后输入树莓派的登录用户名密码,初始用户名 pi,密码为进入树莓派系统时设置的密码(如果没有设置,树莓派初始密码为

raspberry)。确认之后即可进入树莓派的远程桌面!

3.6 OpenCV3.4.1安装

软件更新

// 软件源更新sudo apt-get update // 升级本地所有安装包,最新系统可以不升级,版本过高反而需要降级才能安装sudo apt-get upgrade// 升级树莓派固件,固件比较新或者是Ubuntu则不用执行sudo rpi-update

安装构建OpenCV的相关工具:

// 安装build-essential、cmake、git和pkg-configsudo apt-get install build-essential cmake git pkg-config

安装常用图像工具包

// 安装jpeg格式图像工具包sudo apt-get install libjpeg8-dev // 安装tif格式图像工具包sudo apt-get install libtiff5-dev // 安装JPEG-2000图像工具包sudo apt-get install libjasper-dev // 安装png图像工具包sudo apt-get install libpng12-dev

安装视频I/O包

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

安装gtk2.0

sudo apt-get install libgtk2.0-dev

优化函数包

sudo apt-get install libatlas-base-dev gfortran

编译OpenCV源代码

// 使用wget下载OpenCV源码,觉得慢的话可以到/opencv/opencv/releases下载OpenCV的源代码// tar.gz格式,需要解压好,放到用户目录下// 但是OpenCV_contrib请大家使用wget,亲测直接到Github下载zip文件的话,会有编译问题// 下载OpenCVwget -O opencv-3.4.1.zip /Itseez/opencv/archive/3.4.1.zip// 解压OpenCVunzip opencv-3.4.1.zip// 下载OpenCV_contrib库:wget -O opencv_contrib-3.4.1.zip /Itseez/opencv_contrib/archive/3.4.1.zip// 解压OpenCV_contrib库:unzip opencv_contrib-3.4.1.zip

找到你下载的源码文件夹并打开,tar.gz解压后文件夹名应该是opencv-3.4.1(版本号可能会变化),git方式下载的文件夹名应该是opencv。之后我们新建一个名为release的文件夹用来存放cmake编译时产生的临时文件:

// 打开源码文件夹,这里以我修改文章时最新的3.4.1为例cd opencv-3.4.1// 新建release文件夹mkdir release// 进入release文件夹cd release

设置cmake编译参数,安装目录默认为/usr/local ,注意参数名、等号和参数值之间不能有空格,但每行末尾“\”之前有空格,参数值最后是两个英文的点:

/** CMAKE_BUILD_TYPE是编译方式* CMAKE_INSTALL_PREFIX是安装目录* OPENCV_EXTRA_MODULES_PATH是加载额外模块* INSTALL_PYTHON_EXAMPLES是安装官方python例程* BUILD_EXAMPLES是编译例程(这两个可以不加,不加编译稍微快一点点,想要C语言的例程的话,在最后一行前加参数INSTALL_C_EXAMPLES=ON \)**/sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \-D CMAKE_INSTALL_PREFIX=/usr/local \-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.1/modules \-D INSTALL_PYTHON_EXAMPLES=ON \-D BUILD_EXAMPLES=ON ..

开始正式编译

// 编译,以管理员身份,否则容易出错sudo make// 安装sudo make install// 更新动态链接库sudo ldconfig

查看安装版本

pkg-config --modversion opencv

测试安装:

cd ~/opencv-3.4.1/release/bin./opencv_test_core

7.设置通用(UART)串口的方法

首先查看有没有相关文件

cd /boot/overlaysls

查看是否存在README 和 pi3-miniuart-bt-overlay.dtb 或者是 pi3-miniuart-bt.dtb

(后面的缺了(overlay)但是在README中的解释是相同的)。如果没有的话,自行百度下载。

查看并修改串口映射关系

ls -l /dev

这里已经配置好了,因此会有ttyAMA0和ttyS0两个串口映射,最开始只有一个。下一步对文件进行修改。

​ sudo nano /boot/config.txt

在该文件最后一行加入代码

​ dtoverlay=pi3-miniuart-bt

保存文件。

​ sudo nano /boot/cmdline.txt

注释掉原来的内容,将以下内容添加进去

​ dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

保存文件。

禁用串口的控制台功能

sudo systemctl stop serial-getty@ttyAMA0.servicesudo systemctl disable serial-getty@ttyAMA0.service

最后,我们依次执行以下命令完成所有配置并重启:

​ sudo apt-get update

​ sudo apt-get upgrade

​ sudo reboot

8 部分核心代码

def Motor_Init():global L_Motor, R_MotorL_Motor= GPIO.PWM(l_motor,100)R_Motor = GPIO.PWM(r_motor,100)L_Motor.start(0)R_Motor.start(0)def Direction_Init():GPIO.setup(left_back,GPIO.OUT)GPIO.setup(left_front,GPIO.OUT)GPIO.setup(l_motor,GPIO.OUT)GPIO.setup(right_front,GPIO.OUT)GPIO.setup(right_back,GPIO.OUT)GPIO.setup(r_motor,GPIO.OUT)def Servo_Init():global pwm_servopwm_servo=Adafruit_PCA9685.PCA9685()def Init():GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM)Direction_Init()Servo_Init()Motor_Init()

运动控制函数

def Front(speed):L_Motor.ChangeDutyCycle(speed)GPIO.output(left_front,1) #left_frontGPIO.output(left_back,0) #left_backR_Motor.ChangeDutyCycle(speed)GPIO.output(right_front,1) #right_frontGPIO.output(right_back,0) #right_backdef Back(speed):L_Motor.ChangeDutyCycle(speed)GPIO.output(left_front,0) #left_frontGPIO.output(left_back,1) #left_backR_Motor.ChangeDutyCycle(speed)GPIO.output(right_front,0) #right_frontGPIO.output(right_back,1) #right_backdef Left(speed):L_Motor.ChangeDutyCycle(speed)GPIO.output(left_front,0) #left_frontGPIO.output(left_back,1) #left_backR_Motor.ChangeDutyCycle(speed)GPIO.output(right_front,1) #right_frontGPIO.output(right_back,0) #right_backdef Right(speed):L_Motor.ChangeDutyCycle(speed)GPIO.output(left_front,1) #left_frontGPIO.output(left_back,0) #left_backR_Motor.ChangeDutyCycle(speed)GPIO.output(right_front,0) #right_frontGPIO.output(right_back,1) #right_backdef Stop():L_Motor.ChangeDutyCycle(0)GPIO.output(left_front,0) #left_frontGPIO.output(left_back,0) #left_backR_Motor.ChangeDutyCycle(0)GPIO.output(right_front,0) #right_frontGPIO.output(right_back,0) #right_back

9 最后

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。