关键词:TCP通信;远程客户机;套接字;遥操作
Pan Bin,Jiang Zhijian,Zhang Lei,Wang Chengcheng
Abstract: To solve the communication problem of robot teleoperation , a new kind of network communication platform which realizes receiving and sending messages mutually between the remote client and local server is presented in this paper.The platform is discussed using Windows Sockets based on TCP/IP protocol on the condition of VC++6.0.It achieved the interface output different from former TCP correspondence‘s command-line output.The results of the experiment show that the platform realized sending and receiving the messages and documents in real-time between local server and remote client.So the platform can meet the communication needs for robot teleoperation better.
Key words: TCP communication;Remote Client;Socket;Teleoperation
目前,机器人遥操作系统已成为机器人研究的一个热点。在机器人遥操作的过程中,本地服务器与远程客户机之间的网络通信问题是遥操作的关键环节。针对机器人遥操作的通信问题,本文设计了一种在Windows XP环境下,运用Socket实现的基于TCP/IP协议的网络通信平台。
1 Socket编程原理
1.1 Socket简介
Socket(套接字)最初是加州大学伯克利分校为UNIX操作系统开发的网络通信接口。后来Intel, Microsoft, Sun等网络厂商将其移植到Windows中,形成了Windows Sockets规范,它定义了一套Windows环境下网络编程的接口。利用Windows Socket开发的网络通信程序的层次结构如图1示。
图1 Sockets编程的结构
根据传输数据类型的不同,Sockets可分为流式套接字(SOCK_STREAM)和数据报式套接字(SOCK_DGRAM)两类。流式套接字提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接受。流式套接字实际上是基于TCP协议实现的。数据报式套接字提供无连接服务。数据报以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接受顺序混乱。数据报套接字实际上是基于UDP协议实现的。
按照套接字在客户机/服务器(Client/ Server)模式中的功能可将其分为两类:
监听套接字:该套接字位于服务器端,它的主要功能就是对特定的端口进行不断的监听,当检测到有连接请求时,接受申请,并构造一个新的客户端套接字,与连接申请方的客户端套接字建立连接,从而为双方的通信做好准备。
客户端套接字:该套接字是用来进行网络通信的实体。它位于客户机和服务器上,服务器必须维持它为之服务的客户一样数量的这种套接字,形成一个以服务器为中心的星型结构。
1.2 TCP网络通信平台设计步骤
基于Internet的机器人遥操作技术是现代网络技术和机器人控制技术的结合,Internet使用网际分组交换协议TCP/IP作为通信规范,它包括TCP, UDP和ICMP等协议。其中TCP协议是面向连接的协议,要求在数据交换以前必须与通信方建立一条连接、它具有分段和重组功能,能够确保数据可靠、有序地传输。
TCP通信整个过程可以分成三个阶段:连接建立、数据传输和拆除连接。
(1)连接建立阶段:首先服务器中的监听套接字对断口进行侦听,客户端的套接字向服务器端的特定断口提出连接申请。
(2)通信阶段:这是整个过程的核心部分,任务就是负责数据的收发。
(3)拆除连接阶段:在传完数据之后,关闭套接字,释放所分配的资源。
使用Soeket编写TCP通信程序的主要步骤如下:
1) 构造 Soeket对象 ;
2) 使用该对象构造基本的Socket句柄。由于遥操作的数据通信要求可靠,准确,故采用TCP协议,套接字使用流式套接字;
3) 建立客户机CSocket,调用Connect()建立与服务器套接字的连接.服务器调用Listen()监听请求连接情况,并在收到客户端请求后调用Accept()接收客户端连接.
4) 构造CSocketFile对象,并使用CSocket对象与之关联.
5) 构造CArchive对象 ,用于接受和发送数据。使用CArchive对象来进行客户端与服务器端之间的Socket通信
6) 通信结束,关闭套接字,退出程序。
2 TCP网络通信平台程序的实现
本程序是为机器人遥操作的通信所搭建的一个网络通信平台,该平台实现了本地服务器与远程客户机之间的数据网络通信,系统结构图如图2所示。
图2 遥操作系统结构图
本文的程序设计是基于TCP/IP协议的,使用客户机/服务器模式。本程序设计调试的网络环境为采用Windows XP中的 TCP/IP协议配置的局域网,服务器的的IP地址是“192.168.0.104”,通信端口可任意设置,本文设为4231。
2.1 通信平台程序的实现流程
服务器是控制机器人的主控制台,通过服务器可以控制机器人的爬行、检测以及转向等。本文中服务器端程序,主要是建立一个能够让客户端连接的端口,并通过监听,与需要连接的客户端建立连接,并与其进行数据信息通信,将机器人传感器获取的机器人的状态信息发送给客户端来实现远程信号处理,并接收来自的客户端的控制信息以实现对机器人的操控。
客户机端是对机器人进行远程控制的计算机,它通过请求与服务器建立连接之后,将控制信息传送给服务器端,服务器端根据控制信息实现对机器人控制。而且,客户机端还能够接受服务器传送过来的机器人状态信息,以便对机器人获取的信息进行处理。本文的客户机端程序通过Connect()与服务器建立连接,来达到相互通信的目的。
网络通信平台实现的流程图如图3所示。服务器端程序是通信平台的核心部分,本文的服务器端程序不仅可以实现与一个远程客户机端的单对单通信,而且可以与多个客户机端同时进行通信。客户机端程序相对于服务器端程序比较简单,没有了服务器端程序的监听程序和接受连接程序,但是比服务器端增加了连接程序。连接程序和监听程序是区别于服务器端程序和客户机端程序的标志。
图3 通信平台流程图
(1) 监听程序
Listen()(监听程序)是服务器程序区别于客户机端程序最主要的标志,服务器端通过监听程序来监听有没有客户机端请求连接。当有客户机提出连接请求,通过监听程序将连接请求发至服务器来建立两者之间的连接,服务器与客户机才能实现通信。监听程序还是区别使用了流式套接字或数据报式套接字的标志。监听程序的存在为网络通信提供了可靠、无差错的连接。
(2)连接程序
Connect()(连接程序)是客户端中所独有的程序,是向服务器端发送连接请求所编写的。连接程序在收到客户机端需要连接服务器的请求之后,就会发送所需要连接的服务器IP地址和服务器端口。发送之后会等待连接消息的反馈消息,来确认客户机端是否连接成功。
(3) 接受连接程序
Accept()(接收连接程序)是客户机端对应于客户机端连接程序而编写的,该程序可以实现对连接程序的反馈。当程序接收到客户机端程序发来的连接请求时,会对客户机反馈回连接是否成功的消息,而且该程序可以获取要求连接的客户机端的IP地址和端口,以便服务器端可以记录客户机端的连接状态信息。
(4)发送消息程序
Send()(发送消息程序)可以实现控制信息实时地从远程操作者一方发向服务器,而机器人的状态信息又通过各种传感器(如视觉传感器、力觉传感器等)获取后,由服务器反馈给远程客户端。
(5)接收消息程序
Receive()(接收消息程序)可以实现客户机或者服务器端接收来自对方发送的数据消息。该程序在服务器和客户机中都是一致的,配合发送消息程序实现了客户机和服务器之间的数据消息通信。
2.2 实验结果
本文的网络通信平台运行之后的界面输出图像如图4所示。
图4(a)显示的是服务器端运行之后的界面。服务器端是该程序的核心端,所有客户端的数据都将传输到服务器端,客户端之间通信需要通过服务器端进行中转。而本文所设计的程序中的服务器端不仅可以实现以广播的形式向所有连接到该服务器的客户端发送信息,还可以以单对单通信的方式向单个的客户端进行通信。在图4(a)中就显示了服务器端分别利用这两种方式进行了通信。点击界面中的发送按钮就采取广播式发送信息,而点击界面中的1和2两个按钮则是对特定客户端发送数据。
本文设计的程序可以支持多个不同的
(a)
(b)
(c)
图4 通信平台运行界面
客户端和服务器进行连接并通信。图4(b)显示的是IP为“192.168.0.106”的客户端和服务器建立连接之后的通信,而图4(c)则是IP为“192.168.0.110”的客户端和服务器通信的界面。
3 实验性能分析
1.时延和数据的丢失问题
机器人遥操作要求数据传输要具备可靠性和次序性,TCP协议提供了可靠而有序的传输,基于这一特性,可以在传输过程中使用超时重传、分段、重组等检错纠错策略,通过这些检错纠错策略可以保证在数据传输过程中的可靠性和有序性,可以有效的防止数据的丢失。
机器人远端遥操作控制的采用并不意味着实时控制作用被上移到网络,实时控制依然由现场的控制单元来完成,而网络遥操作更关注的是对现场信息的监视和管理以及对机器人的非实时控制,所以TCP通信在传输过程中存在的时延问题也就显得影响不大。
2.数据共享问题及其解决方案
由于本文中程序是多任务多线程的,当多个客户端同时连接到服务器时,多任务、多线程就极易造成数据共享问题。数据共享问题可以解释如下:假定有多个函数(或者ISR、任务)共享一个变量,如果在某一时刻存在对该变量的数值的操作,并且在对其施加操作的的过程中,仅有部分操作完成,还有一部分没有完成,若在此时产生一个中断,如果此时还有另一个函数也在共享该变量,且前面的操作已经完成,该变量的数值可能与预期的不同。因此,当一个函数与另一个函数共享某变量时,所调用的ISR或者另一个函数都有可能改变此变量,是变量的数值发生变化,在返回时此变量的新数值将从堆栈转载到四个寄存器中,未完成的操作将按照寄存器中的新数值执行,程序就会发生错误。
在本文中,利用了以下措施消除了程序中由共享数据问题所导致的错误。
1) 对于从中断返回的变量,在声明中使用了volatile。此声明可以警告编译器,这些变量是可更改的。
2)在中断之前将完全执行的部分中对原子指令使用可再生函数,此部分叫临界段。
3) 将共享的变量放入循环队列中。需要使用该变量数值的函数总是从队列的前端将其删除。而另一些写入该变量的数值的函数总是从队列的末端进行操作。
4)在临界段开始执行之前通过使用信号量来关闭中断,在其完成之时打开中断。
4 结论
本文设计了一种基于TCP协议的网络通信平台,通过该平台可以实现远程客户机与本地服务器之间的信息通信,而且保证了数据传输的可靠性和次序性,对机器人的遥操作提供了可靠的网络通信条件。
网络通信平台的建立,扩大了对机器人操作的远程化距离,而且该平台具有架构容易,低成本,维护便利等优点,对机器人遥操作领域的技术进步将会起到帮助作用。
参考文献
[1] Brady K,Tzyh—Jong. Intemet—based remote teleoperation[A].In International Conference on Robotics and Automation[C].Leuven Belgium,1998,65.
[2] 陈宁,王庆鹏,谈大龙.基于 Internet的机器人遥操作实验平台的设计与实现[J].机器人.2000,22(7):211-214.
[3] 郭建光,符秀辉.网络机器人遥操作实验研究[J].仪器仪表学报.2005,25(8):477-478.
[4] 扶忠践.基于 MFC的网络通信程序设计[J].湖南:长沙电力学院学报.1999,14(4):325-327.