基于WiFi网络的可视化遥控搬运机器人设计※

2014-07-02 08:43
单片机与嵌入式系统应用 2014年12期
关键词:服务器端直流电机网卡

杨 军

(四川师范大学,成都610101)

引 言

随着科学技术的快速发展,机器人已经渐渐步入人们的实际生活之中,本设计所研究的遥控搬运机器人是众多机器人中的一种。搬运机器人主要代替人完成物体的夹取、运输、摆放工作,可工作于人类无法进入或对人体有害的工作环境。传统搬运机器人多采用无线电或者红外的方式来进行遥控,这种机器人操控范围较小,并且需要特定的控制器。本设计主要研究基于WiFi网络的无线遥控搬运机器人,利用WiFi网络可以实现实时视频图像采集,以及机器人上的传感器数据采集。采用WiFi网络通信使得控制端多样化,可用手机、电脑等具备WiFi功能的设备进行控制。此外,还可将机器人接入Internet来实现更远距离的控制。

1 总体设计

本设计服务器端采用移植了Linux操作系统的S3C6410,通过完成底层驱动的移植和编写,实现对硬件的控制,其次移植了MJPGstreamer服务器和BOA服务器等实现图像数据、控制信息的传输[1]。客户端方面分别编写了WEB版和Android版应用程序。系统功能框图如图1所示。

图1 系统功能框图

2 硬件设计

(1)MCU

本设计的主控器采用友善之臂公司的一款核心板,其主芯片S3C6410是三星公司基于ARM1176JZF-S核设计的嵌入式处理器。该核心板配置了256 MB DDR RAM,并且主频为533 MHz,最高主频可以达到667 MHz。通过将Linux操作系统移植到该核心板上来完成对硬件的管理与客户端提供数据交换,响应客户端的命令控制。

(2)伺服电机

采用的伺服电机为微型伺服马达(又称作舵机),主要应用于模型的动作控制,通过脉宽调制可以对其进行比较精确的控制。本设计采用TOROBOT公司生产的TR213舵机,其动态扭矩可以达到13 kg·cm,转角范围为180°,控制精度达到0.5°,工作电压为4.8~7.2 V,其性能能够满足本设计的基本要求,所以选用两个TR213配合夹持器完成物体的夹持工作。

(3)直流电机

直流电机用于控制机器人移动,本设计采用带齿轮箱的直流电机,其减速比为1:120,工作电压为3~12 V左右,7.2 V电压下转速达120 r/min,4个直流电机配合车体,最大负载可达到2 kg。

(4)WiFi网卡

无线网卡采用USB接口的必联(B-LINK)BL-LW05-AR5无线网卡,其主芯片为RTL8188,并且外置了5 DBI的高增益天线,传输速度最高可达150 Mbps,实际传输距离较远,并且支持AP模式。本设计通过移植该网卡的驱动、Hostapd以及DHCP让机器人作为AP热点供无线设备进行连接控制。

(5)摄像头

摄像头采用中星微ZC301P,USB接口,像素高达130万,拥有6 mm的五玻镜头,62°视角,并且具有自动亮度、自动白平衡、伽马校正功能。本设计中使用这款摄像头来完成机器人前方视频数据采集。

(6)压力传感器

为了采集机器人夹持器的压力数据,本设计采用了FSR402薄膜压力传感器。该传感器受力后会导致电阻变小,根据电阻值的变化可以得到压力的变化,其允许的压力范围为100 g~10 kg,并且传感器受力区域的直径达1.27 cm。

(7)直流电源

为了完成物体的夹持、搬运、摆放工作,机器人带有4路直流电机、2路伺服电机,耗电量较大,且负载时电流较大。为了使其能稳定正常工作,本设计选用了一款15C的航模电池,其容量为1 300 m Ah,标称电压为7.4 V,充满电压为8.4 V,最大电流可达16 A,配以LM338稳压器可以稳定地提供5 A/5 V直流电源。

3 服务器搭建

3.1 服务器端

服务器端功能框图如图2所示。

图2 服务器端功能框图

3.2 Linux系统移植

核心板采用友善之臂公司提供的TINY6410,此核心板已提供Bootloader、Linux操作系统和文件系统。使用时只需要根据实际的需要裁减Linux系统即可,本设计采用的Linux内核版本为Linux2.6.38,编译平台为Ubuntu12.04,交叉编译器为arm-linux-gcc-4.5.1。

3.3 驱动编写与移植

(1)直流电机驱动

由于S3C6410只带有两路PWM输出,而夹持器部分需要两路PWM脉宽调制控制伺服舵机,因此直流电机部分采用定时器2来模拟PWM调制。设置定时器2每100 ms进一次中断,在定时器中进行1~100计数,因此PWM周期为10 s,并有100个脉宽比可调,满足直流电机调速控制。

(2)伺服电机驱动

伺服电机需要采用脉宽调制,通过调节20 ms周期内的占空比可以指定伺服电机的旋转角度,其对应关系表略——编者注。

由于舵机的控制要求较高,本设计采用S3C6410自带的PWM进行控制。设置PWM0和PWM1的周期为20 ms,通过调节PWM0和PWM1的占空比来控制伺服电机的工作。

(3)摄像头驱动

ZC301为免驱的UVC视频设备,为了实现视频的采集,需要在编译内核时选择V4L2支持。

(4)USB WiFi驱动

本设计中的USB无线网卡采用RTL8188芯片,为使该设备能够正常工作需要进行驱动程序移植。

(5)ADC驱动

电源电量以及FSR压力传感器数据测量需要ADC驱动的支持,由于系统中已含有该驱动,故只需要在编译内核时选择上即可。

3.4 AP热点搭建

