谭花娣
(常州信息职业技术学院,江苏 常州 213164)
随着网络技术的发展,网络技术已逐渐渗透到各个领域,基于网络的机器人控制就是利用网络实现远程的机器人控制。互联网的飞速发展进一步促进了网络技术在机器人控制领域的应用。基于网络的机器人控制技术也从初期的遥控操作机器人的应用逐渐扩展到自主机器人和分布式机器人系统等研究领域。通过因特网对机器人实施实时控制是一项具有挑战性的工作,这一技术的应用将进一步丰富机器人远程控制手段,具有良好的发展趋势和广阔的应用前景。
在研究和分析通信协议、无线网络技术和Socket通信的基础上,完成了机器人无线网络视频传输系统设计,如图1所示:
图1 无线网络视频传输系统图
图1中机器人上安装摄像机,完成图像采集、A/D转换和视频压缩功能。将摄像机与无线模块连接,通过无线模块实现无线视频传输。在用户端计算机上安装无线网卡,通过无线网卡接收和处理无线视频信号。无线网络采用IEEE802.11g标准,工作频率为2.4GHz,传输速率可达到54Mbps,采用TCP/IP通信协议,视频压缩标准采用MJPEG。由于机器人和计算机之间采用一对一传输,所以无线网络组网采用对等模式。
在无线网络视频传输系统中,如图2所示,摄像机将采集到的模拟视频信号通过A/D转换器转换成数字视频信号,然后交给视频编码器将视频压缩成MJPEG格式。压缩后的视频数据流交给无线发射模块,无线发射模块将数据转换成无线信号。无线信号通过无线网络传输给计算机的无线网卡,计算机无线网卡接收并处理无线视频信号提交给计算机展现给用户视频图像。
图2 无线视频传输系统流程图
在实验系统中,利用Visual C++6.0编程环境,利用Socket网络通信接口实现了该实验程序。通过视频采集卡采集图像,用Socket建立实验系统客户端(控制端)和服务器端(机器人)的连接,并实现视频数据的传输。其视频传输结构图如图3所示。
图3 视频传输结构图
服务器端实现主要包括三部分:硬件初始化、Socket的Server端初始化以及数据的发送。具体实现过程如下:
(1)当服务器系统启动后,建立Socket通信,侦听网络状态。
(2)如检测到客户端发来的连接,即建立连接。
(3)如接收到传送请求,即开启传送线程把数据传给客户端,并开启另一线程来处理图像数据。
(4)操作人员点击传送按键之后,系统开始正式工作,获得视频数据,这标志着数据传输正式开始。
在数据传送过程中多采用多线程技术,可实现侦听网络请求、数据采集、预览、请求后数据压缩传送等。采用多线程技术,可使预览、编码、传输能同时进行(通过分时),从而有效地提高了数据传输的效率。
Socket工作过程如下:首先启动服务器,通过调用Socket(),建立一个Socket,然后调用bind()将该Socket和本地网络地址绑定在一起,再调用listen()使Socket做好侦听的准备,并规定它的请求队列的长度,之后就调用accept()来接收连接。客户在建立Socket后就可调用connect()和服务器建立连接。连接一旦建立,客户机和服务器之间就可以通过调用send()和receiver()来发送和接收数据。最后,待数据传送结束后,双方调用close()关闭Socket。具体过程如下:
(1)Winsock环境的初始化
在使用Winsock MFC类之前,必须为应用程序初始化Winsock环境,这只需调用实例初始化函数AfxSocketInit即可,它把WSADATA结构作为可选参数。如果把此结构提供给函数,就会得到当前计算机在用的Winsock版本信息。如果把此函数包含在实例初始化函数中,Winsock环境将得到正确的初始化,并被应用程序关闭。
(2)创建侦听套接字
在初始化Winsock之后,接着创建在通信中使用的套接字,其方法是调用socket()函数。下面对socket()函数的三个参数作以介绍:
a)地址描述:必须设为AF_INET,表明正在使用IP地址家族。
b)指定套接字的类型:采用SOCK_STREAM,指定应用程序创建一个流式套接字,使用TCP协议;采用SOCK_DGRAM,则创建一个数据报套接字,使用UDP协议。
c)指定套接字所用的协议:如果是流式套接字,则使用IPPROTO_TCP,如果是数据报套接字,则使用IPPROTO_UDP。
(3)地址绑定
将套接字绑定到一个已知地址。
&saddr是一个Winsock地址结构,它的作用相当于一个普通的缓冲区,结构通常会随所用的网络协议不同而不同。
(4)侦听连接
将套接字置入监听模式,bind()的作用只是将一个套接字和一个指定的地址关联在一起,但指定套接字进入连接的函数是listen()函数。
listen()函数中第一个参数是进行侦听的套接字,服务器可以从它上面接收客户发来的请求;第二个参数指定了正在等待连接的最大队列长度,进入服务器的连接请求将在队列中等待服务器accept(),这个参数非常重要,因为完全可能同时出现多个连接请求。
(5)接受连接
当服务器的套接字设置为侦听状态时,它就可以接收客户机的连接请求,在收到请求后,实际的连接可以由accept()函数来完成。
其中m_hSocket是调用listen()函数的侦听套接字,&addr,&len是用来返回所连接的客户机套接字的地址。如果客户机的连接请求被成功接受,accept()函数提取挂在侦听套接字m_hSocket上的连接队列中的第一个连接,创建一个和m_hSocket有相同属性的新数据套接字accs,并返回一个指向accs的句柄。accs用来处理客户机和服务器之间的连接和数据传输工作,原来的侦听套接字m_hSocket将继续侦听新的连接请求,并通过accept()函数的调用来连接新的客户机。
(6)发送数据
通过socket连接发送和接收消息并不复杂,对于服务器和客户机来说,发送和接收消息的方法是相同的。可以用socket发送任何类型的数据,函数需要一个指向通用缓冲区的指针。发送时,缓冲区存放待发送的数据,接收时,接收的数据拷贝到缓冲区。通过socket连接发送消息,可以使用send()函数,返回实际上发送出的字节数。该函数第一个参数是本地socket号m_hsocket,第二个参数pData是一个指向存放发送数据的缓冲区的指针,第三个参数nCount是发送缓冲区的大小,第四个参数是传输控制标志。
(7)关闭连接
服务器端应用程序在完成与客户端程序的所有通信之后,就可以调用close socket()函数关闭这次连接。
(8)服务器端系统实现
打开服务端程序将出现如下图4所示界面,在程序运行后,点击开始按钮,机器人端就开始侦听是否有控制端接入。在界面左边部分和右上部分是实验系统自身摄像头所采集视频信息的实时显示,右下部分是摄像头格式调整、视频源选择和当前接入的控制端IP地址显示。
图4 服务器端实现
客户端功能主要是接收和解压图像数据,客户端接收到的图像数据,先经过一定的缓冲,然后才能进行解码显示和图像处理,具体过程如下:
(1)Winsock环境的初始化
客户端的Winsock环境的初始化和服务器端一样,同样只需调用实例初始化函数AfxSocketInit即可。
(2)创建请求连接套接字
调用socket()函数来创建请求连接套接字,客户端同样是使用UDP协议,数据报套接字。
(3)请求连接
为了让服务器接受一个连接请求,客户机必须首先发送一个连接请求,通过调用connect()来和服务器建立连接。
其中m_cSocket是请求连接的套接字;&saddr用来指定用户想连接的服务器端的套接字地址结构的指针。传递给connect()函数的地址SOCKADDR机构和传递给服务器bind()函数的SOCKADDR结构是一样的。
(4)接收数据
客户机套接字和服务器套接字之间建立了连接之后,就可以进行数据传输了,调用recv()函数可以接收数据,此函数的参数与send()函数参数意义相似,但recv()函数的第二个参数pBuf指向用于存储接收数据的缓冲区。对于套接字来说,数据是按输入的队列接收过来的,recv()函数将返回读入数据的字节数,这个字节组就是输入队列中的字节数,其大小与send()函数的nret中指定的一样。如果连接正常关闭,recv()函数将返回0;否则,返回SOCKET_ERROR。
(5)关闭连接
客户端端应用程序在完成与服务器程序的所有通信之后,就可以调用closesocket()函数关闭这次连接。
(6)客户端系统实现
本文设计的客户端界面如下图5所示,左边部分和右上部分为视频显示部分,右下部分为控制部分,主要有机器人端IP地址输入窗口、速度调整窗口以及遥操作控制图标窗口。
图5 客户端界面
基于无线网络和客户机/服务器模型的视频传输系统的实现,并且在AS-R机器人上得到很好的应用,实验结果表明,在无线局域网环境下,室内100m的范围,传送320x240的视频信息速度可以达到10帧/s以上。在本文中提出的SOCKET/WINSOCK通信机制,对于基于网络技术的机器人遥操作平台的实现,脱离了原本的那种专人专机进行远程控制的状况,提出了初步的设想。
[1]汤宇松,刘景泰,卢桂章.利用远程网络技术的机器人遥操作系统分析[J].机器人,2000,22(1):62—72.
[2]Taylor k,Dalton B,Trevelyan J.Web-based telerobotics[J].Robotica,1999,17:49-57.
[3]刘威,宋爱国等.基于互联网的遥操作机器人系统明.机器人技术与应用,2001,2:30-32.
[4]耿海霞,陈启军,王月娟.基于web的远程控制机器人研究机器人.2002,5:43-44.
[5]庄严,王伟,阵为民.基于网络的机器人控制技术的研究现状与发展.机器 2002,2:20-22.