基于Web的群体机器人远程控制系统研究与实现
2013-09-17夏永锋
夏永锋
0 引言
机器人技术的出现和发展,不但使传统的工业生产面貌发生根本性变化,而且将对人类社会产生深远的影响。就目前的机器人技术水平而言,单机器人在信息的获取,处理及控制能力等方面都是很有限的。研究者则考虑由多个机器人组成的群体系统通过协作来完成单机器人无法或难以完成的工作。然而,目前群体机器人的理论技术还很难实现一种全自主式的群体机器人系统,一定的人为介入是极为必要的,以协助群体机器人系统实现功能初始化,故障恢复以及应对复杂环境等。
从1993年水星计划[3]开始研究人员将万维网应用于机器人控制,到现在将云计算、Web Service等新技术与机器人控制相结合[1][2],研究方向覆盖新型的机器人远程控制网络架构[4]、机器人群体控制无线网络协议优化[5]等方面,表明机器人控制技术研究热点正逐步从单机器人转向机器人群体,并始终与最新的网络技术相结合。
基于 Web 的远程控制技术打破了传统控制技术空间距离上的限制,依托因特网的广泛应用,使得人们能够随时随地地访问机器人系统,并且可以在任何平台下被访问,只需该平台下装有合适的 Web 浏览器。另外,以Web Server为中心,降低了维护费用,对系统的修改只需在 Web Server上进行,无需在客户端做任何修改,从而提高系统随着需求的变更快速更新的能力。
1 系统功能与体系结构
1.1 总体功能设计
作为机器人控制系统,本系统将控制分为3个层次:基本控制、精确控制、批量指令控制。3个层次的控制分别对应不同的控制需求。
基本控制部分将基本控制操作抽象为图标,只要点击图标就能完成相应的控制操作。基本控制操作的对象是群体机器人中的所有成员,功能包含:查询-获取机器人的电量,当前运动速度等信息,运动、向前、向后、左转、右转、停止- 控制机器人的运动以及运动方向,计数 – 统计群体机器人的数量以及编号。
精确控制部分根据目标对象分为群体与单个两部分,两者的区别在于单个需要用户选择具体的单个机器人编号,两者都可以选择具体指令和特定指令的参数。
批量指令控制部分允许用户编写简单的程序,然后提交到server,由server来解释程序,转换成控制指令序列发送到机器人。批量指令的目的是为了提高控制的效率,减少用户的操作工作量。
1.2 系统结构设计
基于Web的应用通常都是Browser/Server模式。Browser端和Server端作为相互独立的两个部分通过HTTP协议进行通信,其过程分为4步:建立连接,发送请求,发送应答和关闭连接。整个过程是个请求/应答的模式,如图1所示:
图1 系统结构模型图
基于Web的机器人远程控制系统中,Server是一个数据中转站,Browser发起的数据请求最终需要作用于机器人。除了Browser与Server之间的交互,还有Server与机器人之间的交互。
本系统中 Server部分起到核心作用,负责接收来自用户Browser的数据,对数据进行一定的转换预处理,特别是对于批量指令数据,需要进行程序的解释,生成控制指令序列,然后将经过处理的指令数据写到某个串口,该串口上通过USB连接着一个无线模块,机器人上使用的是相同的无线模块,在Server写入串口的数据量达到32字节后,无线模块就将数据广播出去,机器人上的无限模块接收到数据,发出中断信号,将数据存入缓冲区,机器人应用程序从缓冲区中读出数据进行解析,执行相应的操作。
2 关键技术
2.1 指令编码
为了减少网络数据传输量,减小机器人对于控制指令的解析工作,以及简化Web Server将批量指令程序转化成控制指令序列,需要对控制指令进行编码。
由于无线模块的数据发送缓冲区为32个字节,仅当缓冲区满时,才会将数据发送出去。如果缓冲区中的数据未满32字节,那么超过100ms后会被自动清除,所以将控制指令编码的长度设为32字节。
根据总体功能设计,指令中的信息应包括小车编号,指令类型,指令参数3个部分。另外,为了提高系统的可靠性,对指令增加版本号信息。32字节编码的每个字节存储一个 char类型数据。由于目前机器人数量以及指令数目都较少,每个字节存储一个char类型字符数据可以满足需求。
第1,2字节存储小车编号,第1字节为小车编号的十位数字的字符,第2字节为个位数字的字符,例如:小车的编号为12,则第1,2字节分别为’1’,’2’,小车的编号未超过10时,则第1字节为’0’。
第3,4字节为指令的编号,存储方式与小车编号一致。对于控制指令的编号如:查询 - 'info': '1', 运动 - 'run': '2',向前 - 'forward': '3', 向后 - 'backward': '4', 左转 - 'turnleft':'5', 右转 - 'turnright': '6', 停止 - 'stop': '7', 计数 - 'count': '8'。
第 5,6,7字节为指令的参数,参数主要是指运动,向前,向后,停止四个指令可搭配时间或者距离参数。
第8,9,10,11字节依次存储版本号的千,百,十,个位。余下的所有字节置为’ ’。
Web Server负责编码,编码后的指令数据由连接到串口上的无线模块发送到机器人,机器人解码然后执行操作。操作完成之后可能会返回相关信息,对于机器人的返回数据也可以做类似的编码。
2.2 控制逻辑的正确性
对于远程控制系统,如何保证控制的逻辑正确性是个关键性的问题。
本系统通过两个层面的设计来解决该问题。首先,在同一时间内系统只允许一个用户对机器人进行操作。多个用户同一时间内对同一个目标机器人进行控制操作,必然使机器人处于一系列混合操作后的状态,不符合任一用户的预期。基于Web的应用可以利用session和cookie来实现,当前仅有一个用户在与web server进行交互。当用户请求进入控制台,web server先检测当前是否已存在session或有效期内的cookie,如果存在则跳转到另一页面,如果不存在,则建立 session,让用户进入控制台页面进行操作,并在用户浏览器中,存储一个 cookie。Session的结束条件,是用户关闭浏览器后超时未重新进入控制台操作,这个超时很短,无法满足需求。用户除了主动发出退出请求之外,可能因为某些原因关闭了浏览器,这时可以通过将具有更长超时期限的cookie发送到web server来验证身份并重新建立session。如果用户的session断开,并且cookie过期,则web server清除cookie,允许其他用户进入或者同一用户重新进入。
其次,在控制台界面上,对于每个控制指令,在用户发送出控制指令到返回结果期间,用户无法重复进行相同的操作,该操作对应的按钮或者发送按钮是失效的。另外运动与停止两个控制指令按钮的可操作状态为互斥,在运动控制指令被执行之前,停止控制指令按钮失效,运动控制指令执行后,自身即失效,停止控制指令按钮可操作,直到停止控制指令被执行,运动控制指令按钮再重新起效。
机器人在完成指令操作后,返回状态给web server, web server返回数据到用户浏览器改变控制指令按钮的可操作性。如果web server超时未收到机器人返回的状态,则发出查询指令,向机器人询问状态,机器人返回相关信息,web server根据返回信息来判定机器人是否收到前一条指令以及指令是否执行成功,并将判定结果返回给用户。
通过上述两个层面的逻辑控制使得机器人始终处于预期的状态。
3 硬件概况与系统实现
3.1 硬件基础
本系统远程控制的群体机器人是一种基于 LM3S1968运动控制芯片定制的智能小车,如图2所示:
图2 智能小车
功能主要分为运动和通信两部分,除了主控芯片外,具备 LED、电机、红外、无线等模块。可用接口包括串口,SPI口,GPIO口和JTAG口。无线模块连接到SPI口上,JTAG口用于程序烧录和调试,LED灯使用GPIO口。
其中无线模块采用 nRF24L01微功率无线通讯模块,该模块基于NRF24L01芯片,2.4G全球开发ISM频段免许可证使用,最高工作速率达2Mbps,125频道满足多点通信和跳频通信需要。
3.2 系统实现
根据系统结构设计,系统分为 3个部分实现:作为用户界面的远程控制台、服务器端(Web server和串口操作)、机器人程序,如图3所示:
图3 系统控制台
远程控制台通过jQuery Ajax实现与服务器端的数据通信。控制台与普通网页的区别在于允许用户进行各种操作,向服务器提交数据,但不能发生页面跳转,从而需要使用异步通信。普通网页使用表单来向服务器提交数据,但对于异步通信方式,并不需要表单,当用户操作网页产生事件时,监听该事件的Javascript捕捉该事件,获取特定页面元素值,调用Javascript函数将数据交给Ajax引擎发送到服务器,然后Ajax引擎接收来自服务器的响应,通过Javascript对DOM树进行操作,也即对用户操作作出响应。jQuery Ajax封装了Ajax的实现细节,编程人员只要使用其提供的简洁的API即可实现B/S的异步通信。
服务器端基于 Python Web框架 Tornado实现 Web server,基于PySerial库进行串口操作。Tornado是可扩展的非阻塞式 web 服务器及其相关工具,效率非常高,也是一个Web框架。基于这样的Web服务器框架可以按照特定需求进行定制,适合用于实现远程控制系统的服务器端。当Tornado收到用户请求后,将请求路由到一个处理函数,函数的逻辑辑由编程人员实现,对于服务器串口的操作也就是Tornado请求处理函数中的一次函数调用,而函数调用的返回结果即为机器人的返回信息。PySerial是一个用于串口或并口读写的函数库,以面向对象的方式处理数据读写,封装了底层细节。利用PySerial实现特定的串口读写操作,封装成函数,在Tornado请求处理函数中调用该函数即完成串口的读写。Tornado和PySerial都是Python实现的,完全跨平台,避免了该系统的在不同系统之间的移植工作。
系统正式上线时,可以根据需求使用Nginx或Apache这样功能全面的通用Web服务器作为服务器端的反向代理实现用户身份验证和 SSL加密数据传输,从而提高系统的安全性,且不用在系统本身实现用户身份验证,简化实现。
智能小车的程序基于LM3S1968配套工具进行开发,使用IAR IDE进行嵌入式C编程,然后通过JTAG烧录器将程序写入小车的ROM。
4 结束语
本文介绍一种基于Web的群体机器人远程控制系统的设计与实现。利用Web的跨平台,资源廉价,简单易用等优势消除机器人控制系统在空间距离上的限制,并使用大量开源技术实现系统模块的低耦合,系统的高可用以及用户友好性。系统对控制指令进行统一编码以减少数据传输,简化服务器端与机器人之间的交互。为了确保控制的逻辑正确性,系统分别在控制台界面和Web Server两部分增加处理逻辑,并且在指令中增加版本号信息来提高系统的可靠性。整个系统设计基本满足机器人远程控制的需求。
[1]Trifa, V. Cianci, C. Guinard, D. “Dynamic Control of a Robotic Swarm using a Service-Oriented Architecture”, [C]13thInternational Symposium on Artificial Life and Robotics AROB 2008
[2]Chen, Y. Du, Z. Garcia-Acosta, M. “Robot as a Service in Cloud Computing”, In Proceedings of the 5th IEEE International Symposium [C]on Service Oriented System Engineering(SOSE), Nanjing, June 4-5,2010,p.151-158.
[3]Goldberg, K. Gentner, S. Sutter C. et al., “The Mercury Project: A Feasibility Study for Internet Robots”, [C]World Wide Web Internet And Web Information Systems,1995
[4]Wang, Q. Liu, SWang, Z. “A New Internet Architecture for Robot Remote Control” , [C]Proceedings of the 2006 IEEE/RSJ International Conference on Intelligent Robots and Sytems(IROS), October 9-15,2006, Beijing, China
[5]Raul Wirz, Jorge Sales, Raul Marín et al., “End-to-End Congestion Control Protocols for Robot Swarms using Ad-hoc Wireless Networks”, [C]Proceedings of the RISE 2008. Robotics for Risky Interventions and Surveillance of the Environment, 2008