Hostapd是Linux系统中无线访问接入点的守护进程。它可以将无线网卡设置为AP模式,并且支持多种加密方式,提供了设备接入的身份验证。在实际的使用期间,需要对其配置文件进行相应的修改。本设计中采用Hostapd结合RTL8188网卡完成AP热点的搭建。另外,通过配置DHCP的配置文件并启用该服务为接入机器人的WiFi设备分配IP地址,有效地避免了多个设备接入时的地址冲突问题。

3.5 视频服务器搭建

本设计选用input_uvc作为输入组件来使用V4L2从摄像头获取图像数据,经JPEG库对数据进行编码之后,通过选用output_http作为输出组件来输出图像数据。output_http组件实现了一个符合HTTP1.0标准的 WEB服务器,用户可以使用HTTP协议获取视频信息。

3.6 BOA服务器搭建

由于MJPGstreamer服务器只能传输视频信息,而本设计需要接收客户端的控制命令并且还需返回机器人的传感器数据,因此需要移植支持CGI应用脚本的服务器。BOA服务器是一个可运行在Unix或Linux下的非常小巧的单任务WEB服务器,并且支持CGI脚本,广泛应用于嵌入式领域[4]。本设计通过编写CGI脚本来完成服务器与客户端的数据交换。

3.7 服务器端程序设计

服务程序主要完成机器人的初始化、读取电量值并将电量值通过LED进行提示,读取命名管道获得命令字并将其解析执行。主要的流程图如图3所示。

图3 服务程序流程图

如图3所示,本设计中的服务程序采用多进程程序设计方式,其子进程每60 s采集一次电源电量信息并更新电量指示灯显示,主进程采用阻塞读的方式读取命名管道来等待客户端发送命令,获得命令之后对命令进行解析,并调用驱动程序来执行相应的命令,从而实现对机器人的控制。

4 客户端程序设计

4.1 Android客户端设计

Android客户端软件流程图如图4所示。

图4 Android应用程序流程图

Android端的应用程序采用多线程技术,其中一个子线程每60 s向服务器发送一个获取电量的命令并根据收到的数据进行显示更新,另一个线程根据MJPEG协议来解析出图像数据并更新显示。主线程主要完成用户操控事件的监听,并根据用户的实际操控发送相应的命令给服务器,并从服务器获得机器人的最新数据来实时更新,其命令的发送方式采用HTTP协议中的GET方法。

GET方法是HTTP协议中定义的多种与服务器进行交互的方法之一,它一般用于获取/查询资源信息。该方法请求的数据会附在URL之后,并且提交的数据最多只能是1024字节,但是本设计中只需要传送命令字即可,因此采用GET方法来传送命令字与获取机器人数据信息。使用该方法来发送命令,服务器端的CGI程序可以在QUERY-STRING环境变量中非常方便地获取到客户端传送给服务器的数据,并且客户端应用程序可以在Http Response中获得服务器端返回的数据。

MJPEG将服务器端发送来的一张张JPEG图像数据发送给客户端,客户端不断地接收图像数据并显示更新,即形成了动态的图像。获取视频图像数据时,客户端首先发一个GET方法,如果服务器接收响应则会设置context type的boundary子属性来指明,然后服务器端开始发送图片数据,在数据头部会有图片类型以及大小信息,其中Content-Length字段指明图像数据的长度,Content-Type字段指明图像的类型值为image/jpeg。当一帧图像数据发送完毕后,服务器端将会发送边界字符串来表示一帧图像发送结束。

4.2 WEB客户端设计

图5 WEB客户端流程图

WEB客户端程序流程图如图5所示。WEB客户端采用AJAX技术,其功能模块大体上分为3个部分:第一部分主要是监测用户的操作并采用HTTP GET 34方法来发送控制命令,然后将服务器返回的信息更新显示;第二部分主要为120 s定时发送,获取电源电量值的命令,并将获得的数据更新显示;第三部分获取图像数据并显示。

AJAX(Asynchronous Javascript+ XML)即异步JavaScript和XML技术的简称,它可以实现网页异步更新。采用该方法来设计WEB应用,可以只对网页的部分内容进行更新,而不需要重新对整个页面进行加载。其工作原理如图6所示。

图6 AJAX工作原理

结 语

本文从硬件选型、硬件电路设计、系统移植、驱动程序移植编写、服务器搭建、服务器程序编写,以及Android客户端和WEB客户端应用程序编写方面进行了较为详细的介绍。最终,用户能够通过Android客户端和WEB客户端对机器人进行夹持、运输、摆放动作的控制,并且可以实时地返回机器人采集到的图像数据和传感器数据。

编者注:本文为期刊缩略版,全文见本刊网站www.mesnet.com.cn。

[1]郭琦.一种基于ARM的 WiFi无线监控系统设计[J].电子设计工程,2013,21(4):184-186.

[2]许敏.基于嵌入式Web的校园视频监控系统的设计与实现[D].济南:山东建筑大学,2008.

[3]陈书益,黄永慧.开源视频服务器软件MJPG-streamer的研究和应用[J].电子设计工程,2012,3(5).

[4]朱宇.基于ARM的CC1100无线服务器的设计与实现[J].电子设计工程,2013,21(4):187-189.

[5]杨宗德,邓玉春.Linux高级程序设计[M].2版.北京:人民邮电出版社,2009.

猜你喜欢
服务器端直流电机网卡
基于模糊PID的无刷直流电机速度控制系统的设计与仿真
基于模糊自适应ADRC的无刷直流电机控制技术
Linux环境下基于Socket的数据传输软件设计
Server 2016网卡组合模式
基于FPGA的双绕组无刷直流电机软件设计
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
直流电机电源设计研究
挑战Killer网卡Realtek网游专用Dragon网卡
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用