基于多线程的NAO机器人同步启动技术研究与实现
2017-07-12郭敏郑定富
郭敏+郑定富
摘要:探讨采用多线程软件编程技术实现多个NAO机器人的同步启动。首先,以 NAO 机器人为基础,将多线程同步技术应用到多台 NAO机器人的协调控制中,使多台机器人在同一时刻同时启动。其次,通过多线程方法执行并行任务,使多机器人在同一个系统中同时执行各自的任务,具有较稳定的同步性。最后,通过实验验证了该方法的有效性和可靠性。
关键词:NAO 机器人;多线程;同步启动;软件编程
DOIDOI:10.11907/rjdk.171046
中图分类号:TP319
文献标识码:A 文章编号:1672-7800(2017)006-0127-03
0 引言
“仿人”是机器人研究与发展的一个主要方向,制造出全智能的机器人朋友是人类为之努力的目标。近几十年来,通过科学家们的不懈努力,机器人领域已经拥有了不少令人惊叹的伟大成果,仿人机器人也逐渐走进了人们的生活。2016年春晚,集体舞《心中的英雄》给亿万观众带来了无限惊喜,跳舞机器人整齐的队列、灵活的舞姿,耗费的是台下无数科技人员的心血与努力。在集体表演中,要完成整齐划一的舞蹈表演,准确实现多机器人的同步技术是关键。虽然数千个关节实现动作的协调性和一致性都离不开表演机器人硬件的支持,然而软件编程更是机器人行为同步的重要组成。多线程同步方法为多机器人同步提供了新的可能,在机器人研究领域内具有重要的实践意义。本文以Aldebaran Robotics公司的Nao机器人为研究对象,对多机器人同步技术进行研究,其硬件特性为:拥有25个自由度,具有一系列可以感知较为全面环境信息的传感器,如摄像头(2个)、麦克风(4个)、超声波距离传感器(1个)、惯性板(1个)、触觉传感器(9个)、压力传感器(8个)、红外发射器和接收板(2个)。
多线程程序设计是指单个程序中使用多个线程,这些线程在同一时间并发运行,执行不同的任务[1]。在多线程、多任务操作系统中,系统每一个应用程序对应一个进程。一个进程又可以包含多个并发的线程,同时系统也可以将进程作为主线程来调度。多线程同步把多个机器人看作进程中的多个线程,执行多个任务,通过主线程的调度,实现多任务的同时动作,从而实现多机器人同步[2-4]。
近些年来,机器人技术研究已经取得了丰富研究成果。仿人Nao机器人的研究主要集中于基于Kinect的体感研究、动态稳定控制和机器人导航等方面。
针对Nao机器人的同步启动研究也取得了进展。方法一:使用一台机器人作为主机,将剩余机器人作为从机,由主机向从机发送命令,但由于该方法为点对点通讯,导致同步性不高;方法二:通过时钟的某一设定值完成同步启动,虽然肉眼基本同步,但由于每个机器人内的内部时钟有着几秒甚至几分钟的误差,导致无法调整的误差。文献[5]中利用socket套接字编程,以一台PC作为主机,广播向多个机器人发送指令,实现了良好的实时同步效果,但同步动作还存在一定的稳定性不足问题。
本文将Nao机器人与多线程方法相结合,多个线程(即多个任务)并发运行,实现了多个Nao机器人的同步启动。该方法对机器人数量没有限制,通过主机PC控制,使多个Nao机器人实现精确启动,稳定可靠。
1 方案设计
本文采用两种方法来研究Nao机器人的同步启动问题。方法一是利用NAO机器人自带图形化界面软件Choregreaphe。以声音信号为触发信号来启动多个机器人。即当机器人获得某一指定声音信号后,启动并触发机器人系统中的某个程序使机器人作出指定动作,如图2、图3所示。
Nao端的指令盒主要程序如下:
运用这种方法,机器人数量少时可以实现同步启动。但是当机器人数量增多,或是机器人间隔增大以及人的位置变化,实验结果显示其动作同步性并不稳定,并且无法对其误差进行调整,实验效果并不理想。
方法二是利用图4所示的网络结构来对多个NAO机器人来进行控制,利用无线局域网实现多个机器人的同时启动。图中通用PC和NAO机器人都代表了网络中的任意節点,因此其中的数量N是不确定的,可以为任意整数,即可以控制任意数量的机器人系统。
在多线程同步编程中,线程同步方法主要包含锁、信号量和事件。本文采用event事件方式实现python多线程同步,一个线程可以发送信号,其它线程接收到信号后执行操作。Event内部包含了一个标志位,初始为false,使用set()来将其设置为true,或者使用clear()将其重新设置为false,is_set()可以检查标志位的状态,当标志位置为true时,将各个客户端的ip地址加入线程列表,通过服务端发送消息给各个IP地址,实现多个客户端的线程同步。
以threading多线程编程为基础,将一台PC端作为主机,命令的发送端,而每一个NAO机器人即代表一个thread线程,从PC端接收动作指令后动作,其主要Python流程,如图5、图6所示。
通过以上程序,无线局域网中的各个NAO机器人开启后,以待机姿势等待PC端指令,按下回车后,机器人同时运行站立起来,并完成各个相同动作,经过多次试验后,证明该方法准确有效,同时启动时间一致并且后续动作也统一整齐。
2 实验验证及分析
实验主要测试其语音和动作两个方面的同步性,PC端是以Windows系统为平台,首先测试同步启动的动作同步性,如图7所示。
实验证明,基于多线程的软件编程方法可以实现较为稳定的动作同步性;通过实验,同样,声音也具有较好的同步性。
基于Python的多线程同步编程,实现多个NAO机器人的同时启动,是将来实现智能化人形机器人协同的基础,是机器人协同控制研究的良好开端,基于多线程同步的控制方法较为简便和稳定。
3 结语
本文将多线程与NAO机器人相结合,研究多台Nao机器人的同步启动问题。在集体表演中多机器人同步是必须解决的重点和难点。针对这一问题,通过两个方法对比验证,即利用NAO机器人自带图形化界面软件Choregreaphe,以声音信号为触发信号来启动多个机器人和在无线局域网内将一台PC端作为主机,通过多线程同步来控制多个Nao机器人。实验结果最终证明基于多线程的同步启动方法最为稳定有效。基于此研究结果,后续将对多机器人协同作进一步研究。
参考文献:
[1]程俊波.基于java多线程的实时数据库系统[J]. 网络安全技术与应用, 2016(10):67-68.
[2]陈宁,程磊,王永骥.基于多线程同步的多机器人协调技术和实现 [A].中国人工智能学会第十届全国学术年会论文集 , 2003:923-926.
[3]丁一恒,李志宏,贾苹.基于 Windows2000 的多线程串行通信技术[J]. 武汉理工大学学报: 交通科学与工程版, 2003, 27(1):109-111.
[4]JIM BEVERIDGE.Multithreading applicationsin Win32[M].侯捷,譯.武汉:华中科技大学出版社,2012:26-27
[5]高帅, 杨翊坤, 周晓萌, 等. NAO机器人迎宾与多台同时启动设计方案[J]. 企业技术开发, 2015, 34(11):1-2.
(责任编辑:陈福时)
英文摘要Abstract:Multithreading software programming technology is used to study the problem about several Nao robots starting synchronously and achieve the goal of synchronous start of multi-robot. Firstly, basing on NAO robot, this paper applies multithreading synchronization technique to coordination control of several Nao robots which makes several robots start at the same time. Secondly, parallel tasks in multithreading make several robots perform their tasks simultaneously in the same system, which has stable synchronization. Finally, effectiveness and reliability of the method is proved by some actual experiments.
英文关键词Key Words: NAO Robot; Multithreading; Starting Synchronously; Software Programming