树莓派与matlab联动并安装opencv
背景
我有一块闲置的树莓派,想用它建立智能驾驶平台,硬件采用平跑车搭载树莓派做主控,使用树莓派控制arduino输出pwm控制电调调速,由于没有编码器采用开环控制。matlab对树莓派具有硬件支持,选择在matlab上训练模型部署到树莓派运行的方式。
树莓派镜像
首先需要安装matlab的树莓派硬件支持包,配置部分按照实际板子的型号选择,填入必要的信息即可。我采用的是3b+型号,直接在github上下载需要注意对应版本,不是越新越好的。下载好之后对镜像进行校验,完成后设置连接网络的方式,我选择无线连接,设置好ssid和密码就可以一路下一步write写入tf卡了。过程简单不予赘述。
修改软件源
众所周知,树莓派默认软件源在国外,访问速度不高,建议修改软件源为国内的镜像。
方法
如果一切正常,在matlab中使用
rpi=raspi()
可以得到一个树莓派对象,可以看到树莓派的ip地址。本例中为192.168.2.169。
使用putty或vnc viewer访问树莓派,默认用户名为pi,密码是raspberry,输入密码时不显示字符,正常输入后回车就可以登录到树莓派的界面了。
建议首次登陆后修改默认密码:
sudo passwd pi
输入两次新密码即可。
注意:修改密码后原来的连接可能会断开,重新使用新密码登录即可。
打开命令行,输入
sudo nano /etc/apt/sources.list
这里nano可以换成其他你喜欢的文本编辑器,编辑源路径,因为离杭州更近我选择阿里云的源,选择其他源也可以。注意:只修改http://到/raspbian之间的地址。
deb http://mirrors.aliyun.com/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ buster main contrib non-free rpi
保存文件,修改系统源:
sudo nano /etc/apt/sources.list.d/raspi.list
这里我选择清华源:
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
接下来修改pip源:
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip config set global.extra-index-url https://mirrors.aliyun.com/pypi/simple/
换好之后使用
pip config list
查看应该看到上边两个地址已经配置成功。
使用
sudo apt-get update
sudo apt-get upgrade
更新软件,需要安装新的直接y就可以。
更改默认python版本为python3
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150
这里100和150为优先级,越大越靠前。
安装ftp服务器
为了传文件方便,我在树莓派上安装vsftpd,参考其他文章的配置工作配置好就行。
sudo apt-get install vsftpd
编辑配置略。重新启动vsftpd更新配置之后在资源管理器上输入:ftp:\192.168.2.169,就可以访问树莓派的文件系统了。
sudo service vsftpd restart
安装opencv
numpy默认版本有可能版本与opencv的不匹配则需要安装numpy并更新,没有pip的要安装pip:
sudo apt-get install python-numpy python-scipy python-matplotlib python-pandas
sudo apt-get install python3-pip -y
pip install -U numpy
我在命令中包含了其他科学计算包不需要的可以不装。
在这里选择要安装的版本,在命令行输入对应的命令。
建议使用
sudo pip3 install opencv-python==4.5.5.64
查看好下载的文件名称是opencv_python-4.5.5.64-cp37-cp37m-linux_armv7l.whl
,crtl+c停止进程,在电脑上下载好对应的文件,传输到树莓派。。
进入下载好的文件所在的文件夹
在python2上安装opencv:
sudo apt-get install python-opencv
检查确认效果
在命令行中使用python进入,import cv2,如果不报错说明安装成功。可以愉快的使用matlab连接树莓派玩耍了!
补充:开机自动上报ip
由于采用DHCP方式获取ip,地址是不固定的,我采用python获取本机ip通过微信(server酱)和邮箱分别发送获取ip。源代码如下,<KEY>部分表示server酱上获取的token。<mail>表示邮箱地址,我选择163邮箱自己发给自己<Passwd>表示邮箱授权码。
#!\usr\bin\env python
# coding=utf-8
import time
import socket
import requests
import smtplib
from email.mime.text import MIMEText
def getLocalIP():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("1.1.1.1", 80))
ipaddr = s.getsockname()[0]
s.close()
return ipaddr
def post(ip):
url = "https://sctapi.ftqq.com/<KEY>.send"
data = "title=树莓派ip&desp=%s" % ip
results = requests.get(url, data)
def send_email(content):
mail_host = "smtp.163.com"
mail_user = "<mail>@163.com"
mail_pass = "<Passwd>"
# *发件人
sender = '<mail>@163.com'
# *收件人
receivers = ['<mail>@163.com']
message = MIMEText('Thank You!', 'plain', 'utf-8')
message['Subject'] = content
message['From'] = sender
message['To'] = receivers[0]
try:
s = smtplib.SMTP()
s.connect(mail_host, 25)
s.login(mail_user, mail_pass)
s.sendmail(sender, receivers, message.as_string())
s.quit()
except smtplib.SMTPException as e:
print('error', e)
if __name__ == "__main__":
time.sleep(20)
while True:
ip = getLocalIP()
print(ip)
if ip == False:
post("正在获取网络地址")
else:
post(ip)
send_email(ip)
pass
break
time.sleep(5)
文件名保存为ip-push.py保存路径在~/Documents/下,
编辑/etc/rc.local文件,在exit 0 前添加一行:
sudo python ~/Documents/ip-push.py