可视化WIFI遥控搬运机器人之服务器搭建
本设计主要研究基于WIFI网络的可视化无线遥控搬运机器人,利用WIFI网络高速传输实时视频图像采集,通过机器人安装的传感器实现数据采集。采用WIFI网络通讯使得控制端多样化,可用手机,电脑等具备WIFI功能的设备进行控制。这里主要讲解可视化WIFI遥控搬运机器人之服务器搭建。可视化WIFI遥控搬运机器人之硬件部分设计http://www.cntronics.com/rf-art/80025732
本设计主要研究基于WIFI网络的可视化无线遥控搬运机器人,利用WIFI网络高速传输实时视频图像采集,通过机器人安装的传感器实现数据采集。采用WIFI网络通讯使得控制端多样化,可用手机,电脑等具备WIFI功能的设备进行控制。此外,还可将机器人接入Internet实现更远距离的控制。本设计在S3C6410平台上移植了Linux操作系统用于接收命令并对硬件设备进行控制,其中移植了MJPGstreamer作为视频服务器,移植了BOA服务器作为WEB服务器。本文将从硬件设计,驱动程序编写,服务器移植,服务程序编写,Android应用程序编写,Web应用程序编写等方面来讲述本设计的功能实现。
功能框图
总体设计及硬件选型和电路部分:可视化WIFI遥控搬运机器人(1):硬件部分
3 服务器搭建3.1 服务器端功能框图
图3-1 服务器端功能框图
3.2 Linux系统移植
核心板采用友善之臂公司提供的TINY6410,此核心板已提供Bootloader,Linux系统,文件系统。使用时只需要根据实际的需要裁减Linux系统即可,本设计采用的Linux内核版本为Linux2.6.38,编译平台为Ubuntu12.04,交叉编译器为arm-linux-gcc-4.5.1。
3.3 驱动编写与移植3.3.1 直流电机驱动
由于S3C6410只带有2路PWM输出,而夹持器部分需要两路PWM脉宽调制控制伺服舵机,因此直流电机部分采用定时器2来模拟PWM调制。设置定时器2每100ms进一次中断,在定时器中进行1~100计数,因此PWM周期为10S,并有100个脉宽比可调,满足直流电机调速控制。
3.3.2 伺服电机驱动伺服电机需要采用脉宽调制,通过调节20ms周期内的占空比可以指定伺服电机的旋转角度,其对应关系如下表:
表3-1 伺服电机占空比与旋转角度的对应关系由于舵机的控制要求较高,本设计采用S3C6410自带的PWM进行控制.。设置PWM0和PWM1的周期为20ms,通过调节PWM0和PWM1的占空比来控制伺服电机进行工作。3.3.3 摄像头驱动ZC301为免驱的UVC视频设备,为了实现视频的采集需要在编译内核时选择上V4L2支持。3.3.4 USB WIFI 驱动本设计中采用的这款USB无线网卡采用RTL8188芯片,为使该设备能够正常工作需要进行驱动程序移植。①从RTL官网获得RTL8188的最新驱动程序,本文采用的是RTL819xSU_usb_linux_v2.6.6.0.20120405.tar.gz。②在Ubuntu中利用命令tar -zxvf 将驱动包解压。③进入驱动目录并修改Makefile④由于驱动默认移植平台是I386_PC,而我们需要将其移植到S3C平台上,故需要做如下修改:说明目标平台:将:CONFIG_PLATFORM_I386_PC = y改为:CONFIG_PLATFORM_I386_PC = n将:CONFIG_PLATFORM_ARM_S3C = n改为:CONFIG_PLATFORM_ARM_S3C = y指定交叉编译器以及内核路径信息:ifeq ($(CONFIG_PLATFORM_ARM_S3C), y)EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIANARCH := armCROSS_COMPILE := /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-KVER := 2.6.48_$(ARCH)KSRC := /root/tiny6410/linux-2.6.38Endif⑤执行Make命令得到8712u.ko即为所需驱动,将该文件移动到目标平台加载即完成了USB WIFI驱动程序的移植。3.3.5 ADC驱动电源电量以及FSR压力传感器数据测量需要ADC驱动的支持。由于系统中已含有该驱动,故只需要在编译内核时选择上即可。3.4 AP热点搭建3.4.1 AP热点简介AP是(Wireless) Access Point的缩写,即(无线)访问接入点。无线设备可以通过它来接入到无线网络。RTL8188支持AP热点模式,采用这种方式可以让机器人成为AP热点,然后用带WIFI功能的设备来进行连接。3.4.2 Hostapd简介Hostapd即Host Access Point,其是Linux系统中无线访问接入点的守护进程。它可以将无线网卡设置为AP模式,并且支持多种加密方式,提供了设备接入的身份验证。在实际的使用期间,我们需要对其配置文件进行相应的修改。本设计中采用Hostapd来结合RTL8188网卡完成AP热点的搭建。<上一页1234567下一页>
- 第一页:可视化WIFI遥控搬运机器人之服务器搭建(1)
- 第二页:可视化WIFI遥控搬运机器人之服务器搭建(2)
- 第三页:可视化WIFI遥控搬运机器人之服务器搭建(3)
- 第四页:可视化WIFI遥控搬运机器人之服务器搭建(4)
- 第五页:可视化WIFI遥控搬运机器人之服务器搭建(5)
- 第六页:可视化WIFI遥控搬运机器人之服务器搭建(6)
- 第四页:可视化WIFI遥控搬运机器人之服务器搭建(7)
- 第一页:可视化WIFI遥控搬运机器人之服务器搭建(1)
- 第二页:可视化WIFI遥控搬运机器人之服务器搭建(2)
- 第三页:可视化WIFI遥控搬运机器人之服务器搭建(3)
- 第四页:可视化WIFI遥控搬运机器人之服务器搭建(4)
- 第五页:可视化WIFI遥控搬运机器人之服务器搭建(5)
- 第六页:可视化WIFI遥控搬运机器人之服务器搭建(6)
- 第四页:可视化WIFI遥控搬运机器人之服务器搭建(7)
- 第一页:可视化WIFI遥控搬运机器人之服务器搭建(1)
- 第二页:可视化WIFI遥控搬运机器人之服务器搭建(2)
- 第三页:可视化WIFI遥控搬运机器人之服务器搭建(3)
- 第四页:可视化WIFI遥控搬运机器人之服务器搭建(4)
- 第五页:可视化WIFI遥控搬运机器人之服务器搭建(5)
- 第六页:可视化WIFI遥控搬运机器人之服务器搭建(6)
- 第四页:可视化WIFI遥控搬运机器人之服务器搭建(7)
3.6.1 BOA服务器简介由于Mjpgstreamer服务器只能传输视频信息,而本设计需要接收客户端的控制命令并且得返回机器人的传感器数据。因此得移植支持CGI应用脚本的服务器。BOA服务器是一个可运行在unix或linux下的非常小巧的单任务Web服务器,并且支持CGI脚本,广泛应用于嵌入式领域[ ]。本设计通过编写CGI脚本来完成服务器与客户端的数据交换。3.6.2 BOA服务器移植BOA服务器的移植需要以下步骤:①下载BOA服务器源码,本文采用boa-0.94.13.tar.gz。②解压boa-0.94.13.tar.gz,并进入到源码根目录。③执行命令./configure生成Makefile文件。④修改Makefile文件,指定编译时所需要的交叉编译器:CC=gcc改成CC = arm-linux-gccCPP = gcc –E改成CPP = arm-linux-gcc –E⑤执行make命令生成boa可自行文件⑥将boa以及boa.conf移动到目标平台,即可完成BOA服务器移植。⑦为了适应本设计的需求,得修改boa.conf文件来配置boa服务器。本设计作出如下修改:Port 80User rootGroup rootErrorLog /dev/consoleAccessLog /dev/nullServerName CarControlDocumentRoot /wwwDirectoryIndex index.htmlKeepAliveMax 1000KeepAliveTimeout 10MimeTypes /etc/mime.typesDefaultType text/plainCGIPath /binAddType application/x-httpd-cgi cgi此配置设置了服务器的端口号,权限,服务器目录连接数等参数。3.7 服务器端程序设计
3.7.1 CGI脚本简介图 3-4 CGI程序应用原理3.7.2 命名管道简介命名管道是一种实现无关进程间通信的通信机制(IPC)。其本质上为一个文件,因此通讯更加稳定。命名管道遵循与先进先出原则,并且是半双工的,数据只能单向传输,若要实现双向传输就得使用两个管道。命名管道含有读端和写端,并且支持阻塞读。本设计中利用命名管道的特性,可以实现CGI程序与命令服务程序之间的数据交换。<上一页1234567下一页>
- 第一页:可视化WIFI遥控搬运机器人之服务器搭建(1)
- 第二页:可视化WIFI遥控搬运机器人之服务器搭建(2)
- 第三页:可视化WIFI遥控搬运机器人之服务器搭建(3)
- 第四页:可视化WIFI遥控搬运机器人之服务器搭建(4)
- 第五页:可视化WIFI遥控搬运机器人之服务器搭建(5)
- 第六页:可视化WIFI遥控搬运机器人之服务器搭建(6)
- 第四页:可视化WIFI遥控搬运机器人之服务器搭建(7)
- 第一页:可视化WIFI遥控搬运机器人之服务器搭建(1)
- 第二页:可视化WIFI遥控搬运机器人之服务器搭建(2)
- 第三页:可视化WIFI遥控搬运机器人之服务器搭建(3)
- 第四页:可视化WIFI遥控搬运机器人之服务器搭建(4)
- 第五页:可视化WIFI遥控搬运机器人之服务器搭建(5)
- 第六页:可视化WIFI遥控搬运机器人之服务器搭建(6)
- 第四页:可视化WIFI遥控搬运机器人之服务器搭建(7)
3.7.6 服务程序流程图服务程序主要完成机器人初始化,读取电量值并将电量值通过LED来进行提示,读取命名管道获得命令字并将其解析执行。主要的流程图如下:
图 3-6 服务程序流程图如图3-6所示,本设计中的服务程序采用多进程程序设计方式,其子进程每60S采集一次电源电量信息并更新电量指示灯显示,主进程采用阻塞读的方式读取命名管道来等待客户端发送命令,获得命令之后对命令进行解析并调用驱动程序来执行相应的命令,从而实现对机器人的控制。
3.7.7 服务程序编写
服务程序部分代码如下:/* 创建子进程,用于每60S获取电源电压值 */if(fork()==0){while(1){if(ioctl(adc_fd,ADC_SET_CHANNEL,0) < 0){perror("ioctl ADC device:");exit(1);}char buffer[5];int len = read(adc_fd, buffer, sizeof buffer -1);//读取ADCif (len > 0){buffer[len-1] = ''''''''?'''''''';printf("POW VALUE:%sn",buffer);getpower=(float)StrToInt(buffer);getpower=9.9*getpower/1024.0;if(power==0)power=getpower;if(getpower<=power && power-getpower<0.2){power=getpower;if(power>8.1)//根据电量来用LED显示Show(5);...}}sleep(60);//1min}}/* 主进程,用于获取命令并处理 */else{while(1){memset(buff,0,sizeof(buff));cmd_fd=open(FIFO_CMD,O_RDONLY);//readonly 阻塞if(cmd_fd==-1){perror("open");exit(1);}if((nbytes=read(cmd_fd,buff,sizeof(buff)))>4)//读取FIFO_CMD管道{buff[nbytes]=''''''''?'''''''';//指令处理receive_do(buff);}close(cmd_fd);}}上述代码中receive_do函数主要负责解析命令,并进行处理。其代码如下:void receive_do(char buffer[]){int c,i;int tmp=0;c = (int)(nbytes+1)/5;for(i=0;i{tmp=(buffer[1+i*5]-''''''''0'''''''')*1000+(buffer[2+i*5]-''''''''0'''''''')*100+(buffer[3+i*5]-''''''''0'''''''')*10+(buffer[4+i*5]-''''''''0'''''''');//解析接收到的指令数据switch(buffer[i*5])//处理指令{case ''''''''L'''''''':ioctl(dc_fd,LEFT_SET,tmp);break;case ''''''''R'''''''':ioctl(dc_fd,RIGHT_SET,tmp);break;case ''''''''C'''''''':ioctl(servo_fd,CLAMP_SET,tmp);break;case ''''''''S'''''''':ioctl(servo_fd,SPIN_SET,tmp);break;}}}CGI即公共网关接口(Common GatewayInterface)它是一种WWW技术。CGI实质是运行在WEB服务器上面为客户端HTML页面提供接口的一个脚本程序。它可以通过标准输入(STDIN)来从WEB服务器获得数据,经处理之后可以通过标准输出(STDOUT)来将数据返回给WEB服务器,从而实现对客户端数据的接收处理。本设计采用这种方式实现机器人控制命令的接收,以及返回机器人传感器数据信息。CGI程序应用原理如下图所示: