一种基于STM32单片机的视频遥控小车的设计
扫描二维码
随时随地手机看文章
随着各种科学技术的不断提高,自动化技术的不断加深,智能遥控技术将跨领域应用,并深入普及。机器人小车的研究是移动机器人分支的一部分,是一项涉及到计算机技术、传感技术、通讯技术等相关技术的综合系统。它的主要功能是利用无线网络视频技术实现识别路径,控制车速及操纵转向等。
小车采用STM32单片机作为主制器,通过一款Wifi射频模块RT5350实现远程视频画面的传输,整个项目涵盖的知识面广,包括单片机编程技术,OpenWrt路由器系统以及Windows上位机软件开发等等不同技术领域。下面分为三个层面来介绍视频小车的实现方法:
(1)底层驱动层:以STM32单片机实现对小车的驱动控制;
(2)中层传输层:借助RT5350路由器平台传输控制命令以及视频流;
(3)顶层控制层:在Windows平台实现对小车的控制。
1、底层驱动层
小车整体是实现STM32单片机控制小车电机的运动和控制摄像头的舵机云台的运动。由于STM32单片机提供的电流非常微小,不足以让小车动起来,所以需要电机驱动模块,这里使用了L298N模块驱动小车的直流电机。
1.1、电机驱动原理
小车左轮右轮上分别配有两个电机,左轮电机A与右轮电机B的正转、反转和停止决定着小车的运动模式。而STM32单片机4根电机控制信号线连接着L298N的IN1~IN4,另外两根PWM调速信号线连着ENA和ENB。电路图详情见图1。
图1 电路原理图
输入信号线IN1和IN2控制电机A的运动,直流电机A接OUT1和OUT2。同理,IN3和IN4合起来控制了电机B的运动。对应小车的对应的运动模式详情见表1。
表1小车的对应的运动模式
1.2、电机调速原理
如上图1中L298N上还有有ENA和ENB两个信号输入端口,这两个端口的作用是控制信号的使能,低电平有效。只有当信号线拉低时候,L298N才会遵循表1中列出的运动模式。
由于L298N有控制使能的信号线,则可以通过控制ENA和ENB的信号来进行PWM调速。原理是开关管在一个周期T的时间内导通的时间为t,那么电机两端的平均电压U=V*t/T=aV。其中,a=t/T(占空比),V是电源电压。电动机的转速与电动机两端的电压成正比,而电动机两端的电压与控制波形的占空比成正比,因此电动机的转动速度与PWM信号的占空比成比例,信号的占空比越大电动机转动得越快。
1.3、云台驱动原理
云台控制摄像头的运动,这里采用了MG995舵机云台。二自由度的MG995舵机云台是一款扭矩大、性价比高的小型云台,可以在水平方向和垂直方向做180°的二自由度运动。安装上摄像头可以实现图像监控、图像识别和定位追踪等功能;加装超声波测距传感器或红外传感器可以组合成一体化探测装置,使机器人能感测周围的障碍物,从而可以实现机器人自动避障功能。
舵机云台驱动原理也是PWM调速信号控制,舵机最早用于船舶上实现特定的转向功能,由于通过程序可以控制其连续转角,因而被广泛应用在智能小车和机器人等关节运动上。舵机的控制信号周期为20ms的脉宽调制信号,脉冲宽度0.5~1.5ms相对应的舵盘位置为0~180°,这个过程呈线性变化。给舵机提供周期为20ms宽度在0.5~1.5ms中的某个的脉宽信号,舵机的输出轴就会保持相对应角度。无论外界转矩怎么改变,输出轴的位置不会改变。除非提供一个新的脉宽信号,舵机才会改变输出角度到新的对应位置上。
在STM32单片机上给出两条信号线分别连接水平方向和垂直方向上的两个舵机,通过调制出周期为20ms宽度在0.5~1.5ms的PWM信号即可控制舵机在两个方向上的角度,即可控制云台摄像机的位置。初始化时将脉宽调制到1.5ms,使舵机在90度的中间位置,程序正常运行时通过上位机的指令来调整脉宽的宽度来控制舵机相应的位置。
1.4、小车实物展示
实物见图2。
图 2 视频小车实物图
2、中层传输层
传输层是完成对控制命令的传输,是连接小车和电脑的桥梁,同时也负责视频画面的采集和编码,这里用Ralink公司的一款RT5350路由器芯片完成工作。RT5350平台是基于MISP的Linux系统,和我们的PC配置类似,有必要的CPU、内存和硬盘。CPU是MIPS架构360M主频RT5350芯片,内存则是32MBSDRAM芯片,硬盘是8MB的FLASH闪存,采用的是基于Linux的OpenWrt路由器系统。内核里安装了UVC的USB摄像头驱动程序,并且运行了Mjpg-Streamer视频传输服务器软件,实现了对视频画面的传输。控制命令的传输是通过Ser2net一款IP转串口的软件,实现IP协议与单片机命令的对接。
2.1RT5350芯片
RT5350的特征是性价比高,成本优势大,因而迅速占领了很大部分的低端路由器市场。由于支持USB2.0的扩展,配合3G网卡能扩展成3G路由器,配合USB摄像头能扩展成Wifi摄像机,配合USB声卡能扩展成Wifi音响,还可以用来做Wifi智能插座。这里,正是运用了配合USB摄像头来实现视频画面的传输。
2.2、OpenWrt系统
OpenWrt是一个嵌入式Linux发行版,是三大主流路由器系统之一。很多智能路由器都采用了OpenWrt系统,能在系统上实现很多第三方功能,如能实现校园网认证登录功能,能支持SAMBA服务器,能支持离线下载等等功能。
由于RT5350的普及性,OpenWrt系统已经全面支持RT5350系统。大致编译方法:在Ubuntu系统上下载OpenWrt的源码,安装相应的交叉编译器,配置相应的驱动及软件即可编译出所需要的OpenWrt系统。有了操作系统,接下来安装所需要的功能软件。主要安装的是MJPG-Streamer和Ser2net软件,前者负责视频传输,后者负责命令传输。
2.3、MJPG-streamer
MJPG-streamer是一款MJPG视频流服务器,其中”input-uvc.so”输入插件是Linux上的通用摄像头插件,”ouput_http.so”输出插件是网站服务器插件,这两款插件配合使用,将USB摄像头采集的视频数据复制到了Http服务器中,用户通过访问服务器即可获得USB摄像头上的MJPG视频流,再通过相应的解码即可获得视频图像。
当系统启动完成后,MJPG-streamer正常运行,就可以在PC通过Http协议访问相应的视频地址获得MJPG视频流数据,火狐浏览器就可以播放MJPG视频流,也可以参考MJPG视频流协议写出解码程序。
2.4、Ser2net
Ser2net是运行在Linux系统上一款IP转串口软件。由于电脑上通信协议是IP协议,而STM32单片机资源有限使用了串口通信协议,Ser2net正是沟通这两种协议间的桥梁,有了它电脑就能通过IP编程对小车控制了。
大致原理是RT5350平台开启一个TCP服务端口比如2001,当电脑端连接上此端口后,所有传向2001端口的IP流数据都会转发带RT5350的串口上,所以发向RT5350串口的数据都会转发到远程IP终端。而RT5350的串口连接上STM32单片机串口,所以Ser2net软件实现了IP协议到小车的数据通路。
3、顶层控制层
3.1、通信协议定义
在STM32单片机里定义了控制协议,这个协议自己定义,比如发送数据包0xff,0xff,0x01,0x01代表前进。前面两位用于标识头码,第三位标识对象,第四位标识数据值。
表2控制小车的通信协议
3.2、MJPG视频解码
小车上的RT5350模块已经提供了基于HTTP协议的MJPG视频流,在上位机软件端需要编写软件解码视频流即可获得小车视频画面。这里简单介绍一下在VS2010中C#的解码思路:
第一步:Http请求视频地址
第二步:获取视频流
第三步:找到JPEG头和尾
第四步:将获得的JPEG图像显示出来
3.3、控制小车电脑程序
小车的控制方法是创建一个TCP连接至小车的2001端口,向这个端口直接发送控制命令,参考表1的通信协议即可控制小车的运动。这里简单介绍一下在VS2010中C#的编程思路:
第一步:创建一个套接字
第二步:连接上小车的IP地址和控制端口
第三步:绘出控制相应的按钮和按键
第四步:编写响应按钮和按键的事件,通过已连接的套接字发送对应的控制命令
3.4、主界面
主界面见图4。
图4 C#编写的小车上位机软件