1 成果展示

花了点时间做了简单的手机控制树莓派小车项目,其实主要是对之前各种学习内容的一个综合利用,也特地抽出时间学习了一下最基本的Android开发。下面的图片是成果的展示,树莓派小车由树莓派、小车地盘、电机及电机控制模块、摄像头、舵机云台和OLED显示屏等组成,手机端写了一个简单的App,可以控制小车的行进,控制摄像头云台转动,同时可以接收显示摄像头的图像。

小车图片:

手机App,左边的方向按钮控制电机运动,右边的方向按钮控制云台转动:

演示:

2 简要说明

1 用到哪些硬件模块

购买现成的小车底座,包括电机马达和车轮;
使用L298N模块来控制小车底座上的电机,使树莓派可以驱动小车运动;
一块12V的锂电池,专门给L298N供电;
树莓派专用CSI接口摄像头,用来采集图像;
由两个SG90舵机构成的云台,作为摄像头的搭载平台;
一块OLED显示屏,简要地显示一些信息;
不用的一个充电宝,用来给树莓派供电;
自己的Android手机

2 程序开发说明

树莓派上写python脚本来运行,手机上用Android Studio开发App;
树莓派上的python应用不是完全写在一个程序文件内的,所以用了一个bash脚本来统一启动或停止多个python程序;
为不同的硬件模块写运行脚本,需要安装、导入一些第三方库;
对于图像的采集,我使用的是OpenCV库,简单地捕获图像帧再编码发送,接收端解码后显示出图片;
手机与树莓派在同一个局域网下通过TCP或UDP进行通信。手机用TCP向树莓派发送控制指令;树莓派通过UDP传送图像

3 存在的问题

如果没有后续的图像处理操作的话,用OpenCV来捕获摄像头图像有点杀鸡用牛刀,因为OpenCV比较庞大,安装起来很费劲。对于树莓派专用摄像头,可以使用picamera库;
直接用UDP传输捕获到的图片,虽然实现简单,但对网络要求较高,所以小车和手机需要处在网络良好的局域网下,并且要对图片做较大的压缩;
启动程序需要SSH登陆后手动运行,可以做成自启动或者外接开关进行控制

3 源码地址

树莓派端:
https://github.com/RyanWang20180512/RaspberrryPi-Project-for-PiCar.git
手机端:
https://github.com/RyanWang20180512/Cellphone-control-project-for-Picar.git