游览机器人的设计与的实现
明子成
正德职业技术学院 江苏省 南京市 211106
【摘 要】本文讲述了江苏省大学生机器人大赛项目游江苏机器人的设计与实现,描述了针对比赛规则和要求进行的相关设计策略,阐述了系统的主要设计方案、实现方法以及所采用的开发工具和相关技术,重点剖析了部分环节的程序设计。 【关键词】LegoNXT 机器人比赛 传感器 线路规划 |
一.概述
江苏省大学生机器人大赛每两年举行一次。继2004年举办以来,经过近四年的努力,江苏省大学生机器人水平已走在全国前列,在中国机器人大赛、CCTV杯电视机器人大赛、亚太机器人挑战赛、ROBOTCUP足球世界杯的国内外机器人大赛中屡创佳绩。2008年江苏省第三届大学生机器人大赛由江苏省教育厅和江苏省科学技术协会主办、江苏省自动化学会和中国矿业大学承办。全省有50所高校的278支代表队参赛,参赛学生达833人,大赛规模空前。
江苏省大学生机器人大赛比赛项目包括RoboCup仿真机器人11:11足球、FIFA仿真机器人足球、机器人灭火、机器人游江苏和机器人舞蹈等。其中机器人游江苏比赛属于小型机器人项目,我院独家采用Lego NXT及相关组件针对机器人游江苏项目设计了一款机器人,并在赛场实际运行,结果在两轮比赛中均以不足130s时间顺利完成任务,取得满分。实践证明,该款机器人具有反应敏捷、抗干扰能力强、速度快且稳定性好等优点。
二.机器人游江苏比赛规则及相关设计考虑
1、比赛场地标准
比赛场地范围大体为7m×7m。有15个景点和一个起止点组成,道路大部分由直道、十字路口或丁字路口组成,。所有景点都在其所处道路的尽头,景点与主干道的最短距离不小于50cm,两个路口之间的距离也不小于50cm。
场地的表面为绿色,没有明确的边界。道路的中心线是宽约2.4cm的白线,此白线可能存在高1mm左右的台阶。
各景点的标志是一块白色挡板。机器人一旦碰到该白板,即被认为已游览了此景点。实际中不能保证光线照明绝对平均和路面绝对平坦。比赛场地周围的照明等级在比赛时才能确定。比赛的挑战之一就是要求机器人能够在一个不确定照明、阴影、散光等实际情况的环境中进行。
2、机器人的规格及应对策略
机器人最大尺寸必须小于等于30cm×30cm×30cm,机器人的重量没有限制、建造材料没有限制。在不违反其他规则和规范的情况下对机器人传感器的型号和数量没有限制。
由于参赛现场的照相机、摄像机和比赛场地周围采用的高压钠灯等对机器人传感器会造成大的干扰,会影响机器人对任务的正确执行,甚至无法执行任务。经过多种设计和尝试,我们最终选择了4×4cm的黑色胶木块,经过实验发现即使在阳光下都能很准确地探测到环境信息的影响。
3、机器人运行及比赛时间
机器人一旦启动,必须在无人的干预下自己控制,即自主控制,而非人工控制。
机器人启动后旅游时间最长不得超过10分钟。
4、分值设置和景点分布图
不同景点根据所处道路位置难度的不同具有不同的分值。游完3个以上景点后,能返回到出发点的得10分,满分为100分。景点分布见图一。
三.机器人的功能设计和线路规划
1. 旅游线路趋向的处理。由于机器人运行环境的轨迹多变化,要保证机器人准确高效的运行,就必须获取轨迹线的方位和支路等相关信息,如轨迹的左右或上下趋向,比较简单而有效的办法就是使用两个光电传感器来识别。
图一:机器人游江苏线路示意图
2. 快速循迹的处理策略。要保证机器人循迹快速前进,就必须使用两个或以上的光电传感器,如果使用两个光电传感器,可以让机器人的循迹传感器夹住轨迹线沿“S”形轨迹前进。
3. 确认访问景点的处理。规则要求是机器人碰到白色挡板(而且必须有一定的力度)作为景点访问到的标志,而要让机器人获知是否已经访问过某景点,则需要传感器的协助,触动传感器是比较经济和有效的选择,为了保证信息获取的准确性,本设计中使用了两个触动传感器。
4. 还有一个重要的问题就是旅游线路规划的处理。由于旅游线路的错综复杂性,在设计机器人运行线路时要考虑到运行效率问题。运行线路的规划方案可以有很多种,比如靠左或靠右运行,如遇逆向景点,通常的思路是选择就近逆向访问景点后返回原线路继续访问新景点,但这不一定是最佳的效率选择方案,比如采用左向线路规划方案,要访问景点“溱潼会船”,我们原来的方案是访问完景点“鼋头渚”后,就去访问,但经过实验测试,发现在访问完景点“瘦西湖”后,直接转45度左右向景点“韩信城”时,由于此处线路复杂,机器人位置与传感器处理不确定性情况导致成功率非常低,但改成由景点“溱潼会船”出来后情况大为改观。
四.硬件改造和机器人搭建
鉴于任务及环境特征,我们研究决定采用6个传感器,但Lego NXT控制器只提供了四个端口,故对Lego部分器材进行了适当改造,使得机器人可以连接6个以上的传感器,可以获取更多的环境信息,为机器人做出更准确的决策奠定了基础。本设计中,机器人实际需要用到的6个传感器,分别是4个光电传感器和2个触动传感器。
一种方法是使用第三方厂商提供的端口扩展器,但获取有一定的困难和需要时间。
另一种方法是根据传感器的特点进行自我改造,本设计中用的光电传感器是模拟传感器,而触动传感器则是开关传感器,由此,我们可以考虑将这两种传感器连接到同一个端口,具体的改造办法如下。
LEGO MINDSTORMS NXT 有四个输入口,根据所连接的传感器,可以测量周围世界中的各种物理数据。输入端口的六线数字用户接口中,都有模拟和数字接口。这样就可以在 NXT 上连接数字传感器或模拟传感器。
图二:NXT 输入端口1 接口的示意图
端口2、3、4 与此相同,端口4 后面,数字pins(DIGIAI0 和DIGIAI1)与RS485 连接,处理高速通讯。引脚说明:
1 脚:模拟输入口及电流输出信号
2、3脚:接地
4 脚:提供 4.3V 电压
5、6脚:数字 I/O PINS 连接到ARM7
触动传感器只使用了1脚与2(或3)脚,所以可以把两根连接线从中间剥开,将对应的1脚与2脚分别短接后包好。改制成功后的机器人见图三。
经过实验测试,发现完全可行。在编程设计时,将该端口传感器设置为光电传感器,读取数据也与单独使用光电传感器没有区别。由于光电传感器在通常使用情况下,所读取的数值一般集中发布在20~90之间,而触动传感器被按下时,测试传感器读数会大于95,故一旦端口读数超过90,我们就认为触动传感器被按下,其它情况下触动传感器处于常态,即开关处于断开状态,本设计中表明机器人没有访问到景点(没有撞到代表景点的挡板),此时端口的读数就是光电传感器对地面环境的正常反映。
图三:经过改造的“正德新锐2”参赛机器人
四.软件开发与部分模块程序
采用卡耐基梅隆大学机器人学院开发的RobotC进行程序设计。RobotC类似C语言,由于有丰富的函数可以方便地调用,编程灵活,功能强大。为了提高程序的可读性和便于调试,我们采用了模块化的编程思想,从而大大提高了设计效率,节约了调试过程中大量的代码和参数修改时间。
1、端口定义(见图四)。作为一个项目组,在着手编写程序之前,必须对端口进行统一的定义。同时还要安排触动传感器在程序设计中的使用方法。
2、子程序定义(见图五)。子程序的安排,必须考虑到其相对独立性,在整个程序中,要能够独立完成一定的功能,保证不会在调用时产生相互影响。
3、一旦辅助性工作做好后,主程序将变得简短而直观,比如访问丹顶鹤保护区的程序(图六)。在实际现场调试过程中只要分别调试好各个子程序后,主程序的调试只需根据现场的实际状况修改函数(子程序)的参数就可以了。
五.结束语
本设计注重稳定性和成功率,所以速度上做出了一些牺牲,在比赛之前的调试以及在两轮正式比赛中,机器人均圆满完成所有景点的访问和返回驻地的任务,成功率是100%,用时123s。
若在从动轮上做一些改进或改成四驱结构,相信速度会大为提升。
比赛归来,队员们都作了认真的总结。大家一致认为,Lego机器人给了我们更多的想象和发挥的空间,只要我们自己不断地超越自我,我们的竞争对手实际上就是我们自己。
(本文描述的机器人是2008年江苏省大学生机器人大赛参赛作品,获得机器人游江苏项目比赛二等奖)
【作者简介】
明子成,男,正德学院计算机系实验中心主任。从事智能技术应用研究与教学工作,近几年在机器人教学与研究工作方面取得一些进展,组织学生参加江苏省及全国性大学生机器人大赛,取得一定的成绩。发表相关论文数篇,先后获得江苏省高教学会高教科研优秀成果奖和第一届机器人国际教育研讨会征文(中国区)二等奖。
图四:输入输出端口的定义
图五:子程序模块定义
图六:访问丹顶鹤保护区的程序
图七:二等奖得主“正德新锐2”机器人正在比赛